Appearance53.setMaterial(Material54) Shape52.setAppearance(Appearance53) Cylinder55 = x3dpsail.Cylinder() Cylinder55.setRadius(0.05) Shape52.setGeometry(Cylinder55) Transform51.addChildren(Shape52) Transform50.addChildren(Transform51) Scene7.addChildren(Transform50) ProtoDeclare56 = x3dpsail.ProtoDeclare() ProtoDeclare56.setName("x3dconnector") ProtoInterface57 = x3dpsail.ProtoInterface() field58 = x3dpsail.field() field58.setName("startnode") field58.setAccessType("initializeOnly") field58.setType("SFNode") ProtoInterface57.addField(field58) field59 = x3dpsail.field() field59.setName("endnode") field59.setAccessType("initializeOnly") field59.setType("SFNode") ProtoInterface57.addField(field59) field60 = x3dpsail.field() field60.setName("transnode") field60.setAccessType("initializeOnly")
meta6 = x3dpsail.meta() meta6.setName("description") meta6.setContent("beginnings of a force directed graph in 3D") head1.addMeta(meta6) meta7 = x3dpsail.meta() meta7.setName("generator") meta7.setContent("Vim, X3D-Edit, https://savage.nps.edu/X3D-Edit") head1.addMeta(meta7) X3D0.setHead(head1) Scene8 = x3dpsail.Scene() ProtoDeclare9 = x3dpsail.ProtoDeclare() ProtoDeclare9.setName("node") ProtoInterface10 = x3dpsail.ProtoInterface() field11 = x3dpsail.field() field11.setName("position") field11.setAccessType("inputOutput") field11.setType("SFVec3f") field11.setValue("0 0 0") ProtoInterface10.addField(field11) ProtoDeclare9.setProtoInterface(ProtoInterface10) ProtoBody12 = x3dpsail.ProtoBody() Transform13 = x3dpsail.Transform() Transform13.setDEF("transform") IS14 = x3dpsail.IS() connect15 = x3dpsail.connect() connect15.setNodeField("translation")
.setAppearance(x3dpsail.Appearance() .setMaterial(x3dpsail.Material().setDiffuseColor(x3dpsail.SFColor(0.2,0.7,0.2)))) .setGeometry(x3dpsail.Sphere().setRadius(x3dpsail.SFFloat(0.1)))) .addChild(x3dpsail.PlaneSensor().setDescription(x3dpsail.SFString("Grab to move")).setOffset(x3dpsail.SFVec3f(1,-1,0.01)).setDEF(x3dpsail.SFString("PS2"))) .addChild(x3dpsail.ROUTE().setFromNode(x3dpsail.SFString("PS2")).setFromField(x3dpsail.SFString("translation_changed")).setToNode(x3dpsail.SFString("G2")).setToField(x3dpsail.SFString("set_translation")))) .addChild(x3dpsail.Transform().setDEF(x3dpsail.SFString("transC1")) .addChild(x3dpsail.Transform().setDEF(x3dpsail.SFString("rotscaleC1")) .addChild(x3dpsail.Shape() .setAppearance(x3dpsail.Appearance() .setMaterial(x3dpsail.Material().setDiffuseColor(x3dpsail.SFColor(0.2,0.7,0.7)).setTransparency(x3dpsail.SFFloat(0.5)))) .setGeometry(x3dpsail.Cylinder().setRadius(x3dpsail.SFFloat(0.05)))))) .addChild(x3dpsail.ProtoDeclare().setName(x3dpsail.SFString("x3dconnector")) .setProtoInterface(x3dpsail.ProtoInterface() .addField(x3dpsail.field().setName(x3dpsail.SFString("startnode")).setAccessType(x3dpsail.SFString("initializeOnly")).setType(x3dpsail.SFString("SFNode"))) .addField(x3dpsail.field().setName(x3dpsail.SFString("endnode")).setAccessType(x3dpsail.SFString("initializeOnly")).setType(x3dpsail.SFString("SFNode"))) .addField(x3dpsail.field().setName(x3dpsail.SFString("transnode")).setAccessType(x3dpsail.SFString("initializeOnly")).setType(x3dpsail.SFString("SFNode"))) .addField(x3dpsail.field().setName(x3dpsail.SFString("rotscalenode")).setAccessType(x3dpsail.SFString("initializeOnly")).setType(x3dpsail.SFString("SFNode"))) .addField(x3dpsail.field().setName(x3dpsail.SFString("set_startpoint")).setAccessType(x3dpsail.SFString("inputOnly")).setType(x3dpsail.SFString("SFVec3f"))) .addField(x3dpsail.field().setName(x3dpsail.SFString("set_endpoint")).setAccessType(x3dpsail.SFString("inputOnly")).setType(x3dpsail.SFString("SFVec3f")))) .setProtoBody(x3dpsail.ProtoBody() .addChild(x3dpsail.Script().setDEF(x3dpsail.SFString("S1")) .addField(x3dpsail.field().setName(x3dpsail.SFString("startnode")).setAccessType(x3dpsail.SFString("initializeOnly")).setType(x3dpsail.SFString("SFNode"))) .addField(x3dpsail.field().setName(x3dpsail.SFString("endnode")).setAccessType(x3dpsail.SFString("initializeOnly")).setType(x3dpsail.SFString("SFNode"))) .addField(x3dpsail.field().setName(x3dpsail.SFString("transnode")).setAccessType(x3dpsail.SFString("initializeOnly")).setType(x3dpsail.SFString("SFNode"))) .addField(x3dpsail.field().setName(x3dpsail.SFString("rotscalenode")).setAccessType(x3dpsail.SFString("initializeOnly")).setType(x3dpsail.SFString("SFNode"))) .addField(x3dpsail.field().setName(x3dpsail.SFString("set_startpoint")).setAccessType(x3dpsail.SFString("inputOnly")).setType(x3dpsail.SFString("SFVec3f"))) .addField(x3dpsail.field().setName(x3dpsail.SFString("set_endpoint")).setAccessType(x3dpsail.SFString("inputOnly")).setType(x3dpsail.SFString("SFVec3f"))) .setIS(x3dpsail.IS() .addConnect(x3dpsail.connect().setNodeField(x3dpsail.SFString("startnode")).setProtoField(x3dpsail.SFString("startnode"))) .addConnect(x3dpsail.connect().setNodeField(x3dpsail.SFString("endnode")).setProtoField(x3dpsail.SFString("endnode"))) .addConnect(x3dpsail.connect().setNodeField(x3dpsail.SFString("transnode")).setProtoField(x3dpsail.SFString("transnode")))
).addMeta(x3dpsail.meta().setName( x3dpsail.SFString("description")).setContent( x3dpsail.SFString("a white rubik cube"))) ).setScene(x3dpsail.Scene().addChild(x3dpsail.NavigationInfo().setType( x3dpsail.MFString([ "EXAMINE" ]))).addChild(x3dpsail.Viewpoint().setDescription( x3dpsail.SFString("Rubiks Cube on Fire")).setPosition( x3dpsail.SFVec3f(0, 0, 12))).addChild(x3dpsail.ProtoDeclare( ).setName(x3dpsail.SFString("anyShape")).setProtoInterface( x3dpsail.ProtoInterface().addField( x3dpsail.field().setName( x3dpsail.SFString("xtranslation")).setAccessType( x3dpsail.SFString("inputOutput")).setType( x3dpsail.SFString("SFVec3f")).setValue( x3dpsail.SFString("0 0 0"))). addField(x3dpsail.field().setName( x3dpsail.SFString("myShape")).setAccessType( x3dpsail.SFString("inputOutput")).setType( x3dpsail.SFString("SFNode")).addChild( x3dpsail.Sphere())) ).setProtoBody(x3dpsail.ProtoBody().addChild( x3dpsail.Transform().setIS(x3dpsail.IS().addConnect( x3dpsail.connect().setNodeField( x3dpsail.SFString("translation")).setProtoField( x3dpsail.SFString("xtranslation")))). addChild(x3dpsail.Shape().setIS(x3dpsail.IS().addConnect( x3dpsail.connect().setNodeField( x3dpsail.SFString("geometry")).setProtoField( x3dpsail.SFString("myShape")))).setAppearance( x3dpsail.Appearance().setMaterial(
)).addChild(x3dpsail.ProtoDeclare().setName( x3dpsail .SFString("NewWorldInfoNode") ).setProtoBody(x3dpsail.ProtoBody().addChild(x3dpsail.WorldInfo().setDEF( x3dpsail .SFString("ExamplePrototypeBody") )))).addChild(x3dpsail.ProtoInstance().setName( x3dpsail .SFString("NewWorldInfoNode") )).addChild(x3dpsail.ProtoDeclare().setName( x3dpsail .SFString("EmissiveMaterial") ).setProtoInterface(x3dpsail.ProtoInterface().addField( x3dpsail .field() .setName(x3dpsail.SFString("onlyColor")) .setAccessType(x3dpsail.SFString("inputOutput")) .setType(x3dpsail.SFString("SFColor")) .setValue(x3dpsail.SFString("1 0 0")) )).setProtoBody( x3dpsail. ProtoBody() #Override default diffuseColor value 0.8 0.8 0.8 .addChild( x3dpsail. Material() .setDiffuseColor(x3dpsail.SFColor(0, 0, 0)) #Connect emissiveColor field of current node to onlyColor field of parent ProtoDeclare. .setIS(x3dpsail.IS().addConnect(x3dpsail.connect().setNodeField( x3dpsail. SFString("emissiveColor") ).setProtoField(x3dpsail.SFString("onlyColor")))))
head1.addMeta(meta6) X3D0.setHead(head1) Scene7 = x3dpsail.Scene() NavigationInfo8 = x3dpsail.NavigationInfo() NavigationInfo8.setType(["EXAMINE"]) Scene7.addChildren(NavigationInfo8) Viewpoint9 = x3dpsail.Viewpoint() Viewpoint9.setDescription("Cubes on Fire") Viewpoint9.setPosition([0, 0, 12]) Scene7.addChildren(Viewpoint9) ProtoDeclare10 = x3dpsail.ProtoDeclare() ProtoDeclare10.setName("anyShape") ProtoInterface11 = x3dpsail.ProtoInterface() field12 = x3dpsail.field() field12.setName("xtranslation") field12.setAccessType("inputOutput") field12.setType("SFVec3f") field12.setValue("0 0 0") ProtoInterface11.addField(field12) field13 = x3dpsail.field() field13.setName("myShape") field13.setAccessType("inputOutput") field13.setType("MFNode") Shape14 = x3dpsail.Shape() Sphere15 = x3dpsail.Sphere() Shape14.setGeometry(Sphere15)
head1.addMeta(meta6) X3D0.setHead(head1) Scene7 = x3dpsail.Scene() NavigationInfo8 = x3dpsail.NavigationInfo() NavigationInfo8.setType(["EXAMINE"]) Scene7.addChildren(NavigationInfo8) Viewpoint9 = x3dpsail.Viewpoint() Viewpoint9.setDescription("Rubiks Cube on Fire") Viewpoint9.setPosition([0, 0, 12]) Scene7.addChildren(Viewpoint9) ProtoDeclare10 = x3dpsail.ProtoDeclare() ProtoDeclare10.setName("anyShape") ProtoInterface11 = x3dpsail.ProtoInterface() field12 = x3dpsail.field() field12.setName("xtranslation") field12.setAccessType("inputOutput") field12.setType("SFVec3f") field12.setValue("0 0 0") ProtoInterface11.addField(field12) field13 = x3dpsail.field() field13.setName("myShape") field13.setAccessType("inputOutput") field13.setType("SFNode") Sphere14 = x3dpsail.Sphere() field13.addChildren(Sphere14)
x3dpsail.SFString("John Carlson"))).addMeta( x3dpsail.meta().setName( x3dpsail.SFString("generator")).setContent( x3dpsail.SFString("manual"))). addMeta(x3dpsail.meta().setName( x3dpsail.SFString("identifier")).setContent( x3dpsail.SFString( "https://coderextreme.net/X3DJSONLD/abox.x3d"))).addMeta( x3dpsail.meta().setName( x3dpsail.SFString("description")).setContent( x3dpsail.SFString("a box"))) ).setScene(x3dpsail.Scene().addChild(x3dpsail.ProtoDeclare().setName( x3dpsail.SFString("anyShape")).setProtoInterface( x3dpsail.ProtoInterface().addField(x3dpsail.field().setName( x3dpsail.SFString("myShape")).setAccessType( x3dpsail.SFString("inputOutput")).setType( x3dpsail.SFString("MFNode")).addChild( x3dpsail.Shape().setGeometry(x3dpsail.Sphere()))) ).setProtoBody(x3dpsail.ProtoBody().addChild( x3dpsail.Transform().setIS( x3dpsail.IS().addConnect(x3dpsail.connect().setNodeField( x3dpsail.SFString("children")).setProtoField( x3dpsail.SFString("myShape")))) ))).addChild(x3dpsail.ProtoDeclare().setName( x3dpsail.SFString("one")).setProtoInterface( x3dpsail.ProtoInterface().addField(x3dpsail.field().setName( x3dpsail.SFString("myShape")).setAccessType( x3dpsail.SFString("inputOutput")).setType( x3dpsail.SFString("MFNode")).addChild( x3dpsail.Shape().setGeometry( x3dpsail.Cylinder())))
x3dpsail.SFString("a green rubik cube"))) ).setScene(x3dpsail.Scene().addChild(x3dpsail.NavigationInfo().setType( x3dpsail.MFString([ "EXAMINE" ]))).addChild(x3dpsail.Viewpoint().setDescription( x3dpsail.SFString("Rubiks Cube on Fire")).setPosition( x3dpsail.SFVec3f(0, 0, 12))).addChild(x3dpsail.ProtoDeclare( ).setName(x3dpsail.SFString("anyShape")).setProtoInterface( x3dpsail.ProtoInterface().addField( x3dpsail.field().setName( x3dpsail.SFString("xtranslation")).setAccessType( x3dpsail.SFString("inputOutput")).setType( x3dpsail.SFString("SFVec3f")).setValue( x3dpsail.SFString("0 0 0"))). addField(x3dpsail.field().setName( x3dpsail.SFString("myShape")).setAccessType( x3dpsail.SFString("inputOutput")).setType( x3dpsail.SFString("MFNode")). addChild(x3dpsail.Shape().setGeometry( x3dpsail.Sphere()).setAppearance( x3dpsail.Appearance().setMaterial( x3dpsail.Material().setDiffuseColor( x3dpsail.SFColor(1, 1, 1)))))) ).setProtoBody(x3dpsail.ProtoBody().addChild( x3dpsail.Transform().setIS(x3dpsail.IS().addConnect( x3dpsail.connect().setNodeField( x3dpsail.SFString("translation")).setProtoField( x3dpsail.SFString("xtranslation") )).addConnect(x3dpsail.connect().setNodeField( x3dpsail.SFString("children")).setProtoField( x3dpsail.SFString("myShape"))))))).
ProtoBody26 = x3dpsail.ProtoBody() WorldInfo27 = x3dpsail.WorldInfo() WorldInfo27.setDEF("ExamplePrototypeBody") ProtoBody26.addChildren(WorldInfo27) ProtoDeclare25.setProtoBody(ProtoBody26) Scene17.addChildren(ProtoDeclare25) ProtoInstance28 = x3dpsail.ProtoInstance() ProtoInstance28.setName("NewWorldInfoNode") Scene17.addChildren(ProtoInstance28) ProtoDeclare29 = x3dpsail.ProtoDeclare() ProtoDeclare29.setName("EmissiveMaterial") ProtoInterface30 = x3dpsail.ProtoInterface() field31 = x3dpsail.field() field31.setName("onlyColor") field31.setAccessType("inputOutput") field31.setType("SFColor") field31.setValue("1 0 0") ProtoInterface30.addField(field31) ProtoDeclare29.setProtoInterface(ProtoInterface30) ProtoBody32 = x3dpsail.ProtoBody() #Override default diffuseColor value 0.8 0.8 0.8 Material33 = x3dpsail.Material() Material33.setDiffuseColor([0, 0, 0]) #Connect emissiveColor field of current node to onlyColor field of parent ProtoDeclare. IS34 = x3dpsail.IS()
meta7 = x3dpsail.meta() meta7.setName("description") meta7.setContent("beginnings of a force directed graph in 3D") head1.addMeta(meta7) meta8 = x3dpsail.meta() meta8.setName("generator") meta8.setContent("Vim, X3D-Edit, https://savage.nps.edu/X3D-Edit") head1.addMeta(meta8) X3D0.setHead(head1) Scene9 = x3dpsail.Scene() ProtoDeclare10 = x3dpsail.ProtoDeclare() ProtoDeclare10.setName("node") ProtoInterface11 = x3dpsail.ProtoInterface() field12 = x3dpsail.field() field12.setName("position") field12.setAccessType("inputOutput") field12.setType("SFVec3f") field12.setValue("0 0 0") ProtoInterface11.addField(field12) ProtoDeclare10.setProtoInterface(ProtoInterface11) ProtoBody13 = x3dpsail.ProtoBody() Transform14 = x3dpsail.Transform() Transform14.setDEF("transform") IS15 = x3dpsail.IS() connect16 = x3dpsail.connect() connect16.setNodeField("translation")
Appearance27.setMaterial(Material28) Shape26.setAppearance(Appearance27) Cylinder29 = x3dpsail.Cylinder() Cylinder29.setRadius(0.05) Shape26.setGeometry(Cylinder29) Transform25.addChildren(Shape26) Transform24.addChildren(Transform25) Scene7.addChildren(Transform24) ProtoDeclare30 = x3dpsail.ProtoDeclare() ProtoDeclare30.setName("x3dconnector") ProtoInterface31 = x3dpsail.ProtoInterface() field32 = x3dpsail.field() field32.setName("startnode") field32.setAccessType("initializeOnly") field32.setType("SFNode") ProtoInterface31.addField(field32) field33 = x3dpsail.field() field33.setName("endnode") field33.setAccessType("initializeOnly") field33.setType("SFNode") ProtoInterface31.addField(field33) field34 = x3dpsail.field() field34.setName("transnode") field34.setAccessType("initializeOnly")
.addMeta(x3dpsail.meta().setName(x3dpsail.SFString("generator")).setContent(x3dpsail.SFString("X3D-Edit 3.3, https://savage.nps.edu/X3D-Edit"))) .addMeta(x3dpsail.meta().setName(x3dpsail.SFString("license")).setContent(x3dpsail.SFString("../license.html")))) .setScene(x3dpsail.Scene() .addChild(x3dpsail.ProtoDeclare().setName(x3dpsail.SFString("ArchPrototype")).setAppinfo(x3dpsail.SFString("Create an arch. Can modify general parameters: clearSpanWidth, riseHeight, depth, topAbutmentHeight, pierWidth, pierHeight. - Possibility to create shapes related to an arch: ArchHalf; IntradosOnly; ArchFilled; ArchHalfFilled; Lintel. See the reference file ArchModelingDiagrams.pdf to find further information. See also ArchPrototypeScript_more_readable.js.js.")) .setProtoInterface(x3dpsail.ProtoInterface() #COLOR OF ARCH #INPUT PARAMETERS #General parameters: measures in meters #Parameters to create to create shapes related to arch: put true to apply .addField(x3dpsail.field().setName(x3dpsail.SFString("diffuseColor")).setAccessType(x3dpsail.SFString("inputOutput")).setAppinfo(x3dpsail.SFString("color of arch")).setType(x3dpsail.SFString("SFColor")).setValue(x3dpsail.SFString("0.2 0.8 0.8"))) .addField(x3dpsail.field().setName(x3dpsail.SFString("emissiveColor")).setAccessType(x3dpsail.SFString("inputOutput")).setAppinfo(x3dpsail.SFString("color of arch")).setType(x3dpsail.SFString("SFColor")).setValue(x3dpsail.SFString("0.2 0.8 0.8"))) .addField(x3dpsail.field().setName(x3dpsail.SFString("clearSpanWidth")).setAccessType(x3dpsail.SFString("initializeOnly")).setAppinfo(x3dpsail.SFString("clearSpanWidth: clearSpanWidth must be double of riseHeight to obtain an half circumference")).setType(x3dpsail.SFString("SFFloat")).setValue(x3dpsail.SFString("4"))) .addField(x3dpsail.field().setName(x3dpsail.SFString("riseHeight")).setAccessType(x3dpsail.SFString("initializeOnly")).setAppinfo(x3dpsail.SFString("riseHeight: riseHeight must be half of clearSpanWidth to obtain an half circumference")).setType(x3dpsail.SFString("SFFloat")).setValue(x3dpsail.SFString("2"))) .addField(x3dpsail.field().setName(x3dpsail.SFString("depth")).setAccessType(x3dpsail.SFString("initializeOnly")).setAppinfo(x3dpsail.SFString("depth")).setType(x3dpsail.SFString("SFFloat")).setValue(x3dpsail.SFString("3"))) .addField(x3dpsail.field().setName(x3dpsail.SFString("topAbutmentHeight")).setAccessType(x3dpsail.SFString("initializeOnly")).setAppinfo(x3dpsail.SFString("topAbutmentHeight:topAbutmentHeight=0 means no topAbutment")).setType(x3dpsail.SFString("SFFloat")).setValue(x3dpsail.SFString("0.5"))) .addField(x3dpsail.field().setName(x3dpsail.SFString("pierWidth")).setAccessType(x3dpsail.SFString("initializeOnly")).setAppinfo(x3dpsail.SFString("pierWidth:pierWidtht=0 means no pierWidth")).setType(x3dpsail.SFString("SFFloat")).setValue(x3dpsail.SFString("0.5"))) .addField(x3dpsail.field().setName(x3dpsail.SFString("pierHeight")).setAccessType(x3dpsail.SFString("initializeOnly")).setAppinfo(x3dpsail.SFString("pierHeight: pierHeight=0 means no pierHeight")).setType(x3dpsail.SFString("SFFloat")).setValue(x3dpsail.SFString("1"))) .addField(x3dpsail.field().setName(x3dpsail.SFString("archHalf")).setAccessType(x3dpsail.SFString("initializeOnly")).setAppinfo(x3dpsail.SFString("archHalf: can modify also clearSpanWidth, riseHeight, depth, pierWidth, pierHeight, topAbutmentHeight, archHalfExtensionWidth at purpose, clearSpanWidth measure refers to a full arc, consider clearSpanWidth/2 for the archHalf width")).setType(x3dpsail.SFString("SFBool")).setValue(x3dpsail.SFString("false"))) .addField(x3dpsail.field().setName(x3dpsail.SFString("archHalfExtensionWidth")).setAccessType(x3dpsail.SFString("initializeOnly")).setAppinfo(x3dpsail.SFString("archHalfExtensionWidth: measure in meters, use only if archHalf=true, it is the width of the etension of the abutment of the archHalf. See the reference file ArchModelingDiagrams.pdf to find further information.")).setType(x3dpsail.SFString("SFFloat")).setValue(x3dpsail.SFString("0"))) .addField(x3dpsail.field().setName(x3dpsail.SFString("onlyIntrados")).setAccessType(x3dpsail.SFString("initializeOnly")).setAppinfo(x3dpsail.SFString("onlyIntrados: note it is a flat curved surface, can modify also clearSpanWidth, riseHeight, depth at purpose, if needed apply archHalf=true.")).setType(x3dpsail.SFString("SFBool")).setValue(x3dpsail.SFString("false"))) .addField(x3dpsail.field().setName(x3dpsail.SFString("archFilled")).setAccessType(x3dpsail.SFString("initializeOnly")).setAppinfo(x3dpsail.SFString("archFilled: note it is an half cylinder, can modify also clearSpanWidth, riseHeight, depth at purpose.")).setType(x3dpsail.SFString("SFBool")).setValue(x3dpsail.SFString("false"))) .addField(x3dpsail.field().setName(x3dpsail.SFString("archHalfFilled")).setAccessType(x3dpsail.SFString("initializeOnly")).setAppinfo(x3dpsail.SFString("archHalfFilled: note it is a quarter cylinder, can modify also clearSpanWidth, riseHeight, depth at purpose, clearSpanWidth measure refers to a full arc, consider clearSpanWidth/2 for the archHalfFilled width.")).setType(x3dpsail.SFString("SFBool")).setValue(x3dpsail.SFString("false"))) .addField(x3dpsail.field().setName(x3dpsail.SFString("lintel")).setAccessType(x3dpsail.SFString("initializeOnly")).setAppinfo(x3dpsail.SFString("lintel: no arc is rendered, but a lintel: topAbutmentHeight on pierHeight, total height is pierHeight + topAbutmentHeight, if needed apply archHalf=true.")).setType(x3dpsail.SFString("SFBool")).setValue(x3dpsail.SFString("false")))) .setProtoBody(x3dpsail.ProtoBody() #First node determines node type of this prototype #IndexedFaceset creates arch
x3dpsail.SFString("identifier")).setContent( x3dpsail.SFString( "https://coderextreme.net/X3DJSONLD/fors2.x3d") )).addMeta(x3dpsail.meta().setName( x3dpsail.SFString("description")).setContent( x3dpsail.SFString( "beginnings of a force directed graph in 3D"))). addMeta(x3dpsail.meta().setName( x3dpsail.SFString("generator")).setContent( x3dpsail.SFString( "Vim, X3D-Edit, https://savage.nps.edu/X3D-Edit")))). setScene(x3dpsail.Scene().addChild(x3dpsail.ProtoDeclare().setName( x3dpsail.SFString("node")).setProtoInterface( x3dpsail.ProtoInterface().addField(x3dpsail.field().setName( x3dpsail.SFString("position")).setAccessType( x3dpsail.SFString("inputOutput")).setType( x3dpsail.SFString("SFVec3f")).setValue( x3dpsail.SFString("0 0 0"))) ).setProtoBody( x3dpsail.ProtoBody().addChild(x3dpsail.Transform().setDEF( x3dpsail.SFString("transform")).setIS(x3dpsail.IS().addConnect( x3dpsail.connect().setNodeField( x3dpsail.SFString("translation")).setProtoField( x3dpsail.SFString("position")))).addChild( x3dpsail.Shape() #comment before Sphere #comment after Sphere #comment after Appearance .setGeometry(x3dpsail.Sphere()).setAppearance(