review comments fixed

Co-authored-by: Casper Lamboo <c.lamboo@ultimaker.com>

CURA-7951
This commit is contained in:
saumya.jain 2023-08-22 11:51:30 +02:00
parent 7449e2137c
commit b662da732e
5 changed files with 32 additions and 15 deletions

View file

@ -21,7 +21,6 @@ class GridArrange:
_build_volume_bounding_box = AxisAlignedBox _build_volume_bounding_box = AxisAlignedBox
def __init__(self, nodes_to_arrange: List["SceneNode"], build_volume: "BuildVolume", fixed_nodes: List["SceneNode"] = []): def __init__(self, nodes_to_arrange: List["SceneNode"], build_volume: "BuildVolume", fixed_nodes: List["SceneNode"] = []):
print("len(nodes_to_arrange)", len(nodes_to_arrange))
self._nodes_to_arrange = nodes_to_arrange self._nodes_to_arrange = nodes_to_arrange
self._build_volume_bounding_box = build_volume.getBoundingBox() self._build_volume_bounding_box = build_volume.getBoundingBox()
self._fixed_nodes = fixed_nodes self._fixed_nodes = fixed_nodes
@ -72,7 +71,6 @@ class GridArrange:
for grid_id, node in zip(sequence, self._nodes_to_arrange): for grid_id, node in zip(sequence, self._nodes_to_arrange):
grouped_operation.addOperation(AddSceneNodeOperation(node, scene_root)) grouped_operation.addOperation(AddSceneNodeOperation(node, scene_root))
grid_x, grid_y = grid_id grid_x, grid_y = grid_id
operation = self.moveNodeOnGrid(node, grid_x, grid_y) operation = self.moveNodeOnGrid(node, grid_x, grid_y)
grouped_operation.addOperation(operation) grouped_operation.addOperation(operation)
@ -81,18 +79,14 @@ class GridArrange:
left_over_grid_y = self._initial_leftover_grid_y left_over_grid_y = self._initial_leftover_grid_y
for node in leftover_nodes: for node in leftover_nodes:
grouped_operation.addOperation(AddSceneNodeOperation(node, scene_root)) grouped_operation.addOperation(AddSceneNodeOperation(node, scene_root))
# find the first next grid position that isn't occupied by a fixed node # find the first next grid position that isn't occupied by a fixed node
while (self._initial_leftover_grid_x, left_over_grid_y) in fixed_nodes_grid_ids: while (self._initial_leftover_grid_x, left_over_grid_y) in fixed_nodes_grid_ids:
left_over_grid_y = left_over_grid_y - 1 left_over_grid_y = left_over_grid_y - 1
operation = self.moveNodeOnGrid(node, self._initial_leftover_grid_x, left_over_grid_y) operation = self.moveNodeOnGrid(node, self._initial_leftover_grid_x, left_over_grid_y)
grouped_operation.addOperation(operation) grouped_operation.addOperation(operation)
left_over_grid_y = left_over_grid_y - 1 left_over_grid_y = left_over_grid_y - 1
self.drawDebugSvg()
return grouped_operation, len(leftover_nodes) return grouped_operation, len(leftover_nodes)
def moveNodeOnGrid(self, node: "SceneNode", grid_x: int, grid_y: int) -> "Operation.Operation": def moveNodeOnGrid(self, node: "SceneNode", grid_x: int, grid_y: int) -> "Operation.Operation":

View file

