<div><div dir="auto">Way to go Don!  High Five!</div><div dir="auto"><br></div><div dir="auto">I have been struggling with email behavior, luckily targeted at other individuals.</div><div dir="auto"><br></div><div dir="auto">I think we should work on generating typesafe JavaScript this afternoon, either generating TypeScript or adding type checking to constructors and setters.</div><div dir="auto"><br></div><div dir="auto">John</div></div><div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Jul 13, 2020 at 12:52 PM Don Brutzman <<a href="mailto:brutzman@nps.edu">brutzman@nps.edu</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)">1. HAnim1 to HAnim2 conversion.<br>
<br>
X3dTidy.xslt stylesheet is now able to perform HAnim1 to HAnim2 conversion, demonstrated on multiple models.<br>
<br>
Am happy to report that a new build is online for the new HumanoidAnimation collection in the X3D Examples Archive.<br>
<br>
[1] HumanoidAnimation X3D Examples Archive<br>
     <a href="https://www.web3d.org/x3d/content/examples/HumanoidAnimation" rel="noreferrer" target="_blank">https://www.web3d.org/x3d/content/examples/HumanoidAnimation</a><br>
<br>
Examples of HAnim1 to HAnim2 conversions are copied from console logs in the following reference, with excerpts following:<br>
<br>
[2] HumanoidAnimation HAnim2 build.conversions.log.txt<br>
     <a href="https://www.web3d.org/x3d/content/examples/HumanoidAnimation/build.conversions.log.txt" rel="noreferrer" target="_blank">https://www.web3d.org/x3d/content/examples/HumanoidAnimation/build.conversions.log.txt</a><br>
