diff --git a/FlatCAMApp.py b/FlatCAMApp.py index fcd66c45..697978a7 100644 --- a/FlatCAMApp.py +++ b/FlatCAMApp.py @@ -516,7 +516,7 @@ class App(QtCore.QObject): "zoom_in_key": '=', "grid_toggle_key": 'G', "global_zoom_ratio": 1.5, - "global_point_clipboard_format": "(%.4f, %.4f)", + "global_point_clipboard_format": "(%.*f, %.*f)", "global_zdownrate": None, # General GUI Settings @@ -814,6 +814,7 @@ class App(QtCore.QObject): "tools_2sided_mirror_axis": "X", "tools_2sided_axis_loc": "point", "tools_2sided_drilldia": 3.125, + "tools_2sided_allign_axis": "X", # Film Tool "tools_film_type": 'neg', @@ -1464,6 +1465,7 @@ class App(QtCore.QObject): "tools_2sided_mirror_axis": self.ui.tools_defaults_form.tools_2sided_group.mirror_axis_radio, "tools_2sided_axis_loc": self.ui.tools_defaults_form.tools_2sided_group.axis_location_radio, "tools_2sided_drilldia": self.ui.tools_defaults_form.tools_2sided_group.drill_dia_entry, + "tools_2sided_allign_axis": self.ui.tools_defaults_form.tools_2sided_group.align_axis_radio, # Film Tool "tools_film_type": self.ui.tools_defaults_form.tools_film_group.film_type_radio, @@ -8799,7 +8801,10 @@ class App(QtCore.QObject): # do not auto open the Project Tab self.click_noproject = True - self.clipboard.setText(self.defaults["global_point_clipboard_format"] % (self.pos[0], self.pos[1])) + self.clipboard.setText( + self.defaults["global_point_clipboard_format"] % + (self.decimals, self.pos[0], self.decimals, self.pos[1]) + ) self.inform.emit('[success] %s' % _("Coordinates copied to clipboard.")) return diff --git a/README.md b/README.md index 5510fb44..9e86ffa6 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,7 @@ CAD program, and create G-Code for Isolation routing. - changes in how the Editor exit is handled - small fix in some pywin32 imports - remade the GUI + small fixes in 2Sided Tool +- updated 2Sided Tool 28.01.2020 diff --git a/flatcamEditors/FlatCAMGeoEditor.py b/flatcamEditors/FlatCAMGeoEditor.py index 7a5a63c6..0bd67d36 100644 --- a/flatcamEditors/FlatCAMGeoEditor.py +++ b/flatcamEditors/FlatCAMGeoEditor.py @@ -4008,7 +4008,9 @@ class FlatCAMGeoEditor(QtCore.QObject): # If the SHIFT key is pressed when LMB is clicked then the coordinates are copied to clipboard if modifiers == QtCore.Qt.ShiftModifier: self.app.clipboard.setText( - self.app.defaults["global_point_clipboard_format"] % (self.pos[0], self.pos[1])) + self.app.defaults["global_point_clipboard_format"] % + (self.decimals, self.pos[0], self.decimals, self.pos[1]) + ) return # Selection with left mouse button diff --git a/flatcamEditors/FlatCAMGrbEditor.py b/flatcamEditors/FlatCAMGrbEditor.py index 0aba714b..2bd6a8bb 100644 --- a/flatcamEditors/FlatCAMGrbEditor.py +++ b/flatcamEditors/FlatCAMGrbEditor.py @@ -4371,7 +4371,8 @@ class FlatCAMGrbEditor(QtCore.QObject): # If the SHIFT key is pressed when LMB is clicked then the coordinates are copied to clipboard if modifiers == QtCore.Qt.ShiftModifier: self.app.clipboard.setText( - self.app.defaults["global_point_clipboard_format"] % (self.pos[0], self.pos[1]) + self.app.defaults["global_point_clipboard_format"] % + (self.decimals, self.pos[0], self.decimals, self.pos[1]) ) self.app.inform.emit('[success] %s' % _("Coordinates copied to clipboard.")) diff --git a/flatcamGUI/PreferencesUI.py b/flatcamGUI/PreferencesUI.py index 728f86f6..57b6b68d 100644 --- a/flatcamGUI/PreferencesUI.py +++ b/flatcamGUI/PreferencesUI.py @@ -5500,6 +5500,17 @@ class Tools2sidedPrefGroupUI(OptionsGroupUI): grid0.addWidget(self.dd_label, 0, 0) grid0.addWidget(self.drill_dia_entry, 0, 1) + # ## Alignment Axis + self.align_ax_label = QtWidgets.QLabel('%s:' % _("Align Axis")) + self.align_ax_label.setToolTip( + _("Mirror vertically (X) or horizontally (Y).") + ) + self.align_axis_radio = RadioSet([{'label': 'X', 'value': 'X'}, + {'label': 'Y', 'value': 'Y'}]) + + grid0.addWidget(self.align_ax_label, 1, 0) + grid0.addWidget(self.align_axis_radio, 1, 1) + # ## Axis self.mirror_axis_radio = RadioSet([{'label': 'X', 'value': 'X'}, {'label': 'Y', 'value': 'Y'}]) @@ -5507,11 +5518,11 @@ class Tools2sidedPrefGroupUI(OptionsGroupUI): self.mirax_label.setToolTip( _("Mirror vertically (X) or horizontally (Y).") ) - # grid_lay.addRow("Mirror Axis:", self.mirror_axis) + self.empty_lb1 = QtWidgets.QLabel("") - grid0.addWidget(self.empty_lb1, 1, 0) - grid0.addWidget(self.mirax_label, 2, 0) - grid0.addWidget(self.mirror_axis_radio, 2, 1) + grid0.addWidget(self.empty_lb1, 2, 0) + grid0.addWidget(self.mirax_label, 3, 0) + grid0.addWidget(self.mirror_axis_radio, 3, 1) # ## Axis Location self.axis_location_radio = RadioSet([{'label': _('Point'), 'value': 'point'}, @@ -5522,9 +5533,9 @@ class Tools2sidedPrefGroupUI(OptionsGroupUI): "a specified box (in a FlatCAM object) through \n" "the center.") ) - # grid_lay.addRow("Axis Location:", self.axis_location) - grid0.addWidget(self.axloc_label, 3, 0) - grid0.addWidget(self.axis_location_radio, 3, 1) + + grid0.addWidget(self.axloc_label, 4, 0) + grid0.addWidget(self.axis_location_radio, 4, 1) self.layout.addStretch() diff --git a/flatcamTools/ToolDblSided.py b/flatcamTools/ToolDblSided.py index bbc6c266..11888004 100644 --- a/flatcamTools/ToolDblSided.py +++ b/flatcamTools/ToolDblSided.py @@ -159,7 +159,7 @@ class DblSidedTool(FlatCAMTool): grid_lay1.addWidget(self.param_label, 0, 0, 1, 3) # ## Axis - self.mirax_label = QtWidgets.QLabel(_("Axis:")) + self.mirax_label = QtWidgets.QLabel('%s:' % _("Axis")) self.mirax_label.setToolTip(_("Mirror vertically (X) or horizontally (Y).")) self.mirror_axis = RadioSet([{'label': 'X', 'value': 'X'}, {'label': 'Y', 'value': 'Y'}]) @@ -191,7 +191,7 @@ class DblSidedTool(FlatCAMTool): _("Add the coordinates in format (x, y) through which the mirroring axis \n " "selected in 'MIRROR AXIS' pass.\n" "The (x, y) coordinates are captured by pressing SHIFT key\n" - "and left mouse button click on canvas or you can enter the coords manually.") + "and left mouse button click on canvas or you can enter the coordinates manually.") ) self.add_point_button.setStyleSheet(""" QPushButton @@ -210,11 +210,11 @@ class DblSidedTool(FlatCAMTool): grid_lay2.setColumnStretch(1, 1) self.layout.addLayout(grid_lay2) - self.box_type_label = QtWidgets.QLabel('%s:' % _("Object Type")) + self.box_type_label = QtWidgets.QLabel('%s:' % _("Reference Object")) self.box_type_label.setToolTip( _("It can be of type: Gerber or Excellon or Geometry.\n" - "The selection here decide the type of objects that will be\n" - "in the Object combobox.") + "The coordinates of the center of the bounding box are used\n" + "as reference for mirror operation.") ) # Type of object used as BOX reference @@ -228,38 +228,179 @@ class DblSidedTool(FlatCAMTool): grid_lay2.addWidget(self.box_type_label, 0, 0, 1, 2) grid_lay2.addWidget(self.box_type_radio, 1, 0, 1, 2) - self.box_object_label = QtWidgets.QLabel('%s:' % _("Object")) - self.box_object_label.setToolTip( - _("Object to be used as mirror reference.") - ) - # Object used as BOX reference self.box_combo = QtWidgets.QComboBox() self.box_combo.setModel(self.app.collection) self.box_combo.setRootModelIndex(self.app.collection.index(0, 0, QtCore.QModelIndex())) self.box_combo.setCurrentIndex(1) - self.box_object_label.hide() self.box_combo.hide() - grid_lay2.addWidget(self.box_object_label, 2, 0, 1, 2) grid_lay2.addWidget(self.box_combo, 3, 0, 1, 2) separator_line = QtWidgets.QFrame() separator_line.setFrameShape(QtWidgets.QFrame.HLine) separator_line.setFrameShadow(QtWidgets.QFrame.Sunken) - self.layout.addWidget(separator_line) + grid_lay2.addWidget(separator_line, 4, 0, 1, 2) - self.layout.addWidget(QtWidgets.QLabel("")) + grid_lay2.addWidget(QtWidgets.QLabel(""), 5, 0, 1, 2) + + # ## Title Bounds Values + self.bv_label = QtWidgets.QLabel("%s:" % _('Bounds Values')) + self.bv_label.setToolTip( + _("Select on canvas the object(s)\n" + "for which to calculate bounds values.") + ) + grid_lay2.addWidget(self.bv_label, 6, 0, 1, 2) + + # Xmin value + self.xmin_entry = FCDoubleSpinner() + self.xmin_entry.set_precision(self.decimals) + self.xmin_entry.set_range(-9999.9999, 9999.9999) + + self.xmin_btn = FCButton('%s:' % _("X min")) + self.xmin_btn.setToolTip( + _("Minimum location.") + ) + self.xmin_entry.setReadOnly(True) + + grid_lay2.addWidget(self.xmin_btn, 7, 0) + grid_lay2.addWidget(self.xmin_entry, 7, 1) + + # Ymin value + self.ymin_entry = FCDoubleSpinner() + self.ymin_entry.set_precision(self.decimals) + self.ymin_entry.set_range(-9999.9999, 9999.9999) + + self.ymin_btn = FCButton('%s:' % _("Y min")) + self.ymin_btn.setToolTip( + _("Minimum location.") + ) + self.ymin_entry.setReadOnly(True) + + grid_lay2.addWidget(self.ymin_btn, 8, 0) + grid_lay2.addWidget(self.ymin_entry, 8, 1) + + # Xmax value + self.xmax_entry = FCDoubleSpinner() + self.xmax_entry.set_precision(self.decimals) + self.xmax_entry.set_range(-9999.9999, 9999.9999) + + self.xmax_btn = FCButton('%s:' % _("X max")) + self.xmax_btn.setToolTip( + _("Maximum location.") + ) + self.xmax_entry.setReadOnly(True) + + grid_lay2.addWidget(self.xmax_btn, 9, 0) + grid_lay2.addWidget(self.xmax_entry, 9, 1) + + # Ymax value + self.ymax_entry = FCDoubleSpinner() + self.ymax_entry.set_precision(self.decimals) + self.ymax_entry.set_range(-9999.9999, 9999.9999) + + self.ymax_btn = FCButton('%s:' % _("Y max")) + self.ymax_btn.setToolTip( + _("Maximum location.") + ) + self.ymax_entry.setReadOnly(True) + + grid_lay2.addWidget(self.ymax_btn, 10, 0) + grid_lay2.addWidget(self.ymax_entry, 10, 1) + + # Center point value + self.center_entry = FCEntry() + + self.center_btn = FCButton('%s:' % _("Centroid")) + self.center_btn.setToolTip( + _("The center point location for the rectangular\n" + "bounding shape. Centroid. Format is (x, y).") + ) + self.center_entry.setReadOnly(True) + + grid_lay2.addWidget(self.center_btn, 12, 0) + grid_lay2.addWidget(self.center_entry, 12, 1) + + # Calculate Bounding box + self.calculate_bb_button = QtWidgets.QPushButton(_("Calculate Bounds Values")) + self.calculate_bb_button.setToolTip( + _("Calculate the enveloping rectangular shape coordinates,\n" + "for the selection of objects.\n" + "The envelope shape is parallel with the X, Y axis.") + ) + self.calculate_bb_button.setStyleSheet(""" + QPushButton + { + font-weight: bold; + } + """) + grid_lay2.addWidget(self.calculate_bb_button, 13, 0, 1, 2) + + separator_line = QtWidgets.QFrame() + separator_line.setFrameShape(QtWidgets.QFrame.HLine) + separator_line.setFrameShadow(QtWidgets.QFrame.Sunken) + grid_lay2.addWidget(separator_line, 14, 0, 1, 2) + + grid_lay2.addWidget(QtWidgets.QLabel(""), 15, 0, 1, 2) # ## Alignment holes - self.alignment_label = QtWidgets.QLabel("%s:" % _('Alignment Excellon object')) + self.alignment_label = QtWidgets.QLabel("%s:" % _('PCB Alignment')) self.alignment_label.setToolTip( _("Creates an Excellon Object containing the\n" "specified alignment holes and their mirror\n" "images.") ) - self.layout.addWidget(self.alignment_label) + grid_lay2.addWidget(self.alignment_label, 25, 0, 1, 2) + + # ## Drill diameter for alignment holes + self.dt_label = QtWidgets.QLabel("%s:" % _('Drill Diameter')) + self.dt_label.setToolTip( + _("Diameter of the drill for the alignment holes.") + ) + + self.drill_dia = FCDoubleSpinner() + self.drill_dia.setToolTip( + _("Diameter of the drill for the alignment holes.") + ) + self.drill_dia.set_precision(self.decimals) + self.drill_dia.set_range(0.0000, 9999.9999) + + grid_lay2.addWidget(self.dt_label, 26, 0) + grid_lay2.addWidget(self.drill_dia, 26, 1) + + # ## Alignment Axis + self.align_ax_label = QtWidgets.QLabel('%s:' % _("Align Axis")) + self.align_ax_label.setToolTip( + _("Mirror vertically (X) or horizontally (Y).") + ) + self.align_axis_radio = RadioSet([{'label': 'X', 'value': 'X'}, + {'label': 'Y', 'value': 'Y'}]) + + grid_lay2.addWidget(self.align_ax_label, 27, 0) + grid_lay2.addWidget(self.align_axis_radio, 27, 1) + + # ## Alignment Reference Point + self.align_ref_label = QtWidgets.QLabel('%s:' % _("Reference")) + self.align_ref_label.setToolTip( + _("The reference point used to create the second alignment drill\n" + "from the first alignment drill, by doing mirror.\n" + "It can be modified in the Mirror Parameters -> Reference section") + ) + + self.align_ref_label_val = EvalEntry() + self.align_ref_label_val.setToolTip( + _("The reference point used to create the second alignment drill\n" + "from the first alignment drill, by doing mirror.\n" + "It can be modified in the Mirror Parameters -> Reference section") + ) + self.align_ref_label_val.setDisabled(True) + + grid_lay2.addWidget(self.align_ref_label, 28, 0) + grid_lay2.addWidget(self.align_ref_label_val, 28, 1) + + grid_lay4 = QtWidgets.QGridLayout() + self.layout.addLayout(grid_lay4) # ## Alignment holes self.ah_label = QtWidgets.QLabel("%s:" % _('Alignment Drill Coordinates')) @@ -268,68 +409,41 @@ class DblSidedTool(FlatCAMTool): "on one side of the mirror axis. For each set of (x, y) coordinates\n" "entered here, a pair of drills will be created:\n\n" "- one drill at the coordinates from the field\n" - "- one drill in mirror position over the axis selected above in the 'Mirror Axis'.") + "- one drill in mirror position over the axis selected above in the 'Align Axis'.") ) - self.layout.addWidget(self.ah_label) - - grid_lay3 = QtWidgets.QGridLayout() - self.layout.addLayout(grid_lay3) self.alignment_holes = EvalEntry() - grid_lay3.addWidget(self.alignment_holes, 0, 0, 1, 2) + + grid_lay4.addWidget(self.ah_label, 0, 0, 1, 2) + grid_lay4.addWidget(self.alignment_holes, 1, 0, 1, 2) self.add_drill_point_button = FCButton(_("Add")) self.add_drill_point_button.setToolTip( - _("Add alignment drill holes coords in the format: (x1, y1), (x2, y2), ... \n" - "on one side of the mirror axis.\n\n" + _("Add alignment drill holes coordinates in the format: (x1, y1), (x2, y2), ... \n" + "on one side of the alignment axis.\n\n" "The coordinates set can be obtained:\n" "- press SHIFT key and left mouse clicking on canvas. Then click Add.\n" "- press SHIFT key and left mouse clicking on canvas. Then CTRL+V in the field.\n" "- press SHIFT key and left mouse clicking on canvas. Then RMB click in the field and click Paste.\n" "- by entering the coords manually in the format: (x1, y1), (x2, y2), ...") ) - self.add_drill_point_button.setStyleSheet(""" - QPushButton - { - font-weight: bold; - } - """) + # self.add_drill_point_button.setStyleSheet(""" + # QPushButton + # { + # font-weight: bold; + # } + # """) self.delete_drill_point_button = FCButton(_("Delete Last")) self.delete_drill_point_button.setToolTip( - _("Delete the last coordinates tupple in the list.") + _("Delete the last coordinates tuple in the list.") ) drill_hlay = QtWidgets.QHBoxLayout() drill_hlay.addWidget(self.add_drill_point_button) drill_hlay.addWidget(self.delete_drill_point_button) - grid_lay3.addLayout(drill_hlay, 1, 0, 1, 2) - - grid0 = QtWidgets.QGridLayout() - self.layout.addLayout(grid0) - grid0.setColumnStretch(0, 0) - grid0.setColumnStretch(1, 1) - - # ## Drill diameter for alignment holes - self.dt_label = QtWidgets.QLabel("%s:" % _('Alignment Drill Diameter')) - self.dt_label.setToolTip( - _("Diameter of the drill for the " - "alignment holes.") - ) - grid0.addWidget(self.dt_label, 0, 0, 1, 2) - - # Drill diameter value - self.drill_dia = FCDoubleSpinner() - self.drill_dia.set_precision(self.decimals) - self.drill_dia.set_range(0.0000, 9999.9999) - - self.drill_dia.setToolTip( - _("Diameter of the drill for the " - "alignment holes.") - ) - - grid0.addWidget(self.drill_dia, 1, 0, 1, 2) + grid_lay4.addLayout(drill_hlay, 2, 0, 1, 2) # ## Buttons self.create_alignment_hole_button = QtWidgets.QPushButton(_("Create Excellon Object")) @@ -346,110 +460,6 @@ class DblSidedTool(FlatCAMTool): """) self.layout.addWidget(self.create_alignment_hole_button) - separator_line = QtWidgets.QFrame() - separator_line.setFrameShape(QtWidgets.QFrame.HLine) - separator_line.setFrameShadow(QtWidgets.QFrame.Sunken) - self.layout.addWidget(separator_line) - - self.layout.addWidget(QtWidgets.QLabel('')) - - grid1 = QtWidgets.QGridLayout() - self.layout.addLayout(grid1) - grid1.setColumnStretch(0, 0) - grid1.setColumnStretch(1, 1) - - # ## Title Bounds Values - self.bv_label = QtWidgets.QLabel("%s:" % _('Bounds Values')) - self.bv_label.setToolTip( - _("Select on canvas the object(s)\n" - "for which to calculate bounds values.") - ) - grid1.addWidget(self.bv_label, 0, 0, 1, 2) - - # Xmin value - self.xmin_entry = FCDoubleSpinner() - self.xmin_entry.set_precision(self.decimals) - self.xmin_entry.set_range(-9999.9999, 9999.9999) - - self.xmin_label = QtWidgets.QLabel('%s:' % _("X min")) - self.xmin_label.setToolTip( - _("Minimum location.") - ) - self.xmin_entry.setReadOnly(True) - - grid1.addWidget(self.xmin_label, 1, 0) - grid1.addWidget(self.xmin_entry, 1, 1) - - # Ymin value - self.ymin_entry = FCDoubleSpinner() - self.ymin_entry.set_precision(self.decimals) - self.ymin_entry.set_range(-9999.9999, 9999.9999) - - self.ymin_label = QtWidgets.QLabel('%s:' % _("Y min")) - self.ymin_label.setToolTip( - _("Minimum location.") - ) - self.ymin_entry.setReadOnly(True) - - grid1.addWidget(self.ymin_label, 2, 0) - grid1.addWidget(self.ymin_entry, 2, 1) - - # Xmax value - self.xmax_entry = FCDoubleSpinner() - self.xmax_entry.set_precision(self.decimals) - self.xmax_entry.set_range(-9999.9999, 9999.9999) - - self.xmax_label = QtWidgets.QLabel('%s:' % _("X max")) - self.xmax_label.setToolTip( - _("Maximum location.") - ) - self.xmax_entry.setReadOnly(True) - - grid1.addWidget(self.xmax_label, 3, 0) - grid1.addWidget(self.xmax_entry, 3, 1) - - # Ymax value - self.ymax_entry = FCDoubleSpinner() - self.ymax_entry.set_precision(self.decimals) - self.ymax_entry.set_range(-9999.9999, 9999.9999) - - self.ymax_label = QtWidgets.QLabel('%s:' % _("Y max")) - self.ymax_label.setToolTip( - _("Maximum location.") - ) - self.ymax_entry.setReadOnly(True) - - grid1.addWidget(self.ymax_label, 4, 0) - grid1.addWidget(self.ymax_entry, 4, 1) - - # Center point value - self.center_entry = FCEntry() - - self.center_label = QtWidgets.QLabel('%s:' % _("Centroid")) - self.center_label.setToolTip( - _("The center point location for the rectangular\n" - "bounding shape. Centroid. Format is (x, y).") - ) - self.center_entry.setReadOnly(True) - - grid1.addWidget(self.center_label, 5, 0) - grid1.addWidget(self.center_entry, 5, 1) - - # Calculate Bounding box - self.calculate_bb_button = QtWidgets.QPushButton(_("Calculate Bounds Values")) - self.calculate_bb_button.setToolTip( - _("Calculate the enveloping rectangular shape coordinates,\n" - "for the selection of objects.\n" - "The envelope shape is parallel with the X, Y axis.") - ) - self.calculate_bb_button.setStyleSheet(""" - QPushButton - { - font-weight: bold; - } - """) - self.layout.addWidget(self.calculate_bb_button) - self.layout.addStretch() # ## Reset Tool @@ -469,6 +479,7 @@ class DblSidedTool(FlatCAMTool): self.mirror_gerber_button.clicked.connect(self.on_mirror_gerber) self.mirror_exc_button.clicked.connect(self.on_mirror_exc) self.mirror_geo_button.clicked.connect(self.on_mirror_geo) + self.add_point_button.clicked.connect(self.on_point_add) self.add_drill_point_button.clicked.connect(self.on_drill_add) self.delete_drill_point_button.clicked.connect(self.on_drill_delete_last) @@ -476,6 +487,18 @@ class DblSidedTool(FlatCAMTool): self.axis_location.group_toggle_fn = self.on_toggle_pointbox + self.point_entry.textChanged.connect(lambda val: self.align_ref_label_val.set_value(val)) + + self.xmin_btn.clicked.connect(self.on_xmin_clicked) + self.ymin_btn.clicked.connect(self.on_ymin_clicked) + self.xmax_btn.clicked.connect(self.on_xmax_clicked) + self.ymax_btn.clicked.connect(self.on_ymax_clicked) + + self.center_btn.clicked.connect( + lambda: self.point_entry.set_value(self.center_entry.get_value()) + ) + + self.create_alignment_hole_button.clicked.connect(self.on_create_alignment_holes) self.calculate_bb_button.clicked.connect(self.on_bbox_coordinates) @@ -522,6 +545,7 @@ class DblSidedTool(FlatCAMTool): self.mirror_axis.set_value(self.app.defaults["tools_2sided_mirror_axis"]) self.axis_location.set_value(self.app.defaults["tools_2sided_axis_loc"]) self.drill_dia.set_value(self.app.defaults["tools_2sided_drilldia"]) + self.align_axis_radio.set_value(self.app.defaults["tools_2sided_allign_axis"]) self.xmin_entry.set_value(0.0) self.ymin_entry.set_value(0.0) @@ -529,6 +553,8 @@ class DblSidedTool(FlatCAMTool): self.ymax_entry.set_value(0.0) self.center_entry.set_value('') + self.align_ref_label_val.set_value('%.*f' % (self.decimals, 0.0)) + def on_combo_box_type(self, val): obj_type = { 'grb': 0, @@ -539,7 +565,7 @@ class DblSidedTool(FlatCAMTool): self.box_combo.setCurrentIndex(0) def on_create_alignment_holes(self): - axis = self.mirror_axis.get_value() + axis = self.align_axis_radio.get_value() mode = self.axis_location.get_value() if mode == "point": @@ -608,7 +634,7 @@ class DblSidedTool(FlatCAMTool): obj_inst.tools = tools obj_inst.drills = drills obj_inst.create_geometry() - obj_inst.source_file = self.app.export_excellon(obj_name=obj_inst.options['name'], local_use=obj_inst, + obj_inst.source_file = app_inst.export_excellon(obj_name=obj_inst.options['name'], local_use=obj_inst, filename=None, use_thread=False) self.app.new_object("excellon", "Alignment Drills", obj_init) @@ -740,12 +766,13 @@ class DblSidedTool(FlatCAMTool): self.app.inform.emit('[success] Geometry %s %s...' % (str(fcobj.options['name']), _("was mirrored"))) def on_point_add(self): - val = self.app.defaults["global_point_clipboard_format"] % (self.app.pos[0], self.app.pos[1]) + val = self.app.defaults["global_point_clipboard_format"] % \ + (self.decimals, self.app.pos[0], self.decimals, self.app.pos[1]) self.point_entry.set_value(val) def on_drill_add(self): self.drill_values += (self.app.defaults["global_point_clipboard_format"] % - (self.app.pos[0], self.app.pos[1])) + ',' + (self.decimals, self.app.pos[0], self.decimals, self.app.pos[1])) + ',' self.alignment_holes.set_value(self.drill_values) def on_drill_delete_last(self): @@ -759,7 +786,6 @@ class DblSidedTool(FlatCAMTool): self.add_point_button.show() self.box_type_label.hide() self.box_type_radio.hide() - self.box_object_label.hide() self.box_combo.hide() else: self.point_entry.hide() @@ -767,9 +793,10 @@ class DblSidedTool(FlatCAMTool): self.box_type_label.show() self.box_type_radio.show() - self.box_object_label.show() self.box_combo.show() + self.align_ref_label_val.set_value("Box centroid") + def on_bbox_coordinates(self): xmin = Inf @@ -806,6 +833,50 @@ class DblSidedTool(FlatCAMTool): self.point_entry.set_value(val_txt) self.app.delete_selection_shape() + def on_xmin_clicked(self): + xmin = self.xmin_entry.get_value() + self.axis_location.set_value('point') + + try: + px, py = self.point_entry.get_value() + val = self.app.defaults["global_point_clipboard_format"] % (self.decimals, xmin, self.decimals, py) + except TypeError: + val = self.app.defaults["global_point_clipboard_format"] % (self.decimals, xmin, self.decimals, 0.0) + self.point_entry.set_value(val) + + def on_ymin_clicked(self): + ymin = self.ymin_entry.get_value() + self.axis_location.set_value('point') + + try: + px, py = self.point_entry.get_value() + val = self.app.defaults["global_point_clipboard_format"] % (self.decimals, px, self.decimals, ymin) + except TypeError: + val = self.app.defaults["global_point_clipboard_format"] % (self.decimals, 0.0, self.decimals, ymin) + self.point_entry.set_value(val) + + def on_xmax_clicked(self): + xmax = self.xmax_entry.get_value() + self.axis_location.set_value('point') + + try: + px, py = self.point_entry.get_value() + val = self.app.defaults["global_point_clipboard_format"] % (self.decimals, xmax, self.decimals, py) + except TypeError: + val = self.app.defaults["global_point_clipboard_format"] % (self.decimals, xmax, self.decimals, 0.0) + self.point_entry.set_value(val) + + def on_ymax_clicked(self): + ymax = self.ymax_entry.get_value() + self.axis_location.set_value('point') + + try: + px, py = self.point_entry.get_value() + val = self.app.defaults["global_point_clipboard_format"] % (self.decimals, px, self.decimals, ymax) + except TypeError: + val = self.app.defaults["global_point_clipboard_format"] % (self.decimals, 0.0, self.decimals, ymax) + self.point_entry.set_value(val) + def reset_fields(self): self.gerber_object_combo.setRootModelIndex(self.app.collection.index(0, 0, QtCore.QModelIndex())) self.exc_object_combo.setRootModelIndex(self.app.collection.index(1, 0, QtCore.QModelIndex())) @@ -819,3 +890,4 @@ class DblSidedTool(FlatCAMTool): self.box_type_radio.set_value('grb') self.drill_values = "" + self.align_ref_label_val.set_value('')