diff --git a/CHANGELOG.md b/CHANGELOG.md index 8823d4d4..92cd5806 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,8 @@ CHANGELOG for FlatCAM beta - Excellon UI: added a new feature that is grouped in Advanced Settings: a toggle tools table visibility checkbox - Drilling Tool - minor fixes - Drilling Tool - changes in UI +- Isolation Tool - modified the UI; preparing to add new feature of polishing at the end of the milling job +- Tool Paint - fixed an issue when launching the tool and an object other than Geometry or Excellon is selected 10.07.2020 diff --git a/appTools/ToolDrilling.py b/appTools/ToolDrilling.py index af30edfd..2ab250b1 100644 --- a/appTools/ToolDrilling.py +++ b/appTools/ToolDrilling.py @@ -2092,7 +2092,7 @@ class DrillingUI: _("How much (percentage) of the tool diameter to overlap previous drill hole.") ) - self.drill_overlap_entry = FCDoubleSpinner(callback=self.confirmation_message) + self.drill_overlap_entry = FCDoubleSpinner(suffix='%', callback=self.confirmation_message) self.drill_overlap_entry.set_precision(self.decimals) self.drill_overlap_entry.set_range(0.0, 100.0000) self.drill_overlap_entry.setSingleStep(0.1) diff --git a/appTools/ToolIsolation.py b/appTools/ToolIsolation.py index 4dd088c8..6296ee08 100644 --- a/appTools/ToolIsolation.py +++ b/appTools/ToolIsolation.py @@ -9,7 +9,7 @@ from PyQt5 import QtWidgets, QtCore, QtGui from appTool import AppTool from appGUI.GUIElements import FCCheckBox, FCDoubleSpinner, RadioSet, FCTable, FCInputDialog, FCButton, \ - FCComboBox, OptionalInputSection, FCSpinner + FCComboBox, OptionalInputSection, FCSpinner, OptionalHideInputSection from appParsers.ParseGerber import Gerber from copy import deepcopy @@ -3162,7 +3162,7 @@ class IsoUI: self.exc_obj_combo.is_last = True self.exc_obj_combo.obj_type = "gerber" - self.grid3.addWidget(self.exc_obj_combo, 29, 0, 1, 2) + self.grid3.addWidget(self.exc_obj_combo, 28, 0, 1, 2) self.e_ois = OptionalInputSection(self.except_cb, [ @@ -3170,6 +3170,79 @@ class IsoUI: self.exc_obj_combo ]) + # Add Polish + self.polish_cb = FCCheckBox(label=_('Add Polish')) + self.polish_cb.setToolTip(_( + "Will add a Paint section at the end of the GCode.\n" + "It will clean the material after milling.")) + self.polish_cb.setObjectName("i_polish") + self.grid3.addWidget(self.polish_cb, 29, 0, 1, 2) + + # Polish Tool Diameter + self.polish_dia_lbl = QtWidgets.QLabel('%s:' % _('Tool Dia')) + self.polish_dia_lbl.setToolTip( + _("Diameter for the polishing tool.") + ) + self.polish_dia_entry = FCDoubleSpinner(callback=self.confirmation_message) + self.polish_dia_entry.set_precision(self.decimals) + self.polish_dia_entry.set_range(0.000, 9999.9999) + self.polish_dia_entry.setObjectName("i_polish_dia") + + self.grid3.addWidget(self.polish_dia_lbl, 30, 0) + self.grid3.addWidget(self.polish_dia_entry, 30, 1) + + # Polish Overlap + self.polish_over_lbl = QtWidgets.QLabel('%s:' % _('Overlap')) + self.polish_over_lbl.setToolTip( + _("How much (percentage) of the tool width to overlap each tool pass.") + ) + self.polish_over_entry = FCDoubleSpinner(suffix='%', callback=self.confirmation_message) + self.polish_over_entry.set_precision(self.decimals) + self.polish_over_entry.setWrapping(True) + self.polish_over_entry.set_range(0.0000, 99.9999) + self.polish_over_entry.setSingleStep(0.1) + self.polish_over_entry.setObjectName("i_polish_overlap") + + self.grid3.addWidget(self.polish_over_lbl, 31, 0) + self.grid3.addWidget(self.polish_over_entry, 31, 1) + + # Polish Method + self.polish_method_lbl = QtWidgets.QLabel('%s:' % _('Method')) + self.polish_method_lbl.setToolTip( + _("Algorithm for polishing:\n" + "- Standard: Fixed step inwards.\n" + "- Seed-based: Outwards from seed.\n" + "- Line-based: Parallel lines.") + ) + + self.polish_method_combo = FCComboBox() + self.polish_method_combo.addItems( + [_("Standard"), _("Seed"), _("Lines")] + ) + self.polish_method_combo.setObjectName('i_polish_method') + + self.grid3.addWidget(self.polish_method_lbl, 32, 0) + self.grid3.addWidget(self.polish_method_combo, 32, 1) + + self.polish_dia_lbl.hide() + self.polish_dia_entry.hide() + self.polish_over_lbl.hide() + self.polish_over_entry.hide() + self.polish_method_lbl.hide() + self.polish_method_combo.hide() + + self.ois_polish = OptionalHideInputSection( + self.polish_cb, + [ + self.polish_dia_lbl, + self.polish_dia_entry, + self.polish_over_lbl, + self.polish_over_entry, + self.polish_method_lbl, + self.polish_method_combo + ] + ) + # Isolation Scope self.select_label = QtWidgets.QLabel('%s:' % _("Selection")) self.select_label.setToolTip( @@ -3185,8 +3258,8 @@ class IsoUI: ) self.select_combo.setObjectName("i_selection") - self.grid3.addWidget(self.select_label, 30, 0) - self.grid3.addWidget(self.select_combo, 30, 1) + self.grid3.addWidget(self.select_label, 33, 0) + self.grid3.addWidget(self.select_combo, 33, 1) self.reference_combo_type_label = QtWidgets.QLabel('%s:' % _("Ref. Type")) self.reference_combo_type_label.setToolTip( @@ -3196,8 +3269,8 @@ class IsoUI: self.reference_combo_type = FCComboBox() self.reference_combo_type.addItems([_("Gerber"), _("Excellon"), _("Geometry")]) - self.grid3.addWidget(self.reference_combo_type_label, 31, 0) - self.grid3.addWidget(self.reference_combo_type, 31, 1) + self.grid3.addWidget(self.reference_combo_type_label, 34, 0) + self.grid3.addWidget(self.reference_combo_type, 34, 1) self.reference_combo_label = QtWidgets.QLabel('%s:' % _("Ref. Object")) self.reference_combo_label.setToolTip( @@ -3208,8 +3281,8 @@ class IsoUI: self.reference_combo.setRootModelIndex(self.app.collection.index(0, 0, QtCore.QModelIndex())) self.reference_combo.is_last = True - self.grid3.addWidget(self.reference_combo_label, 32, 0) - self.grid3.addWidget(self.reference_combo, 32, 1) + self.grid3.addWidget(self.reference_combo_label, 35, 0) + self.grid3.addWidget(self.reference_combo, 35, 1) self.reference_combo.hide() self.reference_combo_label.hide() @@ -3223,7 +3296,7 @@ class IsoUI: "(holes in the polygon).") ) - self.grid3.addWidget(self.poly_int_cb, 33, 0) + self.grid3.addWidget(self.poly_int_cb, 36, 0) self.poly_int_cb.hide() @@ -3236,8 +3309,8 @@ class IsoUI: self.area_shape_radio = RadioSet([{'label': _("Square"), 'value': 'square'}, {'label': _("Polygon"), 'value': 'polygon'}]) - self.grid3.addWidget(self.area_shape_label, 35, 0) - self.grid3.addWidget(self.area_shape_radio, 35, 1) + self.grid3.addWidget(self.area_shape_label, 38, 0) + self.grid3.addWidget(self.area_shape_radio, 38, 1) self.area_shape_label.hide() self.area_shape_radio.hide() @@ -3245,7 +3318,7 @@ class IsoUI: separator_line = QtWidgets.QFrame() separator_line.setFrameShape(QtWidgets.QFrame.HLine) separator_line.setFrameShadow(QtWidgets.QFrame.Sunken) - self.grid3.addWidget(separator_line, 36, 0, 1, 2) + self.grid3.addWidget(separator_line, 39, 0, 1, 2) self.generate_iso_button = QtWidgets.QPushButton("%s" % _("Generate Isolation Geometry")) self.generate_iso_button.setStyleSheet(""" diff --git a/appTools/ToolPaint.py b/appTools/ToolPaint.py index eb76db3b..ff0c81c5 100644 --- a/appTools/ToolPaint.py +++ b/appTools/ToolPaint.py @@ -590,9 +590,10 @@ class ToolPaint(AppTool, Gerber): active = self.app.collection.get_active() kind = active.kind if kind == 'gerber': - self.ui.type_obj_radio.set_value('gerber') + self.ui.type_obj_radio.set_value(kind) else: - self.ui.type_obj_radio.set_value('geometry') + kind = 'geometry' + self.ui.type_obj_radio.set_value(kind) # run those once so the obj_type attribute is updated in the FCComboBoxes # to make sure that the last loaded object is displayed in the combobox