<br>
next check X3dTidy...<br>
C:\x3d-code\<a href="http://www.web3d.org" rel="noreferrer" target="_blank">www.web3d.org</a>\x3d\content\examples\HumanoidAnimation/Characters//KoreanCharacter01Jin.x3d processing with X3dTidy.xslt stylesheet for tidied-up .x3d<br>
*** HAnim2  DEF replaced: HAnimJoint DEF='hanim_l_ankle' alias replaced with standardized newDEFvalue='hanim_l_talocrural'<br>
*** HAnim2 name replaced: HAnimJoint name='l_ankle' alias with preferred name='l_talocrural'<br>
*** HAnim2  DEF replaced: HAnimSegment DEF='hanim_l_hindfoot' alias replaced with standardized newDEFvalue='hanim_l_talus'<br>
*** HAnim2 name replaced: HAnimSegment name='l_hindfoot' alias with preferred name='l_talus'<br>
*** HAnim2  DEF replaced: HAnimJoint DEF='hanim_l_midtarsal' alias replaced with standardized newDEFvalue='hanim_l_metatarsophalangeal_2'<br>
*** HAnim2 name replaced: HAnimJoint name='l_midtarsal' alias with preferred name='l_metatarsophalangeal_2'<br>
*** HAnim2  DEF replaced: HAnimSegment DEF='hanim_l_middistal' alias replaced with standardized newDEFvalue='hanim_l_tarsal_proximal_phalanx_2'<br>
*** HAnim2 name replaced: HAnimSegment name='l_middistal' alias with preferred name='l_tarsal_proximal_phalanx_2'<br>
*** HAnim2  DEF replaced: HAnimJoint DEF='hanim_r_ankle' alias replaced with standardized newDEFvalue='hanim_r_talocrural'<br>
*** HAnim2 name replaced: HAnimJoint name='r_ankle' alias with preferred name='r_talocrural'<br>
*** HAnim2  DEF replaced: HAnimSegment DEF='hanim_r_hindfoot' alias replaced with standardized newDEFvalue='hanim_r_talus'<br>
*** HAnim2 name replaced: HAnimSegment name='r_hindfoot' alias with preferred name='r_talus'<br>
*** HAnim2  DEF replaced: HAnimJoint DEF='hanim_r_midtarsal' alias replaced with standardized newDEFvalue='hanim_r_metatarsophalangeal_2'<br>
*** HAnim2 name replaced: HAnimJoint name='r_midtarsal' alias with preferred name='r_metatarsophalangeal_2'<br>
*** HAnim2  DEF replaced: HAnimSegment DEF='hanim_r_middistal' alias replaced with standardized newDEFvalue='hanim_r_tarsal_proximal_phalanx_2'<br>
*** HAnim2 name replaced: HAnimSegment name='r_middistal' alias with preferred name='r_tarsal_proximal_phalanx_2'<br>
*** HAnim2  DEF replaced: HAnimJoint DEF='hanim_l_wrist' alias replaced with standardized newDEFvalue='hanim_l_radiocarpal'<br>
*** HAnim2 name replaced: HAnimJoint name='l_wrist' alias with preferred name='l_radiocarpal'<br>
*** HAnim2  DEF replaced: HAnimSegment DEF='hanim_l_hand' alias replaced with standardized newDEFvalue='hanim_l_carpal'<br>
*** HAnim2 name replaced: HAnimSegment name='l_hand' alias with preferred name='l_carpal'<br>
*** HAnim2  DEF replaced: HAnimJoint DEF='hanim_r_wrist' alias replaced with standardized newDEFvalue='hanim_r_radiocarpal'<br>
*** HAnim2 name replaced: HAnimJoint name='r_wrist' alias with preferred name='r_radiocarpal'<br>
*** HAnim2  DEF replaced: HAnimSegment DEF='hanim_r_hand' alias replaced with standardized newDEFvalue='hanim_r_carpal'<br>
*** HAnim2 name replaced: HAnimSegment name='r_hand' alias with preferred name='r_carpal'<br>
*** HAnim2  USE replaced: HAnimJoint USE='hanim_l_ankle' alias replaced with standardized newUSEvalue='hanim_l_talocrural'<br>
*** HAnim2  USE replaced: HAnimJoint USE='hanim_r_ankle' alias replaced with standardized newUSEvalue='hanim_r_talocrural'<br>
*** HAnim2  USE replaced: HAnimJoint USE='hanim_l_midtarsal' alias replaced with standardized newUSEvalue='hanim_l_metatarsophalangeal_2'<br>
*** HAnim2  USE replaced: HAnimJoint USE='hanim_r_midtarsal' alias replaced with standardized newUSEvalue='hanim_r_metatarsophalangeal_2'<br>
*** HAnim2  USE replaced: HAnimJoint USE='hanim_l_wrist' alias replaced with standardized newUSEvalue='hanim_l_radiocarpal'<br>
*** HAnim2  USE replaced: HAnimJoint USE='hanim_r_wrist' alias replaced with standardized newUSEvalue='hanim_r_radiocarpal'<br>
*** HAnim2  USE replaced: HAnimSegment USE='hanim_l_hand' alias replaced with standardized newUSEvalue='hanim_l_carpal'<br>
*** HAnim2  USE replaced: HAnimSegment USE='hanim_r_hand' alias replaced with standardized newUSEvalue='hanim_r_carpal'<br>
*** HAnim2  USE replaced: HAnimSegment USE='hanim_l_hindfoot' alias replaced with standardized newUSEvalue='hanim_l_talus'<br>
*** HAnim2  USE replaced: HAnimSegment USE='hanim_r_hindfoot' alias replaced with standardized newUSEvalue='hanim_r_talus'<br>
*** HAnim2  USE replaced: HAnimSegment USE='hanim_l_middistal' alias replaced with standardized newUSEvalue='hanim_l_tarsal_proximal_phalanx_2'<br>
*** HAnim2  USE replaced: HAnimSegment USE='hanim_r_middistal' alias replaced with standardized newUSEvalue='hanim_r_tarsal_proximal_phalanx_2'<br>
=========================================================================================<br>
HAnimHumanoid skeleton holds HAnimJoint : HAnimSegment : HAnimSite triplets (X3D4 HAnim2)<br>
=========================================================================================<br>
HAnimHumanoid DEF='hanim_Jin name='Jin'<br>
   humanoid_root : sacrum<br>
     l_hip : l_thigh<br>
     | l_knee : l_calf<br>
     |   l_ankle (HAnim2 name replaced: l_talocrural) : l_hindfoot (HAnim2 name replaced: l_talocrural)<br>
     |     l_midtarsal (HAnim2 name replaced: l_metatarsophalangeal_2) : l_middistal (HAnim2 name replaced: l_metatarsophalangeal_2)<br>
     r_hip : r_thigh<br>
     | r_knee : r_calf<br>
     |   r_ankle (HAnim2 name replaced: r_talocrural) : r_hindfoot (HAnim2 name replaced: r_talocrural)<br>
     |     r_midtarsal (HAnim2 name replaced: r_metatarsophalangeal_2) : r_middistal (HAnim2 name replaced: r_metatarsophalangeal_2)<br>
     sacroiliac : pelvis<br>
       l_shoulder : l_upperarm<br>
       | l_elbow : l_forearm<br>
       |   l_wrist (HAnim2 name replaced: l_radiocarpal) : l_hand (HAnim2 name replaced: l_radiocarpal)<br>
       r_shoulder : r_upperarm<br>
       | r_elbow : r_forearm<br>
       |   r_wrist (HAnim2 name replaced: r_radiocarpal) : r_hand (HAnim2 name replaced: r_radiocarpal)<br>
       vl5 : l5<br>
         skullbase : skull<br>
