#################################################################################################### # # Invoking X3D model self-test: # # $ python PajekVisualizationExamples.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.2', head=head( children=[ meta(content='PajekVisualizationExamples.x3d',name='title'), meta(content='Reverse engineer and hopefully elaborate on Pajek visualization structures',name='description'), meta(content='Don Brutzman and Elaine Reid',name='creator'), meta(content='17 May 2011',name='created'), meta(content='25 September 2023',name='modified'), meta(content='http://pajek.imfm.si',name='reference'), meta(content='network visualization',name='subject'), meta(content='under development',name='warning'), meta(content='https://savage.nps.edu/Savage/Tools/Visualization/PajekVisualizationExamples.x3d',name='identifier'), meta(content='X3D-Edit, https://savage.nps.edu/X3D-Edit',name='generator'), meta(content='../../license.html',name='license')]), Scene=Scene( children=[ WorldInfo(title='PajekVisualizationExamples.x3d'), ExternProtoDeclare(appinfo='Arc is a network connection between Vertex nodes, displayed using Cylinder/Cone (arrow/arrowhead) geometry with modifiable color and transparency',name='Arc',url=["PajekVisualizationPrototypes.x3d#Arc","https://savage.nps.edu/Savage/Tools/Visualization/PajekVisualizationPrototypes.x3d#Arc"], field=[ field(accessType='inputOutput',appinfo='name to identify this Arc',name='name',type='SFString'), field(accessType='inputOutput',appinfo='popup text describing this Arc',name='description',type='SFString'), field(accessType='initializeOnly',appinfo='length of Arc between Vertex locations',name='cylinderHeight',type='SFFloat'), field(accessType='inputOutput',appinfo='link to some other resource',name='url',type='MFString'), field(accessType='inputOutput',appinfo='location of Arc',name='cylinderTranslation',type='SFVec3f'), field(accessType='inputOutput',appinfo='see TODO items in ArcScript',name='coneTranslation',type='SFVec3f'), field(accessType='inputOutput',appinfo='orientation of Arc',name='rotation',type='SFRotation'), field(accessType='inputOutput',appinfo='rendering choices: BallAndStick, Ball, Stick',name='displayMode',type='SFString'), field(accessType='inputOutput',appinfo='diffuseColor of Arc',name='diffuseColor',type='SFColor'), field(accessType='inputOutput',appinfo='transparency of Arc',name='transparency',type='SFFloat'), field(accessType='inputOutput',appinfo='offset distance for Cone arrowhead; TODO this needs to match values in the Vertex protopye, which is iniitialized separately',name='ballRadius',type='SFFloat'), field(accessType='inputOutput',appinfo='debug trace to Browser output console',name='traceEnabled',type='SFBool')]), ExternProtoDeclare(appinfo='Vertex is a node, typically connected by zero or more Arc segments, and displayed using Sphere geometry with modifiable color and transparency',name='Vertex',url=["PajekVisualizationPrototypes.x3d#Vertex","https://savage.nps.edu/Savage/Tools/Visualization/PajekVisualizationPrototypes.x3d#Vertex"], field=[ field(accessType='inputOutput',appinfo='name to identify this Vertex',name='name',type='SFString'), field(accessType='inputOutput',appinfo='popup text describing this Vertex',name='description',type='SFString'), field(accessType='inputOutput',appinfo='link to some other resource',name='url',type='MFString'), field(accessType='initializeOnly',appinfo='size of Vertex ball',name='radius',type='SFFloat'), field(accessType='inputOutput',appinfo='rendering choices: BallAndStick, Ball, Stick',name='displayMode',type='SFString'), field(accessType='inputOutput',appinfo='diffuseColor of Vertex',name='diffuseColor',type='SFColor'), field(accessType='inputOutput',appinfo='transparency of Vertex',name='transparency',type='SFFloat'), field(accessType='inputOutput',appinfo='location of Vertex',name='translation',type='SFVec3f'), field(accessType='inputOutput',appinfo='labels to identify Vertex',name='vertexText',type='MFString'), field(accessType='inputOutput',appinfo='location of Text',name='textTranslation',type='SFVec3f'), field(accessType='inputOutput',appinfo='diffuseColor of Text',name='textColor',type='SFColor')]), ExternProtoDeclare(appinfo='Text describing what the Vertices and Arcs are about',name='NetworkText',url=["PajekVisualizationPrototypes.x3d#NetworkText","https://savage.nps.edu/Savage/Tools/Visualization/PajekVisualizationPrototypes.x3d#NetworkText"], field=[ field(accessType='inputOutput',appinfo='information to identify the Integral Network',name='text',type='MFString')]), Background(groundAngle=[1.309,1.570796],groundColor=[(0,0.5,0.7),(0,0.4,0.7),(0.6,0.5,0.7)],skyAngle=[1.309,1.571],skyColor=[(0,0.5,0.8),(0,0.6,0.7),(0.6,0.6,0.7)]), PointLight(ambientIntensity=1,location=(0,0,5),radius=30), NavigationInfo(transitionType=["ANIMATE"],type='"EXAMINE" "FLY" "ANY"'), Viewpoint(description='Inspect 15JAN2010Newman',orientation=(1,0,0,-0.0997),position=(0,2,20)), ProtoInstance(name='Arc', fieldValue=[ fieldValue(name='cylinderHeight',value=2.12382), fieldValue(name='cylinderTranslation',value=(1.07012,-0.61874,-0.51894)), fieldValue(name='coneTranslation',value=(1.11550,-0.53349,0.37778)), fieldValue(name='rotation',value=(211.16098,0,-10.68474,1.47613)), fieldValue(name='diffuseColor',value=(0,0,0)), fieldValue(name='ballRadius',value=0.02), fieldValue(name='traceEnabled',value=False), fieldValue(name='displayMode'), fieldValue(name='transparency',value=0)]), ProtoInstance(name='Arc', fieldValue=[ fieldValue(name='cylinderHeight',value=1.29494), fieldValue(name='cylinderTranslation',value=(0.72836,-0.44647,-2.08635)), fieldValue(name='coneTranslation',value=(0.51127,-0.24120,-2.47153)), fieldValue(name='rotation',value=(-102.32120,0,57.66792,1.13614)), fieldValue(name='diffuseColor',value=(0,0,0)), fieldValue(name='ballRadius',value=0.02), fieldValue(name='traceEnabled',value=False), fieldValue(name='displayMode'), fieldValue(name='transparency',value=0)]), ProtoInstance(name='Arc', fieldValue=[ fieldValue(name='cylinderHeight',value=2.17640), fieldValue(name='cylinderTranslation',value=(1.44872,0.26689,-1.41562)), fieldValue(name='coneTranslation',value=(1.81723,1.10793,-1.27988)), fieldValue(name='rotation',value=(31.82626,0,-86.40498,0.43685)), fieldValue(name='diffuseColor',value=(0,0,0)), fieldValue(name='ballRadius',value=0.02), fieldValue(name='traceEnabled',value=False), fieldValue(name='displayMode'), fieldValue(name='transparency',value=0)]), ProtoInstance(name='Arc', fieldValue=[ fieldValue(name='cylinderHeight',value=2.12631), fieldValue(name='cylinderTranslation',value=(1.60800,-0.91294,-0.71272)), fieldValue(name='coneTranslation',value=(2.11031,-1.07760,0.01958)), fieldValue(name='rotation',value=(172.40580,0,-118.25958,1.75414)), fieldValue(name='diffuseColor',value=(0,0,0)), fieldValue(name='ballRadius',value=0.02), fieldValue(name='traceEnabled',value=False), fieldValue(name='displayMode'), fieldValue(name='transparency',value=0)]), ProtoInstance(name='Arc', fieldValue=[ fieldValue(name='cylinderHeight',value=1.29100), fieldValue(name='cylinderTranslation',value=(1.29461,-0.74199,-2.15691)), fieldValue(name='coneTranslation',value=(1.50364,-0.75920,-2.59477)), fieldValue(name='rotation',value=(-116.43200,0,-55.58302,1.60625)), fieldValue(name='diffuseColor',value=(0,0,0)), fieldValue(name='ballRadius',value=0.02), fieldValue(name='traceEnabled',value=False), fieldValue(name='displayMode'), fieldValue(name='transparency',value=0)]), ProtoInstance(name='Arc', fieldValue=[ fieldValue(name='cylinderHeight',value=2.07177), fieldValue(name='cylinderTranslation',value=(1.87785,-0.97752,-2.08924)), fieldValue(name='coneTranslation',value=(2.60598,-1.19601,-2.52427)), fieldValue(name='rotation',value=(-102.89894,0,-172.22957,1.82291)), fieldValue(name='diffuseColor',value=(0,0,0)), fieldValue(name='ballRadius',value=0.02), fieldValue(name='traceEnabled',value=False), fieldValue(name='displayMode'), fieldValue(name='transparency',value=0)]), ProtoInstance(name='Arc', fieldValue=[ fieldValue(name='cylinderHeight',value=2.10659), fieldValue(name='cylinderTranslation',value=(0.72035,-1.72967,-1.55509)), fieldValue(name='coneTranslation',value=(0.46903,-2.58671,-1.53841)), fieldValue(name='rotation',value=(3.93178,-0.00000,59.26904,2.85575)), fieldValue(name='diffuseColor',value=(0,0,0)), fieldValue(name='ballRadius',value=0.02), fieldValue(name='traceEnabled',value=False), fieldValue(name='displayMode'), fieldValue(name='transparency',value=0)]), ProtoInstance(name='Arc', fieldValue=[ fieldValue(name='cylinderHeight',value=2.11620), fieldValue(name='cylinderTranslation',value=(0.20491,-0.11862,-1.89095)), fieldValue(name='coneTranslation',value=(-0.48412,0.39108,-2.15934)), fieldValue(name='rotation',value=(-63.24083,0,162.35718,0.96730)), fieldValue(name='diffuseColor',value=(0,0,0)), fieldValue(name='ballRadius',value=0.02), fieldValue(name='traceEnabled',value=False), fieldValue(name='displayMode'), fieldValue(name='transparency',value=0)]), ProtoInstance(name='Arc', fieldValue=[ fieldValue(name='cylinderHeight',value=2.12823), fieldValue(name='cylinderTranslation',value=(0.22046,-1.38843,-1.35034)), fieldValue(name='coneTranslation',value=(-0.45606,-1.95711,-1.15968)), fieldValue(name='rotation',value=(44.88093,-0.00000,159.24773,2.25105)), fieldValue(name='diffuseColor',value=(0,0,0)), fieldValue(name='ballRadius',value=0.02), fieldValue(name='traceEnabled',value=False), fieldValue(name='displayMode'), fieldValue(name='transparency',value=0)]), ProtoInstance(name='Arc', fieldValue=[ fieldValue(name='cylinderHeight',value=1.28595), fieldValue(name='cylinderTranslation',value=(1.66142,-0.81257,0.34309)), fieldValue(name='coneTranslation',value=(2.06545,-1.03356,0.19753)), fieldValue(name='rotation',value=(-38.75518,0,-107.57484,2.04606)), fieldValue(name='diffuseColor',value=(0,0,0)), fieldValue(name='ballRadius',value=0.02), fieldValue(name='traceEnabled',value=False), fieldValue(name='displayMode'), fieldValue(name='transparency',value=0)]), ProtoInstance(name='Arc', fieldValue=[ fieldValue(name='cylinderHeight',value=1.28523), fieldValue(name='cylinderTranslation',value=(1.00628,-0.46935,-2.66851)), fieldValue(name='coneTranslation',value=(1.43154,-0.69129,-2.72150)), fieldValue(name='rotation',value=(-14.11080,0,-113.25094,2.04865)), fieldValue(name='diffuseColor',value=(0,0,0)), fieldValue(name='ballRadius',value=0.02), fieldValue(name='traceEnabled',value=False), fieldValue(name='displayMode'), fieldValue(name='transparency',value=0)]), ProtoInstance(name='Arc', fieldValue=[ fieldValue(name='cylinderHeight',value=1.29563), fieldValue(name='cylinderTranslation',value=(-0.08343,0.15403,-2.40256)), fieldValue(name='coneTranslation',value=(-0.47759,0.40091,-2.25542)), fieldValue(name='rotation',value=(39.08037,-0.00000,104.68925,1.04015)), fieldValue(name='diffuseColor',value=(0,0,0)), fieldValue(name='ballRadius',value=0.02), fieldValue(name='traceEnabled',value=False), fieldValue(name='displayMode'), fieldValue(name='transparency',value=0)]), ProtoInstance(name='Arc', fieldValue=[ fieldValue(name='cylinderHeight',value=1.26525), fieldValue(name='cylinderTranslation',value=(2.15576,-1.00040,-2.67140)), fieldValue(name='coneTranslation',value=(2.59149,-1.17635,-2.62085)), fieldValue(name='rotation',value=(13.53306,0,-116.64655,1.95228)), fieldValue(name='diffuseColor',value=(0,0,0)), fieldValue(name='ballRadius',value=0.02), fieldValue(name='traceEnabled',value=False), fieldValue(name='displayMode'), fieldValue(name='transparency',value=0)]), ProtoInstance(name='Arc', fieldValue=[ fieldValue(name='cylinderHeight',value=1.27790), fieldValue(name='cylinderTranslation',value=(-0.07588,-2.39898,-1.33068)), fieldValue(name='coneTranslation',value=(-0.45060,-2.14320,-1.17721)), fieldValue(name='rotation',value=(40.94915,-0.00000,99.97869,1.00740)), fieldValue(name='diffuseColor',value=(0,0,0)), fieldValue(name='ballRadius',value=0.02), fieldValue(name='traceEnabled',value=False), fieldValue(name='displayMode'), fieldValue(name='transparency',value=0)]), ProtoInstance(name='Vertex', fieldValue=[ fieldValue(name='vertexText',value=["2010-01-30-API.FLICKR.COM-SERVICES"]), fieldValue(name='description',value='1: 2010-01-30-API.FLICKR.COM-SERVICES'), fieldValue(name='url'), fieldValue(name='radius',value=0.1500), fieldValue(name='displayMode'), fieldValue(name='diffuseColor',value=(0,0,0)), fieldValue(name='transparency',value=0), fieldValue(name='translation',value=(1.01670,-0.71911,-1.57475)), fieldValue(name='textTranslation',value=(1.16670,-0.71911,-1.57475)), fieldValue(name='textColor',value=(0,0,0))]), ProtoInstance(name='Vertex', fieldValue=[ fieldValue(name='vertexText',value=["Haiti/2010-01-30/Association_prob_NONE_Haiti_Cat5.txt.file.2010-01-30.simple"]), fieldValue(name='description',value='2: Haiti/2010-01-30/Association_prob_NONE_Haiti_Cat5.txt.file.2010-01-30.simple'), fieldValue(name='url'), fieldValue(name='radius',value=0.1500), fieldValue(name='displayMode'), fieldValue(name='diffuseColor',value=(0.5020,0,0)), fieldValue(name='transparency',value=0), fieldValue(name='translation',value=(-2.73900,2.74022,2.73907)), fieldValue(name='textTranslation',value=(-2.58900,2.74022,2.73907)), fieldValue(name='textColor',value=(0,0,0))]), ProtoInstance(name='Vertex', fieldValue=[ fieldValue(name='vertexText',value=["building"]), fieldValue(name='description',value='3: building'), fieldValue(name='url'), fieldValue(name='radius',value=0.1500), fieldValue(name='displayMode'), fieldValue(name='diffuseColor',value=(1.0000,0,0)), fieldValue(name='transparency',value=0), fieldValue(name='translation',value=(1.12355,-0.51836,0.53686)), fieldValue(name='textTranslation',value=(1.27355,-0.51836,0.53686)), fieldValue(name='textColor',value=(0,0,0))]), ProtoInstance(name='Vertex', fieldValue=[ fieldValue(name='vertexText',value=["credit"]), fieldValue(name='description',value='4: credit'), fieldValue(name='url'), fieldValue(name='radius',value=0.1500), fieldValue(name='displayMode'), fieldValue(name='diffuseColor',value=(0,0,0)), fieldValue(name='transparency',value=0), fieldValue(name='translation',value=(0.44002,-0.17382,-2.59796)), fieldValue(name='textTranslation',value=(0.59002,-0.17382,-2.59796)), fieldValue(name='textColor',value=(0,0,0))]), ProtoInstance(name='Vertex', fieldValue=[ fieldValue(name='vertexText',value=["man"]), fieldValue(name='description',value='5: man'), fieldValue(name='url'), fieldValue(name='radius',value=0.1500), fieldValue(name='displayMode'), fieldValue(name='diffuseColor',value=(0,0,0)), fieldValue(name='transparency',value=0), fieldValue(name='translation',value=(1.88075,1.25290,-1.25648)), fieldValue(name='textTranslation',value=(2.03075,1.25290,-1.25648)), fieldValue(name='textColor',value=(0,0,0))]), ProtoInstance(name='Vertex', fieldValue=[ fieldValue(name='vertexText',value=["part"]), fieldValue(name='description',value='6: part'), fieldValue(name='url'), fieldValue(name='radius',value=0.1500), fieldValue(name='displayMode'), fieldValue(name='diffuseColor',value=(1.0000,0,0)), fieldValue(name='transparency',value=0), fieldValue(name='translation',value=(2.19930,-1.10677,0.14931)), fieldValue(name='textTranslation',value=(2.34930,-1.10677,0.14931)), fieldValue(name='textColor',value=(0,0,0))]), ProtoInstance(name='Vertex', fieldValue=[ fieldValue(name='vertexText',value=["photo"]), fieldValue(name='description',value='7: photo'), fieldValue(name='url'), fieldValue(name='radius',value=0.1500), fieldValue(name='displayMode'), fieldValue(name='diffuseColor',value=(0,0,0)), fieldValue(name='transparency',value=0), fieldValue(name='translation',value=(1.57253,-0.76487,-2.73907)), fieldValue(name='textTranslation',value=(1.72253,-0.76487,-2.73907)), fieldValue(name='textColor',value=(0,0,0))]), ProtoInstance(name='Vertex', fieldValue=[ fieldValue(name='vertexText',value=["program"]), fieldValue(name='description',value='8: program'), fieldValue(name='url'), fieldValue(name='radius',value=0.1500), fieldValue(name='displayMode'), fieldValue(name='diffuseColor',value=(0,0,0)), fieldValue(name='transparency',value=0), fieldValue(name='translation',value=(2.73900,-1.23592,-2.60374)), fieldValue(name='textTranslation',value=(2.88900,-1.23592,-2.60374)), fieldValue(name='textColor',value=(0,0,0))]), ProtoInstance(name='Vertex', fieldValue=[ fieldValue(name='vertexText',value=["removes"]), fieldValue(name='description',value='9: removes'), fieldValue(name='url'), fieldValue(name='radius',value=0.1500), fieldValue(name='displayMode'), fieldValue(name='diffuseColor',value=(0,0,1.0000)), fieldValue(name='transparency',value=0), fieldValue(name='translation',value=(0.42401,-2.74022,-1.53543)), fieldValue(name='textTranslation',value=(0.57401,-2.74022,-1.53543)), fieldValue(name='textColor',value=(0,0,0))]), ProtoInstance(name='Vertex', fieldValue=[ fieldValue(name='vertexText',value=["robert"]), fieldValue(name='description',value='10: robert'), fieldValue(name='url'), fieldValue(name='radius',value=0.1500), fieldValue(name='displayMode'), fieldValue(name='diffuseColor',value=(0,0,0)), fieldValue(name='transparency',value=0), fieldValue(name='translation',value=(-0.60687,0.48188,-2.20715)), fieldValue(name='textTranslation',value=(-0.45687,0.48188,-2.20715)), fieldValue(name='textColor',value=(0,0,0))]), ProtoInstance(name='Vertex', fieldValue=[ fieldValue(name='vertexText',value=["rubble"]), fieldValue(name='description',value='11: rubble'), fieldValue(name='url'), fieldValue(name='radius',value=0.1500), fieldValue(name='displayMode'), fieldValue(name='diffuseColor',value=(0,0,1.0000)), fieldValue(name='transparency',value=0), fieldValue(name='translation',value=(-0.57578,-2.05775,-1.12594)), fieldValue(name='textTranslation',value=(-0.42578,-2.05775,-1.12594)), fieldValue(name='textColor',value=(0,0,0))])]) ) # X3D model complete #################################################################################################### # Self-test diagnostics #################################################################################################### print('Self-test diagnostics for PajekVisualizationExamples.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 PajekVisualizationExamples.py load and self-test diagnostics complete.")