Browse Source

D6: Moved decorator to cura

Victor Larchenko 8 years ago
parent
commit
620a3891da

+ 11 - 0
cura/CuraApplication.py

@@ -28,6 +28,7 @@ from UM.Operations.GroupedOperation import GroupedOperation
 from UM.Operations.SetTransformOperation import SetTransformOperation
 from UM.Operations.TranslateOperation import TranslateOperation
 from cura.SetParentOperation import SetParentOperation
+from cura.SliceableObjectDecorator import SliceableObjectDecorator
 
 from UM.Settings.SettingDefinition import SettingDefinition, DefinitionPropertyType
 from UM.Settings.ContainerRegistry import ContainerRegistry
@@ -1088,6 +1089,16 @@ class CuraApplication(QtApplication):
             extension = os.path.splitext(filename)[1]
             if extension.lower() in self._non_sliceable_extensions:
                 self.changeLayerViewSignal.emit()
+                sliceable_decorator = SliceableObjectDecorator()
+                sliceable_decorator.setBlockSlicing(True)
+                sliceable_decorator.setSliceable(False)
+                node.addDecorator(sliceable_decorator)
+            else:
+                sliceable_decorator = SliceableObjectDecorator()
+                sliceable_decorator.setBlockSlicing(False)
+                sliceable_decorator.setSliceable(True)
+                node.addDecorator(sliceable_decorator)
+
 
             scene = self.getController().getScene()
 

+ 21 - 0
cura/SliceableObjectDecorator.py

@@ -0,0 +1,21 @@
+from UM.Scene.SceneNodeDecorator import SceneNodeDecorator
+
+
+## Simple decorator to indicate a scene node is sliceable or not.
+class SliceableObjectDecorator(SceneNodeDecorator):
+    def __init__(self):
+        super().__init__()
+        self._sliceable = True
+        self._block_slicing = False
+        
+    def isSliceable(self):
+        return self._sliceable
+
+    def setSliceable(self, sliceable):
+        self._sliceable = sliceable
+
+    def shouldBlockSlicing(self):
+        return self._block_slicing
+
+    def setBlockSlicing(self, block_slicing):
+        self._block_slicing = block_slicing

+ 8 - 10
plugins/3MFReader/ThreeMFReader.py

@@ -1,23 +1,23 @@
 # Copyright (c) 2015 Ultimaker B.V.
 # Cura is released under the terms of the AGPLv3 or higher.
 
-from UM.Mesh.MeshReader import MeshReader
-from UM.Mesh.MeshBuilder import MeshBuilder
+import math
+import os.path
+import zipfile
+
+from UM.Job import Job
 from UM.Logger import Logger
 from UM.Math.Matrix import Matrix
 from UM.Math.Vector import Vector
-from UM.Scene.SceneNode import SceneNode
+from UM.Mesh.MeshBuilder import MeshBuilder
+from UM.Mesh.MeshReader import MeshReader
 from UM.Scene.GroupDecorator import GroupDecorator
 import UM.Application
-from UM.Job import Job
 from cura.Settings.SettingOverrideDecorator import SettingOverrideDecorator
 from UM.Application import Application
 from cura.Settings.ExtruderManager import ExtruderManager
 from cura.QualityManager import QualityManager
-from UM.Scene.SliceableObjectDecorator import SliceableObjectDecorator
-
-import os.path
-import zipfile
+from UM.Scene.SceneNode import SceneNode
 
 try:
     import xml.etree.cElementTree as ET
@@ -235,8 +235,6 @@ class ThreeMFReader(MeshReader):
         except Exception as e:
             Logger.log("e", "An exception occurred in 3mf reader: %s", e)
 
-        sliceable_decorator = SliceableObjectDecorator()
-        result.addDecorator(sliceable_decorator)
         return result
 
     ##  Create a scale vector based on a unit string.

+ 7 - 16
plugins/GCodeReader/GCodeReader.py

@@ -1,25 +1,22 @@
 # Copyright (c) 2016 Aleph Objects, Inc.
 # Cura is released under the terms of the AGPLv3 or higher.
 
-from UM.Mesh.MeshReader import MeshReader
-import os
-from UM.Scene.SceneNode import SceneNode
-from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator
-from UM.Math.Vector import Vector
-from UM.Math.AxisAlignedBox import AxisAlignedBox
 from UM.Application import Application
-from UM.Message import Message
 from UM.Logger import Logger
-from UM.Backend.Backend import BackendState
-
+from UM.Math.AxisAlignedBox import AxisAlignedBox
+from UM.Math.Vector import Vector
+from UM.Mesh.MeshReader import MeshReader
+from UM.Message import Message
+from UM.Scene.SceneNode import SceneNode
 from UM.i18n import i18nCatalog
+
 catalog = i18nCatalog("cura")
 
 
 from cura import LayerDataBuilder
 from cura import LayerDataDecorator
 from cura.LayerPolygon import LayerPolygon
-from UM.Scene.SliceableObjectDecorator import SliceableObjectDecorator
+from cura.SliceableObjectDecorator import SliceableObjectDecorator
 
 import numpy
 import math
@@ -263,12 +260,6 @@ class GCodeReader(MeshReader):
         decorator = LayerDataDecorator.LayerDataDecorator()
         decorator.setLayerData(layer_mesh)
         scene_node.addDecorator(decorator)
-
-        sliceable_decorator = SliceableObjectDecorator()
-        sliceable_decorator.setBlockSlicing(True)
-        sliceable_decorator.setSliceable(False)
-        scene_node.addDecorator(sliceable_decorator)
-
         Application.getInstance().getController().getScene().gcode_list = glist
 
         Logger.log("d", "Finished parsing %s" % file_name)

+ 7 - 8
plugins/X3DReader/X3DReader.py

@@ -1,16 +1,17 @@
 # Contributed by Seva Alekseyev <sevaa@nih.gov> with National Institutes of Health, 2016
 # Cura is released under the terms of the AGPLv3 or higher.
 
-from UM.Mesh.MeshReader import MeshReader
-from UM.Mesh.MeshBuilder import MeshBuilder
+from math import pi, sin, cos, sqrt
+
+import numpy
+
+from UM.Job import Job
 from UM.Logger import Logger
 from UM.Math.Matrix import Matrix
 from UM.Math.Vector import Vector
+from UM.Mesh.MeshBuilder import MeshBuilder
+from UM.Mesh.MeshReader import MeshReader
 from UM.Scene.SceneNode import SceneNode
-from UM.Job import Job
-from math import pi, sin, cos, sqrt
-import numpy
-from UM.Scene.SliceableObjectDecorator import SliceableObjectDecorator
 
 try:
     import xml.etree.cElementTree as ET
@@ -97,8 +98,6 @@ class X3DReader(MeshReader):
             Logger.logException("e", "Exception in X3D reader")
             return None
 
-        sliceable_decorator = SliceableObjectDecorator()
-        node.addDecorator(sliceable_decorator)
         return node
     
     # ------------------------- XML tree traversal