Przeglądaj źródła

- updated Transform Tool to have a selection of possible references for the transformations that are now selectable in the GUI
- Transform Tool - compacted the UI

Marius Stanciu 5 lat temu
rodzic
commit
86e36d3ca6

+ 3 - 3
AppGUI/GUIElements.py

@@ -673,7 +673,7 @@ class NumericalEvalEntry(EvalEntry):
 
 
 class NumericalEvalTupleEntry(FCEntry):
 class NumericalEvalTupleEntry(FCEntry):
     """
     """
-    Will evaluate the input and return a value. Accepts only float numbers and formulas using the operators: /,*,+,-,%
+    Will return a text value. Accepts only float numbers and formulas using the operators: /,*,+,-,%
     """
     """
     def __init__(self, border_color=None):
     def __init__(self, border_color=None):
         super().__init__(border_color=border_color)
         super().__init__(border_color=border_color)
@@ -2712,14 +2712,14 @@ class DialogBoxRadio(QtWidgets.QDialog):
               "If the reference is Relative then the Jump will be at the (x,y) distance\n"
               "If the reference is Relative then the Jump will be at the (x,y) distance\n"
               "from the current mouse location point.")
               "from the current mouse location point.")
         )
         )
-        self.lineEdit = EvalEntry(self)
+        self.lineEdit = EvalEntry(parent=self)
         self.lineEdit.setText(str(self.location).replace('(', '').replace(')', ''))
         self.lineEdit.setText(str(self.location).replace('(', '').replace(')', ''))
         self.lineEdit.selectAll()
         self.lineEdit.selectAll()
         self.lineEdit.setFocus()
         self.lineEdit.setFocus()
         self.form.addRow(self.loc_label, self.lineEdit)
         self.form.addRow(self.loc_label, self.lineEdit)
 
 
         self.button_box = QtWidgets.QDialogButtonBox(QtWidgets.QDialogButtonBox.Ok | QtWidgets.QDialogButtonBox.Cancel,
         self.button_box = QtWidgets.QDialogButtonBox(QtWidgets.QDialogButtonBox.Ok | QtWidgets.QDialogButtonBox.Cancel,
-                                                     Qt.Horizontal, parent=self)
+                                                     orientation=Qt.Horizontal, parent=self)
         self.form.addRow(self.button_box)
         self.form.addRow(self.button_box)
 
 
         self.button_box.accepted.connect(self.accept)
         self.button_box.accepted.connect(self.accept)

+ 10 - 4
AppGUI/preferences/PreferencesUIManager.py

@@ -445,17 +445,23 @@ class PreferencesUIManager:
             "tools_calc_electro_growth": self.ui.tools_defaults_form.tools_calculators_group.growth_entry,
             "tools_calc_electro_growth": self.ui.tools_defaults_form.tools_calculators_group.growth_entry,
 
 
             # Transformations Tool
             # Transformations Tool
+            "tools_transform_reference": self.ui.tools_defaults_form.tools_transform_group.ref_combo,
+            "tools_transform_ref_object": self.ui.tools_defaults_form.tools_transform_group.type_obj_combo,
+            "tools_transform_ref_point": self.ui.tools_defaults_form.tools_transform_group.point_entry,
+
             "tools_transform_rotate": self.ui.tools_defaults_form.tools_transform_group.rotate_entry,
             "tools_transform_rotate": self.ui.tools_defaults_form.tools_transform_group.rotate_entry,
+
             "tools_transform_skew_x": self.ui.tools_defaults_form.tools_transform_group.skewx_entry,
             "tools_transform_skew_x": self.ui.tools_defaults_form.tools_transform_group.skewx_entry,
             "tools_transform_skew_y": self.ui.tools_defaults_form.tools_transform_group.skewy_entry,
             "tools_transform_skew_y": self.ui.tools_defaults_form.tools_transform_group.skewy_entry,
+            "tools_transform_skew_link": self.ui.tools_defaults_form.tools_transform_group.skew_link_cb,
+
             "tools_transform_scale_x": self.ui.tools_defaults_form.tools_transform_group.scalex_entry,
             "tools_transform_scale_x": self.ui.tools_defaults_form.tools_transform_group.scalex_entry,
             "tools_transform_scale_y": self.ui.tools_defaults_form.tools_transform_group.scaley_entry,
             "tools_transform_scale_y": self.ui.tools_defaults_form.tools_transform_group.scaley_entry,
