<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.2//EN" "https://www.web3d.org/specifications/x3d-3.2.dtd">
<X3D profile='Immersive'  version='3.2 xmlns:xsd='http://www.w3.org/2001/XMLSchema-instance' xsd:noNamespaceSchemaLocation =' https://www.web3d.org/specifications/x3d-3.2.xsd ' >
<head>
<meta name='titlecontent=' Gimbals.x3d '/>
<meta name='descriptioncontent='Gimbals for user-driven roll pitch and yaw angle conversions, also shows conversion from X3D (VRML) to DIS coordinate system. Model inspiration by Bob McGhee.'/>
<meta name='creatorcontent='Eric Bachmann and Don Brutzman'/>
<meta name='createdcontent='1996'/>
<meta name='finishedcontent='19 April 1999'/>
<meta name='translatorcontent='Curtis Blais'/>
<meta name='translatedcontent='27 January 2001'/>
<meta name='modifiedcontent='20 October 2019'/>
<meta name='Imagecontent='GimbalsExampleF18.png' />
<meta name='Imagecontent='GimbalsExampleRocket.png' />
<meta name='hintcontent='Note that axis orientations are aligned with X3D Geospatial conventions'/>
<meta name='identifiercontent=' https://www.web3d.org/x3d/content/examples/Basic/DistributedInteractiveSimulation/Gimbals.x3d '/>
<meta name='referencecontent=' https://www.web3d.org/WorkingGroups/vrtp/demo/gimbals/DisCoordinateSystemGimbals.wrl '/>
<meta name='generatorcontent='X3D-Edit 3.3, https://savage.nps.edu/X3D-Edit'/>
<meta name='licensecontent=' ../license.html'/>
</head>
<!-- -->
<Scene>
<WorldInfo title='Gimbals.x3d'/>
<Background groundAngle='1.309 1.570796groundColor='0 0.3 1 0 0.3 1 0 0.3 1skyAngle='1.309 1.571skyColor='0 0.2 0.7 0 0.5 1 1 1 1'/>
<DirectionalLight color='0.5 0.4 0.0direction='1 -.5 1'/>
<Group DEF='ViewpointGroup'>
<!-- have default Viewpoints precede model viewpoints for consistent navigation -->
<Viewpoint description='South to Northposition='0 15 100'/>
<Viewpoint description='East to Westorientation='0 1 0 1.57079position='120 20 0'/>
<Viewpoint description='North to Southorientation='0 1 0 -3.14159position='0 20 -120'/>
<Viewpoint description='West to Eastorientation='0 1 0 -1.57079position='-120 20 0'/>
<Viewpoint description='Close Uporientation='1 0 0 -.20136position='0 30 50'/>
<Transform DEF='fromNEtoSWrotation='0 1 0 0.7854translation='30 40 30'>
<Viewpoint description='Northeast to SWorientation='1 0 0 -0.45'/>
</Transform>
<Transform DEF='fromSWtoNErotation='0 1 0 -2.35619translation='-25 5 -25'>
<Viewpoint description='Southwest to NEorientation='1 0 0 0.35'/>
</Transform>
<Transform rotation='-1 0 0 1.57translation='0 150 0'>
<Viewpoint description='Top Downorientation='0 0 -1 1.57position='0 0 0'/>
</Transform>
</Group>
<Transform DEF='SunInDistancetranslation='-250 125 -250'>
<Shape>
<Appearance>
<Material DEF='SUN_MATERIALambientIntensity='0diffuseColor='1 0.871763 0emissiveColor='1 0.871763 0shininess='0.5specularColor='1 1 1'/>
</Appearance>
<Sphere radius='5.0'/>
</Shape>
</Transform>
<Transform DEF='GlobalCoordinateAxestranslation='0 20 0'>
<Transform DEF='GlobalAxisLines'>
<Shape>
<Appearance>
<Material DEF='COLOR1diffuseColor='0.01 0.01 0.1emissiveColor='0.01 0.01 0.1'/>
</Appearance>
<IndexedLineSet coordIndex='0 1 -1 2 3 -1 4 5 -1 6 7 -1 8 9 -1 10 11 -1'>
<Coordinate point='35 0 0 2 0 0 -35 0 0 -2 0 0 0 25 0 0 2 0 0 -25 0 0 -2 0 0 0 35 0 0 2 0 0 -35 0 0 -2'/>
</IndexedLineSet>
</Shape>
</Transform>
<Transform DEF='PositiveZAxisLabeltranslation='0 -4.0 40'>
<Billboard axisOfRotation='0 0 0'>
<Transform scale='0.1 0.1 0.1'>
<Shape>
<Appearance>
<Material USE=' COLOR1'/>
</Appearance>
<Text string='"South" "+Z X3D, -X DIS"'>
<FontStyle DEF='FONT1justify='"MIDDLE" "MIDDLE"size='36'/>
</Text>
</Shape>
</Transform>
</Billboard>
</Transform>
<Transform DEF='PositiveXAxisLabeltranslation='44 -4.0 0'>
<Billboard axisOfRotation='0 0 0'>
<Transform scale='0.1 0.1 0.1'>
<Shape>
<Appearance>
<Material USE=' COLOR1'/>
</Appearance>
<Text string='"East" "+X X3D, +Y DIS"'>
<FontStyle USE=' FONT1'/>
</Text>
</Shape>
</Transform>
</Billboard>
</Transform>
<Transform DEF='NegativeZAxisLabeltranslation='-0.5 -4.0 -40'>
<Billboard axisOfRotation='0 0 0'>
<Transform scale='0.1 0.1 0.1'>
<Shape>
<Appearance>
<Material USE=' COLOR1'/>
</Appearance>
<Text string='"North" "-Z X3D, +X DIS"'>
<FontStyle USE=' FONT1'/>
</Text>
</Shape>
</Transform>
</Billboard>
</Transform>
<Transform DEF='NegativeXAxisLabeltranslation='-44 -4.0 0'>
<Billboard axisOfRotation='0 0 0'>
<Transform scale='0.1 0.1 0.1'>
<Shape>
<Appearance>
<Material USE=' COLOR1'/>
</Appearance>
<Text string='"West" "-X X3D, -Y DIS"'>
<FontStyle USE=' FONT1'/>
</Text>
</Shape>
</Transform>
</Billboard>
</Transform>
<Transform DEF='PositiveYAxisLabeltranslation='0 30 0'>
<Billboard axisOfRotation='0 0 0'>
<Transform scale='0.1 0.1 0.1'>
<Shape>
<Appearance>
<Material USE=' COLOR1'/>
</Appearance>
<Text string='"Up" "+Y X3D, -Z DIS"'>
<FontStyle USE=' FONT1'/>
</Text>
</Shape>
</Transform>
</Billboard>
</Transform>
<Transform DEF='NegativeYAxisLabeltranslation='0 -28 0'>
<Billboard axisOfRotation='0 0 0'>
<Transform scale='0.1 0.1 0.1'>
<Shape>
<Appearance>
<Material USE=' COLOR1'/>
</Appearance>
<Text string='"Down" "-Y X3D, +Z DIS"'>
<FontStyle USE=' FONT1'/>
</Text>
</Shape>
</Transform>
</Billboard>
</Transform>
</Transform>
<Transform DEF='GimbalObjectsrotation='0 1 0 1.57translation='0 20 0'>
<!-- ROUTE information for AZIMUTH_TRANSFORM node:  [from AZIMUTH_SENSOR.rotation_changed to set_rotation ] -->
<Transform DEF='AZIMUTH_TRANSFORM'>
<!-- ROUTE information for AZIMUTH_SENSOR node:  [from rotation_changed to AZIMUTH_TRANSFORM.set_rotation ] [from rotation_changed to CONSTRUCT_TRACE_STRING.set_azimuthRotation ] -->
<CylinderSensor DEF='AZIMUTH_SENSORdescription='drag gimbal to change azimuth'/>

