X3D Model Documentation: HAnimPoseExample.x3d

  1  <?xml version="1.0" encoding="UTF-8"?>
  2  <!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.3//EN" "https://www.web3d.org/specifications/x3d-3.3.dtd">
  3  <X3D profile='Full' version='4.1 xmlns:xsd='http://www.w3.org/2001/XMLSchema-instance' xsd:noNamespaceSchemaLocation='https://www.web3d.org/specifications/x3d-4.1.xsd'>
  4       <head>
  5            <meta name='titlecontent=' HAnimPoseExample.x3d '/>
  6            <meta name='descriptioncontent='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.'/>
  7            <meta name='infocontent='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).'/>
  8            <meta name='createdcontent='11 December 2025'/>
  9            <meta name='modifiedcontent='14 December 2025'/>
 10            <meta name='creatorcontent='Don Brutzman'/>
 11            <meta name='creatorcontent='Joe Williams'/>
 12            <meta name='contributorcontent='Holger Seelig for X_ITE, Sunrize on Windows, scripting guidance, and Inline IMPORT functionality as node-reference equivalent to USE'/>
 13            <meta name='Imagecontent='HAnimPoseExampleTouchDown.png'/>
 14            <meta name='Imagecontent='HAnimPoseExampleTouchDownFaceLeftAPose.png'/>
 15            <meta name=' warning content=' under development for X3D 4.1 '/>
 16            <meta name='specificationSectioncontent='HAnim Architecture volume 1 version 2.1 draft, clause 6 Object interfaces, section 6.4 Pose'/>
 17            <meta name='specificationUrlcontent='https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19774/ISO-IEC19774-1/ISO-IEC19774-1v2.1/ISO-IEC19774-1v2.1-WD/Architecture/ObjectInterfaces.html#Pose'/>
 18            <meta name='specificationSectioncontent='HAnim Architecture volume 1 version 2.1 draft, clause 4 Concepts, section 4.8.2 Modelling of human-like HAnim figures'/>
 19            <meta name='specificationUrlcontent='https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19774/ISO-IEC19774-1/ISO-IEC19774-1v2.1/ISO-IEC19774-1v2.1-WD/Architecture/concepts.html#ModellingHumanLikeHAnimFigures'/>
 20            <meta name='specificationSectioncontent='HAnim Architecture volume 1 version 2.1 draft, clause 4 Concepts, section 4.8.3 Poses'/>
 21            <meta name='specificationUrlcontent='https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19774/ISO-IEC19774-1/ISO-IEC19774-1v2.1/ISO-IEC19774-1v2.1-WD/Architecture/concepts.html#Poses'/>
 22            <meta name='referencecontent='Direct scene manipulations with Javascript, https://doc.instantreality.org/tutorial/direct-scene-manipulations-with-javascript'/>
 23            <meta name='referencecontent=' earlier version of this prototype: originals/HAnimPosePreliminary.x3d '/>
 24            <meta name='generatorcontent='X3D-Edit 4.0, https://www.web3d.org/x3d/tools/X3D-Edit'/>
 25            <meta name='generatorcontent='Sunrize X3D Editor V1.11.1, https://create3000.github.io/sunrize'/>
 26            <meta name='identifiercontent=' https://www.web3d.org/x3d/content/examples/HumanoidAnimation/Poses/HAnimPoseExample.x3d '/>
 27            <meta name='licensecontent=' https://www.web3d.org/x3d/content/examples/license.html '/>
 28       </head>
<!--

