<div dir="auto">I couldn’t bring up X3DUOM.</div><div dir="auto"><br></div><div dir="auto">HAnimHumanoid.joints might not be flagged in Castle anymore. I haven’t downloaded Castle for a while.</div><div dir="auto"><br></div><div dir="auto"><span style="font-family:-apple-system,helveticaneue;background-color:rgba(0,0,0,0);border-color:rgb(0,0,0);color:rgb(0,0,0)">From x3d tooltips 4.0, HAnimHumanoid, joints field, see the first Warning, below. </span><span style="font-family:-apple-system,helveticaneue;background-color:rgba(0,0,0,0);border-color:rgb(0,0,0);color:rgb(0,0,0)">In addition, the entry pretty plainly states that Joints in joints field are USE nodes and should appear somewhere after the skeleton field.</span></div><div dir="auto"><div dir="auto"><span style="font-family:-apple-system,helveticaneue;font-size:19px;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none;float:none;display:inline!important;background-color:rgba(0,0,0,0);border-color:rgb(0,0,0);color:rgb(0,0,0)"><br></span></div><div dir="auto"><span style="font-family:-apple-system,helveticaneue;font-size:19px;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none;float:none;display:inline!important;background-color:rgba(0,0,0,0);border-color:rgb(0,0,0);color:rgb(0,0,0)">Also below, see the HAnimJoint.containerField lists joints as a value. </span><span style="font-family:-apple-system,helveticaneue;background-color:rgba(0,0,0,0);border-color:rgb(0,0,0);color:rgb(0,0,0)">The rules may be different for VRML.</span></div><div dir="auto"><span style="font-family:-apple-system,helveticaneue;font-size:19px;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none;float:none;display:inline!important;background-color:rgba(0,0,0,0);border-color:rgb(0,0,0);color:rgb(0,0,0)"><br></span></div><div dir="auto"><span style="font-family:-apple-system,helveticaneue;background-color:rgba(0,0,0,0);border-color:rgb(0,0,0);color:rgb(0,0,0)">So as Aaron found, he had to reorder skeleton and joints when x3d.py had the wrong order on output.</span><br></div><div dir="auto"><span style="font-family:-apple-system,helveticaneue;font-size:19px;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none;float:none;display:inline!important;background-color:rgba(0,0,0,0);border-color:rgb(0,0,0);color:rgb(0,0,0)"><br></span></div><div dir="auto"><span style="font-family:-apple-system,helveticaneue;font-size:19px;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none;float:none;display:inline!important;background-color:rgba(0,0,0,0);border-color:rgb(0,0,0);color:rgb(0,0,0)">Indeed, the x3d.py x3dpsail page has “<div style="font-family:-apple-system,helveticaneue" dir="auto"><i style="font-family:-webkit-standard;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none;color:rgb(0,0,0)">TODO:</i><span style="font-family:-webkit-standard;font-size:medium;font-style:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none;float:none;display:inline!important;color:rgb(0,0,0)"> When converting to other forms, check ordering of output for USE nodes within HAnimHumanoid”</span></div><div style="font-family:-apple-system,helveticaneue" dir="auto"><span style="font-family:-webkit-standard;font-size:medium;font-style:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none;float:none;display:inline!important;color:rgb(0,0,0)"><br></span></div><div style="font-family:-apple-system,helveticaneue" dir="auto"><span style="font-family:-webkit-standard;font-size:medium;font-style:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none;float:none;display:inline!important;color:rgb(0,0,0)">I’m guessing what we need is an actual example where the joints field is placed first before skeleton field on output. What I hope we can do is download a python file with a skeleton field and a joints field from the HAnimHumanoid archive</span><span style="font-family:-webkit-standard;font-size:medium;color:rgb(0,0,0)">, enable output of whatever encodings you want, run the python file, and check the output.</span></div><div style="font-family:-apple-system,helveticaneue" dir="auto"><span style="font-family:-webkit-standard;font-size:medium;color:rgb(0,0,0)"><br></span></div><div style="font-family:-apple-system,helveticaneue" dir="auto"><span style="font-family:-webkit-standard;font-size:medium;color:rgb(0,0,0)">I don’t see why Aaron has to write 700 lines of Python to apply a fix that would take less than 10 lines of XSLT. We’re burning his valuable time. Plus AFAIK, Andreas’ solution for containerField should be applied </span></div><div style="font-family:-apple-system,helveticaneue" dir="auto"><span style="font-family:-webkit-standard;font-size:medium;color:rgb(0,0,0)"><br></span></div><div style="font-family:-apple-system,helveticaneue" dir="auto"><span style="font-family:-webkit-standard;font-size:medium;color:rgb(0,0,0)">I’m all for replacing xslt with something else, but apparently my python solution didn’t pass muster. It seems like Aaron’s JSON solution may be preferred, but we will see.</span></div><div style="font-family:-apple-system,helveticaneue" dir="auto"><span style="font-family:-webkit-standard;font-size:medium;color:rgb(0,0,0)"><br></span></div><div style="font-family:-apple-system,helveticaneue" dir="auto"><span style="font-family:-webkit-standard;font-size:medium;color:rgb(0,0,0)">Not being able to upstream changes to stylesheets is extremely frustrating and wastes people’s time.</span></div><div style="font-family:-apple-system,helveticaneue" dir="auto"><span style="font-family:-webkit-standard;font-size:medium;font-style:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none;float:none;display:inline!important;color:rgb(0,0,0)"><br></span></div></span></div><div dir="auto">John</div><br></div><div dir="auto"><br></div><div dir="auto"><div><table summary="" align="center" width="98%" border="1" cellspacing="0" cellpadding="1" style="font-family:-webkit-standard;font-style:normal;font-weight:400;letter-spacing:normal;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none;color:rgb(0,0,0)"><tbody style="font-family:-webkit-standard"><tr align="left" style="font-family:-webkit-standard"><td bgcolor="#f4f4f4" align="left" valign="top" style="font-family:-webkit-standard"><a name="HAnimHumanoid.joints" href="https://www.web3d.org/x3d/content/X3dTooltips.html#HAnimHumanoid.joints" style="font-family:-webkit-standard"><b style="font-family:-webkit-standard"><font size="2" style="font-family:-webkit-standard;color:rgb(0,0,0)">joints</font></b></a></td><td bgcolor="#f4f4f4" colspan="3" style="font-family:-webkit-standard"><b style="font-family:-webkit-standard">[joints <a href="https://www.web3d.org/x3d/content/X3dTooltips.html#accessType" style="font-family:-webkit-standard">accessType inputOutput</a>, <a href="https://www.web3d.org/x3d/content/X3dTooltips.html#MFNode" style="font-family:-webkit-standard">type MFNode</a> array, empty list] [<a href="https://www.web3d.org/x3d/content/X3dTooltips.html#HAnimJoint" style="font-family:-webkit-standard">HAnimJoint</a>]</b><br>The joints field contains a list of USE references for all HAnimJoint node instances found within the preceding skeleton hierarchy. <br><font style="font-family:-webkit-standard;color:rgb(68,119,119)"><b style="font-family:-webkit-standard">Hint:</b></font> order is irrelevant since names are contained in the original DEF objects. <br><font style="font-family:-webkit-standard;color:rgb(68,119,119)"><b style="font-family:-webkit-standard">Hint:</b></font> these USE nodes can be utilitized by inverse kinematics (IK) and animation engines.<br><font style="font-family:-webkit-standard;color:rgb(238,85,0)"><b style="font-family:-webkit-standard">Warning:</b></font> the number of contained <HAnimJoint USE='*' containerField='joints'/> nodes at top level of HAnimHumanoid needs to match the number of corresponding HAnimJoint node instances found within the preceding skeleton hierarchy. <br><font style="font-family:-webkit-standard;color:rgb(238,85,0)"><b style="font-family:-webkit-standard">Warning:</b></font> top-level HAnimJoint USE nodes must include containerField='joints' for proper validation and operation. </td></tr><tr align="left" style="font-family:-webkit-standard"><td bgcolor="#f4f4f4" align="left" valign="top" style="font-family:-webkit-standard"><a name="HAnimHumanoid.segments" href="https://www.web3d.org/x3d/content/X3dTooltips.html#HAnimHumanoid.segments" style="font-family:-webkit-standard"><b style="font-family:-webkit-standard"><font size="2" style="font-family:-webkit-standard;color:rgb(0,0,0)">segment</font></b></a></td></tr></tbody></table></div><div><table summary="" align="center" width="98%" border="1" cellspacing="0" cellpadding="1" style="font-family:-webkit-standard;font-style:normal;font-weight:400;letter-spacing:normal;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none;color:rgb(0,0,0)"><tbody style="font-family:-webkit-standard"><tr align="left" style="font-family:-webkit-standard"><td bgcolor="#eeffee" align="left" valign="top" style="font-family:-webkit-standard"><a name="HAnimJoint.containerField" href="https://www.web3d.org/x3d/content/X3dTooltips.html#HAnimJoint.containerField" style="font-family:-webkit-standard"><b style="font-family:-webkit-standard"><font size="1" style="font-family:-webkit-standard;color:black"><br>containerField</font></b></a></td><td bgcolor="#eeffee" colspan="3" style="font-family:-webkit-standard"><b style="font-family:-webkit-standard">[containerField <a href="https://www.web3d.org/x3d/content/X3dTooltips.html#NMTOKEN" style="font-family:-webkit-standard">type NMTOKEN</a> (children|skeleton|joints) "children"]</b><br>containerField is a field-label prefix indicating this node's field relationship to its parent node, for example <Transform><Shape containerField='children'/></Transform>.<br><font style="font-family:-webkit-standard;color:rgb(68,119,119)"><b style="font-family:-webkit-standard">Hint:</b></font> default containerField values for each node are correct in most cases, so the need to override default containerField values is rare. <br><font style="font-family:-webkit-standard;color:rgb(68,119,119)"><b style="font-family:-webkit-standard">Hint:</b></font> example values include containerField='geometry' for Box node, containerField='children' for Group node, containerField='proxy' for hidden proxy shape within a Collision node, etc. <br><font style="font-family:-webkit-standard;color:rgb(238,85,0)"><b style="font-family:-webkit-standard">Warning:</b></font> containerField attribute is only part of XML encoding for X3D scenes, and corresponds to the always-declared field names in the ClassicVRML and VRML97 file encodings. <br><font style="font-family:-webkit-standard;color:rgb(68,119,119)"><b style="font-family:-webkit-standard">Hint:</b></font> USE node instances are allowed to have a containerField value that is different than the corresponding DEF declaration of that node. <br><font style="font-family:-webkit-standard;color:rgb(68,119,119)"><b style="font-family:-webkit-standard">Hint:</b></font> X3D Scene Authoring Hints, containerField <font size="-1" style="font-family:-webkit-standard;color:rgb(0,0,0)"><a href="https://www.web3d.org/x3d/content/examples/X3dSceneAuthoringHints.html#containerField" style="font-family:-webkit-standard">https://www.web3d.org/x3d/content/examples/X3dSceneAuthoringHints.html#containerField</a></font></td></tr></tbody></table></div><br></div><div><br><div class="gmail_quote gmail_quote_container"><div dir="ltr" class="gmail_attr">On Wed, Mar 5, 2025 at 1:41 PM Joe D Williams <<a href="mailto:joedwil@earthlink.net">joedwil@earthlink.net</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;padding-left:1ex;border-left-color:rgb(204,204,204)"><div style="font-family:arial,sans-serif;font-size:12pt;color:rgb(0,0,0)"><p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif">Hi John,</p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif"> </p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif">‘joints’ is that silly field child of Humanoid that lists the Joint nodes with a list collection of USE notations. </p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif"> </p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif">‘joints’ is not a field of skeleton. It is a field of Humanoid. </p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif"> </p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif">So, Humanoid and Joint are nodes while skeleton is a node type</p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif">(otherwise called a 'container') </p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif">Same as the keyword 'geometry' is a node type and IndexedFaceSet is a node name.</p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif"> </p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif">skin is also a container, could be called a node type. </p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif"> </p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif">The node type says what node names can appear in the container.</p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif">The node name says what data is in the node. </p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif"> </p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif">So: </p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif">There are two container fields for HAnimJoint, ‘skeleton’ (for the first one, the root),<br>and ‘children’ (default for the rest of the Joint hierarchy).<br> <br>See, when you look at the Classic, the name of the 'nodetype' (containerfield) is the first text and then in the xml it gets to be containerfield='nodetype'</p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif"><br>Done that way to eliminate the need for wrapper tags (maybe called container tags) in the xml, if I recall. </p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif">In xml, we get an attr rather than a tag; thank goodness for all good favors.</p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif"> </p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif">All Fine,</p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif">Joe</p>
</div>
<div style="border-left-width:1px;border-left-style:solid;box-sizing:border-box;padding:10px 0px 10px 15px;margin:0px;border-left-color:rgb(170,170,170)">
<p>-----Original Message-----<br>From: X3D Ecosystem public discussion <<a href="mailto:x3d-ecosystem@web3d.org" target="_blank">x3d-ecosystem@web3d.org</a>><br>Sent: Mar 5, 2025 10:53 AM<br>To: X3D Ecosystem public discussion <<a href="mailto:x3d-ecosystem@web3d.org" target="_blank">x3d-ecosystem@web3d.org</a>><br>Cc: John Carlson <<a href="mailto:yottzumm@gmail.com" target="_blank">yottzumm@gmail.com</a>><br>Subject: [X3D-Ecosystem] Fwd: RawKee Update - Implemented a companion export script for x3d.py</p>
<p style="margin:0.1rem 0px;line-height:1"> </p>
<div dir="auto">Correction.</div>
<div><br>
<div class="gmail_quote">
<div class="gmail_attr" dir="ltr">---------- Forwarded message ---------<br>From: <strong class="gmail_sendername" dir="auto">John Carlson</strong> <span dir="auto"><<a href="mailto:yottzumm@gmail.com" target="_blank">yottzumm@gmail.com</a>></span><br>Date: Wed, Mar 5, 2025 at 12:44 PM<br>Subject: Fwd: [X3D-Ecosystem] RawKee Update - Implemented a companion export script for x3d.py<br>To: X3D Ecosystem public discussion <<a href="mailto:x3d-ecosystem@web3d.org" target="_blank">x3d-ecosystem@web3d.org</a>></div>
<br><br>
<div dir="auto">There are three container fields for HAnimJoint, ‘skeleton’, ‘children’ (default) and ‘joints’. I don’t disagree with Joe.</div>
<div>
<div class="gmail_quote">
<div dir="auto"> </div>
<div dir="auto">Until tools ignore the missing joints field, it’s still with us.</div>
</div>
</div>
<div>
<div class="gmail_quote">
<div dir="auto"> </div>
<div dir="auto">John</div>
<div>
<div class="gmail_quote">
<div class="gmail_attr" dir="ltr">On Wed, Mar 5, 2025 at 12:22 PM Joe D Williams <<a href="mailto:joedwil@earthlink.net" rel="noopener" target="_blank">joedwil@earthlink.net</a>> wrote:</div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;padding-left:1ex;border-left-color:rgb(204,204,204)">
<div style="font-family:arial,sans-serif;font-size:12pt;color:rgb(0,0,0)">
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif">Only the first Joint, root, has containerField 'skeleton' </p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif">All other child Joints are containerField 'children' </p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif"> </p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif">the keyword 'skeleton' is not a Node, it is a container, a type </p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif"> </p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif">Classic</p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif"> </p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif"> skeleton [<br> DEF Joe_HumanoidRoot ...Joint ...</p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif"> ]</p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif"> </p>
<p dir="auto" style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif">xml</p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif"><Joint DEF='Joe_HumanoidRoot' ... containerField='skeleton' </p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif"> </p>
</div>
HAnimHumanoid is a node, not a type.
<p style="margin:0.1rem 0px;line-height:1"> </p>
<p style="margin:0.1rem 0px;line-height:1">Joe</p>
<p style="margin:0.1rem 0px;line-height:1"> </p>
<div style="border-left-width:1px;border-left-style:solid;box-sizing:border-box;padding:10px 0px 10px 15px;margin:0px;border-left-color:rgb(170,170,170)">
<p>-----Original Message-----<br>From: X3D Ecosystem public discussion <<a href="mailto:x3d-ecosystem@web3d.org" rel="noopener" target="_blank">x3d-ecosystem@web3d.org</a>><br>Sent: Mar 5, 2025 10:06 AM<br>To: John Carlson <<a href="mailto:yottzumm@gmail.com" rel="noopener" target="_blank">yottzumm@gmail.com</a>><br>Cc: Bergstrom, Aaron <<a href="mailto:aaron.bergstrom@und.edu" rel="noopener" target="_blank">aaron.bergstrom@und.edu</a>>, X3D Ecosystem public discussion <<a href="mailto:x3d-ecosystem@web3d.org" rel="noopener" target="_blank">x3d-ecosystem@web3d.org</a>><br>Subject: Re: [X3D-Ecosystem] RawKee Update - Implemented a companion export script for x3d.py</p>
<p style="margin:0.1rem 0px;line-height:1"> </p>
<div>
<p class="MsoNormal">I suppose I could do a quick check to see if the root node in the ‘skeleton’ field has DEF=’somestring’ defined. And if so, and only then perform the flip.</p>
<p class="MsoNormal"> </p>
<p class="MsoNormal">That would make it more portable.</p>
<p class="MsoNormal"> </p>
<div style="border-width:1pt medium medium;border-style:solid none none;padding:3pt 0in 0in;border-color:rgb(225,225,225) currentcolor currentcolor">
<p class="MsoNormal"><strong>From:</strong> John Carlson <<a href="mailto:yottzumm@gmail.com" rel="noopener" target="_blank">yottzumm@gmail.com</a>> <br><strong>Sent:</strong> Wednesday, March 5, 2025 11:50 AM<br><strong>To:</strong> Bergstrom, Aaron <<a href="mailto:aaron.bergstrom@und.edu" rel="noopener" target="_blank">aaron.bergstrom@und.edu</a>><br><strong>Cc:</strong> X3D Ecosystem public discussion <<a href="mailto:x3d-ecosystem@web3d.org" rel="noopener" target="_blank">x3d-ecosystem@web3d.org</a>><br><strong>Subject:</strong> Re: [X3D-Ecosystem] RawKee Update - Implemented a companion export script for x3d.py</p>
</div>
<p class="MsoNormal"> </p>
<div>
<p class="MsoNormal">Just to be aware, if skeleton comes before joints, then this code would flip them. You need to compare jIdx to sIdx before flipping them, AFAIK. I realize that you’ve ordered them properly elsewhere.</p>
</div>
</div>
</div></blockquote></div></div></div></div></div></div></div><div style="border-left-width:1px;border-left-style:solid;box-sizing:border-box;padding:10px 0px 10px 15px;margin:0px;border-left-color:rgb(170,170,170)"><div><div class="gmail_quote"><div><div class="gmail_quote"><div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;padding-left:1ex;border-left-color:rgb(204,204,204)">
<div style="border-left-width:1px;border-left-style:solid;box-sizing:border-box;padding:10px 0px 10px 15px;margin:0px;border-left-color:rgb(170,170,170)">
<div>
<div>
<p class="MsoNormal"> </p>
</div>
<div>
<p class="MsoNormal"> </p>
</div>
<div>
<div>
<div>
<p class="MsoNormal">On Wed, Mar 5, 2025 at 10:57 AM Bergstrom, Aaron <<a href="mailto:aaron.bergstrom@und.edu" rel="noopener" target="_blank">aaron.bergstrom@und.edu</a>> wrote:</p>
</div>
<blockquote style="border-width:medium medium medium 1pt;border-style:none none none solid;padding:0in 0in 0in 6pt;margin-left:4.8pt;margin-right:0in;border-color:currentcolor currentcolor currentcolor rgb(204,204,204)">
<div>
<div>
<p class="MsoNormal"> </p>
<p class="MsoNormal">if nType == "HAnimHumanoid":</p>
<p class="MsoNormal" style="text-indent:0.5in">jIdx = -1</p>
<p class="MsoNormal" style="text-indent:0.5in">sIdx = -1</p>
<p class="MsoNormal" style="text-indent:0.5in">for idx in range(len(mNodeList)):</p>
<p class="MsoNormal" style="margin-left:0.5in;text-indent:0.5in">if mNodeList[idx] == "joints":</p>
<p class="MsoNormal" style="margin-left:1in;text-indent:0.5in">jIdx = idx</p>
<p class="MsoNormal" style="margin-left:0.5in;text-indent:0.5in">elif mNodeList[idx] == "skeleton":</p>
<p class="MsoNormal" style="margin-left:1in;text-indent:0.5in">sIdx = idx</p>
<p class="MsoNormal" style="margin-left:0.5in;text-indent:0.5in">if sIdx != -1 and jIdx != -1:</p>
<p class="MsoNormal" style="margin-left:1in;text-indent:0.5in">mNodeList[jIdx] = "skeleton"</p>
<p class="MsoNormal" style="margin-left:1in;text-indent:0.5in">mNodeList[sIdx] = "joints"</p>
<p class="MsoNormal"> </p>
<p class="MsoNormal"> </p>
</div>
</div>
</blockquote>
</div>
</div>
</div>
</div>
<p style="margin:0.1rem 0px;line-height:1"> </p>
</blockquote>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<p style="margin:0.1rem 0px;line-height:1"> </p></blockquote></div></div>