from x3d import * print('hello world') # header stuff x3dmodel = X3D(profile='Immersive',version='4.0') scene = Scene() x3dmodel.Scene = scene # world = scene.world hd = head() hd.children=[ meta(content='MIT',name='license'), meta(content='http://www.web3D.org',name='reference'), meta(content='keyboard_gen',name='generator'), meta(content='x3d.py',name='exporter'), ] x3dmodel.head = hd # hidden geom declares sw = Switch(whichChoice=-1) wgeom = IndexedFaceSet(coordIndex=[0,1,2,3,-1,4,0,3,7,-1,7,3,2,6,-1,6,2,1,5,-1,5,1,0,4,-1,7,6,5,4,-1],solid='false') wcoord = Coordinate(point=[(0.115,-1.129, 0.05), (-0.115, -1.13, 0.05),( -0.115, 0.0, 0.05),( 0.115, 0.0, 0.05),( 0.115, -1.13, -0.05),( -0.115, -1.13, -0.05),( -0.115, 0.00, -0.05),( 0.115, 0.0, -0.05)]) wgeom.coord = wcoord wmat = Material(ambientIntensity=0.0, diffuseColor=(0.85, 0.85, 0.85), shininess=0.8, specularColor=(0.65, 0.65, 0.65)) wapp = Appearance() wapp.material = wmat wshape = Shape(DEF='WSHAPE') wshape.appearance = wapp wshape.geometry = wgeom sw.children.append(wshape) bgeom = IndexedFaceSet(coordIndex=[0,1,2,3,-1,4,0,3,7,-1,7,3,2,6,-1,6,2,1,5,-1,5,1,0,4,-1,7,6,5,4,-1],solid='false') bcoord = Coordinate(point=[(0.035, -0.63, 0.15),( -0.035, -0.63 ,0.15),( -0.035, 0.0, 0.1),( 0.035, 0.0, 0.1),( 0.063, -0.7, 0.05),( -0.063, -0.7, 0.05 ),(-0.063, 0.0, 0.05),( 0.063, 0.0, 0.05)]) bgeom.coord = bcoord bmat = Material(ambientIntensity=0.0, diffuseColor=(0.02, 0.02, 0.02), shininess=0.8, specularColor=(0.65, 0.65, 0.65)) bapp = Appearance() bapp.material = bmat bshape = Shape(DEF='BSHAPE') bshape.appearance = bapp bshape.geometry = bgeom sw.children.append(bshape) scene.children.append(sw) # proto declares pd = ProtoDeclare() pd.appinfo = 'animates keyboard key' pd.name = 'Key' pi = ProtoInterface() pd.ProtoInterface = pi f1 = field() f1.type = 'SFVec3f' f1.name = 'translation' f1.accessType = 'inputOutput' f1.value = (0,0,0) pi.field.append(f1) f2 = field() f2.type = 'SFBool' f2.name = 'press' f2.accessType = 'outputOnly' pi.field.append(f2) f3 = field() f3.type = 'MFNode' f3.name = 'shapes' f3.accessType='inputOutput' pi.field.append(f3) trans = Transform(DEF="KEYTRANS",translation=(0,0,0),scale=(1,1,1),rotation=(1,0,0,0)) #keyshape = Shape() #keyshape.appearance = Appearance() #keyshape.appearance.material = Material(diffuseColor=(1,1,1)) #keyshape.geometry = Box() #trans.children.append(keyshape) pb = ProtoBody() pb.children.append(trans) pd.ProtoBody = pb iis = IS() con1 = connect() con1.nodeField ='translation' con1.protoField = 'translation' iis.connect.append(con1) con2 = connect() con2.nodeField ='children' con2.protoField = 'shapes' iis.connect.append(con2) trans.IS = iis ori = OrientationInterpolator(DEF='MOVER', key=[0,.25,1], keyValue=[(1,0,0,0), (1,0,0,.26), (1,0,0,0)]) pb.children.append(ori) scene.children.append(pd) r1 = ROUTE(fromNode='MOVER', fromField='value_changed', toNode='KEYTRANS', toField='set_rotation') pb.children.append(r1) ts = TimeSensor(DEF='CLOCK', cycleInterval=.5, loop='false') pb.children.append(ts) r2 = ROUTE(fromNode='CLOCK', fromField='fraction_changed', toNode='MOVER', toField='set_fraction') pb.children.append(r2) ts = TouchSensor(DEF='TOUCH') iis2 = IS() con3 = connect() con3.nodeField ='isActive' con3.protoField = 'press' iis2.connect.append(con3) ts.IS =iis2 pb.children.append(ts) r3 = ROUTE(fromNode='TOUCH',fromField='touchTime',toNode='CLOCK',toField='set_startTime') pb.children.append(r3) # scene fv = fieldValue() fv.name = 'translation' fv.value = (-.5,0,0) fv2 = fieldValue() fv2.name = 'shapes' fv2.value = [Shape(USE='WSHAPE')] key = ProtoInstance(name='Key', fieldValue=[fv,fv2]) scene.children.append(key) fv = fieldValue() fv.name = 'translation' fv.value = (.5,0,0) fv2 = fieldValue() fv2.name = 'shapes' fv2.value = MFNode([Shape(USE='BSHAPE')]) key = ProtoInstance(name='Key', fieldValue=[fv,fv2]) scene.children.append(key) # exporting scene to file format = 'X3D' blob = None if(format=='X3D'): blob = x3dmodel.XML() elif(format=='X3DV'): blob = x3dmodel.VRML(VRML97=False) elif(format=='HTML'): blob = x3dmodel.X3DOM() elif(format=='JSON'): blob = x3dmodel.JSON() else: print("No file format given") f = open("kb.wrl","w+"); f.write(blob) #f.write("#VRML V4.0 utf8\n\n") #f.write("DEF A0 WhiteKey { translation -.5 0 0 }\n") #f.write("ROUTE A0.key TO MERG.A\n") f.close() try: mode = int(input('Input:')) except ValueError: print("Not a number")