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 :)