Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/Ultimaker/Cura.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/cura
diff options
context:
space:
mode:
authorJack Ha <jackha@gmail.com>2018-06-04 12:39:37 +0300
committerJack Ha <jackha@gmail.com>2018-06-04 12:39:37 +0300
commit14294936c544abcb8bcfb779cca561d6afc85018 (patch)
tree5f7d142ce8e32988f1f238b60a97c51aa5b4dfac /cura
parent74ba10444e48b303df057520c693d899c6b5dc00 (diff)
CURA-5434 reversed the role of offset_shape_arr and hull_shape_arr, to fix one-at-a-time arranging
Diffstat (limited to 'cura')
-rw-r--r--cura/Arranging/Arrange.py14
-rw-r--r--cura/Arranging/ArrangeObjectsJob.py6
-rw-r--r--cura/MultiplyObjectsJob.py2
3 files changed, 12 insertions, 10 deletions
diff --git a/cura/Arranging/Arrange.py b/cura/Arranging/Arrange.py
index 1027b39199..21ed45dbf1 100644
--- a/cura/Arranging/Arrange.py
+++ b/cura/Arranging/Arrange.py
@@ -3,6 +3,7 @@
from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator
from UM.Logger import Logger
+from UM.Math.Polygon import Polygon
from UM.Math.Vector import Vector
from cura.Arranging.ShapeArray import ShapeArray
from cura.Scene import ZOffsetDecorator
@@ -45,7 +46,7 @@ class Arrange:
# \param scene_root Root for finding all scene nodes
# \param fixed_nodes Scene nodes to be placed
@classmethod
- def create(cls, scene_root = None, fixed_nodes = None, scale = 0.5, x = 350, y = 250):
+ def create(cls, scene_root = None, fixed_nodes = None, scale = 0.5, x = 350, y = 250, min_offset = 8):
arranger = Arrange(x, y, x // 2, y // 2, scale = scale)
arranger.centerFirst()
@@ -58,9 +59,10 @@ class Arrange:
# Place all objects fixed nodes
for fixed_node in fixed_nodes:
- vertices = fixed_node.callDecoration("getConvexHull")
+ vertices = fixed_node.callDecoration("getConvexHullHead") or fixed_node.callDecoration("getConvexHull")
if not vertices:
continue
+ vertices = vertices.getMinkowskiHull(Polygon.approximatedCircle(min_offset))
points = copy.deepcopy(vertices._points)
shape_arr = ShapeArray.fromPolygon(points, scale = scale)
arranger.place(0, 0, shape_arr)
@@ -81,12 +83,12 @@ class Arrange:
## Find placement for a node (using offset shape) and place it (using hull shape)
# return the nodes that should be placed
# \param node
- # \param offset_shape_arr ShapeArray with offset, used to find location
- # \param hull_shape_arr ShapeArray without offset, for placing the shape
+ # \param offset_shape_arr ShapeArray with offset, for placing the shape
+ # \param hull_shape_arr ShapeArray without offset, used to find location
def findNodePlacement(self, node, offset_shape_arr, hull_shape_arr, step = 1):
new_node = copy.deepcopy(node)
best_spot = self.bestSpot(
- offset_shape_arr, start_prio = self._last_priority, step = step)
+ hull_shape_arr, start_prio = self._last_priority, step = step)
x, y = best_spot.x, best_spot.y
# Save the last priority.
@@ -102,7 +104,7 @@ class Arrange:
if x is not None: # We could find a place
new_node.setPosition(Vector(x, center_y, y))
found_spot = True
- self.place(x, y, hull_shape_arr) # place the object in arranger
+ self.place(x, y, offset_shape_arr) # place the object in arranger
else:
Logger.log("d", "Could not find spot!"),
found_spot = False
diff --git a/cura/Arranging/ArrangeObjectsJob.py b/cura/Arranging/ArrangeObjectsJob.py
index 08fd1985a9..5e982582fd 100644
--- a/cura/Arranging/ArrangeObjectsJob.py
+++ b/cura/Arranging/ArrangeObjectsJob.py
@@ -37,7 +37,7 @@ class ArrangeObjectsJob(Job):
machine_width = global_container_stack.getProperty("machine_width", "value")
machine_depth = global_container_stack.getProperty("machine_depth", "value")
- arranger = Arrange.create(x = machine_width, y = machine_depth, fixed_nodes = self._fixed_nodes)
+ arranger = Arrange.create(x = machine_width, y = machine_depth, fixed_nodes = self._fixed_nodes, min_offset = self._min_offset)
# Collect nodes to be placed
nodes_arr = [] # fill with (size, node, offset_shape_arr, hull_shape_arr)
@@ -66,7 +66,7 @@ class ArrangeObjectsJob(Job):
start_priority = last_priority
else:
start_priority = 0
- best_spot = arranger.bestSpot(offset_shape_arr, start_prio=start_priority)
+ best_spot = arranger.bestSpot(hull_shape_arr, start_prio = start_priority)
x, y = best_spot.x, best_spot.y
node.removeDecorator(ZOffsetDecorator)
if node.getBoundingBox():
@@ -77,7 +77,7 @@ class ArrangeObjectsJob(Job):
last_size = size
last_priority = best_spot.priority
- arranger.place(x, y, hull_shape_arr) # take place before the next one
+ arranger.place(x, y, offset_shape_arr) # take place before the next one
grouped_operation.addOperation(TranslateOperation(node, Vector(x, center_y, y), set_position = True))
else:
Logger.log("d", "Arrange all: could not find spot!")
diff --git a/cura/MultiplyObjectsJob.py b/cura/MultiplyObjectsJob.py
index af24036eeb..57db7734e7 100644
--- a/cura/MultiplyObjectsJob.py
+++ b/cura/MultiplyObjectsJob.py
@@ -38,7 +38,7 @@ class MultiplyObjectsJob(Job):
root = scene.getRoot()
scale = 0.5
- arranger = Arrange.create(x = machine_width, y = machine_depth, scene_root = root, scale = scale)
+ arranger = Arrange.create(x = machine_width, y = machine_depth, scene_root = root, scale = scale, min_offset = self._min_offset)
processed_nodes = []
nodes = []