===========================================================================<br>
<br>
... with subsequent recheck of modified source X3D model showing:<br>
<br>
next check X3dTidy...<br>
C:\x3d-code\<a href="http://www.web3d.org" rel="noreferrer" target="_blank">www.web3d.org</a>\x3d\content\examples\HumanoidAnimation/Characters//KoreanCharacter01Jin.x3d processing with X3dTidy.xslt stylesheet for tidied-up .x3d<br>
=========================================================================================<br>
HAnimHumanoid skeleton holds HAnimJoint : HAnimSegment : HAnimSite triplets (X3D4 HAnim2)<br>
=========================================================================================<br>
HAnimHumanoid DEF='hanim_Jin name='Jin'<br>
   humanoid_root : sacrum<br>
     l_hip : l_thigh<br>
     | l_knee : l_calf<br>
     |   l_talocrural : l_talus<br>
     |     l_metatarsophalangeal_2 : l_tarsal_proximal_phalanx_2<br>
     r_hip : r_thigh<br>
     | r_knee : r_calf<br>
     |   r_talocrural : r_talus<br>
     |     r_metatarsophalangeal_2 : r_tarsal_proximal_phalanx_2<br>
     sacroiliac : pelvis<br>
       l_shoulder : l_upperarm<br>
       | l_elbow : l_forearm<br>
       |   l_radiocarpal : l_carpal<br>
       r_shoulder : r_upperarm<br>
       | r_elbow : r_forearm<br>
       |   r_radiocarpal : r_carpal<br>
       vl5 : l5<br>
         skullbase : skull<br>
===========================================================================<br>
<br>
Interestingly the specific stylesheet rules used to create diagnostics and corrections are autogenerated from parent-child-alias information in X3D XML Schema and X3D Unified Object Model (X3DUOM).<br>
<br>
All of the latest Quality Assurance (QA) efforts are documented with diagnostics, warnings and error messages.<br>
<br>
[3] build.X3dSchematronX3dTidy.log.txt<br>
     <a href="https://www.web3d.org/x3d/content/examples/HumanoidAnimation/build.X3dSchematronX3dTidy.log.txt" rel="noreferrer" target="_blank">https://www.web3d.org/x3d/content/examples/HumanoidAnimation/build.X3dSchematronX3dTidy.log.txt</a><br>
<br>
----<br>
<br>
2. Increasing fidelity and support.<br>
<br>
Am also happy to report addition of four Jin models illustrating progressive Level of Articulation (LOA) 1, 2, 3, and 4.  LOA 4 consists of full human skeleton, including high-fidelity hands and feet.<br>
<br>
[3] X3D Example Archives: Humanoid Animation, Characters (X3D4, HAnim2)<br>
     <a href="https://www.web3d.org/x3d/content/examples/HumanoidAnimation/Characters" rel="noreferrer" target="_blank">https://www.web3d.org/x3d/content/examples/HumanoidAnimation/Characters</a><br>
<br>
[3.1] X3D Example Archives: Humanoid Animation, Characters, Jin LOA 1<br>
       <a href="https://www.web3d.org/x3d/content/examples/HumanoidAnimation/Characters/JinLOA1Index.html" rel="noreferrer" target="_blank">https://www.web3d.org/x3d/content/examples/HumanoidAnimation/Characters/JinLOA1Index.html</a><br>