<!--
Event Graph ROUTE Table shows event connections.
-->
<!-- to top DEF nodes index: A_Pose, A_PoseInterface, A_PoseTouchSensor, AnimatePosesClock, AnimatePosesInterface, AnimatePosesLoopInterpolator, AnimatePosesTouchSensor, AnimationTextAppearance, DisplayHeader, FaceLeft_humanoid_root, FaceLeft_Pose, FaceLeftPoseInterface, FaceLeftTouchSensor, FaceRight_humanoid_root, FaceRight_Pose, FaceRightPoseInterface, FaceRightTouchSensor, H_Pose, HandleInlineLoading, HandleInlineLoadsensorRouting, HeaderFont, HumanoidInline, HumanoidInlineLoadSensor, I_Pose, I_PoseInterface, I_PoseTouchSensor, InterfaceButtonsGroup, ModelInfo, PoseJoint_l_shoulder, PoseJoint_l_shoulder_1, PoseJoint_r_shoulder, PoseJoint_r_shoulder_1, PoseTextAppearance, ResetDefaultPoseInterface, ResetPoseTouchSensor, SharedFont, T_Pose, T_PoseInterface, T_PoseTouchSensor, TouchDown_Pose, TouchDown_PoseInterface, TouchDown_PoseTouchSensor, TransparentAppearance

Index for IMPORT statement: IMPORT_JoeSkeletonSkinSite