<Transform DEF='AzimuthGimbalrotation='1 0 0 1.57079'>
<Transform DEF='AzimuthGimbalShape'>
<Shape>
<Appearance DEF='AppearanceGimbals'>
<Material diffuseColor='1 0.59 0.3'/>
</Appearance>
<Extrusion beginCap='falseconvex='falsecreaseAngle='1.57crossSection='0.5 0 0.46 -0.19 0.355 -0.355 0.19 -0.46 0 -0.5 -0.19 -0.46 -0.355 -0.355 -0.46 -0.19 -0.5 0 -0.46 0.19 -0.355 0.355 -0.19 0.46 0 0.5 0.19 0.46 0.355 0.355 0.46 0.19 0.5 0endCap='falsesolid='falsespine='14 0 0 13.25 0 7.85 11.05 0 11.05 7.85 0 13.25 0 0 14 -7.85 0 13.25 -11.05 0 11.05 -13.25 0 7.85 -14 0 0 -13.25 0 -7.85 -11.05 0 -11.05 -7.85 0 -13.25 0 0 -14 7.85 0 -13.25 11.05 0 -11.05 13.25 0 -7.85 14 0 0'/>
</Shape>
<Transform rotation='0 0 1 1.57079translation='12.75 0 0'>
<Shape DEF='PinShape'>
<Appearance USE=' AppearanceGimbals'/>
<Cone bottomRadius='0.5height='1.5'/>
</Shape>
</Transform>
<Transform rotation='0 0 1 -1.57079translation='-12.75 0 0'>
<Shape USE=' PinShape'/>
</Transform>
</Transform>
</Transform>
<Transform DEF='ElevationRollObjectsrotation='0 0 1 1.57'>
<!-- ROUTE information for ELEVATION_TRANSFORM node:  [from ELEVATION_SENSOR.rotation_changed to set_rotation ] -->
<Transform DEF='ELEVATION_TRANSFORM'>
<!-- ROUTE information for ELEVATION_SENSOR node:  [from rotation_changed to ELEVATION_TRANSFORM.set_rotation ] [from rotation_changed to CONSTRUCT_TRACE_STRING.set_elevationRotation ] -->
<CylinderSensor DEF='ELEVATION_SENSORdescription='drag gimbal to change elevation'/>

