diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index 6297efb747..028a8bf85e 100644 --- a/cura/CuraApplication.py +++ b/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() diff --git a/cura/SliceableObjectDecorator.py b/cura/SliceableObjectDecorator.py new file mode 100644 index 0000000000..12dbbcb751 --- /dev/null +++ b/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 diff --git a/plugins/3MFReader/ThreeMFReader.py b/plugins/3MFReader/ThreeMFReader.py index 97134bf676..ee4e1daab4 100644 --- a/plugins/3MFReader/ThreeMFReader.py +++ b/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. diff --git a/plugins/GCodeReader/GCodeReader.py b/plugins/GCodeReader/GCodeReader.py index e9aea36fae..22a2463724 100644 --- a/plugins/GCodeReader/GCodeReader.py +++ b/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) diff --git a/plugins/X3DReader/X3DReader.py b/plugins/X3DReader/X3DReader.py index 16b8a6a5ae..0a81e98d0d 100644 --- a/plugins/X3DReader/X3DReader.py +++ b/plugins/X3DReader/X3DReader.py @@ -1,16 +1,17 @@ # Contributed by Seva Alekseyev 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