From 3ac8e960711569b2ed90672dc91bf73822c19f26 Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Sat, 25 Jan 2020 01:44:44 +0200 Subject: [PATCH] - fixed bugs in Minimum Distance Tool --- FlatCAMApp.py | 17 ++++++++++------- README.md | 1 + flatcamEditors/FlatCAMExcEditor.py | 2 +- flatcamEditors/FlatCAMGeoEditor.py | 2 +- flatcamEditors/FlatCAMGrbEditor.py | 2 +- flatcamGUI/FlatCAMGUI.py | 2 +- flatcamTools/ToolCalibration.py | 4 ++-- flatcamTools/ToolDistanceMin.py | 16 ++++++++++++++-- 8 files changed, 31 insertions(+), 15 deletions(-) diff --git a/FlatCAMApp.py b/FlatCAMApp.py index 05cc7136..e6dc95ea 100644 --- a/FlatCAMApp.py +++ b/FlatCAMApp.py @@ -1967,7 +1967,7 @@ class App(QtCore.QObject): self.ui.menueditdelete.triggered.connect(self.on_delete) - self.ui.menueditcopyobject.triggered.connect(self.on_copy_object) + self.ui.menueditcopyobject.triggered.connect(self.on_copy_command) self.ui.menueditconvert_any2geo.triggered.connect(self.convert_any2geo) self.ui.menueditconvert_any2gerber.triggered.connect(self.convert_any2gerber) @@ -2030,7 +2030,7 @@ class App(QtCore.QObject): self.ui.menuprojectgeneratecnc.triggered.connect(lambda: self.generate_cnc_job(self.collection.get_selected())) self.ui.menuprojectviewsource.triggered.connect(self.on_view_source) - self.ui.menuprojectcopy.triggered.connect(self.on_copy_object) + self.ui.menuprojectcopy.triggered.connect(self.on_copy_command) self.ui.menuprojectedit.triggered.connect(self.object2editor) self.ui.menuprojectdelete.triggered.connect(self.on_delete) @@ -2061,7 +2061,7 @@ class App(QtCore.QObject): self.ui.clearplot.triggered.connect(self.clear_plots) self.ui.replot.triggered.connect(self.plot_all) - self.ui.popmenu_copy.triggered.connect(self.on_copy_object) + self.ui.popmenu_copy.triggered.connect(self.on_copy_command) self.ui.popmenu_delete.triggered.connect(self.on_delete) self.ui.popmenu_edit.triggered.connect(self.object2editor) self.ui.popmenu_save.triggered.connect(lambda: self.editor2object()) @@ -3259,7 +3259,7 @@ class App(QtCore.QObject): self.ui.newexc_btn.triggered.connect(self.new_excellon_object) self.ui.editgeo_btn.triggered.connect(self.object2editor) self.ui.update_obj_btn.triggered.connect(lambda: self.editor2object()) - self.ui.copy_btn.triggered.connect(self.on_copy_object) + self.ui.copy_btn.triggered.connect(self.on_copy_command) self.ui.delete_btn.triggered.connect(self.on_delete) self.ui.distance_btn.triggered.connect(lambda: self.distance_tool.run(toggle=True)) @@ -7540,8 +7540,8 @@ class App(QtCore.QObject): self.inform.emit('[success] %s' % _("Done.")) return location - def on_copy_object(self): - self.report_usage("on_copy_object()") + def on_copy_command(self): + self.report_usage("on_copy_command()") def initialize(obj_init, app): obj_init.solid_geometry = deepcopy(obj.solid_geometry) @@ -7559,7 +7559,7 @@ class App(QtCore.QObject): if obj.tools: obj_init.tools = deepcopy(obj.tools) except Exception as e: - log.debug("App.on_copy_object() --> %s" % str(e)) + log.debug("App.on_copy_command() --> %s" % str(e)) try: obj_init.source_file = deepcopy(obj.source_file) @@ -7600,6 +7600,9 @@ class App(QtCore.QObject): except Exception as e: return "Operation failed: %s" % str(e) + def on_paste_command(self): + pass + def on_copy_object2(self, custom_name): def initialize_geometry(obj_init, app): diff --git a/README.md b/README.md index 33637b91..a196be6e 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,7 @@ CAD program, and create G-Code for Isolation routing. - small changes to the Toolchange manual preprocessor - fix for plotting Excellon objects if the color is changed and then the object is moved - laying the GUI for a new Tool: Punch Gerber Tool which will add holes in the Gerber apertures +- fixed bugs in Minimum Distance Tool 22.01.2020 diff --git a/flatcamEditors/FlatCAMExcEditor.py b/flatcamEditors/FlatCAMExcEditor.py index b77019cd..1e621a9c 100644 --- a/flatcamEditors/FlatCAMExcEditor.py +++ b/flatcamEditors/FlatCAMExcEditor.py @@ -2974,7 +2974,7 @@ class FlatCAMExcEditor(QtCore.QObject): except (TypeError, AttributeError): pass - self.app.ui.popmenu_copy.triggered.connect(self.app.on_copy_object) + self.app.ui.popmenu_copy.triggered.connect(self.app.on_copy_command) self.app.ui.popmenu_delete.triggered.connect(self.app.on_delete) self.app.ui.popmenu_move.triggered.connect(self.app.obj_move) diff --git a/flatcamEditors/FlatCAMGeoEditor.py b/flatcamEditors/FlatCAMGeoEditor.py index 5b0b95b9..8e12c935 100644 --- a/flatcamEditors/FlatCAMGeoEditor.py +++ b/flatcamEditors/FlatCAMGeoEditor.py @@ -3553,7 +3553,7 @@ class FlatCAMGeoEditor(QtCore.QObject): except (TypeError, AttributeError): pass - self.app.ui.popmenu_copy.triggered.connect(self.app.on_copy_object) + self.app.ui.popmenu_copy.triggered.connect(self.app.on_copy_command) self.app.ui.popmenu_delete.triggered.connect(self.app.on_delete) self.app.ui.popmenu_move.triggered.connect(self.app.obj_move) diff --git a/flatcamEditors/FlatCAMGrbEditor.py b/flatcamEditors/FlatCAMGrbEditor.py index 5d1b4ae5..0aba714b 100644 --- a/flatcamEditors/FlatCAMGrbEditor.py +++ b/flatcamEditors/FlatCAMGrbEditor.py @@ -3742,7 +3742,7 @@ class FlatCAMGrbEditor(QtCore.QObject): except (TypeError, AttributeError): pass - self.app.ui.popmenu_copy.triggered.connect(self.app.on_copy_object) + self.app.ui.popmenu_copy.triggered.connect(self.app.on_copy_command) self.app.ui.popmenu_delete.triggered.connect(self.app.on_delete) self.app.ui.popmenu_move.triggered.connect(self.app.obj_move) diff --git a/flatcamGUI/FlatCAMGUI.py b/flatcamGUI/FlatCAMGUI.py index 2c921197..e7a4bc68 100644 --- a/flatcamGUI/FlatCAMGUI.py +++ b/flatcamGUI/FlatCAMGUI.py @@ -2815,7 +2815,7 @@ class FlatCAMGUI(QtWidgets.QMainWindow): self.app.tools_db_tab.on_tool_copy() return - self.app.on_copy_object() + self.app.on_copy_command() # Copy an FlatCAM object if key == QtCore.Qt.Key_D: diff --git a/flatcamTools/ToolCalibration.py b/flatcamTools/ToolCalibration.py index 7e50a3c3..fa533f9e 100644 --- a/flatcamTools/ToolCalibration.py +++ b/flatcamTools/ToolCalibration.py @@ -1275,7 +1275,7 @@ class ToolCalibration(FlatCAMTool): if obj.tools: obj_init.tools = deepcopy(obj.tools) except Exception as ee: - log.debug("App.on_copy_object() --> %s" % str(ee)) + log.debug("ToolCalibration.new_calibrated_object.initialize_geometry() --> %s" % str(ee)) obj_init.scale(xfactor=scalex, yfactor=scaley, point=(origin_x, origin_y)) obj_init.skew(angle_x=skewx, angle_y=skewy, point=(origin_x, origin_y)) @@ -1301,7 +1301,7 @@ class ToolCalibration(FlatCAMTool): if obj.tools: obj_init.tools = deepcopy(obj.tools) except Exception as err: - log.debug("App.on_copy_object() --> %s" % str(err)) + log.debug("ToolCalibration.new_calibrated_object.initialize_gerber() --> %s" % str(err)) obj_init.scale(xfactor=scalex, yfactor=scaley, point=(origin_x, origin_y)) obj_init.skew(angle_x=skewx, angle_y=skewy, point=(origin_x, origin_y)) diff --git a/flatcamTools/ToolDistanceMin.py b/flatcamTools/ToolDistanceMin.py index 9197ac58..08bfc62f 100644 --- a/flatcamTools/ToolDistanceMin.py +++ b/flatcamTools/ToolDistanceMin.py @@ -11,7 +11,8 @@ from flatcamGUI.VisPyVisuals import * from flatcamGUI.GUIElements import FCEntry from shapely.ops import nearest_points -from shapely.geometry import Point +from shapely.geometry import Point, MultiPolygon +from shapely.ops import cascaded_union import math import logging @@ -205,6 +206,17 @@ class DistanceMin(FlatCAMTool): str(len(selected_objs)))) return else: + if isinstance(selected_objs[0].solid_geometry, list): + try: + selected_objs[0].solid_geometry = MultiPolygon(selected_objs[0].solid_geometry) + except Exception: + selected_objs[0].solid_geometry = cascaded_union(selected_objs[0].solid_geometry) + + try: + selected_objs[1].solid_geometry = MultiPolygon(selected_objs[1].solid_geometry) + except Exception: + selected_objs[1].solid_geometry = cascaded_union(selected_objs[1].solid_geometry) + first_pos, last_pos = nearest_points(selected_objs[0].solid_geometry, selected_objs[1].solid_geometry) elif self.app.call_source == 'geo_editor': @@ -278,7 +290,7 @@ class DistanceMin(FlatCAMTool): ) if d != 0: - self.app.inform.emit("{tx1}: {tx2} D(x) = {d_x} | D(y) = {d_y} | (tx3} = {d_z}".format( + self.app.inform.emit("{tx1}: {tx2} D(x) = {d_x} | D(y) = {d_y} | {tx3} = {d_z}".format( tx1=_("MEASURING"), tx2=_("Result"), tx3=_("Distance"),