Index for Viewpoint node: Viewpoint_1
-->
 29       <Scene>
 30            <WorldInfo DEF='ModelInfoinfo='"Example scene for HAnimPose node"title='HAnimPoseExample.x3d'/>
 31            <Background skyColor='0.8 0.8 1'/>
 32            <NavigationInfo/>
 33            <Group DEF='HandleInlineLoading'>
 34                 <!-- Multiple HAnimHumanoid Inline/IMPORT models are available to support testing: Characters/ JinLOA1 JinLOA2 JinLOA3 JinLOA4 ../Skin/JoeKick ../Skin/JoeSkeletonSkinSite ../Skin/BoxMan1 ../Skin/BoxMan2 -->
 35                 <!-- Also tested satisfactorily: KoreanCharacter01Jin KoreanCharacter02Chul KoreanCharacter03Hyun KoreanCharacter04Young KoreanCharacter05Ju KoreanCharacter06Ga KoreanCharacter07No KoreanCharacter08Da KoreanCharacter09Ru KoreanCharacter10Mi KoreanCharacter11Min KoreanCharacter12Sun -->
 36 
               <!-- Inline HumanoidInline is a DEF node that has 1 USE node: USE_1<!-- This Inline node has a corresponding IMPORT_JoeSkeletonSkinSite statement that can expose an EXPORT node in the loaded model. -->
               <Inline DEF='HumanoidInlinedescription='remote HAnimHumanoid for IMPORT'   url=' "../Skin/JoeSkeletonSkinSite.x3d" "https://www.web3d.org/x3d/content/examples/HumanoidAnimation/Skin/JoeSkeletonSkinSite.x3d" '/>
 37                 <!-- Note that the following importedDEF must match the EXPORT name found in remote file -->
 38                 <IMPORT inlineDEF='HumanoidInlineimportedDEF='JoeSkeletonSkinSiteAS='HumanoidImported'/>
 39 
 40                      <Inline USE='HumanoidInline'/>
 41                 </LoadSensor>
 42            </Group>
 43            <Viewpoint description='HAnimPose for HumanoidInline IMPORT modelposition='0 1 4'/>
 44            <!-- no longer required: including full model <HAnimHumanoid DEF='hanim_JinLOA1' loa='2' name='JinLOA1' scale='0.0225 0.0225 0.0225'> etc... -->
 45 
          <!-- ROUTE information for T_Pose node:  [from T_PoseTouchSensor.isActive to commencePose ] [from HumanoidInlineLoadSensor.isLoaded to isLoaded ] [no output ROUTE found] -->
          <HAnimPose DEF='T_Posedescription='arms stretched outward and level similar to letter Tloa='1name='TtransitionDuration='1.3frameIncrement='1frameIndex='0startFrame='0endFrame='0containerField='motions'>
 46                 <!-- test case for illegal child triggers validation reports without problem: HAnimSegment DEF='TestCase' description='confirm type checking' name='specialTestCase'/ -->
 47                 <HAnimJoint DEF='PoseJoint_l_shoulder_1description='left shouldername='l_shoulderrotation='0 0 1 1.57'/>
 48                 <HAnimJoint DEF='PoseJoint_r_shoulder_1description='right shouldername='r_shoulderrotation='0 0 -1 1.57'/>
 49            </HAnimPose>
 50 
          <!-- ROUTE information for A_Pose node:  [from A_PoseTouchSensor.isActive to commencePose ] [from HumanoidInlineLoadSensor.isLoaded to isLoaded ] [no output ROUTE found] -->
          <HAnimPose DEF='A_Posedescription='arms stretched outward and downward similar to letter Aloa='1name='AtransitionDuration='1.2frameIncrement='1frameIndex='0startFrame='0endFrame='0containerField='motions'>
 51                 <HAnimJoint DEF='PoseJoint_l_shoulderdescription='left shouldername='l_shoulderrotation='0 0 1 0.5'/>
 52                 <HAnimJoint DEF='PoseJoint_r_shoulderdescription='right shouldername='r_shoulderrotation='0 0 -1 0.5'/>
 53            </HAnimPose>
 54 
          <!-- ROUTE information for TouchDown_Pose node:  [from TouchDown_PoseTouchSensor.isActive to commencePose ] [from HumanoidInlineLoadSensor.isLoaded to isLoaded ] [no output ROUTE found] -->
          <HAnimPose DEF='TouchDown_Posedescription='arms and legs stretched outward providing a TouchDown gestureloa='1name='TouchDowntransitionDuration='1.2frameIncrement='1frameIndex='0startFrame='0endFrame='0containerField='motions'>
 55                 <HAnimJoint name='humanoid_rootrotation='0 1 0 -0.698132'/>
 56                 <HAnimJoint name='l_hiprotation='-1 1 1 1'/>
 57                 <HAnimJoint name='l_kneerotation='1 0 0 1'/>
 58                 <HAnimJoint name='l_talocruralrotation='-0.2 -0 0.1 0.225'/>
 59                 <HAnimJoint name='r_hiprotation='-1 -1 -1 1'/>
 60                 <HAnimJoint name='r_kneerotation='1 0 0 1'/>
 61                 <HAnimJoint name='r_talocruralrotation='-0.2 0 0.1 0.25'/>
 62                 <HAnimJoint name='vl5rotation='0 0 0.01 0.2'/>
 63                 <HAnimJoint name='vt10rotation='0 0 0.01 0.1'/>
 64                 <HAnimJoint name='vc4rotation='0 0 -0.01 0.15'/>
 65                 <HAnimJoint name='l_shoulderrotation='-1 0.5 1 2'/>
 66                 <HAnimJoint name='l_elbowrotation='-1 0 0 1'/>
 67                 <HAnimJoint name='l_radiocarpal'/>
 68                 <HAnimJoint name='r_shoulderrotation='-1 -0.5 -1 2.6'/>
 69                 <HAnimJoint name='r_elbowrotation='-1 0 0 1'/>
 70                 <HAnimJoint name='r_radiocarpal'/>
 71            </HAnimPose>
 72 
          <!-- ROUTE information for I_Pose node:  [from I_PoseTouchSensor.isActive to commencePose ] [from AnimatePosesLoopInterpolator.value_changed to set_fraction ] [from HumanoidInlineLoadSensor.isLoaded to isLoaded ] [no output ROUTE found] -->
          <HAnimPose DEF='I_Posedescription='arms and legs straight down default binding pose for baseline Humanoidloa='1name='ItransitionDuration='1.5frameIncrement='1frameIndex='0startFrame='0endFrame='0containerField='motions'>
 73                 <!-- not defining any poseJoint HAnimJoint nodes equals the default "I" pose -->
 74            </HAnimPose>
 75 
          <!-- ROUTE information for H_Pose node:  [from HumanoidInlineLoadSensor.isLoaded to isLoaded ] [no output ROUTE found] -->
          <HAnimPose DEF='H_Posedescription='TODO experimental pose not yet implementedenabled='falsename='HtransitionDuration='1.4loa='-1frameIncrement='1frameIndex='0startFrame='0endFrame='0containerField='motions'>
 76                 <!-- TODO define poseJoint HAnimJoint nodes -->
 77            </HAnimPose>
 78 
          <!-- ROUTE information for FaceLeft_Pose node:  [from FaceLeftTouchSensor.isActive to commencePose ] [from ResetPoseTouchSensor.isActive to resetAllJoints ] [from HumanoidInlineLoadSensor.isLoaded to isLoaded ] [no output ROUTE found] -->
          <HAnimPose DEF='FaceLeft_Posedescription='Only modify humanoid_root Joint node to face leftloa='0name='FaceLefttransitionDuration='1.1frameIncrement='1frameIndex='0startFrame='0endFrame='0containerField='motions'>
 79                 <HAnimJoint DEF='FaceLeft_humanoid_rootdescription='Only rotate the modelname='humanoid_rootrotation='0 1 0 1.570796'/>
 80            </HAnimPose>
 81 
          <!-- ROUTE information for FaceRight_Pose node:  [from FaceRightTouchSensor.isActive to commencePose ] [from HumanoidInlineLoadSensor.isLoaded to isLoaded ] [no output ROUTE found] -->
          <HAnimPose DEF='FaceRight_Posedescription='Only modify humanoid_root Joint node to face rightloa='0name='FaceRighttransitionDuration='1.1frameIncrement='1frameIndex='0startFrame='0endFrame='0containerField='motions'>
 82                 <HAnimJoint DEF='FaceRight_humanoid_rootdescription='Only rotate the modelname='humanoid_rootrotation='0 1 0 -1.570796'/>
 83            </HAnimPose>
 84            <Group DEF='InterfaceButtonsGroup'>
 85                 <Transform DEF='DisplayHeadertranslation='0 2 0'>
 86                      <Shape>
 87                           <Text string='"HAnimPosePrototype example implementation"'>
 88                                <FontStyle DEF='HeaderFontfamily='"SANS"justify='"MIDDLE" "MIDDLE"size='0.15style='BOLD'/>
 89                           </Text>
 90 
                         <!-- Appearance PoseTextAppearance is a DEF node that has 6 USE nodes: USE_1, USE_2, USE_3, USE_4, USE_5, USE_6 -->
                         <Appearance DEF='PoseTextAppearance'>
 91                                <Material diffuseColor='0.1 0.5 0.3'/>
 92                           </Appearance>
 93                      </Shape>
 94                 </Transform>
 95                 <Transform DEF='T_PoseInterfacetranslation='-1.5 1.5 0'>
 96                      <Shape>
 97                           <Text string='"\"T\" Pose"'>
 98 
                              <!-- FontStyle SharedFont is a DEF node that has 7 USE nodes: USE_1, USE_2, USE_3, USE_4, USE_5, USE_6, USE_7 -->
                              <FontStyle DEF='SharedFontfamily='"SANS"justify='"MIDDLE" "MIDDLE"size='0.1style='BOLD'/>
 99                           </Text>
