diff --git a/cura/Arrange.py b/cura/Arrange.py index db6a7c781e..dde162962e 100755 --- a/cura/Arrange.py +++ b/cura/Arrange.py @@ -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() diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index 2678ea2fa0..e5b6d48617 100755 --- a/cura/CuraApplication.py +++ b/cura/CuraApplication.py @@ -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