diff options
author | Jaime van Kessel <nallath@gmail.com> | 2016-10-07 14:51:53 +0300 |
---|---|---|
committer | Jaime van Kessel <nallath@gmail.com> | 2016-10-07 14:51:53 +0300 |
commit | 47870f43ef3d850492e528e05357fdddd8b87636 (patch) | |
tree | 70ba78a7b971be9eb4d6ebfdd131bbe951493493 /plugins | |
parent | 7c59f8f2f2aae28aca5a107a85a44351bcd4a97b (diff) |
Groups with just a single item are now discarded
CURA-382
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/3MFReader/ThreeMFReader.py | 36 |
1 files changed, 27 insertions, 9 deletions
diff --git a/plugins/3MFReader/ThreeMFReader.py b/plugins/3MFReader/ThreeMFReader.py index 075eb757e4..8e2b21fc90 100644 --- a/plugins/3MFReader/ThreeMFReader.py +++ b/plugins/3MFReader/ThreeMFReader.py @@ -33,30 +33,35 @@ class ThreeMFReader(MeshReader): } def _createNodeFromObject(self, object, name = ""): - mesh_builder = MeshBuilder() node = SceneNode() + mesh_builder = MeshBuilder() vertex_list = [] components = object.find(".//3mf:components", self._namespaces) if components: for component in components: id = component.get("objectid") - object = self._root.find("./3mf:resources/3mf:object[@id='{0}']".format(id), self._namespaces) - new_node = self._createNodeFromObject(object) + new_object = self._root.find("./3mf:resources/3mf:object[@id='{0}']".format(id), self._namespaces) + + new_node = self._createNodeFromObject(new_object) node.addChild(new_node) transform = component.get("transform") if transform is not None: new_node.setTransformation(self._createMatrixFromTransformationString(transform)) - if len(node.getChildren()) > 0: - group_decorator = GroupDecorator() - node.addDecorator(group_decorator) - # for vertex in entry.mesh.vertices.vertex: for vertex in object.findall(".//3mf:vertex", self._namespaces): vertex_list.append([vertex.get("x"), vertex.get("y"), vertex.get("z")]) Job.yieldThread() + # If this object has no vertices and just one child, just return the child. + if len(vertex_list) == 0 and len(node.getChildren()) == 1: + return node.getChildren()[0] + + if len(node.getChildren()) > 0: + group_decorator = GroupDecorator() + node.addDecorator(group_decorator) + triangles = object.findall(".//3mf:triangle", self._namespaces) mesh_builder.reserveFaceCount(len(triangles)) @@ -74,11 +79,17 @@ class ThreeMFReader(MeshReader): # Rotate the model; We use a different coordinate frame. rotation = Matrix() rotation.setByRotationAxis(-0.5 * math.pi, Vector(1, 0, 0)) + flip_matrix = Matrix() + + flip_matrix._data[1, 1] = 0 + flip_matrix._data[1, 2] = 1 + flip_matrix._data[2, 1] = 1 + flip_matrix._data[2, 2] = 0 # TODO: We currently do not check for normals and simply recalculate them. mesh_builder.calculateNormals() mesh_builder.setFileName(name) - mesh_data = mesh_builder.build() #.getTransformed(rotation) + mesh_data = mesh_builder.build().getTransformed(flip_matrix) if len(mesh_data.getVertices()): node.setMeshData(mesh_data) @@ -110,6 +121,14 @@ class ThreeMFReader(MeshReader): temp_mat._data[0, 3] = splitted_transformation[9] temp_mat._data[1, 3] = splitted_transformation[10] temp_mat._data[2, 3] = splitted_transformation[11] + + flip_matrix = Matrix() + flip_matrix._data[1, 1] = 0 + flip_matrix._data[1, 2] = 1 + flip_matrix._data[2, 1] = 1 + flip_matrix._data[2, 2] = 0 + temp_mat.multiply(flip_matrix) + return temp_mat def read(self, file_name): @@ -129,7 +148,6 @@ class ThreeMFReader(MeshReader): if transform is not None: build_item_node.setTransformation(self._createMatrixFromTransformationString(transform)) result.addChild(build_item_node) - build_item_node.rotate(Quaternion.fromAngleAxis(-0.5 * math.pi, Vector(1, 0, 0))) except Exception as e: Logger.log("e", "exception occured in 3mf reader: %s", e) |