100                           <Appearance USE='PoseTextAppearance'/>
101                      </Shape>
102                      <Shape>
103 
                         <!-- Appearance TransparentAppearance is a DEF node that has 7 USE nodes: USE_1, USE_2, USE_3, USE_4, USE_5, USE_6, USE_7 -->
                         <Appearance DEF='TransparentAppearance'>
104                                <Material transparency='0.8'/>
105                           </Appearance>
106                           <Box size='0.45 0.2 0.001'/>
107                      </Shape>
108 
                    <!-- ROUTE information for T_PoseTouchSensor node:  [from isActive to T_Pose.commencePose ] -->
                    <TouchSensor DEF='T_PoseTouchSensordescription='select to move shoulders to "T" pose, leave other joints unchanged'/>
109                      < ROUTE  fromNode='T_PoseTouchSensor' fromField='isActive' toNode='T_Pose' toField='commencePose'/>
110                 </Transform>
111                 <Transform DEF='A_PoseInterfacetranslation='-1.5 1 0'>
112                      <Shape>
113                           <Text string='"\"A\" Pose"'>
114                                <FontStyle USE='SharedFont'/>
115                           </Text>
116                           <Appearance USE='PoseTextAppearance'/>
117                      </Shape>
118                      <Shape>
119                           <!-- Selectable Text transparent Box for easy user selection -->
120                           <Appearance USE='TransparentAppearance'/>
121                           <Box size='0.45 0.2 0.001'/>
122                      </Shape>
123 
                    <!-- ROUTE information for A_PoseTouchSensor node:  [from isActive to A_Pose.commencePose ] -->
                    <TouchSensor DEF='A_PoseTouchSensordescription='select to move shoulders to "A" pose, leave other joints unchanged'/>
