From 5d813c122473c36de1bb9fd71c53e6b1f28cae77 Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Thu, 28 May 2020 02:40:25 +0300 Subject: [PATCH] - updated the Tool Database class to have the Isolation Tool data - Isolation Tool - made to work the adding of tools from database --- AppDatabase.py | 147 ++++++++++++++++++++++++++++++++++++++ AppTools/ToolIsolation.py | 4 +- App_Main.py | 8 ++- CHANGELOG.md | 2 + 4 files changed, 158 insertions(+), 3 deletions(-) diff --git a/AppDatabase.py b/AppDatabase.py index aebf93d6..cc411f4e 100644 --- a/AppDatabase.py +++ b/AppDatabase.py @@ -1030,6 +1030,7 @@ class ToolsDB2(QtWidgets.QWidget): self.advanced_box.setTitle(_("Advanced Geo Parameters")) self.advanced_box.setFixedWidth(250) + # NCC TOOL BOX self.ncc_box = QtWidgets.QGroupBox() self.ncc_box.setStyleSheet(""" QGroupBox @@ -1042,6 +1043,7 @@ class ToolsDB2(QtWidgets.QWidget): self.ncc_box.setTitle(_("NCC Parameters")) self.ncc_box.setFixedWidth(250) + # PAINT TOOL BOX self.paint_box = QtWidgets.QGroupBox() self.paint_box.setStyleSheet(""" QGroupBox @@ -1054,10 +1056,24 @@ class ToolsDB2(QtWidgets.QWidget): self.paint_box.setTitle(_("Paint Parameters")) self.paint_box.setFixedWidth(250) + # ISOLATION TOOL BOX + self.iso_box = QtWidgets.QGroupBox() + self.iso_box.setStyleSheet(""" + QGroupBox + { + font-size: 16px; + font-weight: bold; + } + """) + self.iso_vlay = QtWidgets.QVBoxLayout() + self.iso_box.setTitle(_("Isolation Parameters")) + self.iso_box.setFixedWidth(250) + self.basic_box.setLayout(self.basic_vlay) self.advanced_box.setLayout(self.advanced_vlay) self.ncc_box.setLayout(self.ncc_vlay) self.paint_box.setLayout(self.paint_vlay) + self.iso_box.setLayout(self.iso_vlay) geo_vlay = QtWidgets.QVBoxLayout() geo_vlay.addWidget(self.basic_box) @@ -1067,6 +1083,7 @@ class ToolsDB2(QtWidgets.QWidget): tools_vlay = QtWidgets.QVBoxLayout() tools_vlay.addWidget(self.ncc_box) tools_vlay.addWidget(self.paint_box) + tools_vlay.addWidget(self.iso_box) tools_vlay.addStretch() param_hlay.addLayout(geo_vlay) @@ -1621,6 +1638,101 @@ class ToolsDB2(QtWidgets.QWidget): self.grid3.addWidget(self.pathconnect_cb, 10, 0) self.grid3.addWidget(self.paintcontour_cb, 10, 1) + # ########################################################################### + # ############### Paint UI form ############################################# + # ########################################################################### + + self.grid4 = QtWidgets.QGridLayout() + self.iso_vlay.addLayout(self.grid4) + self.grid4.setColumnStretch(0, 0) + self.grid4.setColumnStretch(1, 1) + self.iso_vlay.addStretch() + + # Passes + passlabel = QtWidgets.QLabel('%s:' % _('Passes')) + passlabel.setToolTip( + _("Width of the isolation gap in\n" + "number (integer) of tool widths.") + ) + self.passes_entry = FCSpinner() + self.passes_entry.set_range(1, 999) + self.passes_entry.setObjectName("gdb_i_passes") + + self.grid4.addWidget(passlabel, 0, 0) + self.grid4.addWidget(self.passes_entry, 0, 1) + + # Overlap Entry + overlabel = QtWidgets.QLabel('%s:' % _('Overlap')) + overlabel.setToolTip( + _("How much (percentage) of the tool width to overlap each tool pass.") + ) + self.iso_overlap_entry = FCDoubleSpinner(suffix='%') + self.iso_overlap_entry.set_precision(self.decimals) + self.iso_overlap_entry.setWrapping(True) + self.iso_overlap_entry.set_range(0.0000, 99.9999) + self.iso_overlap_entry.setSingleStep(0.1) + self.iso_overlap_entry.setObjectName("gdb_i_overlap") + + self.grid4.addWidget(overlabel, 2, 0) + self.grid4.addWidget(self.iso_overlap_entry, 2, 1) + + # Milling Type Radio Button + self.milling_type_label = QtWidgets.QLabel('%s:' % _('Milling Type')) + self.milling_type_label.setToolTip( + _("Milling type when the selected tool is of type: 'iso_op':\n" + "- climb / best for precision milling and to reduce tool usage\n" + "- conventional / useful when there is no backlash compensation") + ) + + self.milling_type_radio = RadioSet([{'label': _('Climb'), 'value': 'cl'}, + {'label': _('Conventional'), 'value': 'cv'}]) + self.milling_type_radio.setToolTip( + _("Milling type when the selected tool is of type: 'iso_op':\n" + "- climb / best for precision milling and to reduce tool usage\n" + "- conventional / useful when there is no backlash compensation") + ) + self.milling_type_radio.setObjectName("gdb_i_milling_type") + + self.grid4.addWidget(self.milling_type_label, 4, 0) + self.grid4.addWidget(self.milling_type_radio, 4, 1) + + # Follow + self.follow_label = QtWidgets.QLabel('%s:' % _('Follow')) + self.follow_label.setToolTip( + _("Generate a 'Follow' geometry.\n" + "This means that it will cut through\n" + "the middle of the trace.") + ) + + self.follow_cb = FCCheckBox() + self.follow_cb.setToolTip(_("Generate a 'Follow' geometry.\n" + "This means that it will cut through\n" + "the middle of the trace.")) + self.follow_cb.setObjectName("gdb_i_follow") + + self.grid4.addWidget(self.follow_label, 6, 0) + self.grid4.addWidget(self.follow_cb, 6, 1) + + # Isolation Type + self.iso_type_label = QtWidgets.QLabel('%s:' % _('Isolation Type')) + self.iso_type_label.setToolTip( + _("Choose how the isolation will be executed:\n" + "- 'Full' -> complete isolation of polygons\n" + "- 'Ext' -> will isolate only on the outside\n" + "- 'Int' -> will isolate only on the inside\n" + "'Exterior' isolation is almost always possible\n" + "(with the right tool) but 'Interior'\n" + "isolation can be done only when there is an opening\n" + "inside of the polygon (e.g polygon is a 'doughnut' shape).") + ) + self.iso_type_radio = RadioSet([{'label': _('Full'), 'value': 'full'}, + {'label': _('Ext'), 'value': 'ext'}, + {'label': _('Int'), 'value': 'int'}]) + self.iso_type_radio.setObjectName("gdb_i_iso_type") + + self.grid4.addWidget(self.iso_type_label, 8, 0) + self.grid4.addWidget(self.iso_type_radio, 8, 1) + # #################################################################### # #################################################################### # GUI for the lower part of the window @@ -1743,6 +1855,13 @@ class ToolsDB2(QtWidgets.QWidget): "tools_paintmethod": self.paintmethod_combo, "tools_pathconnect": self.pathconnect_cb, "tools_paintcontour": self.paintcontour_cb, + + # Isolation + "tools_iso_passes": self.passes_entry, + "tools_iso_overlap": self.iso_overlap_entry, + "tools_iso_milling_type": self.milling_type_radio, + "tools_iso_follow": self.follow_cb, + "tools_iso_isotype": self.iso_type_radio } self.name2option = { @@ -1787,6 +1906,13 @@ class ToolsDB2(QtWidgets.QWidget): 'gdb_p_method': "tools_paintmethod", 'gdb_p_connect': "tools_pathconnect", 'gdb_p_contour': "tools_paintcontour", + + # Isolation + "gdb_i_passes": "tools_iso_passes", + "gdb_i_overlap": "tools_iso_overlap", + "gdb_i_milling_type": "tools_iso_milling_type", + "gdb_i_follow": "tools_iso_follow", + "gdb_i_iso_type": "tools_iso_isotype" } self.current_toolid = None @@ -1944,6 +2070,7 @@ class ToolsDB2(QtWidgets.QWidget): self.advanced_box.setEnabled(True) self.ncc_box.setEnabled(True) self.paint_box.setEnabled(True) + self.iso_box.setEnabled(True) self.tree_widget.setCurrentItem(self.tree_widget.topLevelItem(0)) # self.tree_widget.setFocus() @@ -1954,6 +2081,7 @@ class ToolsDB2(QtWidgets.QWidget): self.advanced_box.setEnabled(False) self.ncc_box.setEnabled(False) self.paint_box.setEnabled(False) + self.iso_box.setEnabled(False) else: self.storage_to_form(self.db_tool_dict[str(self.current_toolid)]) @@ -2006,6 +2134,13 @@ class ToolsDB2(QtWidgets.QWidget): "tools_paintmethod": self.app.defaults["tools_paintmethod"], "tools_pathconnect": self.app.defaults["tools_pathconnect"], "tools_paintcontour": self.app.defaults["tools_paintcontour"], + + # Isolation + "tools_iso_passes": int(self.app.defaults["tools_iso_passes"]), + "tools_iso_overlap": float(self.app.defaults["tools_iso_overlap"]), + "tools_iso_milling_type": self.app.defaults["tools_iso_milling_type"], + "tools_iso_follow": self.app.defaults["tools_iso_follow"], + "tools_iso_isotype": self.app.defaults["tools_iso_isotype"], }) dict_elem = {} @@ -2398,6 +2533,18 @@ class ToolsDB2(QtWidgets.QWidget): elif wdg_name == "gdb_p_contour": self.db_tool_dict[tool_id]['data']['tools_paintcontour'] = val + # Isolation Tool + elif wdg_name == "gdb_i_passes": + self.db_tool_dict[tool_id]['data']['tools_iso_passes'] = val + elif wdg_name == "gdb_i_overlap": + self.db_tool_dict[tool_id]['data']['tools_iso_overlap'] = val + elif wdg_name == "gdb_i_milling_type": + self.db_tool_dict[tool_id]['data']['tools_iso_milling_type'] = val + elif wdg_name == "gdb_i_follow": + self.db_tool_dict[tool_id]['data']['tools_iso_follow'] = val + elif wdg_name == "gdb_i_iso_type": + self.db_tool_dict[tool_id]['data']['tools_iso_isotype'] = val + self.callback_app() def on_tool_requested_from_app(self): diff --git a/AppTools/ToolIsolation.py b/AppTools/ToolIsolation.py index 67d1135b..feb89438 100644 --- a/AppTools/ToolIsolation.py +++ b/AppTools/ToolIsolation.py @@ -3446,7 +3446,7 @@ class ToolIsolation(AppTool, Gerber): return 'fail' return geom - def on_tool_add_from_db_executed(self, tool): + def on_iso_tool_add_from_db_executed(self, tool): """ Here add the tool from DB in the selected geometry object :return: @@ -3543,7 +3543,7 @@ class ToolIsolation(AppTool, Gerber): if self.app.ui.plot_tab_area.tabText(idx) == _("Tools Database"): self.app.ui.plot_tab_area.setCurrentWidget(self.app.tools_db_tab) break - self.app.on_tools_database(source='ncc') + self.app.on_tools_database(source='iso') self.app.tools_db_tab.ok_to_add = True self.app.tools_db_tab.buttons_frame.hide() self.app.tools_db_tab.add_tool_from_db.show() diff --git a/App_Main.py b/App_Main.py index aa6ec089..a03fd5d1 100644 --- a/App_Main.py +++ b/App_Main.py @@ -5292,7 +5292,13 @@ class App(QtCore.QObject): callback_on_edited=self.on_tools_db_edited, callback_on_tool_request=self.paint_tool.on_paint_tool_add_from_db_executed ) - + elif source == 'iso': + self.tools_db_tab = ToolsDB2( + app=self, + parent=self.ui, + callback_on_edited=self.on_tools_db_edited, + callback_on_tool_request=self.isolation_tool.on_iso_tool_add_from_db_executed + ) # add the tab if it was closed try: self.ui.plot_tab_area.addTab(self.tools_db_tab, _("Tools Database")) diff --git a/CHANGELOG.md b/CHANGELOG.md index a328d91b..95bdff47 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,8 @@ CHANGELOG for FlatCAM beta 28.05.2020 - made the visibility change (when using the Spacebar key in Project Tab) to be not threaded and to use the enabled property of the ShapesCollection which should be faster +- updated the Tool Database class to have the Isolation Tool data +- Isolation Tool - made to work the adding of tools from database 27.05.2020