<Transform DEF='ElevationGimbalrotation='0 0 1 1.57079'>
<Transform DEF='ElevationGimbalShape'>
<Shape>
<Appearance USE=' AppearanceGimbals'/>
<Extrusion beginCap='falseconvex='falsecreaseAngle='1.57crossSection='0.5 0 0.46 -0.19 0.355 -0.355 0.19 -0.46 0 -0.5 -0.19 -0.46 -0.355 -0.355 -0.46 -0.19 -0.5 0 -0.46 0.19 -0.355 0.355 -0.19 0.46 0 0.5 0.19 0.46 0.355 0.355 0.46 0.19 0.5 0endCap='falsesolid='falsespine='12 0 0 11.25 0 5.85 9.05 0 9.05 5.85 0 11.25 0 0 12 -5.85 0 11.25 -9.05 0 9.05 -11.25 0 5.85 -12 0 0 -11.25 0 -5.85 -9.05 0 -9.05 -5.85 0 -11.25 0 0 -12 5.85 0 -11.25 9.05 0 -9.05 11.25 0 -5.85 12 0 0'/>
</Shape>
<Transform rotation='1 0 0 -1.57079translation='0 0 10.75'>
<Shape USE=' PinShape'/>
</Transform>
<Transform rotation='1 0 0 1.57079translation='0 0 -10.75'>
<Shape USE=' PinShape'/>
</Transform>
</Transform>
</Transform>
<Transform DEF='RollObjectsrotation='1 0 0 -1.57'>
<!-- ROUTE information for ROLL_TRANSFORM node:  [from ROLL_SENSOR.rotation_changed to set_rotation ] -->
<Transform DEF='ROLL_TRANSFORM'>
<!-- ROUTE information for ROLL_SENSOR node:  [from rotation_changed to ROLL_TRANSFORM.set_rotation ] [from rotation_changed to CONSTRUCT_TRACE_STRING.set_rollRotation ] -->
<CylinderSensor DEF='ROLL_SENSORdescription='drag gimbal to change roll'/>

