Explorar o código

- made Set Origin feature, threaded

Marius Stanciu %!s(int64=6) %!d(string=hai) anos
pai
achega
65ac58ae83
Modificáronse 2 ficheiros con 56 adicións e 29 borrados
  1. 55 29
      FlatCAMApp.py
  2. 1 0
      README.md

+ 55 - 29
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()")
 

+ 1 - 0
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