-            "tools_transform_scale_link": self.ui.tools_defaults_form.tools_transform_group.link_cb,
-            "tools_transform_scale_reference": self.ui.tools_defaults_form.tools_transform_group.reference_cb,
+            "tools_transform_scale_link": self.ui.tools_defaults_form.tools_transform_group.scale_link_cb,
+
             "tools_transform_offset_x": self.ui.tools_defaults_form.tools_transform_group.offx_entry,
             "tools_transform_offset_x": self.ui.tools_defaults_form.tools_transform_group.offx_entry,
             "tools_transform_offset_y": self.ui.tools_defaults_form.tools_transform_group.offy_entry,
             "tools_transform_offset_y": self.ui.tools_defaults_form.tools_transform_group.offy_entry,
-            "tools_transform_mirror_reference": self.ui.tools_defaults_form.tools_transform_group.mirror_reference_cb,
-            "tools_transform_mirror_point": self.ui.tools_defaults_form.tools_transform_group.flip_ref_entry,
+
             "tools_transform_buffer_dis": self.ui.tools_defaults_form.tools_transform_group.buffer_entry,
             "tools_transform_buffer_dis": self.ui.tools_defaults_form.tools_transform_group.buffer_entry,
             "tools_transform_buffer_factor": self.ui.tools_defaults_form.tools_transform_group.buffer_factor_entry,
             "tools_transform_buffer_factor": self.ui.tools_defaults_form.tools_transform_group.buffer_factor_entry,
             "tools_transform_buffer_corner": self.ui.tools_defaults_form.tools_transform_group.buffer_rounded_cb,
             "tools_transform_buffer_corner": self.ui.tools_defaults_form.tools_transform_group.buffer_rounded_cb,

+ 96 - 84
AppGUI/preferences/tools/ToolsTransformPrefGroupUI.py

@@ -1,7 +1,7 @@
-from PyQt5 import QtWidgets
+from PyQt5 import QtWidgets, QtGui
 from PyQt5.QtCore import QSettings
 from PyQt5.QtCore import QSettings
 
 
-from AppGUI.GUIElements import FCDoubleSpinner, FCCheckBox, NumericalEvalTupleEntry
+from AppGUI.GUIElements import FCDoubleSpinner, FCCheckBox, NumericalEvalTupleEntry, FCComboBox
 from AppGUI.preferences.OptionsGroupUI import OptionsGroupUI
 from AppGUI.preferences.OptionsGroupUI import OptionsGroupUI
 
 
 import gettext
 import gettext
@@ -40,10 +40,53 @@ class ToolsTransformPrefGroupUI(OptionsGroupUI):
         grid0.setColumnStretch(0, 0)
         grid0.setColumnStretch(0, 0)
         grid0.setColumnStretch(1, 1)
         grid0.setColumnStretch(1, 1)
 
 