124                      < ROUTE  fromNode='A_PoseTouchSensor' fromField='isActive' toNode='A_Pose' toField='commencePose'/>
125                 </Transform>
126                 <Transform DEF='TouchDown_PoseInterfacetranslation='-1.5 0.5 0'>
127                      <Shape>
128                           <Text string='"TouchDown Pose"'>
129                                <FontStyle USE='SharedFont'/>
130                           </Text>
131                           <Appearance USE='PoseTextAppearance'/>
132                      </Shape>
133                      <Shape>
134                           <!-- Selectable Text transparent Box for easy user selection -->
135                           <Appearance USE='TransparentAppearance'/>
136                           <Box size='0.85 0.2 0.001'/>
137                      </Shape>
138 
                    <!-- ROUTE information for TouchDown_PoseTouchSensor node:  [from isActive to TouchDown_Pose.commencePose ] -->
                    <TouchSensor DEF='TouchDown_PoseTouchSensordescription='select to transition all joints to TouchDown pose'/>
139                      < ROUTE  fromNode='TouchDown_PoseTouchSensor' fromField='isActive' toNode='TouchDown_Pose' toField='commencePose'/>
140                 </Transform>
141                 <Transform DEF='I_PoseInterfacetranslation='-1.5 0.0 0'>
142                      <Shape>
143                           <Text string='"\"I\" Pose"'>
144                                <FontStyle USE='SharedFont'/>
145                           </Text>
146                           <Appearance USE='PoseTextAppearance'/>
147                      </Shape>
148                      <Shape>
149                           <!-- Selectable Text transparent Box for easy user selection -->
150                           <Appearance USE='TransparentAppearance'/>
151                           <Box size='0.45 0.2 0.001'/>
152                      </Shape>
153 
                    <!-- ROUTE information for I_PoseTouchSensor node:  [from isActive to I_Pose.commencePose ] -->
                    <TouchSensor DEF='I_PoseTouchSensordescription='select to transition all joints to "I" pose'/>
154                      < ROUTE  fromNode='I_PoseTouchSensor' fromField='isActive' toNode='I_Pose' toField='commencePose'/>
155                 </Transform>
156                 <Transform DEF='FaceLeftPoseInterfacetranslation='1.5 1.5 0'>
157                      <Shape>
158                           <Text string='"Face Left Pose"'>
159                                <FontStyle USE='SharedFont'/>
160                           </Text>
161                           <Appearance USE='PoseTextAppearance'/>
162                      </Shape>
163                      <Shape>
164                           <Appearance USE='TransparentAppearance'/>
165                           <Box size='0.9 0.2 0.001'/>
166                      </Shape>
167 
                    <!-- ROUTE information for FaceLeftTouchSensor node:  [from isActive to FaceLeft_Pose.commencePose ] -->
                    <TouchSensor DEF='FaceLeftTouchSensordescription='select to rotate body and Face Left, leave other joints unchanged'/>
168                      < ROUTE  fromNode='FaceLeftTouchSensor' fromField='isActive' toNode='FaceLeft_Pose' toField='commencePose'/>
169                 </Transform>
170                 <Transform DEF='FaceRightPoseInterfacetranslation='1.5 1 0'>
171                      <Shape>
172                           <Text string='"Face Right Pose"'>
173                                <FontStyle USE='SharedFont'/>
174                           </Text>
175                           <Appearance USE='PoseTextAppearance'/>
176                      </Shape>
177                      <Shape>
178                           <!-- Selectable Text transparent Box for easy user selection -->
179                           <Appearance USE='TransparentAppearance'/>
180                           <Box size='0.9 0.2 0.001'/>
181                      </Shape>
182 
                    <!-- ROUTE information for FaceRightTouchSensor node:  [from isActive to FaceRight_Pose.commencePose ] -->
                    <TouchSensor DEF='FaceRightTouchSensordescription='select to rotate body and Face Right, leave other joints unchanged'/>
