Dec-22-2021, 08:28 AM
Hi,
I have a script to write an XML file based on several assets in my 3d package, which works how i'd expect and outputs the below:
Here is my script:
I'm a bit stumped on how to do this in python. Any help would be greatly appreciated :)
I have a script to write an XML file based on several assets in my 3d package, which works how i'd expect and outputs the below:
Quote:<?xml version="1.0" ?>
<All_Props>
<prop location="V:\assets\environment_package\cinematics\_source\objects\props\equipment\tyre_blanket_front\fbx\tyre_blanket_front_21.FBX" name="tyre_blanket_front_21" rootbone="tyre_blanket_rootbone">
<bone>tyre_blanket_sidecontrolori</bone>
<bone>tyre_blanket_sidecontrol</bone>
<bone>tyre_blanket_rootbone</bone>
<bone>tyre_blanket_moverbone</bone>
<bone>tyre_blanket_bone05</bone>
<bone>tyre_blanket_bone03</bone>
<bone>tyre_blanket_bone01</bone>
<bone>tyre_blanket_bone11</bone>
<bone>tyre_blanket_bone10</bone>
<bone>tyre_blanket_bone09</bone>
<bone>tyre_blanket_bone08</bone>
<bone>tyre_blanket_bone07</bone>
<bone>tyre_blanket_bone06</bone>
<bone>tyre_blanket_bone04</bone>
<bone>tyre_blanket_bone02</bone>
<bone>tyre_blanket_flapbone01</bone>
<bone>tyre_blanket_pcbone01</bone>
<bone>tyre_blanket_pcbone02</bone>
<bone>tyre_blanket_pcbone03</bone>
<bone>tyre_blanket_pcbone04</bone>
<bone>tyre_blanket_flapbone02</bone>
</prop>
</All_Props>
Here is my script:
# Firstly we have to import 'xml.etree.ElementTree' for creating a subtree
import xml.etree.ElementTree as ET
from xml.dom import minidom
from pyfbsdk import *
lModels = FBModelList()
#get the selected models in the scene
FBGetSelectedModels(lModels)
xml_loc = "C:\\Users\\peter.martin\\Desktop\\filename.xml"
FilePath = FBApplication().FBXFileName
mytree = ET.parse(xml_loc)
myroot = mytree.getroot()
def GetFileName(fPath):
FPsplit = fPath.split('\\')
FPsplitSplitCount = len(FPsplit)
FName = fPath.split('\\')[FPsplitSplitCount -1]
FinalName = FName.split('.FBX')[0]
return FinalName
def GetRootNode():
for obj in FBSystem().Scene.Components:
properties = obj.PropertyList.Find('_root')
if properties != None:
return obj.LongName
def create_xml():
FileName = GetFileName(FilePath)
ThePropRoot = GetRootNode()
# we make root element
AllProps = ET.Element("All_Props")
# create sub element
prop = ET.SubElement(AllProps, "prop", name = FileName, location = FilePath, rootbone = ThePropRoot)
# insert list element into sub elements
for props in range(len(lModels)):
pr = ET.SubElement(prop, "bone")
pr.text = str(lModels[props].LongName)
tree = ET.ElementTree(prop)
# write the tree into an XML file
xmlstr = minidom.parseString(ET.tostring(AllProps)).toprettyxml(indent=" ")
with open(xml_loc, "w") as f:
f.write(xmlstr.encode('utf-8'))
create_xml()What i'd like to do is add more <prop> records/elements, along with the bones etc, so be able to open a scene and add another prop into the XML like below (I duped the prop as an example):Quote: <?xml version="1.0" ?>
<All_Props>
<prop location="V:\assets\environment_package\cinematics\_source\objects\props\equipment\tyre_blanket_front\fbx\tyre_blanket_front_21.FBX" name="tyre_blanket_front_21" rootbone="tyre_blanket_rootbone">
<bone>tyre_blanket_sidecontrolori</bone>
<bone>tyre_blanket_sidecontrol</bone>
<bone>tyre_blanket_rootbone</bone>
<bone>tyre_blanket_moverbone</bone>
<bone>tyre_blanket_bone05</bone>
<bone>tyre_blanket_bone03</bone>
<bone>tyre_blanket_bone01</bone>
<bone>tyre_blanket_bone11</bone>
<bone>tyre_blanket_bone10</bone>
<bone>tyre_blanket_bone09</bone>
<bone>tyre_blanket_bone08</bone>
<bone>tyre_blanket_bone07</bone>
<bone>tyre_blanket_bone06</bone>
<bone>tyre_blanket_bone04</bone>
<bone>tyre_blanket_bone02</bone>
<bone>tyre_blanket_flapbone01</bone>
<bone>tyre_blanket_pcbone01</bone>
<bone>tyre_blanket_pcbone02</bone>
<bone>tyre_blanket_pcbone03</bone>
<bone>tyre_blanket_pcbone04</bone>
<bone>tyre_blanket_flapbone02</bone>
</prop>
<prop location="V:\assets\environment_package\cinematics\_source\objects\props\equipment\tyre_blanket_front\fbx\tyre_blanket_front_21.FBX" name="tyre_blanket_front_21" rootbone="tyre_blanket_rootbone">
<bone>tyre_blanket_sidecontrolori</bone>
<bone>tyre_blanket_sidecontrol</bone>
<bone>tyre_blanket_rootbone</bone>
<bone>tyre_blanket_moverbone</bone>
<bone>tyre_blanket_bone05</bone>
<bone>tyre_blanket_bone03</bone>
<bone>tyre_blanket_bone01</bone>
<bone>tyre_blanket_bone11</bone>
<bone>tyre_blanket_bone10</bone>
<bone>tyre_blanket_bone09</bone>
<bone>tyre_blanket_bone08</bone>
<bone>tyre_blanket_bone07</bone>
<bone>tyre_blanket_bone06</bone>
<bone>tyre_blanket_bone04</bone>
<bone>tyre_blanket_bone02</bone>
<bone>tyre_blanket_flapbone01</bone>
<bone>tyre_blanket_pcbone01</bone>
<bone>tyre_blanket_pcbone02</bone>
<bone>tyre_blanket_pcbone03</bone>
<bone>tyre_blanket_pcbone04</bone>
<bone>tyre_blanket_flapbone02</bone>
</prop>
</All_Props>
I'm a bit stumped on how to do this in python. Any help would be greatly appreciated :)
