<div style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:12pt"><p style="margin: 0.1rem 0; line-height: 1.0;">I was just making random grunt. When I woke up those fields were nodes while I was thinking the vrml and hanim intent was strings.</p>
</div>
<div class="elnk-inline-message-container" style="border-left: 1px solid #aaa; box-sizing: border-box; padding: 10px 0 10px 15px; margin: 0;">
<p>-----Original Message-----<br>From: John Carlson <yottzumm@gmail.com><br>Sent: Mar 6, 2025 10:26 AM<br>To: Joe D Williams <joedwil@earthlink.net>, Don Brutzman <brutzman@nps.edu><br>Cc: X3D Ecosystem public discussion <x3d-ecosystem@web3d.org><br>Subject: Re: [X3D-Ecosystem] Fwd: RawKee Update - Implemented a companion export script for x3d.py</p>
<p style="margin: 0.1rem 0; line-height: 1.0;"> </p>
<div dir="auto">AFAIK, joints field, sites field, and segments field are of type MFNode, not MFString.</div>
<div dir="auto"> </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"> </div>
<div dir="auto">John </div>
<div><br>
<div class="gmail_quote gmail_quote_container">
<div class="gmail_attr" dir="ltr">On Thu, Mar 6, 2025 at 6:35 AM Joe D Williams <<a href="mailto:joedwil@earthlink.net">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: #cccccc;">
<div style="font-family: arial,sans-serif; font-size: 12pt; color: #000000;">
<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: #aaaaaa;">
<p dir="auto">-----Original Message-----<br>From: John Carlson <<a href="mailto:yottzumm@gmail.com" target="_blank" rel="noopener">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" rel="noopener">joedwil@earthlink.net</a>><br>Cc: X3D Ecosystem public discussion <<a href="mailto:x3d-ecosystem@web3d.org" target="_blank" rel="noopener">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 style="width: 932px; max-width: 100%;" src="cid:20c46d9e-e1bb-41f2-be25-4bef8e2a9747" alt="image.png"></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" rel="noopener">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: #cccccc;">
<div style="font-family: arial,sans-serif; font-size: 12pt; color: #000000;">
<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: #aaaaaa;">
<p>-----Original Message-----<br>From: John Carlson <<a href="mailto:yottzumm@gmail.com" target="_blank" rel="noopener">yottzumm@gmail.com</a>><br>Sent: Mar 5, 2025 5:54 PM<br>To: Joe D Williams <<a href="mailto:joedwil@earthlink.net" target="_blank" rel="noopener">joedwil@earthlink.net</a>>, X3D Ecosystem public discussion <<a href="mailto:x3d-ecosystem@web3d.org" target="_blank" rel="noopener">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" target="_blank" rel="noopener">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: #cccccc;">
<div style="font-family: arial,sans-serif; font-size: 12pt; color: #000000;">
<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: #aaaaaa;">
<p>-----Original Message-----<br>From: X3D Ecosystem public discussion <<a href="mailto:x3d-ecosystem@web3d.org" target="_blank" rel="noopener">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" rel="noopener">x3d-ecosystem@web3d.org</a>><br>Cc: John Carlson <<a href="mailto:yottzumm@gmail.com" target="_blank" rel="noopener">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" rel="noopener">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" rel="noopener">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" target="_blank" rel="noopener">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: #cccccc;">
<div style="font-family: arial,sans-serif; font-size: 12pt; color: #000000;">
<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: #aaaaaa;">
<p>-----Original Message-----<br>From: X3D Ecosystem public discussion <<a href="mailto:x3d-ecosystem@web3d.org" target="_blank" rel="noopener">x3d-ecosystem@web3d.org</a>><br>Sent: Mar 5, 2025 10:06 AM<br>To: John Carlson <<a href="mailto:yottzumm@gmail.com" target="_blank" rel="noopener">yottzumm@gmail.com</a>><br>Cc: Bergstrom, Aaron <<a href="mailto:aaron.bergstrom@und.edu" target="_blank" rel="noopener">aaron.bergstrom@und.edu</a>>, X3D Ecosystem public discussion <<a href="mailto:x3d-ecosystem@web3d.org" target="_blank" rel="noopener">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: #e1e1e1 currentcolor currentcolor;">
<p class="MsoNormal"><strong>From:</strong> John Carlson <<a href="mailto:yottzumm@gmail.com" target="_blank" rel="noopener">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" target="_blank" rel="noopener">aaron.bergstrom@und.edu</a>><br><strong>Cc:</strong> X3D Ecosystem public discussion <<a href="mailto:x3d-ecosystem@web3d.org" target="_blank" rel="noopener">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: #aaaaaa;">
<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: #cccccc;">
<div style="border-left-width: 1px; border-left-style: solid; box-sizing: border-box; padding: 10px 0px 10px 15px; margin: 0px; border-left-color: #aaaaaa;">
<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" target="_blank" rel="noopener">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 #cccccc;">
<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>
</div>
<p style="margin: 0.1rem 0; line-height: 1.0;"> </p>