#################################################################################################### # # Invoking X3D model self-test: # # $ python OsaII.py # # Python package x3d.py package is available on PyPI for import. # This approach simplifies Python X3D deployment and use. # https://pypi.org/project/x3d # # Installation: # pip install x3d # or # python -m pip install x3d # # Developer options for loading x3d package in other Python programs: # # from x3d import * # preferred approach, terser source that avoids x3d.* class prefixes # # or # import x3d # traditional way to subclass x3d package, all classes require x3d.* prefix, # # but python source is very verbose, for example x3d.Material x3d.Shape etc. # # X3dToPython.xslt stylesheet insertPackagePrefix=true supports this option. # #################################################################################################### from x3d import * newModel=X3D(profile='Immersive',version='3.0', head=head( children=[ meta(content='OsaII.x3d',name='title'), meta(content='Model of OSA-II missile boat.',name='description'), meta(content='Scott Rosetti, LT USNR',name='creator'), meta(content='20 July 2003',name='created'), meta(content='20 October 2019',name='modified'), meta(content='fix Viewpoints, check coordinate systems',name='TODO'), meta(content='OsaIISilhoutteStbdSideWhiteBackground.png',name='Image'), meta(content='OsaIISilhouttePortSideWhiteBackground.png',name='Image'), meta(content='OsaIISilhoutteOverheadWhiteBackground.png',name='Image'), meta(content='Jeffrey Weekley',name='reviewed'), meta(content='OSA-II missile boat',name='reference'), meta(content='http://faculty.nps.edu/brutzman/ShipsMilitary/DDGArleighBurkeUnitedStates/Propellers.x3d',name='reference'), meta(content='Osa-II, missile boat, patrol craft, SAVAGE, X3D',name='subject'), meta(content='https://savage.nps.edu/Savage/ShipsMilitary/MissileAttackBoatOsaII/OsaII.x3d',name='identifier'), meta(content='X3D-Edit 3.3, https://savage.nps.edu/X3D-Edit',name='generator'), meta(content='X3D-Edit 3.2, https://savage.nps.edu/X3D-Edit',name='generator'), meta(content='https://savage.nps.edu/Savage/Weapons/Missiles/HarpoonExample.x3d',name='reference'), meta(content='https://savage.nps.edu/Savage/ShipsMilitary/MissileAttackBoatOsaII/DDGArleighBurkeUnitedStates/water.x3d',name='reference'), meta(content='../../license.html',name='license')]), Scene=Scene( children=[ WorldInfo(title='OsaII.x3d'), Background(skyColor=[(0,0.3,1)]), # OSA-II missile boat ExternProtoDeclare(name='RGM-84D',url=["../../Weapons/Missiles/HarpoonPrototype.x3d#RGM-84D","https://savage.nps.edu/Savage/Weapons/Missiles/HarpoonPrototype.x3d#RGM-84D","../../Weapons/Missiles/HarpoonPrototype.wrl#RGM-84D","https://savage.nps.edu/Savage/Weapons/Missiles/HarpoonPrototype.wrl#RGM-84D"], field=[ field(accessType='inputOnly',name='STARTLAUNCH',type='SFBool'), field(accessType='inputOnly',name='THETIME',type='SFTime')]), Transform(DEF='OSA_II',scale=(3.86,3.86,3.86), children=[ Transform(DEF='FREEBOARD', children=[ Shape( geometry=Extrusion(creaseAngle=.75,crossSection=[(1,.4),(-1,.4),(-.8,-.1),(.8,-.1),(1,.4)],orientation=[(0,0,0,0),(0,0,0,0),(0,0,0,0),(0,0,0,0),(0,0,0,0),(1,0,0,-.6)],scale=[(1,1),(1,1),(1,1),(1,1),(1,1),(.001,1.4)],solid=False,spine=[(-5,0,0),(-4.6,0,0),(0,0,0),(2,0,0),(3,0,0),(5,0,0)]), appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))))] # Extrusion modeling above water portion of hull ), Transform(DEF='HULL', children=[ Shape( geometry=Extrusion(creaseAngle=1.5,crossSection=[(-.8,-.1),(-.7,-.3),(0,-.5),(.7,-.3),(.8,-.1),(-.8,-.1)],orientation=[(0,0,0,0),(0,0,0,0),(0,0,0,0),(0,0,0,0),(0,0,0,0),(1,0,0,-.6)],scale=[(1,1),(1,1),(1,1),(1,1),(1,1),(.001,1.4)],solid=False,spine=[(-5,0,0),(-4.6,0,0),(0,0,0),(2,0,0),(3,0,0),(5,0,0)]), appearance=Appearance( material=Material(diffuseColor=(1,0,0))))] # Extrusion modeling below-water portion of hull ), Transform(DEF='PILOT_HOUSE',translation=(0,0,.4), children=[ Shape( geometry=Extrusion(creaseAngle=.5,crossSection=[(.6,0),(.6,.70),(.55,.75),(-.55,.75),(-.6,.65),(-.6,0),(.6,0)],orientation=[(0,0,0,0),(1,0,0,.3)],solid=False,spine=[(1.5,0,0),(2.5,0,0)]), appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))))] # Pilot House - the front-most superstructure that includes bridge ), Transform(DEF='AFT_HOUSING',translation=(0,0,.4), children=[ Shape( geometry=Extrusion(creaseAngle=.5,crossSection=[(.3,.5),(-.3,.5),(-.3,0),(.3,0),(.3,.5)],orientation=[(0,0,0,0),(1,0,0,-.3)],solid=False,spine=[(-3.5,0,0),(1.8,0,0)]), appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))))] # Aft superstructure that runs down most of vessel ), Transform(DEF='FRONT_WINDOWS',rotation=(0,1,0,-.3), children=[ Transform(scale=(.005,.1,.05),translation=(2.51,0,.18), children=[ Shape(DEF='WINDOW', geometry=Box(), appearance=Appearance( material=Material(diffuseColor=(0,0,.6),transparency=.75)))]), Transform(scale=(.005,.1,.05),translation=(2.51,.35,.18), children=[ Shape(USE='WINDOW')]), Transform(scale=(.005,.1,.05),translation=(2.51,-.35,.18), children=[ Shape(USE='WINDOW')])]), Transform(DEF='RIGHT_NO',scale=(.5,.5,.5),translation=(4,-.475,0), children=[ Transform(rotation=(0,0,1,.45), children=[ Transform(rotation=(1,0,0,1.8), children=[ Shape( geometry=Text(string=["78"]), appearance=Appearance( material=Material(diffuseColor=(1,1,1))))])])]), Transform(DEF='LEFT_NO',scale=(.5,.5,.5),translation=(4.45,.315,.28), children=[ Transform(rotation=(0,0,1,-.45), children=[ Transform(rotation=(1,0,0,-1.8), children=[ Transform(rotation=(0,1,0,3.1416), children=[ Shape( geometry=Text(string=["78"]), appearance=Appearance( material=Material(diffuseColor=(1,1,1))))])])])]), Transform(DEF='SIDE_WINDOWS', children=[ Transform(rotation=(0,0,1,1.57),scale=(.005,.1,.05),translation=(2.1,.6,.91), children=[ Shape(USE='WINDOW')]), Transform(rotation=(0,0,1,1.57),scale=(.005,.1,.05),translation=(2.1,-.6,.91), children=[ Shape(USE='WINDOW')]), Transform(rotation=(0,0,1,1.57),scale=(.005,.1,.05),translation=(1.8,.6,.91), children=[ Shape(USE='WINDOW')]), Transform(rotation=(0,0,1,1.57),scale=(.005,.1,.05),translation=(1.8,-.6,.91), children=[ Shape(USE='WINDOW')])]), Transform(DEF='SIGNAL_HOUSE', children=[ Shape( geometry=Extrusion(creaseAngle=1.5,crossSection=[(.45,0),(.45,1.4),(-.45,1.4),(-.45,0),(.45,0)],scale=[(1,.01),(1,.8),(1,1),(1,1)],solid=False,spine=[(.5,0,0),(.75,0,0),(1.3,0,0),(1.7,0,0)]), appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))))] # Aft part of bridge by main mast ), Transform(DEF='LAUNCHER',rotation=(0,.16,1,-1.57),translation=(-3.2,-.65,.8), # Styx launcher - Touch Missle cover to fire surface-to-surface missile children=[ Transform( # Styx launcher children=[ Transform(DEF='MISSILE',scale=(.2,.2,.2),translation=(0,1,0), children=[ TouchSensor(DEF='MissileTouch',description='triggers missile launch'), TimeSensor(DEF='MissileClock'), PositionInterpolator(DEF='MissilePath',key=[0.2,1.0],keyValue=[(0,.5,0),(0,30,0)]), ROUTE(fromField='fraction_changed',fromNode='MissileClock',toField='set_fraction',toNode='MissilePath'), ROUTE(fromField='value_changed',fromNode='MissilePath',toField='set_translation',toNode='MISSILE'), ROUTE(fromField='touchTime',fromNode='MissileTouch',toField='startTime',toNode='MissileClock'), Transform(DEF='STYX',rotation=(0,0,1,1.570796),translation=(0,-3,0), children=[ ProtoInstance(name='RGM-84D')]), Transform( children=[ Sound( source=AudioClip(DEF='MissileLaunch',description='Missile launch audio',url=["https://savage.nps.edu/Savage/Weapons/Missiles/MISSILE1.WAV"])), ROUTE(fromField='touchTime',fromNode='MissileTouch',toField='set_startTime',toNode='MissileLaunch')])]), Transform(DEF='STYX_LAUNCHER', children=[ Inline(url=["StyxMissileTube.x3d","https://savage.nps.edu/Savage/ShipsMilitary/MissileAttackBoatOsaII/StyxMissileTube.x3d","StyxMissileTube.wrl","https://savage.nps.edu/Savage/ShipsMilitary/MissileAttackBoatOsaII/StyxMissileTube.wrl"])])])]), Transform(translation=(0,1.3,0), children=[ Transform(DEF='LAUNCHER2',rotation=(0,.16,1,-1.57),translation=(-3.2,-.65,.8), # Styx launcher children=[ Transform( # Styx launcher children=[ Transform(DEF='MISSILE2',scale=(.2,.2,.2),translation=(0,1,0), children=[ TouchSensor(DEF='MissileTouch2',description='triggers missile launch'), TimeSensor(DEF='MissileClock2'), PositionInterpolator(DEF='MissilePath2',key=[0.2,1.0],keyValue=[(0,.5,0),(0,30,0)]), ROUTE(fromField='fraction_changed',fromNode='MissileClock2',toField='set_fraction',toNode='MissilePath2'), ROUTE(fromField='value_changed',fromNode='MissilePath2',toField='set_translation',toNode='MISSILE2'), ROUTE(fromField='touchTime',fromNode='MissileTouch2',toField='startTime',toNode='MissileClock2'), Transform(USE='STYX')]), Transform(USE='STYX_LAUNCHER')])])]), Transform(translation=(2.6,0,0), children=[ Transform(DEF='LAUNCHER3',rotation=(0,.16,1,-1.57),translation=(-3.2,-.65,.8), # Styx launcher children=[ Transform( # Styx launcher children=[ Transform(DEF='MISSILE3',scale=(.2,.2,.2),translation=(0,1,0), children=[ TouchSensor(DEF='MissileTouch3',description='triggers missile launch'), TimeSensor(DEF='MissileClock3'), PositionInterpolator(DEF='MissilePath3',key=[0.2,1.0],keyValue=[(0,.5,0),(0,30,0)]), ROUTE(fromField='fraction_changed',fromNode='MissileClock3',toField='set_fraction',toNode='MissilePath3'), ROUTE(fromField='value_changed',fromNode='MissilePath3',toField='set_translation',toNode='MISSILE3'), ROUTE(fromField='touchTime',fromNode='MissileTouch3',toField='startTime',toNode='MissileClock3'), Transform(USE='STYX')]), Transform(USE='STYX_LAUNCHER')])])]), Transform(translation=(2.6,1.3,0), children=[ Transform(DEF='LAUNCHER4',rotation=(0,.16,1,-1.57),translation=(-3.2,-.65,.8), # Styx launcher children=[ Transform( # Styx launcher children=[ Transform(DEF='MISSILE4',scale=(.2,.2,.2),translation=(0,1,0), children=[ TouchSensor(DEF='MissileTouch4',description='triggers missile launch'), TimeSensor(DEF='MissileClock4'), PositionInterpolator(DEF='MissilePath4',key=[0.2,1.0],keyValue=[(0,.5,0),(0,30,0)]), ROUTE(fromField='fraction_changed',fromNode='MissileClock4',toField='set_fraction',toNode='MissilePath4'), ROUTE(fromField='value_changed',fromNode='MissilePath4',toField='set_translation',toNode='MISSILE4'), ROUTE(fromField='touchTime',fromNode='MissileTouch4',toField='startTime',toNode='MissileClock4'), Transform(USE='STYX')]), Transform(USE='STYX_LAUNCHER')])])]), Transform(DEF='MAIN_MAST',scale=(.075,.075,1),translation=(.7,0,0), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Extrusion(creaseAngle=1.5,crossSection=[(1,0),(.707,.707),(0,1),(-.707,.707),(-1,0),(-.707,-.707),(0,-1),(.707,-.707),(1,0)],scale=[(4,3),(1,1)],solid=False,spine=[(0,0,0),(0,0,3)]))]), Transform(DEF='LAUNCHER_BASE',scale=(.3,.15,.1),translation=(-1.2,-.65,.45), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(1,1,1))), geometry=Box(),)]), Transform(translation=(0,1.3,0), children=[ Transform(USE='LAUNCHER_BASE')]), Transform(translation=(-2.55,1.3,0), children=[ Transform(USE='LAUNCHER_BASE')]), Transform(translation=(-2.55,0,0), children=[ Transform(USE='LAUNCHER_BASE')]), Transform(DEF='GUN_MOUNT', # forward gun mount children=[ Inline(url=["GunMount.wrl","https://savage.nps.edu/Savage/ShipsMilitary/MissileAttackBoatOsaII/GunMount.wrl","GunMount.x3d","https://savage.nps.edu/Savage/ShipsMilitary/MissileAttackBoatOsaII/GunMount.x3d"])]), Transform(rotation=(0,0,1,3.14),translation=(-1.2,0,0), # aft gun mount children=[ Transform(USE='GUN_MOUNT')]), Transform(DEF='AFT_RADAR',translation=(-3,0,.8), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Extrusion(creaseAngle=1.5,crossSection=[(1,0),(.707,.707),(0,1),(-.707,.707),(-1,0),(-.707,-.707),(0,-1),(.707,-.707),(1,0)],scale=[(.2,.2),(.2,.2)],solid=False,spine=[(0,0,0),(0,0,.4)])), Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Extrusion(creaseAngle=1.5,crossSection=[(1,0),(.707,.707),(0,1),(-.707,.707),(-1,0),(-.707,-.707),(0,-1),(.707,-.707),(1,0)],scale=[(.3,.3),(.3,.3)],solid=False,spine=[(0,0,.4),(0,0,.45)])), Shape( appearance=Appearance( material=Material(diffuseColor=(.3,.3,.3))), geometry=Extrusion(creaseAngle=1.5,crossSection=[(1,0),(.707,.707),(0,1),(-.707,.707),(-1,0),(-.707,-.707),(0,-1),(.707,-.707),(1,0)],scale=[(.1,.1),(.1,.1)],solid=False,spine=[(0,0,.45),(0,0,.55)])), Transform(rotation=(0,1,0,-1.3),translation=(.68,0,.5), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.3,.3,.3))), geometry=Extrusion(creaseAngle=1.5,crossSection=[(1,0),(.707,.707),(0,1),(-.707,.707),(-1,0),(-.707,-.707),(0,-1),(.707,-.707),(1,0)],scale=[(.075,.075),(.12,.12),(.18,.18),(.18,.18),(.12,.12),(.075,.075)],solid=False,spine=[(0,0,.55),(0,0,.58),(0,0,.65),(0,0,.80),(0,0,.87),(0,0,.9)]))]), Transform(scale=(.28,.28,.2),translation=(0,0,.6), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Extrusion(creaseAngle=1.5,crossSection=[(1,0),(.707,.707),(0,1),(-.707,.707),(-1,0),(-.707,-.707),(0,-1),(.707,-.707),(1,0)],scale=[(.05,.05),(.05,.05),(.05,.05),(.05,.05),(.05,.05),(.05,.05),(.05,.05),(.05,.05),(.05,.05)],solid=False,spine=[(1,0,0),(.707,.707,0),(0,1,0),(-.707,.707,0),(-1,0,0),(-.707,-.707,0),(0,-1,0),(.707,-.707,0),(1,0,0)]))]), Transform( children=[ Transform(rotation=(1,0,0,1.57),translation=(.27,0,.5), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Cylinder(height=.2,radius=.01))]), Transform(rotation=(1,0,0,1.57),translation=(-.27,0,.5), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Cylinder(height=.2,radius=.01))]), Transform(rotation=(1,0,0,1.57),translation=(0,.27,.5), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Cylinder(height=.2,radius=.01))]), Transform(rotation=(1,0,0,1.57),translation=(0,-.27,.5), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Cylinder(height=.2,radius=.01))]), Transform(rotation=(1,0,0,1.57),translation=(.19,.19,.5), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Cylinder(height=.2,radius=.01))]), Transform(rotation=(1,0,0,1.57),translation=(-.19,-.19,.5), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Cylinder(height=.2,radius=.01))]), Transform(rotation=(1,0,0,1.57),translation=(-.19,.19,.5), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Cylinder(height=.2,radius=.01))]), Transform(rotation=(1,0,0,1.57),translation=(.19,-.19,.5), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Cylinder(height=.2,radius=.01))])])] # aft radar located near rear of ship on platform ), Transform(DEF='MAST_FWD_RADAR',rotation=(0,0,1,1.17),scale=(.6,.6,.6),translation=(1.2,0,2.2), children=[ Transform(scale=(.28,.28,.2), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Extrusion(creaseAngle=1.5,crossSection=[(1,0),(.707,.707),(0,1),(-.707,.707),(-1,0),(-.707,-.707),(0,-1),(.707,-.707),(1,0)],scale=[(.05,.05),(.05,.05),(.05,.05),(.05,.05)],solid=False,spine=[(.707,.707,0),(0,1,0),(-.707,.707,0),(-1,0,0)]))]), Transform(scale=(.28,.28,.2),translation=(0,0,.1), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Extrusion(creaseAngle=1.5,crossSection=[(1,0),(.707,.707),(0,1),(-.707,.707),(-1,0),(-.707,-.707),(0,-1),(.707,-.707),(1,0)],scale=[(.05,.05),(.05,.05),(.05,.05),(.05,.05)],solid=False,spine=[(.707,.707,0),(0,1,0),(-.707,.707,0),(-1,0,0)]))]), Transform(scale=(.28,.28,.2),translation=(0,0,.2), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Extrusion(creaseAngle=1.5,crossSection=[(1,0),(.707,.707),(0,1),(-.707,.707),(-1,0),(-.707,-.707),(0,-1),(.707,-.707),(1,0)],scale=[(.05,.05),(.05,.05),(.05,.05),(.05,.05)],solid=False,spine=[(.707,.707,0),(0,1,0),(-.707,.707,0),(-1,0,0)]))]), Transform(rotation=(1,0,0,1.57),translation=(-.252,.098,.1), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Cylinder(height=.2,radius=.01))]), Transform(rotation=(1,0,0,1.57),translation=(0,.28,.1), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Cylinder(height=.2,radius=.01))]), Transform(rotation=(1,0,0,1.57),translation=(-.28,0,.1), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Cylinder(height=.2,radius=.01))]), Transform(rotation=(1,0,0,1.57),translation=(.098,.2385,.1), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Cylinder(height=.2,radius=.01))]), Transform(rotation=(1,0,0,1.57),translation=(-.197,.197,.1), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Cylinder(height=.2,radius=.01))]), Transform(rotation=(1,0,0,1.57),translation=(.197,.197,.1), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Cylinder(height=.2,radius=.01))]), Transform(rotation=(1,0,0,1.57),translation=(-.098,.252,.1), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Cylinder(height=.2,radius=.01))]), Transform(rotation=(1,0,0,1.57),translation=(0,0,.035), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Cone(bottomRadius=.05,height=.08))]), Transform(rotation=(0,0,1,-1.21),translation=(-.04,.09,0), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Box(size=(.3,.03,.01)))]), OrientationInterpolator(DEF='RadarPath',key=[0.0,0.50,1.0],keyValue=[(0.0,0.0,1.0,0.0),(0.0,0.0,1.0,3.14),(0.0,0.0,1.0,6.28)]), TimeSensor(DEF='Clock',cycleInterval=4.0,loop=True), ROUTE(fromField='fraction_changed',fromNode='Clock',toField='set_fraction',toNode='RadarPath'), ROUTE(fromField='value_changed',fromNode='RadarPath',toField='set_rotation',toNode='MAST_FWD_RADAR'), Transform(rotation=(1,0,0,1.57),translation=(0,0,-.03), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Cylinder(height=.03,radius=.02))])] # forward main mast radar...rotates on time sensor ), Transform(DEF='MAST_FWD_BEAM',scale=(.8,.06,.02),translation=(.6,0,2.15), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Extrusion(creaseAngle=1.5,crossSection=[(1,0),(.707,.707),(0,1),(-.707,.707),(-1,0),(-.707,-.707),(0,-1),(.707,-.707),(1,0)],scale=[(1.2,1.2),(1,1)],solid=False,spine=[(0,0,0),(1,0,0)]))] # beam which houses forward radar ), Transform(DEF='MAST_AFT_ARM',rotation=(0,0,1,3.14),translation=(1.4,0,-.25), children=[ Transform(DEF='MAST_AFT_BEAM',scale=(.8,.06,.02),translation=(.6,0,2.15), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Extrusion(creaseAngle=1.5,crossSection=[(1,0),(.707,.707),(0,1),(-.707,.707),(-1,0),(-.707,-.707),(0,-1),(.707,-.707),(1,0)],scale=[(1.2,1.2),(1,1)],solid=False,spine=[(0,0,0),(1,0,0)]))]), Transform(DEF='MAST_AFT_RADAR',rotation=(0,0,1,1.17),scale=(.6,.6,.6),translation=(1.2,0,2.2), children=[ Transform(scale=(.28,.28,.2), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Extrusion(creaseAngle=1.5,crossSection=[(1,0),(.707,.707),(0,1),(-.707,.707),(-1,0),(-.707,-.707),(0,-1),(.707,-.707),(1,0)],scale=[(.05,.05),(.05,.05),(.05,.05),(.05,.05)],solid=False,spine=[(.707,.707,0),(0,1,0),(-.707,.707,0),(-1,0,0)]))]), Transform(scale=(.28,.28,.2),translation=(0,0,.1), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Extrusion(creaseAngle=1.5,crossSection=[(1,0),(.707,.707),(0,1),(-.707,.707),(-1,0),(-.707,-.707),(0,-1),(.707,-.707),(1,0)],scale=[(.05,.05),(.05,.05),(.05,.05),(.05,.05)],solid=False,spine=[(.707,.707,0),(0,1,0),(-.707,.707,0),(-1,0,0)]))]), Transform(scale=(.28,.28,.2),translation=(0,0,.2), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Extrusion(creaseAngle=1.5,crossSection=[(1,0),(.707,.707),(0,1),(-.707,.707),(-1,0),(-.707,-.707),(0,-1),(.707,-.707),(1,0)],scale=[(.05,.05),(.05,.05),(.05,.05),(.05,.05)],solid=False,spine=[(.707,.707,0),(0,1,0),(-.707,.707,0),(-1,0,0)]))]), Transform(rotation=(1,0,0,1.57),translation=(-.252,.098,.1), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Cylinder(height=.2,radius=.01))]), Transform(rotation=(1,0,0,1.57),translation=(0,.28,.1), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Cylinder(height=.2,radius=.01))]), Transform(rotation=(1,0,0,1.57),translation=(-.28,0,.1), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Cylinder(height=.2,radius=.01))]), Transform(rotation=(1,0,0,1.57),translation=(.098,.2385,.1), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Cylinder(height=.2,radius=.01))]), Transform(rotation=(1,0,0,1.57),translation=(-.197,.197,.1), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Cylinder(height=.2,radius=.01))]), Transform(rotation=(1,0,0,1.57),translation=(.197,.197,.1), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Cylinder(height=.2,radius=.01))]), Transform(rotation=(1,0,0,1.57),translation=(-.098,.252,.1), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Cylinder(height=.2,radius=.01))]), Transform(rotation=(1,0,0,1.57),translation=(0,0,.035), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Cone(bottomRadius=.05,height=.08))]), Transform(rotation=(0,0,1,-1.21),translation=(-.04,.09,0), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Box(size=(.3,.03,.01)))]), OrientationInterpolator(DEF='RadarPathB',key=[0.0,0.50,1.0],keyValue=[(0.0,0.0,1.0,0.0),(0.0,0.0,1.0,3.14),(0.0,0.0,1.0,6.28)]), TimeSensor(DEF='ClockB',cycleInterval=4.0,loop=True), ROUTE(fromField='fraction_changed',fromNode='ClockB',toField='set_fraction',toNode='RadarPathB'), ROUTE(fromField='value_changed',fromNode='RadarPath',toField='set_rotation',toNode='MAST_AFT_RADAR'), Transform(rotation=(1,0,0,1.57),translation=(0,0,-.03), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Cylinder(height=.03,radius=.02))])]), Transform(DEF='SUPPORTS_LOWER', children=[ Transform(rotation=(0,1,0,1.36),scale=(.02,.02,.86),translation=(0.7,.03,2), children=[ Transform( children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Extrusion(creaseAngle=1.5,crossSection=[(1,0),(.707,.707),(0,1),(-.707,.707),(-1,0),(-.707,-.707),(0,-1),(.707,-.707),(1,0)],scale=[(1.1,1.1),(1,1)],solid=False,spine=[(0,0,0),(0,0,.8)]))])]), Transform(rotation=(0,1,0,1.36),scale=(.02,.02,.86),translation=(0.7,-.03,2), children=[ Transform( children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Extrusion(creaseAngle=1.5,crossSection=[(1,0),(.707,.707),(0,1),(-.707,.707),(-1,0),(-.707,-.707),(0,-1),(.707,-.707),(1,0)],scale=[(1.1,1.1),(1,1)],solid=False,spine=[(0,0,0),(0,0,.8)]))])])])] # includes beam and radar on aft part of main mast ), Transform(DEF='CROW_NEST',scale=(.1,.1,1),translation=(.7,0,2.93), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Extrusion(creaseAngle=1.5,crossSection=[(1,0),(.707,.707),(0,1),(-.707,.707),(-1,0),(-.707,-.707),(0,-1),(.707,-.707),(1,0)],scale=[(.05,.05),(.05,.05),(.05,.05),(.05,.05),(.05,.05),(.05,.05),(.05,.05),(.05,.05),(.05,.05)],solid=False,spine=[(1,0,0),(.707,.707,0),(0,1,0),(-.707,.707,0),(-1,0,0),(-.707,-.707,0),(0,-1,0),(.707,-.707,0),(1,0,0)])), Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Box(size=(1.9,.2,.1)))] # mini-platform on top of main mast that houses main radar ), Transform(DEF='SUPPORTS_UPPER', children=[ Transform( children=[ Transform(rotation=(0,1,0,1.36),scale=(.02,.02,.86),translation=(0.7,.03,2), children=[ Transform( children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Extrusion(creaseAngle=1.5,crossSection=[(1,0),(.707,.707),(0,1),(-.707,.707),(-1,0),(-.707,-.707),(0,-1),(.707,-.707),(1,0)],scale=[(1.1,1.1),(1,1)],solid=False,spine=[(0,0,0),(0,0,.8)]))])]), Transform(rotation=(0,1,0,1.36),scale=(.02,.02,.86),translation=(0.7,-.03,2), children=[ Transform( children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Extrusion(creaseAngle=1.5,crossSection=[(1,0),(.707,.707),(0,1),(-.707,.707),(-1,0),(-.707,-.707),(0,-1),(.707,-.707),(1,0)],scale=[(1.1,1.1),(1,1)],solid=False,spine=[(0,0,0),(0,0,.8)]))])])])] # suppports for main mast beams ), Transform(DEF='LOWER_ARM',scale=(.6,1,1),translation=(.3,0,-.4), children=[ Transform( children=[ Transform( children=[ Transform(rotation=(0,1,0,1.36),scale=(.02,.02,.86),translation=(0.7,.03,2), children=[ Transform( children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Extrusion(creaseAngle=1.5,crossSection=[(1,0),(.707,.707),(0,1),(-.707,.707),(-1,0),(-.707,-.707),(0,-1),(.707,-.707),(1,0)],scale=[(1.1,1.1),(1,1)],solid=False,spine=[(0,0,0),(0,0,.8)]))])]), Transform(rotation=(0,1,0,1.36),scale=(.02,.02,.86),translation=(0.7,-.03,2), children=[ Transform( children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Extrusion(creaseAngle=1.5,crossSection=[(1,0),(.707,.707),(0,1),(-.707,.707),(-1,0),(-.707,-.707),(0,-1),(.707,-.707),(1,0)],scale=[(1.1,1.1),(1,1)],solid=False,spine=[(0,0,0),(0,0,.8)]))])])])]), Transform(scale=(.8,.06,.02),translation=(.6,0,2.15), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Extrusion(creaseAngle=1.5,crossSection=[(1,0),(.707,.707),(0,1),(-.707,.707),(-1,0),(-.707,-.707),(0,-1),(.707,-.707),(1,0)],scale=[(1.2,1.2),(1,1)],solid=False,spine=[(0,0,0),(1,0,0)]))]), Transform(rotation=(1,0,0,1.57),scale=(1.67,1,1),translation=(1.28,0,2.2), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.625,0,.125))), geometry=Cylinder(height=.08,radius=.04,top=False)), Transform(translation=(0,0.04,0), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.625,0,.125))), geometry=Sphere(radius=.04))])])] # forward facing lower beam that houses signal light ), Transform(DEF='NON_SKID'), Switch(whichChoice=0, children=[ Transform(translation=(0,0,.01), children=[ Shape( geometry=Extrusion(creaseAngle=.75,crossSection=[(1,.4),(-1,.4),(-.98,.38),(.98,.38),(1,.4)],orientation=[(0,0,0,0),(0,0,0,0),(0,0,0,0),(0,0,0,0),(0,0,0,0),(1,0,0,-.6)],scale=[(1,1),(1,1),(1,1),(1,1),(1,1),(.01,1.4)],solid=False,spine=[(-5,0,0),(-4.6,0,0),(0,0,0),(2,0,0),(3,0,0),(5,0,0)]), appearance=Appearance( material=Material(diffuseColor=(.2,.2,.2))))])] # non-skid surface on weatherdecks ), Transform(DEF='YARDARM', children=[ Transform(translation=(.7,-.65,2.5), children=[ Transform(DEF='MAST_CROSS_BEAM',rotation=(0,0,1,1.57),scale=(.8,.06,.02), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Extrusion(creaseAngle=1.5,crossSection=[(1,0),(.707,.707),(0,1),(-.707,.707),(-1,0),(-.707,-.707),(0,-1),(.707,-.707),(1,0)],scale=[(1.2,1.2),(1,1)],solid=False,spine=[(0,0,0),(1.6,0,0)]))])]), Transform(rotation=(1,0,0,.2),translation=(0,.2,0), children=[ Transform(rotation=(1,0,0,1.57),translation=(.7,-.3,1.6), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(1,1,1))), geometry=Cylinder(radius=.005))])]), Transform(rotation=(1,0,0,.12),translation=(0,.25,-.05), children=[ Transform(rotation=(1,0,0,1.57),translation=(.7,-.3,1.6), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(1,1,1))), geometry=Cylinder(radius=.005))])]), Transform(rotation=(1,0,0,-.2),translation=(0,.37,-.1), children=[ Transform(rotation=(1,0,0,1.57),translation=(.7,-.3,1.6), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(1,1,1))), geometry=Cylinder(radius=.005))])]), Transform(rotation=(1,0,0,-.12),translation=(0,.33,-.1), children=[ Transform(rotation=(1,0,0,1.57),translation=(.7,-.3,1.6), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(1,1,1))), geometry=Cylinder(radius=.005))])])] # main beam on main mast that is used as flaghoist ), Transform(DEF='MAST_LADDER', children=[ Transform(rotation=(0,0,1,1.57),translation=(.55,0,1.2), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Extrusion(crossSection=[(1,0),(.707,.707),(0,1),(-.707,.707),(-1,0),(-.707,-.707),(0,-1),(.707,-.707),(1,0)],scale=[(.01,.01),(.01,.01),(.01,.01),(.01,.01)],solid=False,spine=[(.08,0,0),(.08,.08,0),(-.08,.08,0),(-.08,0,0)]))]), Transform(rotation=(0,0,1,1.57),translation=(.555,0,1.3), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Extrusion(crossSection=[(1,0),(.707,.707),(0,1),(-.707,.707),(-1,0),(-.707,-.707),(0,-1),(.707,-.707),(1,0)],scale=[(.01,.01),(.01,.01),(.01,.01),(.01,.01)],solid=False,spine=[(.08,0,0),(.08,.08,0),(-.08,.08,0),(-.08,0,0)]))]), Transform(rotation=(0,0,1,1.57),translation=(.56,0,1.4), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Extrusion(crossSection=[(1,0),(.707,.707),(0,1),(-.707,.707),(-1,0),(-.707,-.707),(0,-1),(.707,-.707),(1,0)],scale=[(.01,.01),(.01,.01),(.01,.01),(.01,.01)],solid=False,spine=[(.08,0,0),(.08,.08,0),(-.08,.08,0),(-.08,0,0)]))]), Transform(rotation=(0,0,1,1.57),translation=(.565,0,1.5), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Extrusion(crossSection=[(1,0),(.707,.707),(0,1),(-.707,.707),(-1,0),(-.707,-.707),(0,-1),(.707,-.707),(1,0)],scale=[(.01,.01),(.01,.01),(.01,.01),(.01,.01)],solid=False,spine=[(.08,0,0),(.08,.08,0),(-.08,.08,0),(-.08,0,0)]))]), Transform(rotation=(0,0,1,1.57),translation=(.57,0,1.6), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Extrusion(crossSection=[(1,0),(.707,.707),(0,1),(-.707,.707),(-1,0),(-.707,-.707),(0,-1),(.707,-.707),(1,0)],scale=[(.01,.01),(.01,.01),(.01,.01),(.01,.01)],solid=False,spine=[(.08,0,0),(.08,.08,0),(-.08,.08,0),(-.08,0,0)]))]), Transform(rotation=(0,0,1,1.57),translation=(.575,0,1.7), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Extrusion(crossSection=[(1,0),(.707,.707),(0,1),(-.707,.707),(-1,0),(-.707,-.707),(0,-1),(.707,-.707),(1,0)],scale=[(.01,.01),(.01,.01),(.01,.01),(.01,.01)],solid=False,spine=[(.08,0,0),(.08,.08,0),(-.08,.08,0),(-.08,0,0)]))]), Transform(rotation=(0,0,1,1.57),translation=(.605,0,2), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Extrusion(crossSection=[(1,0),(.707,.707),(0,1),(-.707,.707),(-1,0),(-.707,-.707),(0,-1),(.707,-.707),(1,0)],scale=[(.01,.01),(.01,.01),(.01,.01),(.01,.01)],solid=False,spine=[(.08,0,0),(.08,.08,0),(-.08,.08,0),(-.08,0,0)]))]), Transform(rotation=(0,0,1,1.57),translation=(.61,0,2.1), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Extrusion(crossSection=[(1,0),(.707,.707),(0,1),(-.707,.707),(-1,0),(-.707,-.707),(0,-1),(.707,-.707),(1,0)],scale=[(.01,.01),(.01,.01),(.01,.01),(.01,.01)],solid=False,spine=[(.08,0,0),(.08,.08,0),(-.08,.08,0),(-.08,0,0)]))]), Transform(rotation=(0,0,1,1.57),translation=(.615,0,2.2), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Extrusion(crossSection=[(1,0),(.707,.707),(0,1),(-.707,.707),(-1,0),(-.707,-.707),(0,-1),(.707,-.707),(1,0)],scale=[(.01,.01),(.01,.01),(.01,.01),(.01,.01)],solid=False,spine=[(.08,0,0),(.08,.08,0),(-.08,.08,0),(-.08,0,0)]))]), Transform(rotation=(0,0,1,1.57),translation=(.620,0,2.3), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Extrusion(crossSection=[(1,0),(.707,.707),(0,1),(-.707,.707),(-1,0),(-.707,-.707),(0,-1),(.707,-.707),(1,0)],scale=[(.01,.01),(.01,.01),(.01,.01),(.01,.01)],solid=False,spine=[(.08,0,0),(.08,.08,0),(-.08,.08,0),(-.08,0,0)]))])] # ladder going up aft part of main mast ), Transform(DEF='PORT_BRIDGE_LADDER',translation=(.8,.4,-.4), children=[ Transform(translation=(.55,0,1.2), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Extrusion(crossSection=[(1,0),(.707,.707),(0,1),(-.707,.707),(-1,0),(-.707,-.707),(0,-1),(.707,-.707),(1,0)],scale=[(.01,.01),(.01,.01),(.01,.01),(.01,.01)],solid=False,spine=[(.08,0,0),(.08,.08,0),(-.08,.08,0),(-.08,0,0)]))]), Transform(translation=(.555,0,1.3), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Extrusion(crossSection=[(1,0),(.707,.707),(0,1),(-.707,.707),(-1,0),(-.707,-.707),(0,-1),(.707,-.707),(1,0)],scale=[(.01,.01),(.01,.01),(.01,.01),(.01,.01)],solid=False,spine=[(.08,0,0),(.08,.08,0),(-.08,.08,0),(-.08,0,0)]))]), Transform(translation=(.56,0,1.4), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Extrusion(crossSection=[(1,0),(.707,.707),(0,1),(-.707,.707),(-1,0),(-.707,-.707),(0,-1),(.707,-.707),(1,0)],scale=[(.01,.01),(.01,.01),(.01,.01),(.01,.01)],solid=False,spine=[(.08,0,0),(.08,.08,0),(-.08,.08,0),(-.08,0,0)]))]), Transform(translation=(.565,0,1.5), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Extrusion(crossSection=[(1,0),(.707,.707),(0,1),(-.707,.707),(-1,0),(-.707,-.707),(0,-1),(.707,-.707),(1,0)],scale=[(.01,.01),(.01,.01),(.01,.01),(.01,.01)],solid=False,spine=[(.08,0,0),(.08,.08,0),(-.08,.08,0),(-.08,0,0)]))]), Transform(translation=(.57,0,1.6), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Extrusion(crossSection=[(1,0),(.707,.707),(0,1),(-.707,.707),(-1,0),(-.707,-.707),(0,-1),(.707,-.707),(1,0)],scale=[(.01,.01),(.01,.01),(.01,.01),(.01,.01)],solid=False,spine=[(.08,0,0),(.08,.08,0),(-.08,.08,0),(-.08,0,0)]))]), Transform(translation=(.55,0,1.1), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Extrusion(crossSection=[(1,0),(.707,.707),(0,1),(-.707,.707),(-1,0),(-.707,-.707),(0,-1),(.707,-.707),(1,0)],scale=[(.01,.01),(.01,.01),(.01,.01),(.01,.01)],solid=False,spine=[(.08,0,0),(.08,.08,0),(-.08,.08,0),(-.08,0,0)]))])] # ladder on port side of bridge ), Transform(DEF='STBD_BRIDGE_LADDER',translation=(1.9,-.4,-.4), children=[ Transform(rotation=(0,0,1,3.1416), children=[ Transform(translation=(.55,0,1.2), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Extrusion(crossSection=[(1,0),(.707,.707),(0,1),(-.707,.707),(-1,0),(-.707,-.707),(0,-1),(.707,-.707),(1,0)],scale=[(.01,.01),(.01,.01),(.01,.01),(.01,.01)],solid=False,spine=[(.08,0,0),(.08,.08,0),(-.08,.08,0),(-.08,0,0)]))]), Transform(translation=(.555,0,1.3), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Extrusion(crossSection=[(1,0),(.707,.707),(0,1),(-.707,.707),(-1,0),(-.707,-.707),(0,-1),(.707,-.707),(1,0)],scale=[(.01,.01),(.01,.01),(.01,.01),(.01,.01)],solid=False,spine=[(.08,0,0),(.08,.08,0),(-.08,.08,0),(-.08,0,0)]))]), Transform(translation=(.56,0,1.4), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Extrusion(crossSection=[(1,0),(.707,.707),(0,1),(-.707,.707),(-1,0),(-.707,-.707),(0,-1),(.707,-.707),(1,0)],scale=[(.01,.01),(.01,.01),(.01,.01),(.01,.01)],solid=False,spine=[(.08,0,0),(.08,.08,0),(-.08,.08,0),(-.08,0,0)]))]), Transform(translation=(.565,0,1.5), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Extrusion(crossSection=[(1,0),(.707,.707),(0,1),(-.707,.707),(-1,0),(-.707,-.707),(0,-1),(.707,-.707),(1,0)],scale=[(.01,.01),(.01,.01),(.01,.01),(.01,.01)],solid=False,spine=[(.08,0,0),(.08,.08,0),(-.08,.08,0),(-.08,0,0)]))]), Transform(translation=(.57,0,1.6), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Extrusion(crossSection=[(1,0),(.707,.707),(0,1),(-.707,.707),(-1,0),(-.707,-.707),(0,-1),(.707,-.707),(1,0)],scale=[(.01,.01),(.01,.01),(.01,.01),(.01,.01)],solid=False,spine=[(.08,0,0),(.08,.08,0),(-.08,.08,0),(-.08,0,0)]))]), Transform(translation=(.55,0,1.1), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Extrusion(crossSection=[(1,0),(.707,.707),(0,1),(-.707,.707),(-1,0),(-.707,-.707),(0,-1),(.707,-.707),(1,0)],scale=[(.01,.01),(.01,.01),(.01,.01),(.01,.01)],solid=False,spine=[(.08,0,0),(.08,.08,0),(-.08,.08,0),(-.08,0,0)]))])])] # ladder on starboard side of bridge ), Transform(DEF='FWD_ANT',translation=(1.85,0,1.157), children=[ Transform(rotation=(1,0,0,1.57), children=[ Shape( geometry=Cylinder(height=.1,radius=.02), appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))))]), Transform(rotation=(1,0,0,1.57), children=[ Shape( geometry=Cylinder(height=3,radius=.005), appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))))])] # HF antenna above pilot house ), Transform(DEF='MID_ANT',translation=(-.65,0,.95), children=[ Transform(rotation=(1,0,0,1.57), children=[ Shape( geometry=Cylinder(height=.1,radius=.02), appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))))]), Transform(rotation=(1,0,0,1.57), children=[ Shape( geometry=Cylinder(height=2.8,radius=.005), appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))))])] # HF antenna midships ), Transform(DEF='AFT_ANT',translation=(-2.2,0,.95), children=[ Transform(rotation=(1,0,0,1.57), children=[ Shape( geometry=Cylinder(height=.1,radius=.02), appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))))]), Transform(rotation=(1,0,0,1.57), children=[ Shape( geometry=Cylinder(height=2.8,radius=.005), appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))))])] # HF antenna aft ), Transform( children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))))]), Transform(DEF='MAIN_RADAR',translation=(.7,0,2.95), children=[ Transform(scale=(.25,.25,.25),translation=(.15,0,0), children=[ Transform(rotation=(0,1,0,-.15), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.3,.3,.3))), geometry=Extrusion(crossSection=[(1,.3),(.6,.7),(-.6,.7),(-1,.3),(-1,-.3),(-.6,-.7),(.6,-.7),(1,-.3),(1,.3)],scale=[(1,1),(1,1)],solid=False,spine=[(0,0,0),(.05,0,0)]))]), Transform(translation=(-1.3,0,-.1), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.3,.3,.3))), geometry=Box(size=(.3,.3,.3)))]), Transform(translation=(-.2,0,0), children=[ Transform(rotation=(0,1,0,-.15), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Box(size=(.35,.7,.5)))])]), Transform(rotation=(0,1,0,1.57),scale=(.1,.1,2),translation=(-1.2,0,-.1), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(.6,.6,.6))), geometry=Extrusion(creaseAngle=1.5,crossSection=[(1,0),(.707,.707),(0,1),(-.707,.707),(-1,0),(-.707,-.707),(0,-1),(.707,-.707),(1,0)],scale=[(1.1,1.1),(1,1)],solid=False,spine=[(0,0,0),(0,0,.3)]))])]), OrientationInterpolator(DEF='RadarPathC',key=[0.0,0.50,1.0],keyValue=[(0.0,0.0,1.0,0.0),(0.0,0.0,1.0,3.14),(0.0,0.0,1.0,6.28)]), TimeSensor(DEF='ClockC',cycleInterval=4.0,loop=True), ROUTE(fromField='fraction_changed',fromNode='ClockC',toField='set_fraction',toNode='RadarPathC'), ROUTE(fromField='value_changed',fromNode='RadarPathC',toField='set_rotation',toNode='MAIN_RADAR')] # main radar located on very top of main mast ), Transform(DEF='STBD_RUDDER',translation=(-4.65,-.4,-.77), children=[ Transform(rotation=(0,0,1,-1.57),scale=(2,1,.35), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(1,0,0))), geometry=Extrusion(creaseAngle=1.5,crossSection=[(.01,.2),(-.01,.2),(-.012,.05),(-.01,-.1),(-.008,-.15),(-.005,-.17),(0,-.2),(.005,-.17),(.008,-.15),(.01,-.1),(.012,.05),(.01,.2)],scale=[(1,1),(1,1)],solid=False,spine=[(0,0,0),(0,0,1)]))]), Transform(translation=(.15,0,.32), children=[ Transform(rotation=(1,0,0,1.57), children=[ Shape( geometry=Cylinder(height=.2,radius=.01), appearance=Appearance( material=Material(diffuseColor=(1,0,0))))])])] # starboard rudder ), Transform(DEF='PORT_RUDDER',translation=(-4.65,.4,-.77), children=[ Transform(rotation=(0,0,1,-1.57),scale=(1.5,1,.35), children=[ Shape( appearance=Appearance( material=Material(diffuseColor=(1,0,0))), geometry=Extrusion(creaseAngle=1.5,crossSection=[(.01,.2),(-.01,.2),(-.012,.05),(-.01,-.1),(-.008,-.15),(-.005,-.17),(0,-.2),(.005,-.17),(.008,-.15),(.01,-.1),(.012,.05),(.01,.2)],scale=[(1,1),(1,1)],solid=False,spine=[(0,0,0),(0,0,1)]))]), Transform(translation=(.15,0,.32), children=[ Transform(rotation=(1,0,0,1.57), children=[ Shape( geometry=Cylinder(height=.2,radius=.01), appearance=Appearance( material=Material(diffuseColor=(1,0,0))))])])] # port rudder ), Transform( # 3-shaft propulsion system to include shafts, propellers, and struts. Basis for shafts and propellers taken from James Harney DDG model (see reference). children=[ Inline(url=["Propulsion.x3d","https://savage.nps.edu/Savage/ShipsMilitary/MissileAttackBoatOsaII/Propulsion.x3d","Propulsion.wrl","https://savage.nps.edu/Savage/ShipsMilitary/MissileAttackBoatOsaII/Propulsion.wrl"])]), Group(DEF='WATER', # Switch added to turn off water for easy inlining. children=[ Switch(whichChoice=-1, children=[ Transform(translation=(0,-25,0), children=[ Inline(url=["Water.x3d","https://savage.nps.edu/Savage/ShipsMilitary/MissileAttackBoatOsaII/Water.x3d","Water.wrl","https://savage.nps.edu/Savage/ShipsMilitary/MissileAttackBoatOsaII/Water.wrl"])])])]), Viewpoint(description='Starboard Side',orientation=(1,0,0,1.5),position=(0,-20,4)), Viewpoint(description='Port Side',orientation=(1,0,0,-1.5),position=(0,20,4)), Transform(rotation=(0,0,1,-1.57),translation=(2.5,0,-1), children=[ Transform(rotation=(1,0,0,1.57), children=[ Viewpoint(description='props')])]), Transform(rotation=(0,0,1,-1.57),translation=(3,0,1), children=[ Transform(rotation=(1,0,0,1.4), children=[ Viewpoint(description='launcher')])]), Transform( children=[ Transform(translation=(2.8,0,1), children=[ Transform(rotation=(0,0,1,-1.57), children=[ Transform(rotation=(1,0,0,1.3), children=[ Viewpoint(description='bridge',position=(0,0,0))])])])])])]) ) # X3D model complete #################################################################################################### # Self-test diagnostics #################################################################################################### print('Self-test diagnostics for OsaII.py:') if metaDiagnostics(newModel): # built-in utility method in X3D class print(metaDiagnostics(newModel)) # display meta info, hint, warning, error, TODO values in this model # print('check newModel.XML() serialization...') newModelXML= newModel.XML() # test export method XML() for exceptions during export newModel.XMLvalidate() # print(newModelXML) # diagnostic try: # print('check newModel.VRML() serialization...') newModelVRML=newModel.VRML() # test export method VRML() for exceptions during export # print(prependLineNumbers(newModelVRML)) # debug print("Python-to-VRML export of VRML output successful", flush=True) except Exception as err: # usually BaseException # https://stackoverflow.com/questions/18176602/how-to-get-the-name-of-an-exception-that-was-caught-in-python print("*** Python-to-VRML export of VRML output failed:", type(err).__name__, err) if newModelVRML: # may have failed to generate print(prependLineNumbers(newModelVRML, err.lineno)) try: # print('check newModel.JSON() serialization...') newModelJSON=newModel.JSON() # test export method JSON() for exceptions during export # print(prependLineNumbers(newModelJSON)) # debug print("Python-to-JSON export of JSON output successful (under development)") except Exception as err: # usually SyntaxError print("*** Python-to-JSON export of JSON output failed:", type(err).__name__, err) if newModelJSON: # may have failed to generate print(prependLineNumbers(newModelJSON,err.lineno)) print("python OsaII.py load and self-test diagnostics complete.")