diff --git a/FlatCAMApp.py b/FlatCAMApp.py index 0639a168..93048a45 100644 --- a/FlatCAMApp.py +++ b/FlatCAMApp.py @@ -192,6 +192,10 @@ class App(QtCore.QObject): # used to signal that there are arguments for the app args_at_startup = QtCore.pyqtSignal(list) + # a reusable signal to replot a list of objects + # should be disconnected after use so it can be reused + replot_signal = pyqtSignal(list) + def __init__(self, user_defaults=True, post_gui=None): """ Starts the application. @@ -5456,8 +5460,58 @@ class App(QtCore.QObject): # and ask him to click on the desired position self.report_usage("on_set_origin()") + def origin_replot(): + + def worker_task(): + with self.proc_container.new(_("Plotting...")): + for obj in self.collection.get_list(): + obj.plot() + self.plotcanvas.fit_view() + + self.worker_task.emit({'fcn': worker_task, 'params': []}) + + def on_set_zero_click(event): + # this function will be available only for mouse left click + + pos_canvas = self.plotcanvas.translate_coords(event.pos) + if event.button == 1: + if self.grid_status() == True: + pos = self.geo_editor.snap(pos_canvas[0], pos_canvas[1]) + else: + pos = pos_canvas + + x = 0 - pos[0] + y = 0 - pos[1] + + def worker_task(): + with self.proc_container.new(_("Setting Origin...")): + for obj in self.collection.get_list(): + obj.offset((x, y)) + self.object_changed.emit(obj) + + # Update the object bounding box options + a, b, c, d = obj.bounds() + obj.options['xmin'] = a + obj.options['ymin'] = b + obj.options['xmax'] = c + obj.options['ymax'] = d + self.inform.emit(_('[success] Origin set ...')) + self.replot_signal.emit([]) + + self.worker_task.emit({'fcn': worker_task, 'params': []}) + + self.plotcanvas.vis_disconnect('mouse_press', on_set_zero_click) + self.should_we_save = True + self.inform.emit(_('Click to set the origin ...')) - self.plotcanvas.vis_connect('mouse_press', self.on_set_zero_click) + self.plotcanvas.vis_connect('mouse_press', on_set_zero_click) + + # first disconnect it as it may have been used by something else + try: + self.replot_signal.disconnect() + except TypeError: + pass + self.replot_signal[list].connect(origin_replot) def on_jump_to(self, custom_location=None, fit_center=True): """ @@ -5723,34 +5777,6 @@ class App(QtCore.QObject): _("The current task was gracefully closed on user request...")) self.abort_flag = False - def on_set_zero_click(self, event): - # this function will be available only for mouse left click - pos = [] - pos_canvas = self.plotcanvas.translate_coords(event.pos) - if event.button == 1: - if self.grid_status() == True: - pos = self.geo_editor.snap(pos_canvas[0], pos_canvas[1]) - else: - pos = pos_canvas - - x = 0 - pos[0] - y = 0 - pos[1] - for obj in self.collection.get_list(): - obj.offset((x, y)) - self.object_changed.emit(obj) - obj.plot() - # Update the object bounding box options - a, b, c, d = obj.bounds() - obj.options['xmin'] = a - obj.options['ymin'] = b - obj.options['xmax'] = c - obj.options['ymax'] = d - # self.plot_all(zoom=False) - self.inform.emit(_('[success] Origin set ...')) - self.plotcanvas.fit_view() - self.plotcanvas.vis_disconnect('mouse_press', self.on_set_zero_click) - self.should_we_save = True - def on_selectall(self): self.report_usage("on_selectall()") diff --git a/README.md b/README.md index 8447a8ad..ba0a19a4 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,7 @@ CAD program, and create G-Code for Isolation routing. - all transformation functions show now the progress (rotate, mirror, scale, offset, skew) - made threaded the Offset and Scale operations found in the Selected tab of the object - corrected some issues and made Move Tool to show correctly when it is moving and when it is offsetting the objects position +- made Set Origin feature, threaded 6.09.2019