<div dir="auto">AFAIK, joints field, sites field, and segments field are of type MFNode, not MFString.</div><div dir="auto"><br></div><div dir="auto">If we just include name field in the SFNodes, great. That’s not what X3dToPython.xslt and/or x3d.py do.</div><div dir="auto"><br></div><div dir="auto">John </div><div><br><div class="gmail_quote gmail_quote_container"><div dir="ltr" class="gmail_attr">On Thu, Mar 6, 2025 at 6:35 AM 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">Right castle throws a non-fatal error and adds the 'joints' list. </p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif">All of joints field and segments field and sites field should all be treated same. </p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif">Simple to just include 'name' field instead of the USE syntax.</p>
<p style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif">Joe</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 style="margin:0.1rem 0px;line-height:1;font-family:arial,sans-serif">;</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 dir="auto">-----Original Message-----<br>From: John Carlson <<a href="mailto:yottzumm@gmail.com" target="_blank">yottzumm@gmail.com</a>><br>Sent: Mar 5, 2025 10:18 PM<br>To: Joe D Williams <<a href="mailto:joedwil@earthlink.net" target="_blank">joedwil@earthlink.net</a>><br>Cc: X3D Ecosystem public discussion <<a href="mailto:x3d-ecosystem@web3d.org" target="_blank">x3d-ecosystem@web3d.org</a>><br>Subject: Re: [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="ltr">Castle not quite ignores the missing joints.
<div> </div>
<div> <img src="cid:ii_1956ca41af3ea654a7f1" alt="image.png" style="width: 932px; max-width: 100%;"></div>
</div>
<br>
<div class="gmail_quote">
<div class="gmail_attr" dir="ltr">On Wed, Mar 5, 2025 at 11:54 PM Joe D Williams <<a href="mailto:joedwil@earthlink.net" 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">castle ignores if missing, but adds joints field for export</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: John Carlson <<a href="mailto:yottzumm@gmail.com" rel="noopener" target="_blank">yottzumm@gmail.com</a>><br>Sent: Mar 5, 2025 5:54 PM<br>To: Joe D Williams <<a href="mailto:joedwil@earthlink.net" rel="noopener" target="_blank">joedwil@earthlink.net</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] 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">I will try to check the latest castle-model-viewer and castle-model-converter. If they ignores the missing joints field, we’re good.</div>
<div dir="auto"> </div>
<div dir="auto">Also, I will look at joints in X3DUOM to see if the joints field is required.</div>
<div dir="auto"> </div>
<div dir="auto">John</div>
<div><br>
<div class="gmail_quote">
<div class="gmail_attr" dir="ltr">On Wed, Mar 5, 2025 at 1:41 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">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" rel="noopener" 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" rel="noopener" target="_blank">x3d-ecosystem@web3d.org</a>><br>Cc: John Carlson <<a href="mailto:yottzumm@gmail.com" rel="noopener" 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" rel="noopener" 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" rel="noopener" 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>
</div>
<p style="margin:0.1rem 0px;line-height:1"> </p>
</blockquote>
</div>
</div>
<p style="margin:0.1rem 0px;line-height:1"> </p></blockquote></div></div>