<br>
[3.2] X3D Example Archives: Humanoid Animation, Characters, Jin LOA 2<br>
       <a href="https://www.web3d.org/x3d/content/examples/HumanoidAnimation/Characters/JinLOA2Index.html" rel="noreferrer" target="_blank">https://www.web3d.org/x3d/content/examples/HumanoidAnimation/Characters/JinLOA2Index.html</a><br>
<br>
[3.3] X3D Example Archives: Humanoid Animation, Characters, Jin LOA 3<br>
       <a href="https://www.web3d.org/x3d/content/examples/HumanoidAnimation/Characters/JinLOA3Index.html" rel="noreferrer" target="_blank">https://www.web3d.org/x3d/content/examples/HumanoidAnimation/Characters/JinLOA3Index.html</a><br>
<br>
[3.4] X3D Example Archives: Humanoid Animation, Characters, Jin LOA 4<br>
       <a href="https://www.web3d.org/x3d/content/examples/HumanoidAnimation/Characters/JinLOA1Index.html" rel="noreferrer" target="_blank">https://www.web3d.org/x3d/content/examples/HumanoidAnimation/Characters/JinLOA1Index.html</a><br>
<br>
Although these were previously lost two summers ago, special thanks to Myeong Won Lee for recovering them.  Only minor changes were necessary to pass all conformance testing.<br>
<br>
In addition to Web3D archives, all HumanoidAnimation models are maintained in version control at<br>
<br>
[4] SourceForge X3D Examples, HumanoidAnimation<br>
     <a href="https://sourceforge.net/p/x3d/code/HEAD/tree/www.web3d.org/x3d/content/examples/HumanoidAnimation" rel="noreferrer" target="_blank">https://sourceforge.net/p/x3d/code/HEAD/tree/www.web3d.org/x3d/content/examples/HumanoidAnimation</a><br>
<br>
Implementation note.  These work in X3DOM.  We believe the following requirements must be met to also achieve X_ITE support:<br>
- For <component> statement, in the newly released HAnim standard, we have removed the hyphen from "H-Anim".<br>
- In the corresponding X3D4 specification, version 2 "HAnim" component will be correct.<br>
- In X3D3 specification, "H-Anim" component will be unchanged.<br>
- HAnimHumanoid node now includes version="2.0" in X3D version="4.0".<br>
<br>
[5] X3D Tooltips 4.0, HAnimHumanoid<br>
     <a href="https://www.web3d.org/x3d/content/X3dTooltips.html#HAnimHumanoid" rel="noreferrer" target="_blank">https://www.web3d.org/x3d/content/X3dTooltips.html#HAnimHumanoid</a><br>
<br>
----<br>
<br>
3. Better and Better.<br>
<br>
As one might guess, immense attention to detail is necessary for ensuring in-depth Quality Assurance (QA) of high-fidelity human skeletons.  Our current diagnostics cover Joint, Segment and Site hierarchies from the new specification.  Next coming into view for further efforts this summer: HAnimMotion.<br>
<br>
[6] HAnim2 Specification<br>
     <a href="https://www.web3d.org/documents/specifications/19774/V2.0" rel="noreferrer" target="_blank">https://www.web3d.org/documents/specifications/19774/V2.0</a><br>
<br>
Thanks to Joe Williams and John Carlson for weekly HAnim videoconferences that have been essential for climbing this mountain.  The journey continues, others may find it interesting too.<br>
<br>
All questions and improvements welcome.  Have fun with X3D4 and HAnim2!  8)<br>
<br>
all the best, Don<br>
-- <br>
Don Brutzman  Naval Postgraduate School, Code USW/Br       <a href="mailto:brutzman@nps.edu" target="_blank">brutzman@nps.edu</a><br>
Watkins 270,  MOVES Institute, Monterey CA 93943-5000 USA   +1.831.656.2149<br>
X3D graphics, virtual worlds, navy robotics <a href="http://faculty.nps.edu/brutzman" rel="noreferrer" target="_blank">http://faculty.nps.edu/brutzman</a><br>
</blockquote></div></div>