Browse Source

Retain 3MF mesh positions

Contributes to CURA-5465

Fixed bug by preventing read jobs for 3mf files from being auto-arranged.

Boyscout changes:
- Fixed typo in `ThreeMFReader.py` (`splitted` → `split`)
- Fixed code style in `CuraApplication.py` (`filename` → `file_name`)
Ian Paschal 6 years ago
parent
commit
320d73c6e5
2 changed files with 25 additions and 24 deletions
  1. 12 11
      cura/CuraApplication.py
  2. 13 13
      plugins/3MFReader/ThreeMFReader.py

+ 12 - 11
cura/CuraApplication.py

@@ -1599,10 +1599,12 @@ class CuraApplication(QtApplication):
 
     def _readMeshFinished(self, job):
         nodes = job.getResult()
-        filename = job.getFileName()
-        self._currently_loading_files.remove(filename)
+        file_name = job.getFileName()
+        file_name_lower = file_name.lower()
+        file_extension = file_name_lower.split(".")[-1]
+        self._currently_loading_files.remove(file_name)
 
-        self.fileLoaded.emit(filename)
+        self.fileLoaded.emit(file_name)
         arrange_objects_on_load = not self.getPreferences().getValue("cura/use_multi_build_plate")
         target_build_plate = self.getMultiBuildPlateModel().activeBuildPlate if arrange_objects_on_load else -1
 
@@ -1635,15 +1637,14 @@ class CuraApplication(QtApplication):
                     node.scale(original_node.getScale())
 
             node.setSelectable(True)
-            node.setName(os.path.basename(filename))
+            node.setName(os.path.basename(file_name))
             self.getBuildVolume().checkBoundsAndUpdate(node)
 
             is_non_sliceable = False
-            filename_lower = filename.lower()
-            for extension in self._non_sliceable_extensions:
-                if filename_lower.endswith(extension):
-                    is_non_sliceable = True
-                    break
+
+            if file_extension in self._non_sliceable_extensions:
+                is_non_sliceable = True
+
             if is_non_sliceable:
                 self.callLater(lambda: self.getController().setActiveView("SimulationView"))
 
@@ -1662,7 +1663,7 @@ class CuraApplication(QtApplication):
                 if not child.getDecorator(ConvexHullDecorator):
                     child.addDecorator(ConvexHullDecorator())
 
-            if arrange_objects_on_load:
+            if file_extension != "3mf" and arrange_objects_on_load:
                 if node.callDecoration("isSliceable"):
                     # Only check position if it's not already blatantly obvious that it won't fit.
                     if node.getBoundingBox() is None or self._volume.getBoundingBox() is None or node.getBoundingBox().width < self._volume.getBoundingBox().width or node.getBoundingBox().depth < self._volume.getBoundingBox().depth:
@@ -1696,7 +1697,7 @@ class CuraApplication(QtApplication):
             if select_models_on_load:
                 Selection.add(node)
 
-        self.fileCompleted.emit(filename)
+        self.fileCompleted.emit(file_name)
 
     def addNonSliceableExtension(self, extension):
         self._non_sliceable_extensions.append(extension)

+ 13 - 13
plugins/3MFReader/ThreeMFReader.py

@@ -59,7 +59,7 @@ class ThreeMFReader(MeshReader):
         if transformation == "":
             return Matrix()
 
-        splitted_transformation = transformation.split()
+        split_transformation = transformation.split()
         ## Transformation is saved as:
         ## M00 M01 M02 0.0
         ## M10 M11 M12 0.0
@@ -68,20 +68,20 @@ class ThreeMFReader(MeshReader):
         ## We switch the row & cols as that is how everyone else uses matrices!
         temp_mat = Matrix()
         # Rotation & Scale
-        temp_mat._data[0, 0] = splitted_transformation[0]
-        temp_mat._data[1, 0] = splitted_transformation[1]
-        temp_mat._data[2, 0] = splitted_transformation[2]
-        temp_mat._data[0, 1] = splitted_transformation[3]
-        temp_mat._data[1, 1] = splitted_transformation[4]
-        temp_mat._data[2, 1] = splitted_transformation[5]
-        temp_mat._data[0, 2] = splitted_transformation[6]
-        temp_mat._data[1, 2] = splitted_transformation[7]
-        temp_mat._data[2, 2] = splitted_transformation[8]
+        temp_mat._data[0, 0] = split_transformation[0]
+        temp_mat._data[1, 0] = split_transformation[1]
+        temp_mat._data[2, 0] = split_transformation[2]
+        temp_mat._data[0, 1] = split_transformation[3]
+        temp_mat._data[1, 1] = split_transformation[4]
+        temp_mat._data[2, 1] = split_transformation[5]
+        temp_mat._data[0, 2] = split_transformation[6]
+        temp_mat._data[1, 2] = split_transformation[7]
+        temp_mat._data[2, 2] = split_transformation[8]
 
         # Translation
-        temp_mat._data[0, 3] = splitted_transformation[9]
-        temp_mat._data[1, 3] = splitted_transformation[10]
-        temp_mat._data[2, 3] = splitted_transformation[11]
+        temp_mat._data[0, 3] = split_transformation[9]
+        temp_mat._data[1, 3] = split_transformation[10]
+        temp_mat._data[2, 3] = split_transformation[11]
 
         return temp_mat