-        # ## Rotate Angle
+        # Reference Type
+        ref_label = QtWidgets.QLabel('%s:' % _("Reference"))
+        ref_label.setToolTip(
+            _("The reference point for Rotate, Skew, Scale, Mirror.\n"
+              "Can be:\n"
+              "- Origin -> it is the 0, 0 point\n"
+              "- Selection -> the center of the bounding box of the selected objects\n"
+              "- Point -> a custom point defined by X,Y coordinates\n"
+              "- Object -> the center of the bounding box of a specific object")
+        )
+        self.ref_combo = FCComboBox()
+        self.ref_items = [_("Origin"), _("Selection"), _("Point"), _("Object")]
+        self.ref_combo.addItems(self.ref_items)
+
+        grid0.addWidget(ref_label, 0, 0)
+        grid0.addWidget(self.ref_combo, 0, 1)
+
+        self.point_label = QtWidgets.QLabel('%s:' % _("Point"))
+        self.point_label.setToolTip(
+            _("A point of reference in format X,Y.")
+        )
+        self.point_entry = NumericalEvalTupleEntry()
+
+        grid0.addWidget(self.point_label, 1, 0)
+        grid0.addWidget(self.point_entry, 1, 1)
+
+        # Type of object to be used as reference
+        self.type_object_label = QtWidgets.QLabel('%s:' % _("Object"))
+        self.type_object_label.setToolTip(
+            _("The type of object used as reference.")
+        )
+
+        self.type_obj_combo = FCComboBox()
+        self.type_obj_combo.addItem(_("Gerber"))
+        self.type_obj_combo.addItem(_("Excellon"))
+        self.type_obj_combo.addItem(_("Geometry"))
+
+        self.type_obj_combo.setItemIcon(0, QtGui.QIcon(self.app.resource_location + "/flatcam_icon16.png"))
+        self.type_obj_combo.setItemIcon(1, QtGui.QIcon(self.app.resource_location + "/drill16.png"))
+        self.type_obj_combo.setItemIcon(2, QtGui.QIcon(self.app.resource_location + "/geometry16.png"))
+
+        grid0.addWidget(self.type_object_label, 3, 0)
+        grid0.addWidget(self.type_obj_combo, 3, 1)
 
 
+        # ## Rotate Angle
         rotate_title_lbl = QtWidgets.QLabel('<b>%s</b>' % _("Rotate"))
         rotate_title_lbl = QtWidgets.QLabel('<b>%s</b>' % _("Rotate"))
-        grid0.addWidget(rotate_title_lbl, 0, 0, 1, 2)
+        grid0.addWidget(rotate_title_lbl, 4, 0, 1, 2)
 
 
         self.rotate_entry = FCDoubleSpinner()
         self.rotate_entry = FCDoubleSpinner()
         self.rotate_entry.set_range(-360.0, 360.0)
         self.rotate_entry.set_range(-360.0, 360.0)
@@ -57,12 +100,21 @@ class ToolsTransformPrefGroupUI(OptionsGroupUI):
               "Positive numbers for CW motion.\n"
               "Positive numbers for CW motion.\n"
               "Negative numbers for CCW motion.")
               "Negative numbers for CCW motion.")
         )
         )
-        grid0.addWidget(self.rotate_label, 1, 0)
-        grid0.addWidget(self.rotate_entry, 1, 1)
+        grid0.addWidget(self.rotate_label, 6, 0)
+        grid0.addWidget(self.rotate_entry, 6, 1)
 
 
         # ## Skew/Shear Angle on X axis
         # ## Skew/Shear Angle on X axis
         skew_title_lbl = QtWidgets.QLabel('<b>%s</b>' % _("Skew"))
         skew_title_lbl = QtWidgets.QLabel('<b>%s</b>' % _("Skew"))
-        grid0.addWidget(skew_title_lbl, 2, 0, 1, 2)
+        grid0.addWidget(skew_title_lbl, 8, 0)
+
+        # ## Link Skew factors
+        self.skew_link_cb = FCCheckBox()
+        self.skew_link_cb.setText(_("Link"))
+        self.skew_link_cb.setToolTip(
+            _("Link the Y entry to X entry and copy it's content.")
+        )
+
+        grid0.addWidget(self.skew_link_cb, 8, 1)
 
 
         self.skewx_entry = FCDoubleSpinner()
         self.skewx_entry = FCDoubleSpinner()
         self.skewx_entry.set_range(-360.0, 360.0)
         self.skewx_entry.set_range(-360.0, 360.0)
@@ -74,8 +126,8 @@ class ToolsTransformPrefGroupUI(OptionsGroupUI):
             _("Angle for Skew action, in degrees.\n"
             _("Angle for Skew action, in degrees.\n"
               "Float number between -360 and 359.")
               "Float number between -360 and 359.")
         )
         )
-        grid0.addWidget(self.skewx_label, 3, 0)
-        grid0.addWidget(self.skewx_entry, 3, 1)
+        grid0.addWidget(self.skewx_label, 9, 0)
+        grid0.addWidget(self.skewx_entry, 9, 1)
 
 
         # ## Skew/Shear Angle on Y axis
         # ## Skew/Shear Angle on Y axis
         self.skewy_entry = FCDoubleSpinner()
         self.skewy_entry = FCDoubleSpinner()