183                      < ROUTE  fromNode='FaceRightTouchSensor' fromField='isActive' toNode='FaceRight_Pose' toField='commencePose'/>
184                 </Transform>
185                 <Transform DEF='AnimatePosesInterfacetranslation='1.5 0.5 0'>
186                      <Shape>
187                           <Text string='"Direct animation" "to, from \"I\" Pose"'>
188                                <FontStyle USE='SharedFont'/>
189                           </Text>
190 
                         <!-- Appearance AnimationTextAppearance is a DEF node that has 1 USE node: USE_1 -->
                         <Appearance DEF='AnimationTextAppearance'>
191                                <Material diffuseColor='0.1 0.2 0.3'/>
192                           </Appearance>
193                      </Shape>
194                      <Shape>
195                           <!-- Selectable Text transparent Box for easy user selection -->
196                           <Appearance USE='TransparentAppearance'/>
197                           <Box size='0.9 0.25 0.001'/>
198                      </Shape>
199 
                    <!-- ROUTE information for AnimatePosesTouchSensor node:  [from touchTime to AnimatePosesClock.startTime ] -->
                    <TouchSensor DEF='AnimatePosesTouchSensordescription='select to animate current pose to "I" pose, then back to original pose, using TimeSensor events'/>
200                      <!-- cycleInterval=4 also hard-coded in script execution message -->
201 
                    <!-- ROUTE information for AnimatePosesClock node:  [from AnimatePosesTouchSensor.touchTime to startTime ] [from fraction_changed to AnimatePosesLoopInterpolator.set_fraction ] -->
                    <TimeSensor DEF='AnimatePosesClockcycleInterval='4description='directly animate several poses'/>
202 
                    <!-- ROUTE information for AnimatePosesLoopInterpolator node:  [from AnimatePosesClock.fraction_changed to set_fraction ] [from value_changed to I_Pose.set_fraction ] -->
                    <ScalarInterpolator DEF='AnimatePosesLoopInterpolatorkey='0 0.05 0.45 0.55 0.95 1keyValue='0 0 1 1 0 0'/>
203                      < ROUTE  fromNode='AnimatePosesTouchSensor' fromField='touchTime' toNode='AnimatePosesClock' toField='startTime'/>
204                      < ROUTE  fromNode='AnimatePosesClock' fromField='fraction_changed' toNode='AnimatePosesLoopInterpolator' toField='set_fraction'/>
205                      < ROUTE  fromNode='AnimatePosesLoopInterpolator' fromField='value_changed' toNode='I_Pose' toField='set_fraction'/>
206                 </Transform>
207                 <Transform DEF='ResetDefaultPoseInterfacetranslation='1.5 0.0 0'>
208                      <Shape>
209                           <Text string='"Reset All Joints" "to Default \"I\" Pose"'>
210                                <FontStyle USE='SharedFont'/>
211                           </Text>
212                           <Appearance USE='AnimationTextAppearance'/>
213                      </Shape>
214                      <Shape>
215                           <!-- Selectable Text transparent Box for easy user selection -->
216                           <Appearance USE='TransparentAppearance'/>
217                           <Box size='0.9 0.25 0.001'/>
218                      </Shape>
219 
                    <!-- ROUTE information for ResetPoseTouchSensor node:  [from isActive to FaceLeft_Pose.resetAllJoints ] -->
                    <TouchSensor DEF='ResetPoseTouchSensordescription='select to immediately Rezero All Joints (to default "I" Pose) by sending resetAllJoints event'/>
