Fixed arranger multiplying too big objects and arrange All. CURA-3676

This commit is contained in:
Jack Ha 2017-04-12 15:58:09 +02:00
parent 3e75583f2b
commit c7a6d42920
2 changed files with 12 additions and 5 deletions

View file

@ -984,6 +984,8 @@ class CuraApplication(QtApplication):
continue # Grouped nodes don't need resetting as their parent (the group) is resetted) continue # Grouped nodes don't need resetting as their parent (the group) is resetted)
if not node.isSelectable(): if not node.isSelectable():
continue # i.e. node with layer data continue # i.e. node with layer data
# Skip nodes that are too big
if node.getBoundingBox().width < self._volume.getBoundingBox().width or node.getBoundingBox().depth < self._volume.getBoundingBox().depth:
nodes.append(node) nodes.append(node)
self.arrange(nodes, fixed_nodes = []) self.arrange(nodes, fixed_nodes = [])

7
cura/MultiplyObjectsJob.py Normal file → Executable file
View file

@ -47,13 +47,18 @@ class MultiplyObjectsJob(Job):
root = scene.getRoot() root = scene.getRoot()
arranger = Arrange.create(scene_root=root) arranger = Arrange.create(scene_root=root)
node_too_big = False
if node.getBoundingBox().width < 300 or node.getBoundingBox().depth < 300:
offset_shape_arr, hull_shape_arr = ShapeArray.fromNode(current_node, min_offset=self._min_offset) offset_shape_arr, hull_shape_arr = ShapeArray.fromNode(current_node, min_offset=self._min_offset)
else:
node_too_big = True
nodes = [] nodes = []
found_solution_for_all = True found_solution_for_all = True
for i in range(self._count): for i in range(self._count):
# We do place the nodes one by one, as we want to yield in between. # We do place the nodes one by one, as we want to yield in between.
if not node_too_big:
node, solution_found = arranger.findNodePlacement(current_node, offset_shape_arr, hull_shape_arr) node, solution_found = arranger.findNodePlacement(current_node, offset_shape_arr, hull_shape_arr)
if not solution_found: if node_too_big or not solution_found:
found_solution_for_all = False found_solution_for_all = False
new_location = node.getPosition() new_location = node.getPosition()
new_location = new_location.set(z = 100 - i * 20) new_location = new_location.set(z = 100 - i * 20)