@@ -88,12 +140,19 @@ class ToolsTransformPrefGroupUI(OptionsGroupUI):
             _("Angle for Skew action, in degrees.\n"
             _("Angle for Skew action, in degrees.\n"
               "Float number between -360 and 359.")
               "Float number between -360 and 359.")
         )
         )
-        grid0.addWidget(self.skewy_label, 4, 0)
-        grid0.addWidget(self.skewy_entry, 4, 1)
+        grid0.addWidget(self.skewy_label, 10, 0)
+        grid0.addWidget(self.skewy_entry, 10, 1)
 
 
         # ## Scale
         # ## Scale
         scale_title_lbl = QtWidgets.QLabel('<b>%s</b>' % _("Scale"))
         scale_title_lbl = QtWidgets.QLabel('<b>%s</b>' % _("Scale"))
-        grid0.addWidget(scale_title_lbl, 5, 0, 1, 2)
+        grid0.addWidget(scale_title_lbl, 12, 0)
+
+        # ## Link Scale factors
+        self.scale_link_cb = FCCheckBox(_("Link"))
+        self.scale_link_cb.setToolTip(
+            _("Link the Y entry to X entry and copy it's content.")
+        )
+        grid0.addWidget(self.scale_link_cb, 12, 1)
 
 
         self.scalex_entry = FCDoubleSpinner()
         self.scalex_entry = FCDoubleSpinner()
         self.scalex_entry.set_range(0, 9999.9999)
         self.scalex_entry.set_range(0, 9999.9999)
@@ -104,8 +163,8 @@ class ToolsTransformPrefGroupUI(OptionsGroupUI):
         self.scalex_label.setToolTip(
         self.scalex_label.setToolTip(
             _("Factor for scaling on X axis.")
             _("Factor for scaling on X axis.")
         )
         )
-        grid0.addWidget(self.scalex_label, 6, 0)
-        grid0.addWidget(self.scalex_entry, 6, 1)
+        grid0.addWidget(self.scalex_label, 14, 0)
+        grid0.addWidget(self.scalex_entry, 14, 1)
 
 
         # ## Scale factor on X axis
         # ## Scale factor on X axis
         self.scaley_entry = FCDoubleSpinner()
         self.scaley_entry = FCDoubleSpinner()
@@ -117,30 +176,12 @@ class ToolsTransformPrefGroupUI(OptionsGroupUI):
         self.scaley_label.setToolTip(
         self.scaley_label.setToolTip(
             _("Factor for scaling on Y axis.")
             _("Factor for scaling on Y axis.")
         )
         )
-        grid0.addWidget(self.scaley_label, 7, 0)
-        grid0.addWidget(self.scaley_entry, 7, 1)
-
-        # ## Link Scale factors
-        self.link_cb = FCCheckBox(_("Link"))
-        self.link_cb.setToolTip(
-            _("Scale the selected object(s)\n"
-              "using the Scale_X factor for both axis.")
-        )
-        grid0.addWidget(self.link_cb, 8, 0)
-
-        # ## Scale Reference
-        self.reference_cb = FCCheckBox('%s' % _("Scale Reference"))
-        self.reference_cb.setToolTip(
-            _("Scale the selected object(s)\n"
-              "using the origin reference when checked,\n"
-              "and the center of the biggest bounding box\n"
-              "of the selected objects when unchecked.")
-        )
-        grid0.addWidget(self.reference_cb, 8, 1)
+        grid0.addWidget(self.scaley_label, 16, 0)
+        grid0.addWidget(self.scaley_entry, 16, 1)
 
 
         # ## Offset
         # ## Offset
         offset_title_lbl = QtWidgets.QLabel('<b>%s</b>' % _("Offset"))
         offset_title_lbl = QtWidgets.QLabel('<b>%s</b>' % _("Offset"))
-        grid0.addWidget(offset_title_lbl, 9, 0, 1, 2)
+        grid0.addWidget(offset_title_lbl, 20, 0, 1, 2)
 
 
         self.offx_entry = FCDoubleSpinner()
         self.offx_entry = FCDoubleSpinner()
         self.offx_entry.set_range(-9999.9999, 9999.9999)
         self.offx_entry.set_range(-9999.9999, 9999.9999)