220                      < ROUTE  fromNode='ResetPoseTouchSensor' fromField='isActive' toNode='FaceLeft_Pose' toField='resetAllJoints'/>
221                 </Transform>
222            </Group>
223            <Group DEF='HandleInlineLoadsensorRouting'>
224                 < ROUTE  fromNode='HumanoidInlineLoadSensor' fromField='isLoaded' toNode='A_Pose' toField='isLoaded'/>
225                 < ROUTE  fromNode='HumanoidInlineLoadSensor' fromField='isLoaded' toNode='H_Pose' toField='isLoaded'/>
226                 < ROUTE  fromNode='HumanoidInlineLoadSensor' fromField='isLoaded' toNode='I_Pose' toField='isLoaded'/>
227                 < ROUTE  fromNode='HumanoidInlineLoadSensor' fromField='isLoaded' toNode='T_Pose' toField='isLoaded'/>
228                 < ROUTE  fromNode='HumanoidInlineLoadSensor' fromField='isLoaded' toNode='FaceLeft_Pose' toField='isLoaded'/>
229                 < ROUTE  fromNode='HumanoidInlineLoadSensor' fromField='isLoaded' toNode='FaceRight_Pose' toField='isLoaded'/>
230                 < ROUTE  fromNode='HumanoidInlineLoadSensor' fromField='isLoaded' toNode='TouchDown_Pose' toField='isLoaded'/>
231            </Group>
232       </Scene>
233  </X3D>
<!--

<!--
Event Graph ROUTE Table shows event connections.
-->
<!-- to top DEF nodes index: A_Pose, A_PoseInterface, A_PoseTouchSensor, AnimatePosesClock, AnimatePosesInterface, AnimatePosesLoopInterpolator, AnimatePosesTouchSensor, AnimationTextAppearance, DisplayHeader, FaceLeft_humanoid_root, FaceLeft_Pose, FaceLeftPoseInterface, FaceLeftTouchSensor, FaceRight_humanoid_root, FaceRight_Pose, FaceRightPoseInterface, FaceRightTouchSensor, H_Pose, HandleInlineLoading, HandleInlineLoadsensorRouting, HeaderFont, HumanoidInline, HumanoidInlineLoadSensor, I_Pose, I_PoseInterface, I_PoseTouchSensor, InterfaceButtonsGroup, ModelInfo, PoseJoint_l_shoulder, PoseJoint_l_shoulder_1, PoseJoint_r_shoulder, PoseJoint_r_shoulder_1, PoseTextAppearance, ResetDefaultPoseInterface, ResetPoseTouchSensor, SharedFont, T_Pose, T_PoseInterface, T_PoseTouchSensor, TouchDown_Pose, TouchDown_PoseInterface, TouchDown_PoseTouchSensor, TransparentAppearance

Index for IMPORT statement: IMPORT_JoeSkeletonSkinSite

Index for Viewpoint node: Viewpoint_1
-->
X3D Tooltips element index: Appearance, Background, Box, FontStyle, Group, HAnimJoint, HAnimPose, head, IMPORT, Inline, LoadSensor, Material, meta, NavigationInfo, ROUTE, ScalarInterpolator, Scene, Shape, Text, TimeSensor, TouchSensor, Transform, Viewpoint, WorldInfo, X3D, plus documentation for accessType definitions, type definitions, XML data types, and field types

Event Graph ROUTE Table entries with 17 ROUTE connections total, showing X3D event-model relationships for this scene.

Each row shows an event cascade that may occur during a single timestamp interval between frame renderings, as part of the X3D execution model.

A_PoseTouchSensor
TouchSensor
isActive
SFBool

ROUTE
event to
(1)
A_Pose
HAnimPose
commencePose
FieldTypeNotFound

AnimatePosesTouchSensor
TouchSensor
touchTime
SFTime

ROUTE
event to
(1)
AnimatePosesClock
TimeSensor
startTime
SFTime
then
 
 
 
AnimatePosesClock
TimeSensor
fraction_changed
SFFloat

ROUTE
event to
(2)
AnimatePosesLoopInterpolator
ScalarInterpolator
set_fraction
SFFloat
then
 
 
 
