{ "X3D": {
    "encoding":"UTF-8",
    "@profile":"Full",
    "@version":"4.0",
    "@xsd:noNamespaceSchemaLocation":"https://www.web3d.org/specifications/x3d-4.0.xsd",
    "JSON schema":"https://www.web3d.org/specifications/x3d-4.0-JSONSchema.autogenerated.json",
    "head": {
        "meta": [
          {
            "@name":"title",
            "@content":"HAnimPosePrototype.x3d"
          },
          {
            "@name":"description",
            "@content":"Define an experimental new node to simply capture a single pose for an HAnimHumanoid model. Expected usage is to allow HAnimHumanoid to contain multiple Pose nodes which can be activated and composed."
          },
          {
            "@name":"info",
            "@content":"This model also takes advantage of Inline/IMPORT capabilities (equivalent to USE node) and thus avoids fully copying a large, complex HAnimHumanoid model. Multiple HAnimHumanoid models have been tested satisfactorily, for HAnim version 1 (X3d 3) AND HAnim version 2 (X3D 4)."
          },
          {
            "@name":"created",
            "@content":"2 October 2025"
          },
          {
            "@name":"modified",
            "@content":"14 December 2025"
          },
          {
            "@name":"creator",
            "@content":"Don Brutzman"
          },
          {
            "@name":"creator",
            "@content":"Joe Williams"
          },
          {
            "@name":"contributor",
            "@content":"Holger Seelig for X_ITE, Sunrize on Windows, scripting guidance, and Inline IMPORT functionality as node-reference equivalent to USE"
          },
          {
            "@name":"reference",
            "@content":"HAnimPosePrototype.console.txt"
          },
          {
            "@name":"MovingImage",
            "@content":"demonstration video https://www.web3d.org/x3d/content/examples/HumanoidAnimation/Poses/HAnimPosePrototypeDemoVideo.mp4"
          },
          {
            "@name":"Image",
            "@content":"HAnimPoseExampleTouchDown.png"
          },
          {
            "@name":"Image",
            "@content":"HAnimPoseExampleTouchDownFaceLeftAPose.png"
          },
          {
            "@name":"Image",
            "@content":"images/HAnimPoseExampleBoxMan1.png"
          },
          {
            "@name":"Image",
            "@content":"images/HAnimPoseExampleBoxMan2.png"
          },
          {
            "@name":"Image",
            "@content":"images/HAnimPoseExampleJoeKick.png"
          },
          {
            "@name":"Image",
            "@content":"images/HAnimPoseExampleJoeSkeletonSkinSite.png"
          },
          {
            "@name":"Image",
            "@content":"images/HAnimPoseExampleKoreanCharacter01Jin.png"
          },
          {
            "@name":"Image",
            "@content":"images/HAnimPoseExampleKoreanCharacter02Chul.png"
          },
          {
            "@name":"Image",
            "@content":"images/HAnimPoseExampleKoreanCharacter03Hyun.png"
          },
          {
            "@name":"Image",
            "@content":"images/HAnimPoseExampleKoreanCharacter04Young.png"
          },
          {
            "@name":"Image",
            "@content":"images/HAnimPoseExampleKoreanCharacter05Ju.png"
          },
          {
            "@name":"Image",
            "@content":"images/HAnimPoseExampleKoreanCharacter06Ga.png"
          },
          {
            "@name":"Image",
            "@content":"images/HAnimPoseExampleKoreanCharacter07No.png"
          },
          {
            "@name":"Image",
            "@content":"images/HAnimPoseExampleKoreanCharacter08Da.png"
          },
          {
            "@name":"Image",
            "@content":"images/HAnimPoseExampleKoreanCharacter09Ru.png"
          },
          {
            "@name":"Image",
            "@content":"images/HAnimPoseExampleKoreanCharacter10Mi.png"
          },
          {
            "@name":"Image",
            "@content":"images/HAnimPoseExampleKoreanCharacter11Min.png"
          },
          {
            "@name":"Image",
            "@content":"images/HAnimPoseExampleKoreanCharacter12Sun.png"
          },
          {
            "@name":"specificationSection",
            "@content":"HAnim Architecture volume 1 version 2.1 draft, clause 6 Object interfaces, section 6.4 Pose"
          },
          {
            "@name":"specificationUrl",
            "@content":"https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19774/ISO-IEC19774-1/ISO-IEC19774-1v2.1/ISO-IEC19774-1v2.1-WD/Architecture/ObjectInterfaces.html#Pose"
          },
          {
            "@name":"specificationSection",
            "@content":"HAnim Architecture volume 1 version 2.1 draft, clause 4 Concepts, section 4.8.2 Modelling of human-like HAnim figures"
          },
          {
            "@name":"specificationUrl",
            "@content":"https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19774/ISO-IEC19774-1/ISO-IEC19774-1v2.1/ISO-IEC19774-1v2.1-WD/Architecture/concepts.html#ModellingHumanLikeHAnimFigures"
          },
          {
            "@name":"specificationSection",
            "@content":"HAnim Architecture volume 1 version 2.1 draft, clause 4 Concepts, section 4.8.3 Poses"
          },
          {
            "@name":"specificationUrl",
            "@content":"https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19774/ISO-IEC19774-1/ISO-IEC19774-1v2.1/ISO-IEC19774-1v2.1-WD/Architecture/concepts.html#Poses"
          },
          {
            "@name":"reference",
            "@content":"Direct scene manipulations with Javascript, https://doc.instantreality.org/tutorial/direct-scene-manipulations-with-javascript"
          },
          {
            "@name":"reference",
            "@content":"earlier version of this prototype: originals/HAnimPosePreliminary.x3d"
          },
          {
            "@name":"generator",
            "@content":"X3D-Edit 4.0, https://www.web3d.org/x3d/tools/X3D-Edit"
          },
          {
            "@name":"generator",
            "@content":"Sunrize X3D Editor V1.11.1, https://create3000.github.io/sunrize"
          },
          {
            "@name":"identifier",
            "@content":"https://www.web3d.org/x3d/content/examples/HumanoidAnimation/Poses/HAnimPosePrototype.x3d"
          },
          {
            "@name":"license",
            "@content":"https://www.web3d.org/x3d/content/examples/license.html"
          },
          {
            "@name":"translated",
            "@content":"26 February 2026"
          },
          {
            "@name":"generator",
            "@content":"X3dToJson.xslt, https://www.web3d.org/x3d/stylesheets/X3dToJson.html"
          },
          {
            "@name":"reference",
            "@content":"X3D JSON encoding: https://www.web3d.org/wiki/index.php/X3D_JSON_Encoding"
          }
        ]
    },
    "Scene": {
        "-children":[
          { "WorldInfo":
            {
              "@DEF":"ModelInfo",
              "@info":["Design to illustrate a potential HAnimPose node"],
              "@title":"HAnimPosePrototype.x3d"
            }
          },
          { "Background":
            {
              "@skyColor":[0.8,0.8,1]
            }
          },
          { "NavigationInfo":
            {
            }
          },
          { "Group":
            {
              "@DEF":"HandleInlineLoading",
              "-children":[
                {
                  "#comment":"Multiple HAnimHumanoid Inline/IMPORT models are available to support testing: Characters/ JinLOA1 JinLOA2 JinLOA3 JinLOA4 ../Skin/JoeKick ../Skin/JoeSkeletonSkinSite ../Skin/BoxMan1 ../Skin/BoxMan2"
                },
                {
                  "#comment":"Also tested satisfactorily: KoreanCharacter01Jin KoreanCharacter02Chul KoreanCharacter03Hyun KoreanCharacter04Young KoreanCharacter05Ju KoreanCharacter06Ga KoreanCharacter07No KoreanCharacter08Da KoreanCharacter09Ru KoreanCharacter10Mi KoreanCharacter11Min KoreanCharacter12Sun"
                },
                { "Inline":
                  {
                    "@DEF":"HumanoidInline",
                    "@description":"remote HAnimHumanoid for IMPORT",
                    "@url":["../Skin/BoxMan2.x3d","https://www.web3d.org/x3d/content/examples/HumanoidAnimation/Skin/BoxMan2.x3d"]
                  }
                },
                {
                  "#comment":"Note that the following importedDEF must match the EXPORT name found in remote file"
                },
                { "IMPORT":
                  {
                    "@AS":"HumanoidImported",
                    "@importedDEF":"BoxMan2",
                    "@inlineDEF":"HumanoidInline"
                  }
                },
                { "LoadSensor":
                  {
                    "@DEF":"HumanoidInlineLoadSensor",
                    "@timeOut":2,
                    "-children":[
                      { "Inline":
                        {
                          "@USE":"HumanoidInline"
                        }
                      }
                    ]
                  }
                }
              ]
            }
          },
          { "ProtoDeclare":
            {
              "@name":"HAnimPose",
              "@appinfo":"Experimental node to assign joint values to a humanoid and assume a pose. Assumes that baseline HAnimHumanoid configuration must be I pose, which can be achieved by resetting every HAnimJoint to default values.",
              "ProtoInterface": {
                  "field": [
                    {
                      "@name":"parentHAnimHumanoid",
                      "@accessType":"inputOutput",
                      "@appinfo":"HAnimHumanoid for this Pose to act upon",
                      "@type":"SFNode",
                      "-children":[
                        {
                          "#comment":"HAnimHumanoid initialization node goes here, this field is only used in the prototype implementation"
                        }
                      ]
                    },
                    {
                      "@name":"name",
                      "@accessType":"inputOutput",
                      "@appinfo":"name of this pose",
                      "@type":"SFString",
                      "@value":"newPoseName"
                    },
                    {
                      "@name":"children",
                      "@accessType":"inputOutput",
                      "@appinfo":"joint values to apply to HAnimHumanoid",
                      "@type":"MFNode",
                      "-children":[
                        {
                          "#comment":"initializating Joint nodes (if any) go here"
                        }
                      ]
                    },
                    {
                      "@name":"description",
                      "@accessType":"inputOutput",
                      "@appinfo":"explanation of purpose",
                      "@type":"SFString"
                    },
                    {
                      "@name":"enabled",
                      "@accessType":"inputOutput",
                      "@appinfo":"default value true",
                      "@type":"SFBool",
                      "@value":true
                    },
                    {
                      "@name":"loa",
                      "@accessType":"initializeOnly",
                      "@appinfo":"default is no loa",
                      "@type":"SFInt32",
                      "@value":-1
                    },
                    {
                      "@name":"transitionDuration",
                      "@accessType":"inputOutput",
                      "@appinfo":"how many seconds to achieve the pose",
                      "@type":"SFTime",
                      "@value":0
                    },
                    {
                      "@name":"metadata",
                      "@accessType":"inputOutput",
                      "@appinfo":"single Metadata* node",
                      "@type":"SFNode"
                    },
                    {
                      "@name":"isActive",
                      "@accessType":"outputOnly",
                      "@appinfo":"event indicating when pose transition is active",
                      "@type":"SFBool"
                    },
                    {
                      "@name":"commencePose",
                      "@accessType":"inputOnly",
                      "@appinfo":"this event tells the HAnimPose node to fully transition, equivalent to set_fraction=1",
                      "@type":"SFBool"
                    },
                    {
                      "@name":"resetAllJoints",
                      "@accessType":"inputOnly",
                      "@appinfo":"reset the skeleton to I pose with all joints zeroed",
                      "@type":"SFBool"
                    },
                    {
                      "@name":"set_fraction",
                      "@accessType":"inputOnly",
                      "@appinfo":"allows transition to proceed incrementally from fraction [0..10",
                      "@type":"SFFloat"
                    },
                    {
                      "@name":"set_startTime",
                      "@accessType":"inputOnly",
                      "@appinfo":"starts the animation clock",
                      "@type":"SFTime"
                    },
                    {
                      "@name":"isLoaded",
                      "@accessType":"inputOnly",
                      "@appinfo":"possible notification from LoadSensor if using HAnimHumanoid Inline/IMPORT AS/USE",
                      "@type":"SFBool"
                    },
                    {
                      "@name":"traceEnabled",
                      "@accessType":"inputOutput",
                      "@appinfo":"debug trace to Browser output console this is a local prototype field",
                      "@type":"SFBool",
                      "@value":true
                    }
                  ]
              },
              "ProtoBody": {
                  "-children":[
                    { "TimeSensor":
                      {
                        "@DEF":"ClockTimeSensor",
                        "@description":"control timing of pose animation when triggered",
                        "IS": {
                            "connect": [
                              {
                                "@nodeField":"enabled",
                                "@protoField":"enabled"
                              },
                              {
                                "@nodeField":"cycleInterval",
                                "@protoField":"transitionDuration"
                              },
                              {
                                "@nodeField":"isActive",
                                "@protoField":"isActive"
                              },
                              {
                                "@nodeField":"startTime",
                                "@protoField":"set_startTime"
                              },
                              {
                                "@nodeField":"metadata",
                                "@protoField":"metadata"
                              }
                            ]
                        }
                      }
                    },
                    { "TimeSensor":
                      {
                        "@DEF":"ResetTimeSensor",
                        "@description":"control timing of skeleton reset to \"A\" pose when triggered",
                        "IS": {
                            "connect": [
                              {
                                "@nodeField":"enabled",
                                "@protoField":"enabled"
                              },
                              {
                                "@nodeField":"cycleInterval",
                                "@protoField":"transitionDuration"
                              },
                              {
                                "@nodeField":"startTime",
                                "@protoField":"set_startTime"
                              }
                            ],
                            "-children":[
                              {
                                "#comment":"no need to report isActive since that would be duplicative"
                              }
                            ]
                        }
                      }
                    },
                    { "Group":
                      {
                        "@DEF":"PoseInterpolatorGroup",
                        "-children":[
                          {
                            "#comment":"interpolators generated by prototype script appear here at runtime"
                          }
                        ]
                      }
                    },
                    { "Group":
                      {
                        "@DEF":"ResetInterpolatorGroup",
                        "-children":[
                          {
                            "#comment":"interpolators generated by prototype script appear here at runtime"
                          }
                        ]
                      }
                    },
                    { "Script":
                      {
                        "@DEF":"HAnimPoseScript",
                        "@directOutput":true,
                        "@url":["HAnimPosePrototypeScript.js","https://www.web3d.org/x3d/content/examples/HumanoidAnimation/Poses/HAnimPosePrototypeScript.js"],
                        "field": [
                          {
                            "@name":"parentHAnimHumanoid",
                            "@accessType":"inputOutput",
                            "@appinfo":"Humanoid for this Pose to act upon",
                            "@type":"SFNode",
                            "-children":[
                              {
                                "#comment":"initialization node (if any) goes here"
                              }
                            ]
                          },
                          {
                            "@name":"name",
                            "@accessType":"inputOutput",
                            "@appinfo":"name of this pose",
                            "@type":"SFString"
                          },
                          {
                            "@name":"loa",
                            "@accessType":"initializeOnly",
                            "@appinfo":"default is no loa",
                            "@type":"SFInt32"
                          },
                          {
                            "@name":"description",
                            "@accessType":"inputOutput",
                            "@appinfo":"explanation of purpose",
                            "@type":"SFString"
                          },
                          {
                            "@name":"enabled",
                            "@accessType":"inputOutput",
                            "@appinfo":"default value true",
                            "@type":"SFBool"
                          },
                          {
                            "@name":"resetAllJoints",
                            "@accessType":"inputOnly",
                            "@appinfo":"reset the skeleton to I pose with all joints zeroed",
                            "@type":"SFBool"
                          },
                          {
                            "@name":"children",
                            "@accessType":"inputOutput",
                            "@appinfo":"joint values to apply to HAnimHumanoid",
                            "@type":"MFNode",
                            "-children":[
                              {
                                "#comment":"initializating Joint nodes (if any) go here"
                              }
                            ]
                          },
                          {
                            "@name":"transitionDuration",
                            "@accessType":"inputOutput",
                            "@appinfo":"how many seconds to achieve the pose",
                            "@type":"SFTime"
                          },
                          {
                            "@name":"commencePose",
                            "@accessType":"inputOnly",
                            "@appinfo":"this event tells the HAnimPose node to fully transition, equivalent to set_fraction=1",
                            "@type":"SFBool"
                          },
                          {
                            "@name":"set_fraction",
                            "@accessType":"inputOnly",
                            "@appinfo":"allows transition to proceed incrementally from fraction [0..10",
                            "@type":"SFFloat"
                          },
                          {
                            "@name":"set_startTime",
                            "@accessType":"inputOnly",
                            "@appinfo":"starts the animation clock",
                            "@type":"SFTime"
                          },
                          {
                            "@name":"isLoaded",
                            "@accessType":"inputOnly",
                            "@appinfo":"possible notification from LoadSensor if using HAnimHumanoid Inline/IMPORT AS/USE",
                            "@type":"SFBool"
                          },
                          {
                            "@name":"traceEnabled",
                            "@accessType":"inputOutput",
                            "@appinfo":"debug trace to Browser output console",
                            "@type":"SFBool"
                          },
                          {
                            "@name":"numberPoseJoints",
                            "@accessType":"initializeOnly",
                            "@appinfo":"number of joints found in children field",
                            "@type":"SFInt32",
                            "@value":0
                          },
                          {
                            "@name":"numberSkeletonJoints",
                            "@accessType":"initializeOnly",
                            "@appinfo":"number of joints found in Humanoid",
                            "@type":"SFInt32",
                            "@value":0
                          },
                          {
                            "@name":"jointOrientationInterpolators",
                            "@accessType":"initializeOnly",
                            "@appinfo":"OrientationInterpolator node array matching number of children",
                            "@type":"MFNode",
                            "-children":[
                              {
                                "#comment":"initializating Joint nodes (if any) go here"
                              }
                            ]
                          }
                        ],
                        "IS": {
                            "connect": [
                              {
                                "@nodeField":"parentHAnimHumanoid",
                                "@protoField":"parentHAnimHumanoid"
                              },
                              {
                                "@nodeField":"name",
                                "@protoField":"name"
                              },
                              {
                                "@nodeField":"loa",
                                "@protoField":"loa"
                              },
                              {
                                "@nodeField":"description",
                                "@protoField":"description"
                              },
                              {
                                "@nodeField":"enabled",
                                "@protoField":"enabled"
                              },
                              {
                                "@nodeField":"resetAllJoints",
                                "@protoField":"resetAllJoints"
                              },
                              {
                                "@nodeField":"children",
                                "@protoField":"children"
                              },
                              {
                                "@nodeField":"transitionDuration",
                                "@protoField":"transitionDuration"
                              },
                              {
                                "@nodeField":"commencePose",
                                "@protoField":"commencePose"
                              },
                              {
                                "@nodeField":"set_fraction",
                                "@protoField":"set_fraction"
                              },
                              {
                                "@nodeField":"set_startTime",
                                "@protoField":"set_startTime"
                              },
                              {
                                "@nodeField":"isLoaded",
                                "@protoField":"isLoaded"
                              },
                              {
                                "@nodeField":"traceEnabled",
                                "@protoField":"traceEnabled"
                              }
                            ]
                        }
                      }
                    }
                  ]
              }
            }
          },
          { "Viewpoint":
            {
              "@description":"HAnimPose for HumanoidInline IMPORT model",
              "@position":[0,1,4]
            }
          },
          {
            "#comment":"no longer required: including full model <HAnimHumanoid DEF='hanim_JinLOA1' loa='2' name='JinLOA1' scale='0.0225 0.0225 0.0225'> etc..."
          },
          { "ProtoInstance":
            {
              "@name":"HAnimPose",
              "@DEF":"T_Pose",
              "fieldValue": [
                {
                  "@name":"name",
                  "@value":"T"
                },
                {
                  "@name":"enabled",
                  "@value":true
                },
                {
                  "@name":"parentHAnimHumanoid",
                  "-children":[
                    {
                      "#comment":"HumanoidImported for Inline/IMPORT (or else USE='hanim_JinLOA1' if copy of original HAnimHumanoid is embedded in this model)"
                    },
                    {
                      "#comment":"debug test case for incorrect node type: <HAnimJoint DEF=\"ErrorDiagnosticsTest\" USE='HumanoidImported'/>"
                    },
                    { "HAnimHumanoid":
                      {
                        "@USE":"HumanoidImported"
                      }
                    }
                  ]
                },
                {
                  "@name":"loa",
                  "@value":1
                },
                {
                  "@name":"description",
                  "@value":"arms stretched outward and level similar to letter T"
                },
                {
                  "@name":"children",
                  "-children":[
                    { "HAnimJoint":
                      {
                        "@name":"l_shoulder",
                        "@DEF":"PoseJoint_l_shoulder_1",
                        "@description":"left shoulder",
                        "@rotation":[0,0,1,1.57]
                      }
                    },
                    { "HAnimJoint":
                      {
                        "@name":"r_shoulder",
                        "@DEF":"PoseJoint_r_shoulder_1",
                        "@description":"right shoulder",
                        "@rotation":[0,0,-1,1.57]
                      }
                    },
                    {
                      "#comment":"test case for illegal child triggers validation reports without problem: HAnimSegment DEF='TestCase' description='confirm type checking' name='specialTestCase'/"
                    }
                  ]
                },
                {
                  "@name":"transitionDuration",
                  "@value":1.3
                }
              ]
            }
          },
          { "ProtoInstance":
            {
              "@name":"HAnimPose",
              "@DEF":"A_Pose",
              "fieldValue": [
                {
                  "@name":"name",
                  "@value":"A"
                },
                {
                  "@name":"enabled",
                  "@value":true
                },
                {
                  "@name":"parentHAnimHumanoid",
                  "-children":[
                    {
                      "#comment":"HumanoidImported for Inline/IMPORT (or else USE='hanim_JinLOA1' if copy of original HAnimHumanoid is embedded in this model)"
                    },
                    { "HAnimHumanoid":
                      {
                        "@USE":"HumanoidImported"
                      }
                    }
                  ]
                },
                {
                  "@name":"loa",
                  "@value":1
                },
                {
                  "@name":"description",
                  "@value":"arms stretched outward and downward similar to letter A"
                },
                {
                  "@name":"children",
                  "-children":[
                    { "HAnimJoint":
                      {
                        "@name":"l_shoulder",
                        "@DEF":"PoseJoint_l_shoulder",
                        "@description":"left shoulder",
                        "@rotation":[0,0,1,0.5]
                      }
                    },
                    { "HAnimJoint":
                      {
                        "@name":"r_shoulder",
                        "@DEF":"PoseJoint_r_shoulder",
                        "@description":"right shoulder",
                        "@rotation":[0,0,-1,0.5]
                      }
                    }
                  ]
                },
                {
                  "@name":"transitionDuration",
                  "@value":1.2
                },
                {
                  "@name":"traceEnabled",
                  "@value":true
                }
              ]
            }
          },
          { "ProtoInstance":
            {
              "@name":"HAnimPose",
              "@DEF":"TouchDown_Pose",
              "-children":[
                {
                  "#comment":"thanks Joe"
                }
              ],
              "fieldValue": [
                {
                  "@name":"name",
                  "@value":"TouchDown"
                },
                {
                  "@name":"enabled",
                  "@value":true
                },
                {
                  "@name":"parentHAnimHumanoid",
                  "-children":[
                    {
                      "#comment":"HumanoidImported for Inline/IMPORT (or else USE='hanim_JinLOA1' if copy of original HAnimHumanoid is embedded in this model)"
                    },
                    { "HAnimHumanoid":
                      {
                        "@USE":"HumanoidImported"
                      }
                    }
                  ]
                },
                {
                  "@name":"loa",
                  "@value":1
                },
                {
                  "@name":"description",
                  "@value":"arms and legs stretched outward providing a TouchDown gesture"
                },
                {
                  "@name":"children",
                  "-children":[
                    { "HAnimJoint":
                      {
                        "@name":"humanoid_root",
                        "@rotation":[0,1,0,-0.698132]
                      }
                    },
                    { "HAnimJoint":
                      {
                        "@name":"l_hip",
                        "@rotation":[-1,1,1,1]
                      }
                    },
                    { "HAnimJoint":
                      {
                        "@name":"l_knee",
                        "@rotation":[1,0,0,1]
                      }
                    },
                    { "HAnimJoint":
                      {
                        "@name":"l_talocrural",
                        "@rotation":[-0.2,-0,0.1,0.225]
                      }
                    },
                    { "HAnimJoint":
                      {
                        "@name":"r_hip",
                        "@rotation":[-1,-1,-1,1]
                      }
                    },
                    { "HAnimJoint":
                      {
                        "@name":"r_knee",
                        "@rotation":[1,0,0,1]
                      }
                    },
                    { "HAnimJoint":
                      {
                        "@name":"r_talocrural",
                        "@rotation":[-0.2,0,0.1,0.25]
                      }
                    },
                    { "HAnimJoint":
                      {
                        "@name":"vl5",
                        "@rotation":[0,0,0.01,0.2]
                      }
                    },
                    { "HAnimJoint":
                      {
                        "@name":"vt10",
                        "@rotation":[0,0,0.01,0.1]
                      }
                    },
                    { "HAnimJoint":
                      {
                        "@name":"vc4",
                        "@rotation":[0,0,-0.01,0.15]
                      }
                    },
                    { "HAnimJoint":
                      {
                        "@name":"l_shoulder",
                        "@rotation":[-1,0.5,1,2]
                      }
                    },
                    { "HAnimJoint":
                      {
                        "@name":"l_elbow",
                        "@rotation":[-1,0,0,1]
                      }
                    },
                    { "HAnimJoint":
                      {
                        "@name":"l_radiocarpal"
                      }
                    },
                    { "HAnimJoint":
                      {
                        "@name":"r_shoulder",
                        "@rotation":[-1,-0.5,-1,2.6]
                      }
                    },
                    { "HAnimJoint":
                      {
                        "@name":"r_elbow",
                        "@rotation":[-1,0,0,1]
                      }
                    },
                    { "HAnimJoint":
                      {
                        "@name":"r_radiocarpal"
                      }
                    }
                  ]
                },
                {
                  "@name":"transitionDuration",
                  "@value":1.2
                },
                {
                  "@name":"traceEnabled",
                  "@value":true
                }
              ]
            }
          },
          { "ProtoInstance":
            {
              "@name":"HAnimPose",
              "@DEF":"I_Pose",
              "fieldValue": [
                {
                  "@name":"name",
                  "@value":"I"
                },
                {
                  "@name":"enabled",
                  "@value":true
                },
                {
                  "@name":"parentHAnimHumanoid",
                  "-children":[
                    {
                      "#comment":"HumanoidImported for Inline/IMPORT (or else USE='hanim_JinLOA1' if copy of original HAnimHumanoid is embedded in this model)"
                    },
                    { "HAnimHumanoid":
                      {
                        "@USE":"HumanoidImported"
                      }
                    }
                  ]
                },
                {
                  "@name":"loa",
                  "@value":1
                },
                {
                  "@name":"description",
                  "@value":"arms and legs straight down default binding pose for baseline Humanoid"
                },
                {
                  "@name":"children",
                  "-children":[
                    {
                      "#comment":"not defining any children equals the default \"I\" pose"
                    }
                  ]
                },
                {
                  "@name":"transitionDuration",
                  "@value":1.5
                },
                {
                  "@name":"traceEnabled",
                  "@value":true
                }
              ]
            }
          },
          { "ProtoInstance":
            {
              "@name":"HAnimPose",
              "@DEF":"H_Pose",
              "fieldValue": [
                {
                  "@name":"name",
                  "@value":"H"
                },
                {
                  "@name":"enabled",
                  "@value":false
                },
                {
                  "@name":"description",
                  "@value":"TODO experimental pose not yet implemented"
                },
                {
                  "@name":"transitionDuration",
                  "@value":1.4
                },
                {
                  "@name":"traceEnabled",
                  "@value":true
                }
              ],
              "-children":[
                {
                  "#comment":"<fieldValue name='loa' value='1'/>"
                }
              ]
            }
          },
          { "ProtoInstance":
            {
              "@name":"HAnimPose",
              "@DEF":"FaceLeft_Pose",
              "fieldValue": [
                {
                  "@name":"name",
                  "@value":"FaceLeft"
                },
                {
                  "@name":"enabled",
                  "@value":true
                },
                {
                  "@name":"parentHAnimHumanoid",
                  "-children":[
                    {
                      "#comment":"HumanoidImported for Inline/IMPORT (or else USE='hanim_JinLOA1' if copy of original HAnimHumanoid is embedded in this model)"
                    },
                    { "HAnimHumanoid":
                      {
                        "@USE":"HumanoidImported"
                      }
                    }
                  ]
                },
                {
                  "@name":"loa",
                  "@value":0
                },
                {
                  "@name":"description",
                  "@value":"Only modify humanoid_root Joint node to face left"
                },
                {
                  "@name":"children",
                  "-children":[
                    { "HAnimJoint":
                      {
                        "@name":"humanoid_root",
                        "@DEF":"FaceLeft_humanoid_root",
                        "@description":"Only rotate the model",
                        "@rotation":[0,1,0,1.570796]
                      }
                    }
                  ]
                },
                {
                  "@name":"transitionDuration",
                  "@value":1.1
                },
                {
                  "@name":"traceEnabled",
                  "@value":true
                }
              ]
            }
          },
          { "ProtoInstance":
            {
              "@name":"HAnimPose",
              "@DEF":"FaceRight_Pose",
              "fieldValue": [
                {
                  "@name":"name",
                  "@value":"FaceRight"
                },
                {
                  "@name":"enabled",
                  "@value":true
                },
                {
                  "@name":"parentHAnimHumanoid",
                  "-children":[
                    {
                      "#comment":"HumanoidImported for Inline/IMPORT (or else USE='hanim_JinLOA1' if copy of original HAnimHumanoid is embedded in this model)"
                    },
                    { "HAnimHumanoid":
                      {
                        "@USE":"HumanoidImported"
                      }
                    }
                  ]
                },
                {
                  "@name":"loa",
                  "@value":0
                },
                {
                  "@name":"description",
                  "@value":"Only modify humanoid_root Joint node to face right"
                },
                {
                  "@name":"children",
                  "-children":[
                    { "HAnimJoint":
                      {
                        "@name":"humanoid_root",
                        "@DEF":"FaceRight_humanoid_root",
                        "@description":"Only rotate the model",
                        "@rotation":[0,1,0,-1.570796]
                      }
                    }
                  ]
                },
                {
                  "@name":"transitionDuration",
                  "@value":1.1
                },
                {
                  "@name":"traceEnabled",
                  "@value":true
                }
              ]
            }
          },
          { "Group":
            {
              "@DEF":"InterfaceButtonsGroup",
              "-children":[
                { "Transform":
                  {
                    "@DEF":"DisplayHeader",
                    "@translation":[0,2,0],
                    "-children":[
                      { "Shape":
                        {
                          "-geometry":
                            { "Text":
                              {
                                "@string":["HAnimPosePrototype example implementation"],
                                "-fontStyle":
                                  { "FontStyle":
                                    {
                                      "@DEF":"HeaderFont",
                                      "@family":["SANS"],
                                      "@justify":["MIDDLE","MIDDLE"],
                                      "@size":0.15,
                                      "@style":"BOLD"
                                    }
                                  }
                              }
                            },
                          "-appearance":
                            { "Appearance":
                              {
                                "@DEF":"PoseTextAppearance",
                                "-material":
                                  { "Material":
                                    {
                                      "@diffuseColor":[0.1,0.5,0.3]
                                    }
                                  }
                              }
                            }
                        }
                      }
                    ]
                  }
                },
                { "Transform":
                  {
                    "@DEF":"T_PoseInterface",
                    "@translation":[-1.5,1.5,0],
                    "-children":[
                      { "Shape":
                        {
                          "-geometry":
                            { "Text":
                              {
                                "@string":["\"T\" Pose"],
                                "-fontStyle":
                                  { "FontStyle":
                                    {
                                      "@DEF":"SharedFont",
                                      "@family":["SANS"],
                                      "@justify":["MIDDLE","MIDDLE"],
                                      "@size":0.1,
                                      "@style":"BOLD"
                                    }
                                  }
                              }
                            },
                          "-appearance":
                            { "Appearance":
                              {
                                "@USE":"PoseTextAppearance"
                              }
                            }
                        }
                      },
                      { "Shape":
                        {
                          "-appearance":
                            { "Appearance":
                              {
                                "@DEF":"TransparentAppearance",
                                "-material":
                                  { "Material":
                                    {
                                      "@transparency":0.8
                                    }
                                  }
                              }
                            },
                          "-geometry":
                            { "Box":
                              {
                                "@size":[0.45,0.2,0.001]
                              }
                            }
                        }
                      },
                      { "TouchSensor":
                        {
                          "@DEF":"T_PoseTouchSensor",
                          "@description":"select to move shoulders to \"T\" pose, leave other joints unchanged"
                        }
                      },
                      { "ROUTE":
                        {
                          "@fromField":"isActive",
                          "@fromNode":"T_PoseTouchSensor",
                          "@toField":"commencePose",
                          "@toNode":"T_Pose"
                        }
                      }
                    ]
                  }
                },
                { "Transform":
                  {
                    "@DEF":"A_PoseInterface",
                    "@translation":[-1.5,1,0],
                    "-children":[
                      { "Shape":
                        {
                          "-geometry":
                            { "Text":
                              {
                                "@string":["\"A\" Pose"],
                                "-fontStyle":
                                  { "FontStyle":
                                    {
                                      "@USE":"SharedFont"
                                    }
                                  }
                              }
                            },
                          "-appearance":
                            { "Appearance":
                              {
                                "@USE":"PoseTextAppearance"
                              }
                            }
                        }
                      },
                      { "Shape":
                        {
                          "-children":[
                            {
                              "#comment":"Selectable Text transparent Box for easy user selection"
                            }
                          ],
                          "-appearance":
                            { "Appearance":
                              {
                                "@USE":"TransparentAppearance"
                              }
                            },
                          "-geometry":
                            { "Box":
                              {
                                "@size":[0.45,0.2,0.001]
                              }
                            }
                        }
                      },
                      { "TouchSensor":
                        {
                          "@DEF":"A_PoseTouchSensor",
                          "@description":"select to move shoulders to \"A\" pose, leave other joints unchanged"
                        }
                      },
                      { "ROUTE":
                        {
                          "@fromField":"isActive",
                          "@fromNode":"A_PoseTouchSensor",
                          "@toField":"commencePose",
                          "@toNode":"A_Pose"
                        }
                      }
                    ]
                  }
                },
                { "Transform":
                  {
                    "@DEF":"TouchDown_PoseInterface",
                    "@translation":[-1.5,0.5,0],
                    "-children":[
                      { "Shape":
                        {
                          "-geometry":
                            { "Text":
                              {
                                "@string":["TouchDown Pose"],
                                "-fontStyle":
                                  { "FontStyle":
                                    {
                                      "@USE":"SharedFont"
                                    }
                                  }
                              }
                            },
                          "-appearance":
                            { "Appearance":
                              {
                                "@USE":"PoseTextAppearance"
                              }
                            }
                        }
                      },
                      { "Shape":
                        {
                          "-children":[
                            {
                              "#comment":"Selectable Text transparent Box for easy user selection"
                            }
                          ],
                          "-appearance":
                            { "Appearance":
                              {
                                "@USE":"TransparentAppearance"
                              }
                            },
                          "-geometry":
                            { "Box":
                              {
                                "@size":[0.85,0.2,0.001]
                              }
                            }
                        }
                      },
                      { "TouchSensor":
                        {
                          "@DEF":"TouchDown_PoseTouchSensor",
                          "@description":"select to transition all joints to TouchDown pose"
                        }
                      },
                      { "ROUTE":
                        {
                          "@fromField":"isActive",
                          "@fromNode":"TouchDown_PoseTouchSensor",
                          "@toField":"commencePose",
                          "@toNode":"TouchDown_Pose"
                        }
                      }
                    ]
                  }
                },
                { "Transform":
                  {
                    "@DEF":"I_PoseInterface",
                    "@translation":[-1.5,0.0,0],
                    "-children":[
                      { "Shape":
                        {
                          "-geometry":
                            { "Text":
                              {
                                "@string":["\"I\" Pose"],
                                "-fontStyle":
                                  { "FontStyle":
                                    {
                                      "@USE":"SharedFont"
                                    }
                                  }
                              }
                            },
                          "-appearance":
                            { "Appearance":
                              {
                                "@USE":"PoseTextAppearance"
                              }
                            }
                        }
                      },
                      { "Shape":
                        {
                          "-children":[
                            {
                              "#comment":"Selectable Text transparent Box for easy user selection"
                            }
                          ],
                          "-appearance":
                            { "Appearance":
                              {
                                "@USE":"TransparentAppearance"
                              }
                            },
                          "-geometry":
                            { "Box":
                              {
                                "@size":[0.45,0.2,0.001]
                              }
                            }
                        }
                      },
                      { "TouchSensor":
                        {
                          "@DEF":"I_PoseTouchSensor",
                          "@description":"select to transition all joints to \"I\" pose"
                        }
                      },
                      { "ROUTE":
                        {
                          "@fromField":"isActive",
                          "@fromNode":"I_PoseTouchSensor",
                          "@toField":"commencePose",
                          "@toNode":"I_Pose"
                        }
                      }
                    ]
                  }
                },
                { "Transform":
                  {
                    "@DEF":"FaceLeftPoseInterface",
                    "@translation":[1.5,1.5,0],
                    "-children":[
                      { "Shape":
                        {
                          "-geometry":
                            { "Text":
                              {
                                "@string":["Face Left Pose"],
                                "-fontStyle":
                                  { "FontStyle":
                                    {
                                      "@USE":"SharedFont"
                                    }
                                  }
                              }
                            },
                          "-appearance":
                            { "Appearance":
                              {
                                "@USE":"PoseTextAppearance"
                              }
                            }
                        }
                      },
                      { "Shape":
                        {
                          "-appearance":
                            { "Appearance":
                              {
                                "@USE":"TransparentAppearance"
                              }
                            },
                          "-geometry":
                            { "Box":
                              {
                                "@size":[0.9,0.2,0.001]
                              }
                            }
                        }
                      },
                      { "TouchSensor":
                        {
                          "@DEF":"FaceLeftTouchSensor",
                          "@description":"select to rotate body and Face Left, leave other joints unchanged"
                        }
                      },
                      { "ROUTE":
                        {
                          "@fromField":"isActive",
                          "@fromNode":"FaceLeftTouchSensor",
                          "@toField":"commencePose",
                          "@toNode":"FaceLeft_Pose"
                        }
                      }
                    ]
                  }
                },
                { "Transform":
                  {
                    "@DEF":"FaceRightPoseInterface",
                    "@translation":[1.5,1,0],
                    "-children":[
                      { "Shape":
                        {
                          "-geometry":
                            { "Text":
                              {
                                "@string":["Face Right Pose"],
                                "-fontStyle":
                                  { "FontStyle":
                                    {
                                      "@USE":"SharedFont"
                                    }
                                  }
                              }
                            },
                          "-appearance":
                            { "Appearance":
                              {
                                "@USE":"PoseTextAppearance"
                              }
                            }
                        }
                      },
                      { "Shape":
                        {
                          "-children":[
                            {
                              "#comment":"Selectable Text transparent Box for easy user selection"
                            }
                          ],
                          "-appearance":
                            { "Appearance":
                              {
                                "@USE":"TransparentAppearance"
                              }
                            },
                          "-geometry":
                            { "Box":
                              {
                                "@size":[0.9,0.2,0.001]
                              }
                            }
                        }
                      },
                      { "TouchSensor":
                        {
                          "@DEF":"FaceRightTouchSensor",
                          "@description":"select to rotate body and Face Right, leave other joints unchanged"
                        }
                      },
                      { "ROUTE":
                        {
                          "@fromField":"isActive",
                          "@fromNode":"FaceRightTouchSensor",
                          "@toField":"commencePose",
                          "@toNode":"FaceRight_Pose"
                        }
                      }
                    ]
                  }
                },
                { "Transform":
                  {
                    "@DEF":"AnimatePosesInterface",
                    "@translation":[1.5,0.5,0],
                    "-children":[
                      { "Shape":
                        {
                          "-geometry":
                            { "Text":
                              {
                                "@string":["Direct animation","to, from \"I\" Pose"],
                                "-fontStyle":
                                  { "FontStyle":
                                    {
                                      "@USE":"SharedFont"
                                    }
                                  }
                              }
                            },
                          "-appearance":
                            { "Appearance":
                              {
                                "@DEF":"AnimationTextAppearance",
                                "-material":
                                  { "Material":
                                    {
                                      "@diffuseColor":[0.1,0.2,0.3]
                                    }
                                  }
                              }
                            }
                        }
                      },
                      { "Shape":
                        {
                          "-children":[
                            {
                              "#comment":"Selectable Text transparent Box for easy user selection"
                            }
                          ],
                          "-appearance":
                            { "Appearance":
                              {
                                "@USE":"TransparentAppearance"
                              }
                            },
                          "-geometry":
                            { "Box":
                              {
                                "@size":[0.9,0.25,0.001]
                              }
                            }
                        }
                      },
                      { "TouchSensor":
                        {
                          "@DEF":"AnimatePosesTouchSensor",
                          "@description":"select to animate current pose to \"I\" pose, then back to original pose, using TimeSensor events"
                        }
                      },
                      {
                        "#comment":"cycleInterval=4 also hard-coded in script execution message"
                      },
                      { "TimeSensor":
                        {
                          "@DEF":"AnimatePosesClock",
                          "@cycleInterval":4,
                          "@description":"directly animate several poses"
                        }
                      },
                      { "ScalarInterpolator":
                        {
                          "@DEF":"AnimatePosesLoopInterpolator",
                          "@key":[0,0.05,0.45,0.55,0.95,1],
                          "@keyValue":[0,0,1,1,0,0]
                        }
                      },
                      { "ROUTE":
                        {
                          "@fromField":"touchTime",
                          "@fromNode":"AnimatePosesTouchSensor",
                          "@toField":"startTime",
                          "@toNode":"AnimatePosesClock"
                        }
                      },
                      { "ROUTE":
                        {
                          "@fromField":"fraction_changed",
                          "@fromNode":"AnimatePosesClock",
                          "@toField":"set_fraction",
                          "@toNode":"AnimatePosesLoopInterpolator"
                        }
                      },
                      { "ROUTE":
                        {
                          "@fromField":"value_changed",
                          "@fromNode":"AnimatePosesLoopInterpolator",
                          "@toField":"set_fraction",
                          "@toNode":"I_Pose"
                        }
                      }
                    ]
                  }
                },
                { "Transform":
                  {
                    "@DEF":"ResetDefaultPoseInterface",
                    "@translation":[1.5,0.0,0],
                    "-children":[
                      { "Shape":
                        {
                          "-geometry":
                            { "Text":
                              {
                                "@string":["Reset All Joints","to Default \"I\" Pose"],
                                "-fontStyle":
                                  { "FontStyle":
                                    {
                                      "@USE":"SharedFont"
                                    }
                                  }
                              }
                            },
                          "-appearance":
                            { "Appearance":
                              {
                                "@USE":"AnimationTextAppearance"
                              }
                            }
                        }
                      },
                      { "Shape":
                        {
                          "-children":[
                            {
                              "#comment":"Selectable Text transparent Box for easy user selection"
                            }
                          ],
                          "-appearance":
                            { "Appearance":
                              {
                                "@USE":"TransparentAppearance"
                              }
                            },
                          "-geometry":
                            { "Box":
                              {
                                "@size":[0.9,0.25,0.001]
                              }
                            }
                        }
                      },
                      { "TouchSensor":
                        {
                          "@DEF":"ResetPoseTouchSensor",
                          "@description":"select to immediately Rezero All Joints (to default \"I\" Pose) by sending resetAllJoints event"
                        }
                      },
                      { "ROUTE":
                        {
                          "@fromField":"isActive",
                          "@fromNode":"ResetPoseTouchSensor",
                          "@toField":"resetAllJoints",
                          "@toNode":"FaceLeft_Pose"
                        }
                      }
                    ]
                  }
                }
              ]
            }
          },
          { "Group":
            {
              "@DEF":"HandleInlineLoadsensorRouting",
              "-children":[
                { "ROUTE":
                  {
                    "@fromField":"isLoaded",
                    "@fromNode":"HumanoidInlineLoadSensor",
                    "@toField":"isLoaded",
                    "@toNode":"A_Pose"
                  }
                },
                { "ROUTE":
                  {
                    "@fromField":"isLoaded",
                    "@fromNode":"HumanoidInlineLoadSensor",
                    "@toField":"isLoaded",
                    "@toNode":"H_Pose"
                  }
                },
                { "ROUTE":
                  {
                    "@fromField":"isLoaded",
                    "@fromNode":"HumanoidInlineLoadSensor",
                    "@toField":"isLoaded",
                    "@toNode":"I_Pose"
                  }
                },
                { "ROUTE":
                  {
                    "@fromField":"isLoaded",
                    "@fromNode":"HumanoidInlineLoadSensor",
                    "@toField":"isLoaded",
                    "@toNode":"T_Pose"
                  }
                },
                { "ROUTE":
                  {
                    "@fromField":"isLoaded",
                    "@fromNode":"HumanoidInlineLoadSensor",
                    "@toField":"isLoaded",
                    "@toNode":"FaceLeft_Pose"
                  }
                },
                { "ROUTE":
                  {
                    "@fromField":"isLoaded",
                    "@fromNode":"HumanoidInlineLoadSensor",
                    "@toField":"isLoaded",
                    "@toNode":"FaceRight_Pose"
                  }
                },
                { "ROUTE":
                  {
                    "@fromField":"isLoaded",
                    "@fromNode":"HumanoidInlineLoadSensor",
                    "@toField":"isLoaded",
                    "@toNode":"TouchDown_Pose"
                  }
                }
              ]
            }
          }
        ]
    }
  }
}