mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-06 22:47:29 -06:00
Support for explicit length unit override in X3D header
This commit is contained in:
parent
e4049296d9
commit
87bff34eb6
1 changed files with 24 additions and 4 deletions
|
@ -32,11 +32,31 @@ class X3DReader(MeshReader):
|
||||||
try:
|
try:
|
||||||
self.sceneNodes = []
|
self.sceneNodes = []
|
||||||
self.fileName = file_name
|
self.fileName = file_name
|
||||||
self.transform = Matrix()
|
|
||||||
self.transform.setByScaleVector(Vector(1000, 1000, 1000))
|
|
||||||
|
|
||||||
tree = ET.parse(file_name)
|
tree = ET.parse(file_name)
|
||||||
self.processNode(tree.getroot())
|
root = tree.getroot()
|
||||||
|
|
||||||
|
if root.tag != "X3D":
|
||||||
|
return None
|
||||||
|
|
||||||
|
scale = 1000 # Default X3D unit it one meter, while Cura's is one mm
|
||||||
|
if root[0].tag == "head":
|
||||||
|
for headNode in root[0]:
|
||||||
|
if headNode.tag == "unit" and headNode.attrib.get("category") == "length":
|
||||||
|
scale *= float.parse(headNode.attrib["conversionFactor"])
|
||||||
|
break
|
||||||
|
scene = root[1]
|
||||||
|
else:
|
||||||
|
scene = root[0]
|
||||||
|
|
||||||
|
if scene.tag != "Scene":
|
||||||
|
return None
|
||||||
|
|
||||||
|
self.transform = Matrix()
|
||||||
|
self.transform.setByScaleVector(Vector(scale, scale, scale))
|
||||||
|
|
||||||
|
# This will populate the sceneNodes array
|
||||||
|
self.processChildNodes(scene)
|
||||||
|
|
||||||
if len(self.sceneNodes) > 1:
|
if len(self.sceneNodes) > 1:
|
||||||
theScene = SceneNode()
|
theScene = SceneNode()
|
||||||
|
@ -68,7 +88,7 @@ class X3DReader(MeshReader):
|
||||||
return
|
return
|
||||||
|
|
||||||
tag = xmlNode.tag
|
tag = xmlNode.tag
|
||||||
if tag in ("X3D", "Scene", "Group", "StaticGroup", "CADAssembly", "CADFace", "CADLayer", "CADPart", "Collision"):
|
if tag in ("Group", "StaticGroup", "CADAssembly", "CADFace", "CADLayer", "CADPart", "Collision"):
|
||||||
self.processChildNodes(xmlNode)
|
self.processChildNodes(xmlNode)
|
||||||
elif tag == "LOD":
|
elif tag == "LOD":
|
||||||
self.processNode(xmlNode[0])
|
self.processNode(xmlNode[0])
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue