Explorar o código

- added ability to regenerate objects (it's actually deletion followed by recreation)

Marius Stanciu %!s(int64=7) %!d(string=hai) anos
pai
achega
18f38999c4
Modificáronse 4 ficheiros con 26 adicións e 17 borrados
  1. 9 7
      FlatCAMApp.py
  2. 12 4
      ObjectCollection.py
  3. 1 0
      README.md
  4. 4 6
      flatcamTools/ToolSolderPaste.py

+ 9 - 7
FlatCAMApp.py

@@ -149,7 +149,7 @@ class App(QtCore.QObject):
     # Emitted by new_object() and passes the new object as argument, plot flag.
     # on_object_created() adds the object to the collection, plots on appropriate flag
     # and emits new_object_available.
-    object_created = QtCore.pyqtSignal(object, bool, bool)
+    object_created = QtCore.pyqtSignal(object, bool, bool, bool)
 
     # Emitted when a object has been changed (like scaled, mirrored)
     object_changed = QtCore.pyqtSignal(object)
@@ -2298,7 +2298,7 @@ class App(QtCore.QObject):
         # Re-buid the recent items menu
         self.setup_recent_items()
 
-    def new_object(self, kind, name, initialize, active=True, fit=True, plot=True, autoselected=True):
+    def new_object(self, kind, name, initialize, active=True, fit=True, plot=True, autoselected=True, overwrite=False):
         """
         Creates a new specalized FlatCAMObj and attaches it to the application,
         this is, updates the GUI accordingly, any other records and plots it.
@@ -2323,8 +2323,10 @@ class App(QtCore.QObject):
         """
 
         App.log.debug("new_object()")
-        self.plot = plot
-        self.autoselected = autoselected
+        obj_plot = plot
+        obj_autoselected = autoselected
+        obj_overwrite = overwrite
+
         t0 = time.time()  # Debug
 
         ## Create object
@@ -2412,7 +2414,7 @@ class App(QtCore.QObject):
 
         # Move the object to the main thread and let the app know that it is available.
         obj.moveToThread(QtWidgets.QApplication.instance().thread())
-        self.object_created.emit(obj, self.plot, self.autoselected)
+        self.object_created.emit(obj, obj_plot, obj_autoselected, obj_overwrite)
 
         return obj
 
@@ -2429,7 +2431,7 @@ class App(QtCore.QObject):
 
         self.new_object('geometry', 'new_g', initialize, plot=False)
 
-    def on_object_created(self, obj, plot, autoselect):
+    def on_object_created(self, obj, plot, autoselect, overwrite):
         """
         Event callback for object creation.
 
@@ -2440,7 +2442,7 @@ class App(QtCore.QObject):
         self.log.debug("on_object_created()")
 
         # The Collection might change the name if there is a collision
-        self.collection.append(obj)
+        self.collection.append(obj, overwrite=overwrite)
 
         # after adding the object to the collection always update the list of objects that are in the collection
         self.all_objects_list = self.collection.get_list()

+ 12 - 4
ObjectCollection.py

@@ -642,7 +642,7 @@ class ObjectCollection(QtCore.QAbstractItemModel):
 
         # return QtWidgets.QAbstractItemModel.flags(self, index)
 
-    def append(self, obj, active=False):
+    def append(self, obj, active=False, overwrite=False):
         FlatCAMApp.App.log.debug(str(inspect.stack()[1][3]) + " --> OC.append()")
 
         name = obj.options["name"]
@@ -652,6 +652,13 @@ class ObjectCollection(QtCore.QAbstractItemModel):
             self.promises.remove(name)
             # FlatCAMApp.App.log.debug("Promised object %s became available." % name)
             # FlatCAMApp.App.log.debug("%d promised objects remaining." % len(self.promises))
+
+        # first delete the old object
+        if overwrite:
+            if name in self.get_names():
+                self.set_active(name)
+                self.delete_active(select_project=False)
+
         # Prevent same name
         while name in self.get_names():
             ## Create a new name
@@ -752,7 +759,7 @@ class ObjectCollection(QtCore.QAbstractItemModel):
                     return obj
         return None
 
-    def delete_active(self):
+    def delete_active(self, select_project=True):
         selections = self.view.selectedIndexes()
         if len(selections) == 0:
             return
@@ -779,8 +786,9 @@ class ObjectCollection(QtCore.QAbstractItemModel):
 
         self.endRemoveRows()
 
-        # always go to the Project Tab after object deletion as it may be done with a shortcut key
-        self.app.ui.notebook.setCurrentWidget(self.app.ui.project_tab)
+        if select_project:
+            # always go to the Project Tab after object deletion as it may be done with a shortcut key
+            self.app.ui.notebook.setCurrentWidget(self.app.ui.project_tab)
 
         self.app.should_we_save = True
 

+ 1 - 0
README.md

@@ -23,6 +23,7 @@ CAD program, and create G-Code for Isolation routing.
 - fixed issue with not updating correctly the plot kind (all, cut, travel) when clicking in the CNC Tools Table plot buttons
 - made the GCode Editor for ToolSolderPaste clear the text before updating the Code Editor tab
 - all the Tabs in Plot Area are closed (except Plot Area itself) on New Project creation
+- added ability to regenerate objects (it's actually deletion followed by recreation)
 
 20.02.2019
 

+ 4 - 6
flatcamTools/ToolSolderPaste.py

@@ -933,7 +933,7 @@ class SolderPaste(FlatCAMTool):
 
         def job_thread(app_obj):
             try:
-                app_obj.new_object("geometry", name + "_solderpaste", geo_init)
+                app_obj.new_object("geometry", name + "_solderpaste", geo_init, overwrite=True)
             except Exception as e:
                 proc.done()
                 traceback.print_stack()
@@ -1065,7 +1065,7 @@ class SolderPaste(FlatCAMTool):
         self.app.file_saved.emit("gcode", filename)
         self.app.inform.emit("[success] Solder paste dispenser GCode file saved to: %s" % filename)
 
-    def on_create_gcode(self, use_thread=True):
+    def on_create_gcode(self, signal, use_thread=True):
         """
         Creates a multi-tool CNCJob out of this Geometry object.
         :return: None
@@ -1168,11 +1168,9 @@ class SolderPaste(FlatCAMTool):
 
         if use_thread:
             # To be run in separate thread
-            # The idea is that if there is a solid_geometry in the file "root" then most likely thare are no
-            # separate solid_geometry in the self.tools dictionary
             def job_thread(app_obj):
                 with self.app.proc_container.new("Generating CNC Code"):
-                    if app_obj.new_object("cncjob", outname, job_init) != 'fail':
+                    if app_obj.new_object("cncjob", outname, job_init, overwrite=True) != 'fail':
                         app_obj.inform.emit("[success]ToolSolderPaste CNCjob created: %s" % outname)
                         app_obj.progress.emit(100)
 
@@ -1181,7 +1179,7 @@ class SolderPaste(FlatCAMTool):
             # Send to worker
             self.app.worker_task.emit({'fcn': job_thread, 'params': [self.app]})
         else:
-            self.app.new_object("cncjob", outname, job_init)
+            self.app.new_object("cncjob", outname, job_init, overwrite=True)
 
     def reset_fields(self):
         self.obj_combo.setRootModelIndex(self.app.collection.index(0, 0, QtCore.QModelIndex()))