#################################################################################################### # # Invoking X3D model self-test: # # $ python OpenWaterMission1.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=[ # Mission metadata # AVCL to X3D autoconversion stylesheet metadata meta(content='OpenWaterMission1.x3d',name='title'), meta(content='AVCL 1.0 mission generated via XSLT from ACL 0.1 (AUV missions only) mission. Autogenerated X3D scene illustrating an AVCL mission for the AUV Workbench.',name='description'), meta(content='Duane Davis',name='creator'), meta(content='1 October 2004',name='created'), meta(content='27 April 2024',name='modified'), meta(content='AvclToX3d.xslt',name='generator'), meta(content='Dieter Jahn, Sidhom Mounir, Duane Davis and Don Brutzman',name='creator'), meta(content='AVCL, XML to X3d Conversion, template, viewpoint calculation',name='subject'), meta(content='https://savage.nps.edu/Savage/AuvWorkbench/AVCL/OpenWaterMission1.x3d',name='identifier'), meta(content='X3D-Edit 3.2, https://savage.nps.edu/X3D-Edit',name='generator'), meta(content='../../license.html',name='license')]), Scene=Scene( children=[ WorldInfo(title='OpenWaterMission1.x3d'), NavigationInfo(speed=20), Group( children=[ Group(DEF='Viewpoints', children=[ Viewpoint(DEF='UUVMissionMainView',description='UUV Mission main view',position=(250,0,1000)), Viewpoint(DEF='UUVMissionUpperView',description='UUV Mission upper view',orientation=(-1.0,0.0,0.0,1.59),position=(250,1000,0))]), Background(DEF='SandyShallowBottomBackground',groundAngle=[0.05,1.52,1.56,1.570796],groundColor=[(0.2,0.2,0),(0.3,0.3,0),(0.5,0.5,0.3),(0.1,0.3,0.4),(0,0.2,0.4)],skyAngle=[0.05,0.1,1.309,1.571],skyColor=[(0.8,0.8,0.2),(0.1,0.1,0.6),(0.1,0.1,0.6),(0.1,0.25,0.8),(0.6,0.6,0.9)]), Shape( appearance=Appearance( material=Material(emissiveColor=(0.8,0.8,0.1))), geometry=IndexedLineSet(coordIndex=[0,1,2,3,4,5,6,7,8,9,10,11,12], coord=Coordinate(point=[(0.0,0,0.0),(100.0,-45,100.0),(500.0,-45,100.0),(500.0,-45,200.0),(100.0,-45,200.0),(100.0,-45,300.0),(500.0,-45,300.0),(500.0,-45,400.0),(100.0,-45,400.0),(100.0,-45,500.0),(500.0,-45,500.0),(100.0,-45,75.0),(0.0,0,0.0)]))), # These defaults are nonrendering Shape(DEF='DefaultStyleDEFs', appearance=Appearance(DEF='BillboardAppearance', material=Material(emissiveColor=(0.8,0.8,0.1))), geometry=Text( fontStyle=FontStyle(DEF='MiddleJustifyFontStyle',justify=["MIDDLE","MIDDLE"]))), Switch(whichChoice=-1, children=[ Shape(DEF='MilestoneMarkerShape', geometry=Box(size=(0.3,1,0.3)), appearance=Appearance(USE='BillboardAppearance'))])]), Collision(DEF='AllWaypointBillboards',enabled=False, children=[ Transform(DEF='Position0Transform',translation=(0,0,0.0), children=[ Viewpoint(DEF='Position0Viewpoint',description='UUV Mission [0] Position (0 0 0.0)'), Shape(USE='MilestoneMarkerShape'), Transform(translation=(0,2,0), children=[ Billboard( children=[ Shape( geometry=Text(string=["UUV Mission","[0] Position","0 2 0.0"], fontStyle=FontStyle(USE='MiddleJustifyFontStyle')), appearance=Appearance(USE='BillboardAppearance'))])])]), Transform(DEF='Waypoint2Transform',translation=(100,-45,100.0), children=[ Viewpoint(DEF='Waypoint2Viewpoint',description='UUV Mission [2] Waypoint (100 -45 100.0)'), Shape(USE='MilestoneMarkerShape'), Transform(translation=(0,2,0), children=[ Billboard( children=[ Shape( geometry=Text(string=["UUV Mission","[2] Waypoint","100 -43 100.0"], fontStyle=FontStyle(USE='MiddleJustifyFontStyle')), appearance=Appearance(USE='BillboardAppearance'))])])]), Transform(DEF='Waypoint3Transform',translation=(500,-45,100.0), children=[ Viewpoint(DEF='Waypoint3Viewpoint',description='UUV Mission [3] Waypoint (500 -45 100.0)'), Shape(USE='MilestoneMarkerShape'), Transform(translation=(0,2,0), children=[ Billboard( children=[ Shape( geometry=Text(string=["UUV Mission","[3] Waypoint","500 -43 100.0"], fontStyle=FontStyle(USE='MiddleJustifyFontStyle')), appearance=Appearance(USE='BillboardAppearance'))])])]), Transform(DEF='Waypoint4Transform',translation=(500,-45,200.0), children=[ Viewpoint(DEF='Waypoint4Viewpoint',description='UUV Mission [4] Waypoint (500 -45 200.0)'), Shape(USE='MilestoneMarkerShape'), Transform(translation=(0,2,0), children=[ Billboard( children=[ Shape( geometry=Text(string=["UUV Mission","[4] Waypoint","500 -43 200.0"], fontStyle=FontStyle(USE='MiddleJustifyFontStyle')), appearance=Appearance(USE='BillboardAppearance'))])])]), Transform(DEF='Waypoint5Transform',translation=(100,-45,200.0), children=[ Viewpoint(DEF='Waypoint5Viewpoint',description='UUV Mission [5] Waypoint (100 -45 200.0)'), Shape(USE='MilestoneMarkerShape'), Transform(translation=(0,2,0), children=[ Billboard( children=[ Shape( geometry=Text(string=["UUV Mission","[5] Waypoint","100 -43 200.0"], fontStyle=FontStyle(USE='MiddleJustifyFontStyle')), appearance=Appearance(USE='BillboardAppearance'))])])]), Transform(DEF='Waypoint6Transform',translation=(100,-45,300.0), children=[ Viewpoint(DEF='Waypoint6Viewpoint',description='UUV Mission [6] Waypoint (100 -45 300.0)'), Shape(USE='MilestoneMarkerShape'), Transform(translation=(0,2,0), children=[ Billboard( children=[ Shape( geometry=Text(string=["UUV Mission","[6] Waypoint","100 -43 300.0"], fontStyle=FontStyle(USE='MiddleJustifyFontStyle')), appearance=Appearance(USE='BillboardAppearance'))])])]), Transform(DEF='Waypoint7Transform',translation=(500,-45,300.0), children=[ Viewpoint(DEF='Waypoint7Viewpoint',description='UUV Mission [7] Waypoint (500 -45 300.0)'), Shape(USE='MilestoneMarkerShape'), Transform(translation=(0,2,0), children=[ Billboard( children=[ Shape( geometry=Text(string=["UUV Mission","[7] Waypoint","500 -43 300.0"], fontStyle=FontStyle(USE='MiddleJustifyFontStyle')), appearance=Appearance(USE='BillboardAppearance'))])])]), Transform(DEF='Waypoint8Transform',translation=(500,-45,400.0), children=[ Viewpoint(DEF='Waypoint8Viewpoint',description='UUV Mission [8] Waypoint (500 -45 400.0)'), Shape(USE='MilestoneMarkerShape'), Transform(translation=(0,2,0), children=[ Billboard( children=[ Shape( geometry=Text(string=["UUV Mission","[8] Waypoint","500 -43 400.0"], fontStyle=FontStyle(USE='MiddleJustifyFontStyle')), appearance=Appearance(USE='BillboardAppearance'))])])]), Transform(DEF='Waypoint9Transform',translation=(100,-45,400.0), children=[ Viewpoint(DEF='Waypoint9Viewpoint',description='UUV Mission [9] Waypoint (100 -45 400.0)'), Shape(USE='MilestoneMarkerShape'), Transform(translation=(0,2,0), children=[ Billboard( children=[ Shape( geometry=Text(string=["UUV Mission","[9] Waypoint","100 -43 400.0"], fontStyle=FontStyle(USE='MiddleJustifyFontStyle')), appearance=Appearance(USE='BillboardAppearance'))])])]), Transform(DEF='Waypoint10Transform',translation=(100,-45,500.0), children=[ Viewpoint(DEF='Waypoint10Viewpoint',description='UUV Mission [10] Waypoint (100 -45 500.0)'), Shape(USE='MilestoneMarkerShape'), Transform(translation=(0,2,0), children=[ Billboard( children=[ Shape( geometry=Text(string=["UUV Mission","[10] Waypoint","100 -43 500.0"], fontStyle=FontStyle(USE='MiddleJustifyFontStyle')), appearance=Appearance(USE='BillboardAppearance'))])])]), Transform(DEF='Waypoint11Transform',translation=(500,-45,500.0), children=[ Viewpoint(DEF='Waypoint11Viewpoint',description='UUV Mission [11] Waypoint (500 -45 500.0)'), Shape(USE='MilestoneMarkerShape'), Transform(translation=(0,2,0), children=[ Billboard( children=[ Shape( geometry=Text(string=["UUV Mission","[11] Waypoint","500 -43 500.0"], fontStyle=FontStyle(USE='MiddleJustifyFontStyle')), appearance=Appearance(USE='BillboardAppearance'))])])]), Transform(DEF='Waypoint12Transform',translation=(100,-45,75.0), children=[ Viewpoint(DEF='Waypoint12Viewpoint',description='UUV Mission [12] Waypoint (100 -45 75.0)'), Shape(USE='MilestoneMarkerShape'), Transform(translation=(0,2,0), children=[ Billboard( children=[ Shape( geometry=Text(string=["UUV Mission","[12] Waypoint","100 -43 75.0"], fontStyle=FontStyle(USE='MiddleJustifyFontStyle')), appearance=Appearance(USE='BillboardAppearance'))])])]), Transform(DEF='Waypoint13Transform',translation=(0,0,0.0), children=[ Viewpoint(DEF='Waypoint13Viewpoint',description='UUV Mission [13] Waypoint (0 0 0.0)'), Shape(USE='MilestoneMarkerShape'), Transform(translation=(0,2,0), children=[ Billboard( children=[ Shape( geometry=Text(string=["UUV Mission","[13] Waypoint","0 2 0.0"], fontStyle=FontStyle(USE='MiddleJustifyFontStyle')), appearance=Appearance(USE='BillboardAppearance'))])])])])]) ) # X3D model complete #################################################################################################### # Self-test diagnostics #################################################################################################### print('Self-test diagnostics for OpenWaterMission1.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 OpenWaterMission1.py load and self-test diagnostics complete.")