AnimatePosesLoopInterpolator
ScalarInterpolator
value_changed
SFFloat

ROUTE
event to
(3)
I_Pose
HAnimPose
set_fraction
SFFloat

FaceLeftTouchSensor
TouchSensor
isActive
SFBool

ROUTE
event to
(1)
FaceLeft_Pose
HAnimPose
commencePose
FieldTypeNotFound

FaceRightTouchSensor
TouchSensor
isActive
SFBool

ROUTE
event to
(1)
FaceRight_Pose
HAnimPose
commencePose
FieldTypeNotFound

I_PoseTouchSensor
TouchSensor
isActive
SFBool

ROUTE
event to
(1)
I_Pose
HAnimPose
commencePose
FieldTypeNotFound

ResetPoseTouchSensor
TouchSensor
isActive
SFBool

ROUTE
event to
(1)
FaceLeft_Pose
HAnimPose
resetAllJoints
FieldTypeNotFound

T_PoseTouchSensor
TouchSensor
isActive
SFBool

ROUTE
event to
(1)
T_Pose
HAnimPose
commencePose
FieldTypeNotFound

TouchDown_PoseTouchSensor
TouchSensor
isActive
SFBool

ROUTE
event to
(1)
TouchDown_Pose
HAnimPose
commencePose
FieldTypeNotFound

HumanoidInlineLoadSensor
LoadSensor
isLoaded
SFBool

ROUTE
event to
(1)
A_Pose
HAnimPose
isLoaded
SFBool
HumanoidInlineLoadSensor
LoadSensor
isLoaded
SFBool

ROUTE
event to
(1)
H_Pose
HAnimPose
isLoaded
SFBool
HumanoidInlineLoadSensor
LoadSensor
isLoaded
SFBool

ROUTE
event to
(1)
I_Pose
HAnimPose
isLoaded
SFBool
HumanoidInlineLoadSensor
LoadSensor
isLoaded
SFBool

ROUTE
event to
(1)
T_Pose
HAnimPose
isLoaded
SFBool
HumanoidInlineLoadSensor
LoadSensor
isLoaded
SFBool

ROUTE
event to
(1)
FaceLeft_Pose
HAnimPose
isLoaded
SFBool
HumanoidInlineLoadSensor
LoadSensor
isLoaded
SFBool

ROUTE
event to
(1)
FaceRight_Pose
HAnimPose
isLoaded
SFBool
HumanoidInlineLoadSensor
LoadSensor
isLoaded
SFBool

ROUTE
event to
(1)
TouchDown_Pose
HAnimPose
isLoaded
SFBool

HumanoidInline
Inline
description='remote HAnimHumanoid for IMPORT' 
This node can send or receive ROUTE events via DEF='HumanoidInline' or via <IMPORT AS='HumanoidImported'/> 

line 38
IMPORT
<IMPORT inlineDEF='HumanoidInline' AS='HumanoidImported'/>
matches local node <Inline DEF='HumanoidInline'/>
which can send or receive events with the Inline X3D model, if this parent X3D model
includes ROUTE statements (or USE references) to exchange events with the child Inline model. 


Additional guidance on X3D animation can be found in the 10-Step Animation Design Process and Event Tracing hint sheets. Have fun with X3D! 😀

-->
<!-- Online at
https://www.web3d.org/x3d/content/examples/HumanoidAnimation/Poses/HAnimPoseExampleIndex.html -->
<!-- Version control at
https://sourceforge.net/p/x3d/code/HEAD/tree/www.web3d.org/x3d/content/examples/HumanoidAnimation/Poses/HAnimPoseExample.x3d -->

<!-- Color-coding legend: X3D terminology <X3dNode DEF='idNamefield='value'/> matches XML terminology <XmlElement DEF='idNameattribute='value'/>
(Light-blue background: event-based behavior node or statement) (Grey background inside box: inserted documentation) (Magenta background: X3D Extensibility)
-->

to top <!-- For additional help information about X3D scenes, please see X3D Tooltips, X3D Resources, and X3D Scene Authoring Hints. -->