@@ -151,8 +192,8 @@ class ToolsTransformPrefGroupUI(OptionsGroupUI):
         self.offx_label.setToolTip(
         self.offx_label.setToolTip(
            _("Distance to offset on X axis. In current units.")
            _("Distance to offset on X axis. In current units.")
         )
         )
-        grid0.addWidget(self.offx_label, 10, 0)
-        grid0.addWidget(self.offx_entry, 10, 1)
+        grid0.addWidget(self.offx_label, 22, 0)
+        grid0.addWidget(self.offx_entry, 22, 1)
 
 
         # ## Offset distance on Y axis
         # ## Offset distance on Y axis
         self.offy_entry = FCDoubleSpinner()
         self.offy_entry = FCDoubleSpinner()
@@ -164,41 +205,23 @@ class ToolsTransformPrefGroupUI(OptionsGroupUI):
         self.offy_label.setToolTip(
         self.offy_label.setToolTip(
             _("Distance to offset on Y axis. In current units.")
             _("Distance to offset on Y axis. In current units.")
         )
         )
-        grid0.addWidget(self.offy_label, 11, 0)
-        grid0.addWidget(self.offy_entry, 11, 1)
-
-        # ## Mirror
-        mirror_title_lbl = QtWidgets.QLabel('<b>%s</b>' % _("Mirror"))
-        grid0.addWidget(mirror_title_lbl, 12, 0, 1, 2)
-
-        # ## Mirror (Flip) Reference Point
-        self.mirror_reference_cb = FCCheckBox('%s' % _("Mirror Reference"))
-        self.mirror_reference_cb.setToolTip(
-            _("Flip the selected object(s)\n"
-              "around the point in Point Entry Field.\n"
-              "\n"
-              "The point coordinates can be captured by\n"
-              "left click on canvas together with pressing\n"
-              "SHIFT key. \n"
-              "Then click Add button to insert coordinates.\n"
-              "Or enter the coords in format (x, y) in the\n"
-              "Point Entry field and click Flip on X(Y)"))
-        grid0.addWidget(self.mirror_reference_cb, 13, 0, 1, 2)
-
-        self.flip_ref_label = QtWidgets.QLabel('%s' % _("Mirror Reference point"))
-        self.flip_ref_label.setToolTip(
-            _("Coordinates in format (x, y) used as reference for mirroring.\n"
-              "The 'x' in (x, y) will be used when using Flip on X and\n"
-              "the 'y' in (x, y) will be used when using Flip on Y and")
-        )
-        self.flip_ref_entry = NumericalEvalTupleEntry(border_color='#0069A9')
-
-        grid0.addWidget(self.flip_ref_label, 14, 0, 1, 2)
-        grid0.addWidget(self.flip_ref_entry, 15, 0, 1, 2)
+        grid0.addWidget(self.offy_label, 24, 0)
+        grid0.addWidget(self.offy_entry, 24, 1)
 
 
         # ## Buffer
         # ## Buffer
         buffer_title_lbl = QtWidgets.QLabel('<b>%s</b>' % _("Buffer"))
         buffer_title_lbl = QtWidgets.QLabel('<b>%s</b>' % _("Buffer"))
