diff --git a/CHANGELOG.md b/CHANGELOG.md index b92c6208..1dde0bba 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,8 @@ CHANGELOG for FlatCAM beta - added a shortcut to select all apertures in the Gerber Editor (Ctrl+A) - other minor fixes - added a shortcut to select all apertures in the Excellon Editor (Ctrl+A) +- in Cutout Plugin simplified the UI +- Gerber Extra Buffering is now OFf by default. For those cases where the Gerber file is not rendered correctly it will need to be activated. It has a performance penalty so it will no longer be enabled by default for everybody. 27.09.2021 diff --git a/appPlugins/ToolCutOut.py b/appPlugins/ToolCutOut.py index b0fbce2c..da1402f0 100644 --- a/appPlugins/ToolCutOut.py +++ b/appPlugins/ToolCutOut.py @@ -188,14 +188,15 @@ class CutOut(AppTool): # ############################################################################# self.ui.level.toggled.connect(self.on_level_changed) - self.ui.ff_cutout_object_btn.clicked.connect(self.on_freeform_cutout) - self.ui.rect_cutout_object_btn.clicked.connect(self.on_rectangular_cutout) + self.ui.generate_cutout_btn.clicked.connect(self.on_cutout_generation) # adding tools self.ui.add_newtool_button.clicked.connect(lambda: self.on_tool_add()) self.ui.addtool_from_db_btn.clicked.connect(self.on_tool_add_from_db_clicked) self.ui.type_obj_radio.activated_custom.connect(self.on_type_obj_changed) + self.ui.cutout_shape_cb.stateChanged.connect(self.on_cutout_shape_changed) + self.ui.cutout_type_radio.activated_custom.connect(self.on_cutout_type) self.ui.man_geo_creation_btn.clicked.connect(self.on_manual_geo) @@ -267,6 +268,9 @@ class CutOut(AppTool): self.ui.cutout_type_radio.set_value('a') self.on_cutout_type(val='a') + self.ui.cutout_shape_cb.set_value(False) + self.on_cutout_shape_changed(self.ui.cutout_shape_cb.get_value()) + # set the Cut By Drilling parameters self.ui.drill_dia_entry.set_value(float(self.app.defaults["tools_cutout_drill_dia"])) self.ui.drill_pitch_entry.set_value(float(self.app.defaults["tools_cutout_drill_pitch"])) @@ -392,8 +396,7 @@ class CutOut(AppTool): if val == 'a': self.ui.gaps_label.show() self.ui.gaps.show() - self.ui.ff_cutout_object_btn.show() - self.ui.rect_cutout_object_btn.show() + self.ui.generate_cutout_btn.show() self.ui.man_geo_creation_btn.hide() self.ui.man_gaps_creation_btn.hide() @@ -401,13 +404,18 @@ class CutOut(AppTool): else: self.ui.gaps_label.hide() self.ui.gaps.hide() - self.ui.ff_cutout_object_btn.hide() - self.ui.rect_cutout_object_btn.hide() + self.ui.generate_cutout_btn.hide() self.ui.man_geo_creation_btn.show() self.ui.man_gaps_creation_btn.show() self.ui.man_frame.show() + def on_cutout_shape_changed(self, state): + if state: + self.ui.generate_cutout_btn.setIcon(QtGui.QIcon(self.app.resource_location + '/rectangle32.png')) + else: + self.ui.generate_cutout_btn.setIcon(QtGui.QIcon(self.app.resource_location + '/irregular32.png')) + def on_tool_add(self, custom_dia=None): self.blockSignals(True) @@ -621,6 +629,13 @@ class CutOut(AppTool): self.app.tools_db_tab.ui.add_tool_from_db.show() self.app.tools_db_tab.ui.cancel_tool_from_db.show() + def on_cutout_generation(self): + cutout_rect_shape = self.ui.cutout_shape_cb.get_value() + if cutout_rect_shape: + self.on_rectangular_cutout() + else: + self.on_freeform_cutout() + def on_freeform_cutout(self): name = self.ui.obj_combo.currentText() @@ -2535,12 +2550,23 @@ class CutoutUI: gaps_grid.addWidget(self.gaps_label, 16, 0) gaps_grid.addWidget(self.gaps, 16, 1) + # Type of generated cutout: Rectangular or Any Form + self.cutout_shape_label = FCLabel('%s:' % _("Shape")) + self.cutout_shape_label.setToolTip( + _("Checked: the cutout shape is rectangular.\n" + "Unchecked: any-form cutout shape.") + ) + self.cutout_shape_cb = FCCheckBox() + + gaps_grid.addWidget(self.cutout_shape_label, 18, 0) + gaps_grid.addWidget(self.cutout_shape_cb, 18, 1) + # ############################################################################################################# # Manual Gaps Frame # ############################################################################################################# self.man_frame = QtWidgets.QFrame() self.man_frame.setContentsMargins(0, 0, 0, 0) - gaps_grid.addWidget(self.man_frame, 18, 0, 1, 2) + gaps_grid.addWidget(self.man_frame, 20, 0, 1, 2) man_grid = FCGridLayout(v_spacing=5, h_spacing=3) man_grid.setContentsMargins(0, 0, 0, 0) @@ -2608,38 +2634,19 @@ class CutoutUI: man_hlay.addWidget(self.man_geo_creation_btn) man_hlay.addWidget(self.man_gaps_creation_btn) - # Freeform Geometry Button - self.ff_cutout_object_btn = FCButton(_("Generate Geometry")) - self.ff_cutout_object_btn.setIcon(QtGui.QIcon(self.app.resource_location + '/irregular32.png')) - self.ff_cutout_object_btn.setToolTip( - _("Cutout the selected object.\n" - "The cutout shape can be of any shape.\n" - "Useful when the PCB has a non-rectangular shape.") + # Generate Geometry Button + self.generate_cutout_btn = FCButton(_("Generate Geometry")) + self.generate_cutout_btn.setIcon(QtGui.QIcon(self.app.resource_location + '/irregular32.png')) + self.generate_cutout_btn.setToolTip( + _("Generate the cutout geometry.") ) - self.ff_cutout_object_btn.setStyleSheet(""" + self.generate_cutout_btn.setStyleSheet(""" QPushButton { font-weight: bold; } """) - self.tools_box.addWidget(self.ff_cutout_object_btn) - - # Rectangular Geometry Button - self.rect_cutout_object_btn = FCButton(_("Generate Geometry")) - self.rect_cutout_object_btn.setIcon(QtGui.QIcon(self.app.resource_location + '/rectangle32.png')) - self.rect_cutout_object_btn.setToolTip( - _("Cutout the selected object.\n" - "The resulting cutout shape is\n" - "always a rectangle shape and it will be\n" - "the bounding box of the Object.") - ) - self.rect_cutout_object_btn.setStyleSheet(""" - QPushButton - { - font-weight: bold; - } - """) - self.tools_box.addWidget(self.rect_cutout_object_btn) + self.tools_box.addWidget(self.generate_cutout_btn) # self.tool_param_separator_line = QtWidgets.QFrame() # self.tool_param_separator_line.setFrameShape(QtWidgets.QFrame.Shape.HLine) diff --git a/defaults.py b/defaults.py index c454bf23..29cc8bbf 100644 --- a/defaults.py +++ b/defaults.py @@ -168,7 +168,7 @@ class FlatCAMDefaults: "gerber_circle_steps": 16, "gerber_use_buffer_for_union": True, "gerber_clean_apertures": True, - "gerber_extra_buffering": True, + "gerber_extra_buffering": False, "gerber_plot_fill": '#BBF268BF', "gerber_plot_line": '#006E20BF',