diff --git a/plugins/3MFReader/ThreeMFReader.py b/plugins/3MFReader/ThreeMFReader.py index cf8079d75d..13a97d5a89 100755 --- a/plugins/3MFReader/ThreeMFReader.py +++ b/plugins/3MFReader/ThreeMFReader.py @@ -233,8 +233,7 @@ class ThreeMFReader(MeshReader): if mesh_data is not None: extents = mesh_data.getExtents() if extents is not None: - # We use a different coordinate space, so flip Z and Y - center_vector = Vector(extents.center.x, extents.center.z, extents.center.y) + center_vector = Vector(extents.center.x, extents.center.y, extents.center.z) transform_matrix.setByTranslation(center_vector) transform_matrix.multiply(um_node.getLocalTransformation()) um_node.setTransformation(transform_matrix) diff --git a/plugins/3MFWriter/ThreeMFWriter.py b/plugins/3MFWriter/ThreeMFWriter.py index ae790b4f63..ad4b0d8dad 100644 --- a/plugins/3MFWriter/ThreeMFWriter.py +++ b/plugins/3MFWriter/ThreeMFWriter.py @@ -102,12 +102,20 @@ class ThreeMFWriter(MeshWriter): savitar_node = Savitar.SceneNode() savitar_node.setName(um_node.getName()) - node_matrix = um_node.getLocalTransformation() + node_matrix = Matrix() + mesh_data = um_node.getMeshData() + # compensate for original center position, if object(s) is/are not around its zero position + if mesh_data is not None: + extents = mesh_data.getExtents() + if extents is not None: + # We use a different coordinate space while writing, so flip Z and Y + center_vector = Vector(extents.center.x, extents.center.z, extents.center.y) + node_matrix.setByTranslation(center_vector) + node_matrix.multiply(um_node.getLocalTransformation()) matrix_string = ThreeMFWriter._convertMatrixToString(node_matrix.preMultiply(transformation)) savitar_node.setTransformation(matrix_string) - mesh_data = um_node.getMeshData() if mesh_data is not None: savitar_node.getMeshData().setVerticesFromBytes(mesh_data.getVerticesAsByteArray()) indices_array = mesh_data.getIndicesAsByteArray()