-        grid0.addWidget(buffer_title_lbl, 16, 0, 1, 2)
+        grid0.addWidget(buffer_title_lbl, 26, 0)
+
+        self.buffer_rounded_cb = FCCheckBox()
+        self.buffer_rounded_cb.setText('%s' % _("Rounded"))
+        self.buffer_rounded_cb.setToolTip(
+            _("If checked then the buffer will surround the buffered shape,\n"
+              "every corner will be rounded.\n"
+              "If not checked then the buffer will follow the exact geometry\n"
+              "of the buffered shape.")
+        )
+
+        grid0.addWidget(self.buffer_rounded_cb, 26, 1)
 
 
         self.buffer_label = QtWidgets.QLabel('%s:' % _("Distance"))
         self.buffer_label = QtWidgets.QLabel('%s:' % _("Distance"))
         self.buffer_label.setToolTip(
         self.buffer_label.setToolTip(
@@ -214,8 +237,8 @@ class ToolsTransformPrefGroupUI(OptionsGroupUI):
         self.buffer_entry.setWrapping(True)
         self.buffer_entry.setWrapping(True)
         self.buffer_entry.set_range(-9999.9999, 9999.9999)
         self.buffer_entry.set_range(-9999.9999, 9999.9999)
 
 
-        grid0.addWidget(self.buffer_label, 17, 0)
-        grid0.addWidget(self.buffer_entry, 17, 1)
+        grid0.addWidget(self.buffer_label, 28, 0)
+        grid0.addWidget(self.buffer_entry, 28, 1)
 
 
         self.buffer_factor_label = QtWidgets.QLabel('%s:' % _("Value"))
         self.buffer_factor_label = QtWidgets.QLabel('%s:' % _("Value"))
         self.buffer_factor_label.setToolTip(
         self.buffer_factor_label.setToolTip(
@@ -232,18 +255,7 @@ class ToolsTransformPrefGroupUI(OptionsGroupUI):
         self.buffer_factor_entry.setWrapping(True)
         self.buffer_factor_entry.setWrapping(True)
         self.buffer_factor_entry.setSingleStep(1)
         self.buffer_factor_entry.setSingleStep(1)
 
 
-        grid0.addWidget(self.buffer_factor_label, 18, 0)
-        grid0.addWidget(self.buffer_factor_entry, 18, 1)
-
-        self.buffer_rounded_cb = FCCheckBox()
-        self.buffer_rounded_cb.setText('%s' % _("Rounded"))
-        self.buffer_rounded_cb.setToolTip(
-            _("If checked then the buffer will surround the buffered shape,\n"
-              "every corner will be rounded.\n"
-              "If not checked then the buffer will follow the exact geometry\n"
-              "of the buffered shape.")
-        )
-
-        grid0.addWidget(self.buffer_rounded_cb, 19, 0, 1, 2)
+        grid0.addWidget(self.buffer_factor_label, 30, 0)
+        grid0.addWidget(self.buffer_factor_entry, 30, 1)
 
 
         self.layout.addStretch()
         self.layout.addStretch()

Plik diff jest za duży
+ 336 - 352
AppTools/ToolTransform.py


+ 5 - 0
CHANGELOG.md

@@ -7,6 +7,11 @@ CHANGELOG for FlatCAM beta
 
 
 =================================================
 =================================================
 
 
+3.06.2020
+
+- updated Transform Tool to have a selection of possible references for the transformations that are now selectable in the GUI
+- Transform Tool - compacted the UI
+
 2.06.2020
 2.06.2020
 
 
 - Tcl Shell - added a button to delete the content of the active line
 - Tcl Shell - added a button to delete the content of the active line

+ 8 - 3
defaults.py

@@ -499,17 +499,22 @@ class FlatCAMDefaults:
         "tools_calc_electro_growth": 10.0,
         "tools_calc_electro_growth": 10.0,
 
 
         # Transform Tool
         # Transform Tool
+        "tools_transform_reference": _("Selection"),
+        "tools_transform_ref_object": _("Gerber"),
+        "tools_transform_ref_point": "0, 0",
+
         "tools_transform_rotate": 90,
         "tools_transform_rotate": 90,
         "tools_transform_skew_x": 0.0,
         "tools_transform_skew_x": 0.0,
         "tools_transform_skew_y": 0.0,
         "tools_transform_skew_y": 0.0,
+        "tools_transform_skew_link": True,
+
         "tools_transform_scale_x": 1.0,
         "tools_transform_scale_x": 1.0,
         "tools_transform_scale_y": 1.0,
         "tools_transform_scale_y": 1.0,
         "tools_transform_scale_link": True,
         "tools_transform_scale_link": True,
-        "tools_transform_scale_reference": True,
+
         "tools_transform_offset_x": 0.0,
         "tools_transform_offset_x": 0.0,
         "tools_transform_offset_y": 0.0,
         "tools_transform_offset_y": 0.0,
-        "tools_transform_mirror_reference": False,
-        "tools_transform_mirror_point": "0.0, 0.0",
+
         "tools_transform_buffer_dis": 0.0,
         "tools_transform_buffer_dis": 0.0,
         "tools_transform_buffer_factor": 100.0,
         "tools_transform_buffer_factor": 100.0,
         "tools_transform_buffer_corner": True,
         "tools_transform_buffer_corner": True,

Niektóre pliki nie zostały wyświetlone z powodu dużej ilości zmienionych plików