Jelajahi Sumber

- 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 tahun lalu
induk
melakukan
86e36d3ca6

+ 3 - 3
AppGUI/GUIElements.py

@@ -673,7 +673,7 @@ class NumericalEvalEntry(EvalEntry):
 
 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):
         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"
               "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.selectAll()
         self.lineEdit.setFocus()
         self.form.addRow(self.loc_label, self.lineEdit)
 
         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.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,
 
             # 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_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_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_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_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_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,

+ 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 AppGUI.GUIElements import FCDoubleSpinner, FCCheckBox, NumericalEvalTupleEntry
+from AppGUI.GUIElements import FCDoubleSpinner, FCCheckBox, NumericalEvalTupleEntry, FCComboBox
 from AppGUI.preferences.OptionsGroupUI import OptionsGroupUI
 
 import gettext
@@ -40,10 +40,53 @@ class ToolsTransformPrefGroupUI(OptionsGroupUI):
         grid0.setColumnStretch(0, 0)
         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"))
-        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.set_range(-360.0, 360.0)
@@ -57,12 +100,21 @@ class ToolsTransformPrefGroupUI(OptionsGroupUI):
               "Positive numbers for CW motion.\n"
               "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_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.set_range(-360.0, 360.0)
@@ -74,8 +126,8 @@ class ToolsTransformPrefGroupUI(OptionsGroupUI):
             _("Angle for Skew action, in degrees.\n"
               "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
         self.skewy_entry = FCDoubleSpinner()
@@ -88,12 +140,19 @@ class ToolsTransformPrefGroupUI(OptionsGroupUI):
             _("Angle for Skew action, in degrees.\n"
               "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_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.set_range(0, 9999.9999)
@@ -104,8 +163,8 @@ class ToolsTransformPrefGroupUI(OptionsGroupUI):
         self.scalex_label.setToolTip(
             _("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
         self.scaley_entry = FCDoubleSpinner()
@@ -117,30 +176,12 @@ class ToolsTransformPrefGroupUI(OptionsGroupUI):
         self.scaley_label.setToolTip(
             _("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_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.set_range(-9999.9999, 9999.9999)
@@ -151,8 +192,8 @@ class ToolsTransformPrefGroupUI(OptionsGroupUI):
         self.offx_label.setToolTip(
            _("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
         self.offy_entry = FCDoubleSpinner()
@@ -164,41 +205,23 @@ class ToolsTransformPrefGroupUI(OptionsGroupUI):
         self.offy_label.setToolTip(
             _("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_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.setToolTip(
@@ -214,8 +237,8 @@ class ToolsTransformPrefGroupUI(OptionsGroupUI):
         self.buffer_entry.setWrapping(True)
         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.setToolTip(
@@ -232,18 +255,7 @@ class ToolsTransformPrefGroupUI(OptionsGroupUI):
         self.buffer_factor_entry.setWrapping(True)
         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()

File diff ditekan karena terlalu besar
+ 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
 
 - 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,
 
         # Transform Tool
+        "tools_transform_reference": _("Selection"),
+        "tools_transform_ref_object": _("Gerber"),
+        "tools_transform_ref_point": "0, 0",
+
         "tools_transform_rotate": 90,
         "tools_transform_skew_x": 0.0,
         "tools_transform_skew_y": 0.0,
+        "tools_transform_skew_link": True,
+
         "tools_transform_scale_x": 1.0,
         "tools_transform_scale_y": 1.0,
         "tools_transform_scale_link": True,
-        "tools_transform_scale_reference": True,
+
         "tools_transform_offset_x": 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_factor": 100.0,
         "tools_transform_buffer_corner": True,

Beberapa file tidak ditampilkan karena terlalu banyak file yang berubah dalam diff ini