mirror of
https://git.mirrors.martin98.com/https://github.com/Ultimaker/Cura
synced 2025-08-12 20:09:01 +08:00
Arrange all now places biggest objects first. CURA-3239
This commit is contained in:
parent
f357dea086
commit
099752125b
@ -90,10 +90,16 @@ class Arrange:
|
||||
|
||||
## Fill priority, take offset as center. lower is better
|
||||
def centerFirst(self):
|
||||
# Distance x + distance y
|
||||
#self._priority = np.fromfunction(
|
||||
# lambda i, j: abs(self._offset_x-i)+abs(self._offset_y-j), self.shape)
|
||||
# lambda i, j: abs(self._offset_x-i)+abs(self._offset_y-j), self.shape, dtype=np.int32)
|
||||
# Square distance
|
||||
# self._priority = np.fromfunction(
|
||||
# lambda i, j: abs(self._offset_x-i)**2+abs(self._offset_y-j)**2, self.shape, dtype=np.int32)
|
||||
self._priority = np.fromfunction(
|
||||
lambda i, j: abs(self._offset_x-i)**2+abs(self._offset_y-j)**2, self.shape, dtype=np.int32)
|
||||
lambda i, j: abs(self._offset_x-i)**3+abs(self._offset_y-j)**3, self.shape, dtype=np.int32)
|
||||
# self._priority = np.fromfunction(
|
||||
# lambda i, j: max(abs(self._offset_x-i), abs(self._offset_y-j)), self.shape, dtype=np.int32)
|
||||
self._priority_unique_values = np.unique(self._priority)
|
||||
self._priority_unique_values.sort()
|
||||
|
||||
|
@ -850,7 +850,7 @@ class CuraApplication(QtApplication):
|
||||
def _prepareArranger(self, fixed_nodes = None):
|
||||
#arranger = Arrange(215, 215, 107, 107) # TODO: fill in dimensions
|
||||
scale = 0.5
|
||||
arranger = Arrange(250, 250, 125, 125, scale = scale) # TODO: fill in dimensions
|
||||
arranger = Arrange(220, 220, 110, 110, scale = scale) # TODO: fill in dimensions
|
||||
arranger.centerFirst()
|
||||
|
||||
if fixed_nodes is None:
|
||||
@ -1097,9 +1097,16 @@ class CuraApplication(QtApplication):
|
||||
nodes.append(node)
|
||||
|
||||
arranger = self._prepareArranger(fixed_nodes = fixed_nodes)
|
||||
nodes_arr = [] # fill with (size, node, offset_shape_arr, hull_shape_arr)
|
||||
for node in nodes:
|
||||
offset_shape_arr, hull_shape_arr = self._nodeAsShapeArr(node, min_offset = min_offset)
|
||||
nodes_arr.append((offset_shape_arr.arr.shape[0] * offset_shape_arr.arr.shape[1], node, offset_shape_arr, hull_shape_arr))
|
||||
|
||||
nodes_arr.sort(key = lambda item: item[0])
|
||||
nodes_arr.reverse()
|
||||
|
||||
for size, node, offset_shape_arr, hull_shape_arr in nodes_arr:
|
||||
Logger.log("d", "Placing object sized: %s" % size)
|
||||
x, y, penalty_points, start_prio = arranger.bestSpot(
|
||||
offset_shape_arr)
|
||||
if x is not None: # We could find a place
|
||||
|
Loading…
x
Reference in New Issue
Block a user