<div dir="ltr"><div dir="ltr">Joe, let's refer back to the specification. John helpfully colorized an excerpt earlier; let's review how the spec works. Quote:<div><div><span style="font-family:monospace;font-size:11.05px;color:rgb(0,0,0)"><br class="gmail-Apple-interchange-newline"></span><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span style="font-family:monospace;font-size:11.05px;color:rgb(0,0,0)">HAnimJoint : X3DGroupingNode {<br></span><span style="font-family:monospace;font-size:11.05px;color:rgb(0,0,0)"> MFNode [in] addChildren </span><font style="font-family:monospace;font-size:11.05px;color:rgb(255,153,0)"> [HAnimJoint,HAnimSegment]<br></font><font style="font-family:monospace;font-size:11.05px;color:rgb(0,0,0)"> MFNode [in] removeChildren </font><font style="font-family:monospace;font-size:11.05px;color:rgb(255,153,0)"> [HAnimJoint,HAnimSegment]<br></font><font style="font-family:monospace;font-size:11.05px;color:rgb(0,0,0)"> SFVec3f [in,out] center 0 0 0 (-∞,∞)`<br></font><font style="font-family:monospace;font-size:11.05px;color:rgb(0,0,0)"> MFNode [in,out] children [] </font><font style="font-family:monospace;font-size:11.05px;color:rgb(255,153,0)">[HAnimJoint,HAnimSegment]</font></blockquote></div><div><br></div><div>This means that a HAnimJoint is itself an X3DGrouping node, but the limitation brackets mean that the <i>children</i> field can only contain an HAnimSegment or another HAnimJoint. Thus HAnimJoint cannot contain HAnimDisplacer.</div></div><div><br></div><div>Paddling upstream to look at the HAnim 2 definitions, that looks to be consistent with the Joint definition: no Displacer node seen there.</div><div><ul><li><a href="https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19774/ISO-IEC19774-1/ISO-IEC19774-1v2.1/ISO-IEC19774-1v2.1-WD/Architecture/concepts.html#JointObject">https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19774/ISO-IEC19774-1/ISO-IEC19774-1v2.1/ISO-IEC19774-1v2.1-WD/Architecture/concepts.html#JointObject</a></li></ul><div>So the two specifications (HAnim primary, X3D secondary, both authoritative) look consistent to me.</div><div><br></div><div>Important: please check that logic in the specification prose sections yourselves.</div></div><div><br></div><div>Therefore HAnimJoint should have no other children besides HAnimSegment and/or another HAnimJoint. Joe, that does not match your list of acceptable children... we have to be really careful about these things.</div><div><br></div><div>btw thanks John for noting that X3DJSail documentation shows it is inconsistent with that restriction. I'll work on that sometime in the future.</div><div><br></div><div>p.s. I think our prior SourceForge tickets have gotten scrambled on this topic, we probably need to start a separate one.</div><div><br></div><div>all the best, Don</div></div><br><div class="gmail_quote gmail_quote_container"><div dir="ltr" class="gmail_attr">On Fri, Sep 12, 2025 at 3:31 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:1px solid rgb(204,204,204);padding-left:1ex">> HAnimJoint.<br>
<br>
The acceptable children for Joint in Basic skeleton are<br>
Displacer (for Segment geometry), Joint, Segment.<br>
Segment children=any x3d and Site .<br>
Site children=any x3d.<br>
<br>
<br>
<br>
<br>
<br>
<br>
-----Original Message-----<br>
From: Extensible 3D (X3D) Graphics public discussion <<a href="mailto:x3d-public@web3d.org" target="_blank">x3d-public@web3d.org</a>></<a href="mailto:x3d-public@web3d.org" target="_blank">x3d-public@web3d.org</a>><br>
Sent: Sep 9, 2025 3:50 AM<br>
To: John Carlson <<a href="mailto:yottzumm@gmail.com" target="_blank">yottzumm@gmail.com</a>></<a href="mailto:yottzumm@gmail.com" target="_blank">yottzumm@gmail.com</a>><br>
Cc: Don Brutzman <<a href="mailto:don.brutzman@gmail.com" target="_blank">don.brutzman@gmail.com</a>>, <<a href="mailto:hanim@web3d.org" target="_blank">hanim@web3d.org</a>>, Extensible 3D (X3D) Graphics public discussion <<a href="mailto:x3d-public@web3d.org" target="_blank">x3d-public@web3d.org</a>></<a href="mailto:x3d-public@web3d.org" target="_blank">x3d-public@web3d.org</a>></<a href="mailto:hanim@web3d.org" target="_blank">hanim@web3d.org</a>></<a href="mailto:don.brutzman@gmail.com" target="_blank">don.brutzman@gmail.com</a>><br>
Subject: Re: [x3d-public] No Transform/Group/Shape inside HAnimJoint?<br>
<br>
Hi John. Option 3 please. Recommend fixing the example models, not deleting the example models. The X3D specification implementation of the HAnim specification, both of which are authoritative, clearly shows that Transform/Group/Shape child nodes belong under HAnimSegment, not under HAnimJoint. * 26.3.5 HAnimSegment* <a href="https://www.web3d.org/specifications/X3Dv4/ISO-IEC19775-1v4-IS/Part01/components/hanim.html#HAnimSegment" rel="noreferrer" target="_blank">https://www.web3d.org/specifications/X3Dv4/ISO-IEC19775-1v4-IS/Part01/components/hanim.html#HAnimSegment</a><br>
<br>
No doubt the errors you have reported here are already detected and reported repeatedly by X3D XML Schema,X3D DOCTYPE, and X3D Schematron. Periodic unit testing logs capture such errors, X3D-Edit can check validation comprehensively as well Proper validation and correction of models prevents Garbage In Garbage Out (GIGO) syndrome.<br>
<br>
Incidentally, a large number of people have worked long + hard for years to implement both specifications. There is no need to worry about “fixing” the authoritative HAnim and X3D specifications unless you have a valid example demonstrating why such a change is needed. Have fun with valid X3D models! 🥸👌 all the best, Don<br>
--<br>
Don Brutzman<br>
X3D graphics, virtual worlds, Navy robotics<br>
<a href="https://faculty.nps.edu/brutzman" rel="noreferrer" target="_blank">https://faculty.nps.edu/brutzman</a><br>
On Mon, Sep 8, 2025 at 8:36 PM John Carlson via x3d-public <<a href="mailto:x3d-public@web3d.org" target="_blank">x3d-public@web3d.org</a> (mailto:<a href="mailto:x3d-public@web3d.org" target="_blank">x3d-public@web3d.org</a>)=""> wrote:I suggest we either deep six examples with Transform/Group/Shape children of HAnimJoint, or fix the standard. Here's the standard I am referring to: HAnimJoint : X3DGroupingNode { MFNode [in] addChildren [HAnimJoint,HAnimSegment] MFNode [in] removeChildren [HAnimJoint,HAnimSegment] SFVec3f [in,out] center 0 0 0 (-∞,∞)` MFNode [in,out] children [] [HAnimJoint,HAnimSegment] SFString [in,out] description "" MFNode [in,out] displacers [] [HAnimDisplacer] SFBool [in,out] bboxDisplay FALSE SFRotation [in,out] limitOrientation 0 0 1 0 [-1,1] or (-∞,∞) MFFloat [in,out] llimit [0 0 0] (-∞,∞) SFNode [in,out] metadata NULL [X3DMetadataObject] SFString [in,out] name "" SFRotation [in,out] rotation 0 0 1 0 [-1,1] or (-∞,∞) SFVec3f [in,out] scale 1 1 1 (0,∞) SFRotation [in,out] scaleOrientation 0 0 1 0 [-1,1] or (-∞,∞) MFInt32 [in,out] skinCoordIndex [] [0,∞) MFFloat [in,out] skinCoordWeight [] [0,1] MFFloat [in,out] stiffness [0 0 0] [0,1] SFVec3f [in,out] translation 0 0 0 (-∞,∞) MFFloat [in,out] ulimit [0 0 0] (-∞,∞) SFBool [in,out] visible TRUE SFVec3f [] bboxCenter 0 0 0 (-∞,∞) SFVec3f [] bboxSize -1 -1 -1 [0,∞) or −1 −1 −1}See examples in the archive, e.g.:Humanoid Animation X3D Examples Archive, Winter And Spring, Lily Animated ()Humanoid Animation X3D Examples Archive, Winter And Spring, Leif Animated (<a href="https://www.web3d.org/x3d/content/examples/HumanoidAnimation/WinterAndSpring/LeifAnimatedIndex.html" rel="noreferrer" target="_blank">https://www.web3d.org/x3d/content/examples/HumanoidAnimation/WinterAndSpring/LeifAnimatedIndex.html</a> (<a href="https://www.web3d.org/specifications/X3Dv4/ISO-IEC19775-1v4-IS/Part01/components/hanim.html#HAnimJoint))Humanoid" rel="noreferrer" target="_blank">https://www.web3d.org/specifications/X3Dv4/ISO-IEC19775-1v4-IS/Part01/components/hanim.html#HAnimJoint))Humanoid</a> Animation X3D Examples Archive, Winter And Spring, Tufani Animated ()If HAnimJoint IS a X3DGroupingNode, then X3DChildNodes should be acceptable. Is that how to read the standard?<a href="https://www.web3d.org/specifications/X3Dv4/ISO-IEC19775-1v4-IS/Part01/components/grouping.html#X3DGroupingNode10.3.2" rel="noreferrer" target="_blank">https://www.web3d.org/specifications/X3Dv4/ISO-IEC19775-1v4-IS/Part01/components/grouping.html#X3DGroupingNode10.3.2</a> (<a href="https://www.web3d.org/x3d/content/examples/HumanoidAnimation/WinterAndSpring/TufaniAnimatedIndex.html" rel="noreferrer" target="_blank">https://www.web3d.org/x3d/content/examples/HumanoidAnimation/WinterAndSpring/TufaniAnimatedIndex.html</a>) X3DGroupingNodeX3DGroupingNode : X3DChildNode, X3DBoundedObject { MFNode [in] addChildren [X3DChildNode] MFNode [in] removeChildren [X3DChildNode] MFNode [in,out] children [] [X3DChildNode] SFBool [in,out] bboxDisplay FALSE SFNode [in,out] metadata NULL [X3DMetadataObject] SFBool [in,out] visible TRUE SFVec3f [] bboxCenter 0 0 0 (-∞,∞) SFVec3f [] bboxSize -1 -1 -1 [0,∞) or −1 −1 −1}Anyway, that seems *REALLY* confusing! Any clarification on "overloading" of fields welcome! Thanks, John_______________________________________________</<a href="mailto:x3d-public@web3d.org" target="_blank">x3d-public@web3d.org</a>><br>
x3d-public mailing list<br>
<a href="mailto:x3d-public@web3d.org" target="_blank">x3d-public@web3d.org</a> (mailto:<a href="mailto:x3d-public@web3d.org" target="_blank">x3d-public@web3d.org</a>)<br>
<a href="http://web3d.org/mailman/listinfo/x3d-public_web3d.org" rel="noreferrer" target="_blank">http://web3d.org/mailman/listinfo/x3d-public_web3d.org</a><br>
<br>
<br>
</blockquote></div></div>