<Transform DEF='RollGimbalrotation='1 0 0 1.57079'>
<Transform DEF='RollGimbalShape'>
<Shape>
<Appearance USE=' AppearanceGimbals'/>
<Extrusion beginCap='falseconvex='falsecreaseAngle='1.57crossSection='0.5 0 0.46 -0.19 0.355 -0.355 0.19 -0.46 0 -0.5 -0.19 -0.46 -0.355 -0.355 -0.46 -0.19 -0.5 0 -0.46 0.19 -0.355 0.355 -0.19 0.46 0 0.5 0.19 0.46 0.355 0.355 0.46 0.19 0.5 0endCap='falsesolid='falsespine='10 0 0 9.25 0 3.85 7.05 0 7.05 3.85 0 9.25 0 0 10 -3.85 0 9.25 -7.05 0 7.05 -9.25 0 3.85 -10 0 0 -9.25 0 -3.85 -7.05 0 -7.05 -3.85 0 -9.25 0 0 -10 3.85 0 -9.25 7.05 0 -7.05 9.25 0 -3.85 10 0 0'/>
</Shape>
</Transform>
<Transform rotation='0 0 1 -1.57'>
<Transform rotation='0 1 0 -1.57scale='0.4 0.4 0.4'>
<Transform DEF='ScaleUpContainedObjectscale='6 6 6'> </Transform>
<Transform DEF='LocalCoordinateAxesscale='0.65 0.65 0.65'>
<Transform DEF='LocalAxisLines'>
<Shape>
<Appearance DEF='AppearanceBodyAxes'>
<Material diffuseColor='1 .8 0emissiveColor='1 .8 0'/>
</Appearance>
<IndexedLineSet coordIndex='0 1 -1 2 3 -1 4 5 -1'>
<Coordinate point='25 0 0 -25 0 0 0 25 0 0 -25 0 0 0 25 0 0 -25'/>
</IndexedLineSet>
</Shape>
</Transform>
<Transform DEF='PositiveXLocaltranslation='35 0 0'>
<Billboard axisOfRotation='0 0 0'>
<Transform scale='.1 .1 .1'>
<Shape>
<Appearance USE=' AppearanceBodyAxes'/>
<Text string='"body +X nose"'>
<FontStyle DEF='FONT2justify='"MIDDLE" "MIDDLE"size='48'/>
</Text>
</Shape>
</Transform>
</Billboard>
</Transform>
<Transform DEF='NegativeXLocaltranslation='-35 0 0'>
<Billboard axisOfRotation='0 0 0'>
<Transform scale='.1 .1 .1'>
<Shape>
<Appearance USE=' AppearanceBodyAxes'/>
<Text string='"body -X tail"'>
<FontStyle USE=' FONT2'/>
</Text>
</Shape>
</Transform>
</Billboard>
</Transform>
<Transform DEF='PositiveZLocaltranslation='0 -30 0'>
<Billboard axisOfRotation='0 0 0'>
<Transform scale='.1 .1 .1'>
<Shape>
<Appearance USE=' AppearanceBodyAxes'/>
<Text string='"body -Y bottom"'>
<FontStyle USE=' FONT2'/>
</Text>
</Shape>
</Transform>
</Billboard>
</Transform>
<Transform DEF='NegativeZLocaltranslation='0 26 0'>
<Billboard axisOfRotation='0 0 0'>
<Transform scale='.1 .1 .1'>
<Shape>
<Appearance USE=' AppearanceBodyAxes'/>
<Text string='"body +Y top"'>
<FontStyle USE=' FONT2'/>
</Text>
</Shape>
</Transform>
</Billboard>
</Transform>
<Transform DEF='PositiveYLocaltranslation='0 0 34'>
<Billboard axisOfRotation='0 0 0'>
<Transform scale='.1 .1 .1'>
<Shape>
<Appearance USE=' AppearanceBodyAxes'/>
<Text string='"body +Z right"'>
<FontStyle USE=' FONT2'/>
</Text>
</Shape>
</Transform>
</Billboard>
</Transform>
<Transform DEF='NegativeYLocaltranslation='0 0 -34'>
<Billboard axisOfRotation='0 0 0'>
<Transform scale='.1 .1 .1'>
<Shape>
<Appearance USE=' AppearanceBodyAxes'/>
<Text string='"body -Z left"'>
<FontStyle USE=' FONT2'/>
</Text>
</Shape>
</Transform>
</Billboard>
</Transform>
</Transform>
</Transform>
</Transform>
</Transform>
</Transform>
</Transform>
</Transform>
</Transform>
</Transform>
</Transform>
<Transform DEF='RotationTexttranslation='0 -12 22'>
<Billboard axisOfRotation='0 0 0'>
<Shape>
<Appearance>
<Material diffuseColor='0 .8 .1emissiveColor='0 .8 .1'/>
</Appearance>
<!-- ROUTE information for TRACE_STRING node:  [from CONSTRUCT_TRACE_STRING.rotationMessage_changed to set_string ] -->
<Text DEF='TRACE_STRINGstring='"Drag gimbals for new rotation value"'>
<FontStyle justify='"MIDDLE" "MIDDLE"size='4'/>
</Text>
</Shape>
</Billboard>
</Transform>
<field name='rolltype='SFFloatvalue='0.0accessType='initializeOnly'
 appinfo='declared for persistence' />

