| 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='title' content=' HAnimPoseExample.x3d '/> |
| 6 | <meta 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.'/> |
| 7 | <meta 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).'/> |
| 8 | <meta name='created' content='11 December 2025'/> |
| 9 | <meta name='modified' content='14 December 2025'/> |
| 10 | <meta name='creator' content='Don Brutzman'/> |
| 11 | <meta name='creator' content='Joe Williams'/> |
| 12 | <meta name='contributor' content='Holger Seelig for X_ITE, Sunrize on Windows, scripting guidance, and Inline IMPORT functionality as node-reference equivalent to USE'/> |
| 13 |
<meta name='Image' content='HAnimPoseExampleTouchDown.png' />
|
| 14 |
<meta name='Image' content='HAnimPoseExampleTouchDownFaceLeftAPose.png' />
|
| 15 | <meta name=' warning ' content=' under development for X3D 4.1 '/> |
| 16 | <meta name='specificationSection' content='HAnim Architecture volume 1 version 2.1 draft, clause 6 Object interfaces, section 6.4 Pose'/> |
| 17 | <meta 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'/> |
| 18 | <meta name='specificationSection' content='HAnim Architecture volume 1 version 2.1 draft, clause 4 Concepts, section 4.8.2 Modelling of human-like HAnim figures'/> |
| 19 | <meta 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'/> |
| 20 | <meta name='specificationSection' content='HAnim Architecture volume 1 version 2.1 draft, clause 4 Concepts, section 4.8.3 Poses'/> |
| 21 | <meta 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'/> |
| 22 | <meta name='reference' content='Direct scene manipulations with Javascript, https://doc.instantreality.org/tutorial/direct-scene-manipulations-with-javascript'/> |
| 23 | <meta name='reference' content=' earlier version of this prototype: originals/HAnimPosePreliminary.x3d '/> |
| 24 | <meta name='generator' content='X3D-Edit 4.0, https://www.web3d.org/x3d/tools/X3D-Edit'/> |
| 25 | <meta name='generator' content='Sunrize X3D Editor V1.11.1, https://create3000.github.io/sunrize'/> |
| 26 | <meta name='identifier' content=' https://www.web3d.org/x3d/content/examples/HumanoidAnimation/Poses/HAnimPoseExample.x3d '/> |
| 27 | <meta name='license' content=' https://www.web3d.org/x3d/content/examples/license.html '/> |
| 28 | </head> |
| 29 | <Scene> |
| 30 | <WorldInfo DEF='ModelInfo' info='"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='HumanoidInline' description='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='HumanoidInline' importedDEF='JoeSkeletonSkinSite' AS='HumanoidImported'/> |
| 39 |
<!-- ROUTE information for HumanoidInlineLoadSensor node:
[from isLoaded to A_Pose.isLoaded
]
[from isLoaded to H_Pose.isLoaded
]
[from isLoaded to I_Pose.isLoaded
]
[from isLoaded to T_Pose.isLoaded
]
[from isLoaded to FaceLeft_Pose.isLoaded
]
[from isLoaded to FaceRight_Pose.isLoaded
]
[from isLoaded to TouchDown_Pose.isLoaded
]
-->
<LoadSensor DEF='HumanoidInlineLoadSensor' timeOut='2'> |
| 40 | <Inline USE='HumanoidInline'/> |
| 41 | </LoadSensor> |
| 42 | </Group> |
| 43 | <Viewpoint description='HAnimPose for HumanoidInline IMPORT model' position='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_Pose' description='arms stretched outward and level similar to letter T' loa='1' name='T' transitionDuration='1.3' frameIncrement='1' frameIndex='0' startFrame='0' endFrame='0' containerField='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_1' description='left shoulder' name='l_shoulder' rotation='0 0 1 1.57'/> |
| 48 | <HAnimJoint DEF='PoseJoint_r_shoulder_1' description='right shoulder' name='r_shoulder' rotation='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_Pose' description='arms stretched outward and downward similar to letter A' loa='1' name='A' transitionDuration='1.2' frameIncrement='1' frameIndex='0' startFrame='0' endFrame='0' containerField='motions'> |
| 51 | <HAnimJoint DEF='PoseJoint_l_shoulder' description='left shoulder' name='l_shoulder' rotation='0 0 1 0.5'/> |
| 52 | <HAnimJoint DEF='PoseJoint_r_shoulder' description='right shoulder' name='r_shoulder' rotation='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_Pose' description='arms and legs stretched outward providing a TouchDown gesture' loa='1' name='TouchDown' transitionDuration='1.2' frameIncrement='1' frameIndex='0' startFrame='0' endFrame='0' containerField='motions'> |
| 55 | <HAnimJoint name='humanoid_root' rotation='0 1 0 -0.698132'/> |
| 56 | <HAnimJoint name='l_hip' rotation='-1 1 1 1'/> |
| 57 | <HAnimJoint name='l_knee' rotation='1 0 0 1'/> |
| 58 | <HAnimJoint name='l_talocrural' rotation='-0.2 -0 0.1 0.225'/> |
| 59 | <HAnimJoint name='r_hip' rotation='-1 -1 -1 1'/> |
| 60 | <HAnimJoint name='r_knee' rotation='1 0 0 1'/> |
| 61 | <HAnimJoint name='r_talocrural' rotation='-0.2 0 0.1 0.25'/> |
| 62 | <HAnimJoint name='vl5' rotation='0 0 0.01 0.2'/> |
| 63 | <HAnimJoint name='vt10' rotation='0 0 0.01 0.1'/> |
| 64 | <HAnimJoint name='vc4' rotation='0 0 -0.01 0.15'/> |
| 65 | <HAnimJoint name='l_shoulder' rotation='-1 0.5 1 2'/> |
| 66 | <HAnimJoint name='l_elbow' rotation='-1 0 0 1'/> |
| 67 | <HAnimJoint name='l_radiocarpal'/> |
| 68 | <HAnimJoint name='r_shoulder' rotation='-1 -0.5 -1 2.6'/> |
| 69 | <HAnimJoint name='r_elbow' rotation='-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_Pose' description='arms and legs straight down default binding pose for baseline Humanoid' loa='1' name='I' transitionDuration='1.5' frameIncrement='1' frameIndex='0' startFrame='0' endFrame='0' containerField='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_Pose' description='TODO experimental pose not yet implemented' enabled='false' name='H' transitionDuration='1.4' loa='-1' frameIncrement='1' frameIndex='0' startFrame='0' endFrame='0' containerField='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_Pose' description='Only modify humanoid_root Joint node to face left' loa='0' name='FaceLeft' transitionDuration='1.1' frameIncrement='1' frameIndex='0' startFrame='0' endFrame='0' containerField='motions'> |
| 79 | <HAnimJoint DEF='FaceLeft_humanoid_root' description='Only rotate the model' name='humanoid_root' rotation='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_Pose' description='Only modify humanoid_root Joint node to face right' loa='0' name='FaceRight' transitionDuration='1.1' frameIncrement='1' frameIndex='0' startFrame='0' endFrame='0' containerField='motions'> |
| 82 | <HAnimJoint DEF='FaceRight_humanoid_root' description='Only rotate the model' name='humanoid_root' rotation='0 1 0 -1.570796'/> |
| 83 | </HAnimPose> |
| 84 | <Group DEF='InterfaceButtonsGroup'> |
| 85 | <Transform DEF='DisplayHeader' translation='0 2 0'> |
| 86 | <Shape> |
| 87 | <Text string='"HAnimPosePrototype example implementation"'> |
| 88 | <FontStyle DEF='HeaderFont' family='"SANS"' justify='"MIDDLE" "MIDDLE"' size='0.15' style='BOLD'/> |
| 89 | </Text> |
| 90 | |
| 91 | <Material diffuseColor='0.1 0.5 0.3'/> |
| 92 | </Appearance> |
| 93 | </Shape> |
| 94 | </Transform> |
| 95 | <Transform DEF='T_PoseInterface' translation='-1.5 1.5 0'> |
| 96 | <Shape> |
| 97 | <Text string='"\"T\" Pose"'> |
| 98 | |
| 99 | </Text> |
| 100 | <Appearance USE='PoseTextAppearance'/> |
| 101 | </Shape> |
| 102 | <Shape> |
| 103 | |
| 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_PoseTouchSensor' description='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_PoseInterface' translation='-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_PoseTouchSensor' description='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_PoseInterface' translation='-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_PoseTouchSensor' description='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_PoseInterface' translation='-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_PoseTouchSensor' description='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='FaceLeftPoseInterface' translation='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='FaceLeftTouchSensor' description='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='FaceRightPoseInterface' translation='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='FaceRightTouchSensor' description='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='AnimatePosesInterface' translation='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='AnimatePosesTouchSensor' description='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='AnimatePosesClock' cycleInterval='4' description='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='AnimatePosesLoopInterpolator' key='0 0.05 0.45 0.55 0.95 1' keyValue='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='ResetDefaultPoseInterface' translation='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='ResetPoseTouchSensor' description='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 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 |
A_Pose
HAnimPose commencePose FieldTypeNotFound |
|
AnimatePosesTouchSensor
TouchSensor touchTime SFTime |
AnimatePosesClock
TimeSensor startTime SFTime |
then
|
AnimatePosesClock
TimeSensor fraction_changed SFFloat |
AnimatePosesLoopInterpolator
ScalarInterpolator set_fraction SFFloat |
then
|
AnimatePosesLoopInterpolator
ScalarInterpolator value_changed SFFloat |
I_Pose
HAnimPose set_fraction SFFloat |
|
FaceLeftTouchSensor
TouchSensor isActive SFBool |
FaceLeft_Pose
HAnimPose commencePose FieldTypeNotFound |
|
FaceRightTouchSensor
TouchSensor isActive SFBool |
FaceRight_Pose
HAnimPose commencePose FieldTypeNotFound |
|
I_PoseTouchSensor
TouchSensor isActive SFBool |
I_Pose
HAnimPose commencePose FieldTypeNotFound |
|
ResetPoseTouchSensor
TouchSensor isActive SFBool |
FaceLeft_Pose
HAnimPose resetAllJoints FieldTypeNotFound |
|
T_PoseTouchSensor
TouchSensor isActive SFBool |
T_Pose
HAnimPose commencePose FieldTypeNotFound |
|
TouchDown_PoseTouchSensor
TouchSensor isActive SFBool |
TouchDown_Pose
HAnimPose commencePose FieldTypeNotFound |
|
HumanoidInlineLoadSensor
LoadSensor isLoaded SFBool |
A_Pose
HAnimPose isLoaded SFBool |
|
|
HumanoidInlineLoadSensor
LoadSensor isLoaded SFBool |
H_Pose
HAnimPose isLoaded SFBool |
|
|
HumanoidInlineLoadSensor
LoadSensor isLoaded SFBool |
I_Pose
HAnimPose isLoaded SFBool |
|
|
HumanoidInlineLoadSensor
LoadSensor isLoaded SFBool |
T_Pose
HAnimPose isLoaded SFBool |
|
|
HumanoidInlineLoadSensor
LoadSensor isLoaded SFBool |
FaceLeft_Pose
HAnimPose isLoaded SFBool |
|
|
HumanoidInlineLoadSensor
LoadSensor isLoaded SFBool |
FaceRight_Pose
HAnimPose isLoaded SFBool |
|
|
HumanoidInlineLoadSensor
LoadSensor isLoaded SFBool |
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. |
<!--
Color-coding legend: X3D terminology
<X3dNode DEF='idName' field='value'/>
matches XML terminology
<XmlElement DEF='idName' attribute='value'/>
(Light-blue background: event-based behavior node or statement)
(Grey background inside box: inserted documentation)
(Magenta background: X3D Extensibility)
-->
<!--
For additional help information about X3D scenes, please see X3D Tooltips, X3D Resources, and X3D Scene Authoring Hints.
-->