@ -83,18 +83,25 @@ class CuraActions(QObject):
center_operation = TranslateOperation(current_node, Vector(0, center_y, 0), set_position=True) center_operation = TranslateOperation(current_node, Vector(0, center_y, 0), set_position=True)
operation.addOperation(center_operation) operation.addOperation(center_operation)
operation.push() operation.push()
@pyqtSlot(int)
def multiplySelection(self, count: int) -> None:
"""Multiply all objects in the selection
:param count: The number of times to multiply the selection.
"""
min_offset = cura.CuraApplication.CuraApplication.getInstance().getBuildVolume().getEdgeDisallowedSize() + 2 # Allow for some rounding errors
job = MultiplyObjectsJob(Selection.getAllSelectedObjects(), count, min_offset = max(min_offset, 8))
job.start()
@pyqtSlot(int, bool) @pyqtSlot(int)
def multiplySelection(self, count: int, grid_placement: bool) -> None: def multiplySelectionToGrid(self, count: int) -> None:
"""Multiply all objects in the selection """Multiply all objects in the selection
:param count: The number of times to multiply the selection. :param count: The number of times to multiply the selection.
:param grid_placement: If set to true objects are placed in a grid
""" """
min_offset = cura.CuraApplication.CuraApplication.getInstance().getBuildVolume().getEdgeDisallowedSize() + 2 # Allow for some rounding errors min_offset = cura.CuraApplication.CuraApplication.getInstance().getBuildVolume().getEdgeDisallowedSize() + 2 # Allow for some rounding errors
job = MultiplyObjectsJob(Selection.getAllSelectedObjects(), count, min_offset=max(min_offset, 8), job = MultiplyObjectsJob(Selection.getAllSelectedObjects(), count, min_offset=max(min_offset, 8),
grid_arrange=grid_placement) grid_arrange=True)
job.start() job.start()
@pyqtSlot() @pyqtSlot()

View file

@ -1440,8 +1440,15 @@ class CuraApplication(QtApplication):
op.push() op.push()
# Single build plate # Single build plate
@pyqtSlot(bool) @pyqtSlot()
def arrangeAll(self, grid_arrangement: bool) -> None: def arrangeAll(self) -> None:
self._arrangeAll(False)
@pyqtSlot()
def arrangeAllInGrid(self) -> None:
self._arrangeAll(True)
def _arrangeAll(self, grid_arrangement: bool) -> None:
nodes_to_arrange = [] nodes_to_arrange = []
active_build_plate = self.getMultiBuildPlateModel().activeBuildPlate active_build_plate = self.getMultiBuildPlateModel().activeBuildPlate
locked_nodes = [] locked_nodes = []

View file

@ -458,7 +458,7 @@ Item
{ {
id: arrangeAllAction id: arrangeAllAction
text: catalog.i18nc("@action:inmenu menubar:edit","Arrange All Models") text: catalog.i18nc("@action:inmenu menubar:edit","Arrange All Models")
onTriggered: Printer.arrangeAll(false) onTriggered: Printer.arrangeAll()
shortcut: "Ctrl+R" shortcut: "Ctrl+R"
} }
@ -466,7 +466,7 @@ Item
{ {
id: arrangeAllGridAction id: arrangeAllGridAction
text: catalog.i18nc("@action:inmenu menubar:edit","Arrange All Models in a grid") text: catalog.i18nc("@action:inmenu menubar:edit","Arrange All Models in a grid")
onTriggered: Printer.arrangeAll(true) onTriggered: Printer.arrangeAllInGrid()
shortcut: "Shift+Ctrl+R" shortcut: "Shift+Ctrl+R"
} }

View file

@ -110,7 +110,16 @@ Cura.Menu
minimumWidth: UM.Theme.getSize("small_popup_dialog").width minimumWidth: UM.Theme.getSize("small_popup_dialog").width
minimumHeight: UM.Theme.getSize("small_popup_dialog").height minimumHeight: UM.Theme.getSize("small_popup_dialog").height
onAccepted: CuraActions.multiplySelection(copiesField.value, gridPlacementSelected.checked) onAccepted: {
if (gridPlacementSelected.checked)
{
CuraActions.multiplySelectionToGrid(copiesField.value)
}
else
{
CuraActions.multiplySelection(copiesField.value)
}
}
buttonSpacing: UM.Theme.getSize("thin_margin").width buttonSpacing: UM.Theme.getSize("thin_margin").width