<field name='elevationtype='SFFloatvalue='0.0accessType='initializeOnly'
 appinfo='declared for persistence' />

<field name='azimuthtype='SFFloatvalue='0.0accessType='initializeOnly'
 appinfo='declared for persistence' />

<field name='azimuth2type='SFFloatvalue='0.0accessType='initializeOnly'
 appinfo='declared for persistence' />

<field name='newRotationtype='SFRotationvalue='0 1 0 0accessType='inputOutput'
 appinfo='declared for persistence' />

<field name='newRotationStringtype='SFStringaccessType='inputOutput'
 appinfo='declared for persistence' />

<field name='set_rollRotationtype='SFRotationaccessType='inputOnly'/>
<field name='set_elevationRotationtype='SFRotationaccessType='inputOnly'/>
<field name='set_azimuthRotationtype='SFRotationaccessType='inputOnly'/>
<field name='rotationMessage_changedtype='MFStringaccessType='outputOnly'/>
</Script>
< ROUTE  fromNode=' ROLL_SENSOR' fromField='rotation_changed' toNode=' ROLL_TRANSFORM' toField='set_rotation'/>
< ROUTE  fromNode=' ELEVATION_SENSOR' fromField='rotation_changed' toNode=' ELEVATION_TRANSFORM' toField='set_rotation'/>
< ROUTE  fromNode=' AZIMUTH_SENSOR' fromField='rotation_changed' toNode=' AZIMUTH_TRANSFORM' toField='set_rotation'/>
< ROUTE  fromNode=' ROLL_SENSOR' fromField='rotation_changed' toNode=' CONSTRUCT_TRACE_STRING' toField='set_rollRotation'/>
< ROUTE  fromNode=' ELEVATION_SENSOR' fromField='rotation_changed' toNode=' CONSTRUCT_TRACE_STRING' toField='set_elevationRotation'/>
< ROUTE  fromNode=' AZIMUTH_SENSOR' fromField='rotation_changed' toNode=' CONSTRUCT_TRACE_STRING' toField='set_azimuthRotation'/>
< ROUTE  fromNode=' CONSTRUCT_TRACE_STRING' fromField='rotationMessage_changed' toNode=' TRACE_STRING' toField='set_string'/>
</Scene>
</X3D>
<!--

