CURA-4525 first multi slice + multi layer data, added filter on build plate, added option arrange on load, visuals like convex hull are now correct

This commit is contained in:
Jack Ha 2017-11-09 17:03:20 +01:00
parent 41d5ec86a3
commit e21acd1a07
18 changed files with 468 additions and 260 deletions

View file

@ -17,10 +17,12 @@ from UM.Logger import Logger
from UM.Math.Vector import Vector
from cura.Scene.BuildPlateDecorator import BuildPlateDecorator
from cura.Settings.ExtruderManager import ExtruderManager
from cura import LayerDataBuilder
from cura import LayerDataDecorator
from cura import LayerPolygon
# from cura.Scene.CuraSceneNode import CuraSceneNode
import numpy
from time import time
@ -49,6 +51,7 @@ class ProcessSlicedLayersJob(Job):
self._scene = Application.getInstance().getController().getScene()
self._progress_message = Message(catalog.i18nc("@info:status", "Processing Layers"), 0, False, -1)
self._abort_requested = False
self._build_plate_number = None
## Aborts the processing of layers.
#
@ -59,7 +62,11 @@ class ProcessSlicedLayersJob(Job):
def abort(self):
self._abort_requested = True
def setBuildPlate(self, new_value):
self._build_plate_number = new_value
def run(self):
Logger.log("d", "########## Processing new layer for [%s]..." % self._build_plate_number)
start_time = time()
if Application.getInstance().getController().getActiveView().getPluginId() == "LayerView":
self._progress_message.show()
@ -72,16 +79,18 @@ class ProcessSlicedLayersJob(Job):
Application.getInstance().getController().activeViewChanged.connect(self._onActiveViewChanged)
new_node = SceneNode()
new_node.addDecorator(BuildPlateDecorator(self._build_plate_number))
## Remove old layer data (if any)
for node in DepthFirstIterator(self._scene.getRoot()):
if node.callDecoration("getLayerData"):
node.getParent().removeChild(node)
break
if self._abort_requested:
if self._progress_message:
self._progress_message.hide()
return
# ## Remove old layer data (if any)
# for node in DepthFirstIterator(self._scene.getRoot()):
# if node.callDecoration("getLayerData") and node.callDecoration("getBuildPlateNumber") == self._build_plate_number:
# Logger.log("d", " # Removing: %s", node)
# node.getParent().removeChild(node)
# #break
# if self._abort_requested:
# if self._progress_message:
# self._progress_message.hide()
# return
# Force garbage collection.
# For some reason, Python has a tendency to keep the layer data