[x3d-public] JSON import for x3d.py.
John Carlson
yottzumm at gmail.com
Sat Dec 4 21:11:08 PST 2021
# Early preview release.
# JSON import for x3d.py. Still needs much work, waiting for VRML export.
# struggling with MFNode not being an iterable currently.
import json
from x3d import *
from x3d import _X3DGeometryNode
class JSON_X3D(X3D):
def parseJSON(self, data):
self.version = data["@version"]
self.profile = data["@profile"]
self.head = JSON_head()
self.head.parseJSON(data["head"])
self.Scene = JSON_Scene()
self.Scene.parseJSON(data["Scene"])
return self
class JSON_head(head):
def parseJSON(self, data):
self.children = JSON_MFNode()
self.children.parseJSON(data)
for m in data["meta"]:
metachild = JSON_meta()
metachild.parseJSON(m)
self.children.append(metachild)
return self
class JSON_Scene(Scene):
def parseJSON(self, data):
self.children = JSON_MFNode()
self.children.parseJSON(data)
return self
class JSON_Geometry(_X3DGeometryNode):
def parseJSON(self, data):
return self
class JSON_Appearance(Appearance):
def parseJSON(self, data):
return self
class JSON_Material(Material):
def parseJSON(self, data):
return self
class JSON_Shape(Shape):
def parseJSON(self, data):
self.appearance = JSON_Appearance()
self.appearance.parseJSON(data["-appearance"])
self.geometry = JSON_Geometry(DEF='', USE='', class_='',
id_='', style_='', IS='', metadata='')
self.geometry.parseJSON(data["-geometry"])
return self
class JSON_Group(Group):
def parseJSON(self, data):
self.children = JSON_MFNode()
self.children.parseJSON(data)
return self
class JSON_Transform(Transform):
def parseJSON(self, data):
self.children = JSON_MFNode()
self.children.parseJSON(data)
return self
class JSON_component(SFNode):
def parseJSON(self, data):
self.name = data["@name"]
self.content = data["@level"]
return self
class JSON_unit(unit):
def parseJSON(self, data):
self.name = data["@name"]
self.content = data["@category"]
return self
class JSON_meta(meta):
def parseJSON(self, data):
self.name = data["@name"]
self.content = data["@content"]
return self
class JSON_WorldInfo(WorldInfo):
def parseJSON(self, data):
self.info = data["@info"]
self.title = data["@title"]
return self
class JSON_SFVec3f(SFVec3f):
def parseJSON(self, data):
self.value = tuple(data)
return self
class JSON_Viewpoint(Viewpoint):
def parseJSON(self, data):
self.DEF = data["@DEF"]
self.centerOfRotation = JSON_SFVec3f()
self.centerOfRotation.parseJSON((data["@centerOfRotation"]))
self.description = data["@description"]
self.position = JSON_SFVec3f()
self.position.parseJSON(data["@position"])
return self
class JSON_SFNode(SFNode):
def parseJSON(self, data):
k = 0
for key in data:
#print(k)
#print(key)
#print(data[key])
k = k + 1
if key.startswith('-'):
self.value = eval("JSON_"+key[1:2].toupper()+key[2:])
elif key.startswith('#'):
pass
else:
self.value = eval("JSON_"+key)()
self.value.parseJSON(data[key])
return self
class JSON_MFNode(MFNode):
def parseJSON(self, data):
print("")
self.value = []
for c in data["-children"]:
sfnode = JSON_SFNode()
# print(c)
sfnode.parseJSON(c)
self.value.append(sfnode)
print(self.value)
print("")
return self.value
with open('HelloWorld.json', encoding="utf-8") as json_file:
data = json.load(json_file)
print(data)
newscene = JSON_X3D()
scene = newscene.parseJSON(data["X3D"])
# print("")
# print(scene)
print(scene.XML())
More information about the x3d-public
mailing list