to top <!-- Event Graph ROUTE Table shows event connections -->
 
<!-- Index for DEF nodes: AppearanceBodyAxes, AppearanceGimbals, AZIMUTH_SENSOR, AZIMUTH_TRANSFORM, AzimuthGimbal, AzimuthGimbalShape, COLOR1, CONSTRUCT_TRACE_STRING, ELEVATION_SENSOR, ELEVATION_TRANSFORM, ElevationGimbal, ElevationGimbalShape, ElevationRollObjects, F18Superhornet, FONT1, FONT2, fromNEtoSW, fromSWtoNE, GimbalObjects, GlobalAxisLines, GlobalCoordinateAxes, LocalAxisLines, LocalCoordinateAxes, ModelChoice, ModelOrientation, NegativeXAxisLabel, NegativeXLocal, NegativeYAxisLabel, NegativeYLocal, NegativeZAxisLabel, NegativeZLocal, PinShape, PositiveXAxisLabel, PositiveXLocal, PositiveYAxisLabel, PositiveYLocal, PositiveZAxisLabel, PositiveZLocal, ROLL_SENSOR, ROLL_TRANSFORM, RollGimbal, RollGimbalShape, RollObjects, RotationText, ScaleUpContainedObject, SUN_MATERIAL, SunInDistance, TRACE_STRING, ViewpointGroup

Index for Viewpoint nodes: Viewpoint_1, Viewpoint_2, Viewpoint_3, Viewpoint_4, Viewpoint_5, Viewpoint_6, Viewpoint_7, Viewpoint_8
-->

Event Graph ROUTE Table entries with 7 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.

AZIMUTH_SENSOR
CylinderSensor
rotation_changed
SFRotation

ROUTE
event to
(1)
AZIMUTH_TRANSFORM
Transform
set_rotation
SFRotation
AZIMUTH_SENSOR
CylinderSensor
rotation_changed
SFRotation

ROUTE
event to
(1)
CONSTRUCT_TRACE_STRING
Script
set_azimuthRotation
SFRotation

 
 
then
CONSTRUCT_TRACE_STRING
Script
rotationMessage_changed
MFString

ROUTE
event to
(2)
TRACE_STRING
Text
set_string
MFString


ELEVATION_SENSOR
CylinderSensor
rotation_changed
SFRotation

ROUTE
event to
(1)
ELEVATION_TRANSFORM
Transform
set_rotation
SFRotation
ELEVATION_SENSOR
CylinderSensor
rotation_changed
SFRotation

ROUTE
event to
(1)
CONSTRUCT_TRACE_STRING
Script
set_elevationRotation
SFRotation

 
 
then
CONSTRUCT_TRACE_STRING
Script
rotationMessage_changed
MFString

ROUTE
event to
(2)
TRACE_STRING
Text
set_string
MFString


ROLL_SENSOR
CylinderSensor
rotation_changed
SFRotation

ROUTE
event to
(1)
ROLL_TRANSFORM
Transform
set_rotation
SFRotation
ROLL_SENSOR
CylinderSensor
rotation_changed
SFRotation

ROUTE
event to
(1)
CONSTRUCT_TRACE_STRING
Script
set_rollRotation
SFRotation

 
 
then
CONSTRUCT_TRACE_STRING
Script
rotationMessage_changed
MFString

ROUTE
event to
(2)
TRACE_STRING
Text
set_string
MFString


-->

<!-- Online at
https://www.web3d.org/x3d/content/examples/Basic/DistributedInteractiveSimulation/GimbalsIndex.html -->
<!-- Version control at
https://sourceforge.net/p/x3d/code/HEAD/tree/www.web3d.org/x3d/content/examples/Basic/DistributedInteractiveSimulation/Gimbals.x3d -->

<!-- Color 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)
-->

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