- added Tool Transform preferences in Edit -> Preferences and used them through out the app

This commit is contained in:
Marius Stanciu
2019-02-18 22:48:28 +02:00
committed by Marius S
parent 88a0be7cf1
commit 7c2d8ff28e
6 changed files with 293 additions and 60 deletions

View File

@@ -465,7 +465,20 @@ class App(QtCore.QObject):
"tools_calc_electro_length": self.tools_defaults_form.tools_calculators_group.pcblength_entry,
"tools_calc_electro_width": self.tools_defaults_form.tools_calculators_group.pcbwidth_entry,
"tools_calc_electro_cdensity": self.tools_defaults_form.tools_calculators_group.cdensity_entry,
"tools_calc_electro_growth": self.tools_defaults_form.tools_calculators_group.growth_entry
"tools_calc_electro_growth": self.tools_defaults_form.tools_calculators_group.growth_entry,
"tools_transform_rotate": self.tools_defaults_form.tools_transform_group.rotate_entry,
"tools_transform_skew_x": self.tools_defaults_form.tools_transform_group.skewx_entry,
"tools_transform_skew_y": self.tools_defaults_form.tools_transform_group.skewy_entry,
"tools_transform_scale_x": self.tools_defaults_form.tools_transform_group.scalex_entry,
"tools_transform_scale_y": self.tools_defaults_form.tools_transform_group.scaley_entry,
"tools_transform_scale_link": self.tools_defaults_form.tools_transform_group.link_cb,
"tools_transform_scale_reference": self.tools_defaults_form.tools_transform_group.reference_cb,
"tools_transform_offset_x": self.tools_defaults_form.tools_transform_group.offx_entry,
"tools_transform_offset_y": self.tools_defaults_form.tools_transform_group.offy_entry,
"tools_transform_mirror_reference": self.tools_defaults_form.tools_transform_group.mirror_reference_cb,
"tools_transform_mirror_point": self.tools_defaults_form.tools_transform_group.flip_ref_entry
}
# loads postprocessors
self.postprocessors = load_postprocessors(self)
@@ -675,7 +688,19 @@ class App(QtCore.QObject):
"tools_calc_electro_length": 10.0,
"tools_calc_electro_width": 10.0,
"tools_calc_electro_cdensity":13.0,
"tools_calc_electro_growth": 10.0
"tools_calc_electro_growth": 10.0,
"tools_transform_rotate": 90,
"tools_transform_skew_x": 0.0,
"tools_transform_skew_y": 0.0,
"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)
})
###############################
@@ -4015,7 +4040,8 @@ class App(QtCore.QObject):
else:
if silent is False:
rotatebox = FCInputDialog(title="Transform", text="Enter the Angle value:",
min=-360, max=360, decimals=3)
min=-360, max=360, decimals=4,
init_val=float(self.defaults['tools_transform_rotate']))
num, ok = rotatebox.get_value()
else:
num = preset
@@ -4059,7 +4085,8 @@ class App(QtCore.QObject):
self.inform.emit("[WARNING_NOTCL] No object selected to Skew/Shear on X axis.")
else:
skewxbox = FCInputDialog(title="Transform", text="Enter the Angle value:",
min=-360, max=360, decimals=3)
min=-360, max=360, decimals=4,
init_val=float(self.defaults['tools_transform_skew_x']))
num, ok = skewxbox.get_value()
if ok:
# first get a bounding box to fit all
@@ -4089,7 +4116,8 @@ class App(QtCore.QObject):
self.inform.emit("[WARNING_NOTCL] No object selected to Skew/Shear on Y axis.")
else:
skewybox = FCInputDialog(title="Transform", text="Enter the Angle value:",
min=-360, max=360, decimals=3)
min=-360, max=360, decimals=4,
init_val=float(self.defaults['tools_transform_skew_y']))
num, ok = skewybox.get_value()
if ok:
# first get a bounding box to fit all

View File

@@ -972,45 +972,61 @@ class TransformEditorTool(FlatCAMTool):
FlatCAMTool.install(self, icon, separator, shortcut='ALT+T', **kwargs)
def set_tool_ui(self):
## Init GUI
# if self.app.defaults["tools_painttooldia"]:
# self.painttooldia_entry.set_value(self.app.defaults["tools_painttooldia"])
# else:
# self.painttooldia_entry.set_value(0.0)
#
# if self.app.defaults["tools_paintoverlap"]:
# self.paintoverlap_entry.set_value(self.app.defaults["tools_paintoverlap"])
# else:
# self.paintoverlap_entry.set_value(0.0)
#
# if self.app.defaults["tools_paintmargin"]:
# self.paintmargin_entry.set_value(self.app.defaults["tools_paintmargin"])
# else:
# self.paintmargin_entry.set_value(0.0)
#
# if self.app.defaults["tools_paintmethod"]:
# self.paintmethod_combo.set_value(self.app.defaults["tools_paintmethod"])
# else:
# self.paintmethod_combo.set_value("seed")
#
# if self.app.defaults["tools_pathconnect"]:
# self.pathconnect_cb.set_value(self.app.defaults["tools_pathconnect"])
# else:
# self.pathconnect_cb.set_value(False)
#
# if self.app.defaults["tools_paintcontour"]:
# self.paintcontour_cb.set_value(self.app.defaults["tools_paintcontour"])
# else:
# self.paintcontour_cb.set_value(False)
## Initialize form
self.rotate_entry.set_value('0')
self.skewx_entry.set_value('0')
self.skewy_entry.set_value('0')
self.scalex_entry.set_value('1')
self.scaley_entry.set_value('1')
self.offx_entry.set_value('0')
self.offy_entry.set_value('0')
self.flip_ref_cb.setChecked(False)
if self.app.defaults["tools_transform_rotate"]:
self.rotate_entry.set_value(self.app.defaults["tools_transform_rotate"])
else:
self.rotate_entry.set_value(0.0)
if self.app.defaults["tools_transform_skew_x"]:
self.skewx_entry.set_value(self.app.defaults["tools_transform_skew_x"])
else:
self.skewx_entry.set_value(0.0)
if self.app.defaults["tools_transform_skew_y"]:
self.skewy_entry.set_value(self.app.defaults["tools_transform_skew_y"])
else:
self.skewy_entry.set_value(0.0)
if self.app.defaults["tools_transform_scale_x"]:
self.scalex_entry.set_value(self.app.defaults["tools_transform_scale_x"])
else:
self.scalex_entry.set_value(1.0)
if self.app.defaults["tools_transform_scale_y"]:
self.scaley_entry.set_value(self.app.defaults["tools_transform_scale_y"])
else:
self.scaley_entry.set_value(1.0)
if self.app.defaults["tools_transform_scale_link"]:
self.scale_link_cb.set_value(self.app.defaults["tools_transform_scale_link"])
else:
self.scale_link_cb.set_value(True)
if self.app.defaults["tools_transform_scale_reference"]:
self.scale_zero_ref_cb.set_value(self.app.defaults["tools_transform_scale_reference"])
else:
self.scale_zero_ref_cb.set_value(True)
if self.app.defaults["tools_transform_offset_x"]:
self.offx_entry.set_value(self.app.defaults["tools_transform_offset_x"])
else:
self.offx_entry.set_value(0.0)
if self.app.defaults["tools_transform_offset_y"]:
self.offy_entry.set_value(self.app.defaults["tools_transform_offset_y"])
else:
self.offy_entry.set_value(0.0)
if self.app.defaults["tools_transform_mirror_reference"]:
self.flip_ref_cb.set_value(self.app.defaults["tools_transform_mirror_reference"])
else:
self.flip_ref_cb.set_value(False)
if self.app.defaults["tools_transform_mirror_point"]:
self.flip_ref_entry.set_value(self.app.defaults["tools_transform_mirror_point"])
else:
self.flip_ref_entry.set_value((0, 0))
def template(self):
if not self.fcdraw.selected:
@@ -1452,7 +1468,8 @@ class TransformEditorTool(FlatCAMTool):
def on_rotate_key(self):
val_box = FCInputDialog(title="Rotate ...",
text='Enter an Angle Value (degrees):',
min=-359.9999, max=360.0000, decimals=4)
min=-359.9999, max=360.0000, decimals=4,
init_val=float(self.app.defaults['tools_transform_rotate']))
val_box.setWindowIcon(QtGui.QIcon('share/rotate.png'))
val, ok = val_box.get_value()
@@ -1470,7 +1487,8 @@ class TransformEditorTool(FlatCAMTool):
val_box = FCInputDialog(title="Offset on X axis ...",
text=('Enter a distance Value (%s):' % str(units)),
min=-9999.9999, max=10000.0000, decimals=4)
min=-9999.9999, max=10000.0000, decimals=4,
init_val=float(self.app.defaults['tools_transform_offset_x']))
val_box.setWindowIcon(QtGui.QIcon('share/offsetx32.png'))
val, ok = val_box.get_value()
@@ -1488,7 +1506,8 @@ class TransformEditorTool(FlatCAMTool):
val_box = FCInputDialog(title="Offset on Y axis ...",
text=('Enter a distance Value (%s):' % str(units)),
min=-9999.9999, max=10000.0000, decimals=4)
min=-9999.9999, max=10000.0000, decimals=4,
init_val=float(self.app.defaults['tools_transform_offset_y']))
val_box.setWindowIcon(QtGui.QIcon('share/offsety32.png'))
val, ok = val_box.get_value()
@@ -1504,7 +1523,8 @@ class TransformEditorTool(FlatCAMTool):
def on_skewx_key(self):
val_box = FCInputDialog(title="Skew on X axis ...",
text='Enter an Angle Value (degrees):',
min=-359.9999, max=360.0000, decimals=4)
min=-359.9999, max=360.0000, decimals=4,
init_val=float(self.app.defaults['tools_transform_skew_x']))
val_box.setWindowIcon(QtGui.QIcon('share/skewX.png'))
val, ok = val_box.get_value()
@@ -1520,7 +1540,8 @@ class TransformEditorTool(FlatCAMTool):
def on_skewy_key(self):
val_box = FCInputDialog(title="Skew on Y axis ...",
text='Enter an Angle Value (degrees):',
min=-359.9999, max=360.0000, decimals=4)
min=-359.9999, max=360.0000, decimals=4,
init_val=float(self.app.defaults['tools_transform_skew_y']))
val_box.setWindowIcon(QtGui.QIcon('share/skewY.png'))
val, ok = val_box.get_value()

View File

@@ -1699,7 +1699,7 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
# Rotate Object by 90 degree CCW
if key == QtCore.Qt.Key_R:
self.app.on_rotate(silent=True, preset=-90)
self.app.on_rotate(silent=True, preset=-self.app.defaults['tools_transform_rotate'])
return
# Run a Script
@@ -1875,7 +1875,7 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
# Rotate Object by 90 degree CW
if key == QtCore.Qt.Key_R:
self.app.on_rotate(silent=True, preset=90)
self.app.on_rotate(silent=True, preset=self.app.defaults['tools_transform_rotate'])
# Shell toggle
if key == QtCore.Qt.Key_S:
@@ -2563,6 +2563,9 @@ class ToolsPreferencesUI(QtWidgets.QWidget):
self.tools_calculators_group = ToolsCalculatorsPrefGroupUI()
self.tools_calculators_group.setMinimumWidth(220)
self.tools_transform_group = ToolsTransformPrefGroupUI()
self.tools_transform_group.setMinimumWidth(200)
self.vlay = QtWidgets.QVBoxLayout()
self.vlay.addWidget(self.tools_ncc_group)
self.vlay.addWidget(self.tools_paint_group)
@@ -2576,9 +2579,13 @@ class ToolsPreferencesUI(QtWidgets.QWidget):
self.vlay2.addWidget(self.tools_panelize_group)
self.vlay2.addWidget(self.tools_calculators_group)
self.vlay3 = QtWidgets.QVBoxLayout()
self.vlay3.addWidget(self.tools_transform_group)
self.layout.addLayout(self.vlay)
self.layout.addLayout(self.vlay1)
self.layout.addLayout(self.vlay2)
self.layout.addLayout(self.vlay3)
self.layout.addStretch()
@@ -4972,6 +4979,133 @@ class ToolsCalculatorsPrefGroupUI(OptionsGroupUI):
self.layout.addStretch()
class ToolsTransformPrefGroupUI(OptionsGroupUI):
def __init__(self, parent=None):
super(ToolsTransformPrefGroupUI, self).__init__(self)
self.setTitle(str("Transform Tool Options"))
## Transformations
self.transform_label = QtWidgets.QLabel("<b>Parameters:</b>")
self.transform_label.setToolTip(
"Various transformations that can be applied\n"
"on a FlatCAM object."
)
self.layout.addWidget(self.transform_label)
grid0 = QtWidgets.QGridLayout()
self.layout.addLayout(grid0)
## Rotate Angle
self.rotate_entry = FCEntry()
self.rotate_label = QtWidgets.QLabel("Rotate Angle:")
self.rotate_label.setToolTip(
"Angle for rotation. In degrees."
)
grid0.addWidget(self.rotate_label, 0, 0)
grid0.addWidget(self.rotate_entry, 0, 1)
## Skew/Shear Angle on X axis
self.skewx_entry = FCEntry()
self.skewx_label = QtWidgets.QLabel("Skew_X angle:")
self.skewx_label.setToolTip(
"Angle for Skew/Shear on X axis. In degrees."
)
grid0.addWidget(self.skewx_label, 1, 0)
grid0.addWidget(self.skewx_entry, 1, 1)
## Skew/Shear Angle on Y axis
self.skewy_entry = FCEntry()
self.skewy_label = QtWidgets.QLabel("Skew_Y angle:")
self.skewy_label.setToolTip(
"Angle for Skew/Shear on Y axis. In degrees."
)
grid0.addWidget(self.skewy_label, 2, 0)
grid0.addWidget(self.skewy_entry, 2, 1)
## Scale factor on X axis
self.scalex_entry = FCEntry()
self.scalex_label = QtWidgets.QLabel("Scale_X factor:")
self.scalex_label.setToolTip(
"Factor for scaling on X axis."
)
grid0.addWidget(self.scalex_label, 3, 0)
grid0.addWidget(self.scalex_entry, 3, 1)
## Scale factor on X axis
self.scaley_entry = FCEntry()
self.scaley_label = QtWidgets.QLabel("Scale_Y factor:")
self.scaley_label.setToolTip(
"Factor for scaling on Y axis."
)
grid0.addWidget(self.scaley_label, 4, 0)
grid0.addWidget(self.scaley_entry, 4, 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, 5, 0)
## Scale Reference
self.reference_cb = FCCheckBox("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, 5, 1)
## Offset distance on X axis
self.offx_entry = FCEntry()
self.offx_label = QtWidgets.QLabel("Offset_X val:")
self.offx_label.setToolTip(
"Distance to offset on X axis. In current units."
)
grid0.addWidget(self.offx_label, 6, 0)
grid0.addWidget(self.offx_entry, 6, 1)
## Offset distance on Y axis
self.offy_entry = FCEntry()
self.offy_label = QtWidgets.QLabel("Offset_Y val:")
self.offy_label.setToolTip(
"Distance to offset on Y axis. In current units."
)
grid0.addWidget(self.offy_label, 7, 0)
grid0.addWidget(self.offy_entry, 7, 1)
## Mirror (Flip) Reference Point
self.mirror_reference_cb = FCCheckBox("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, 8, 1)
self.flip_ref_label = QtWidgets.QLabel(" Mirror Ref. 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 = EvalEntry2("(0, 0)")
grid0.addWidget(self.flip_ref_label, 9, 0)
grid0.addWidget(self.flip_ref_entry, 9, 1)
self.layout.addStretch()
class FlatCAMActivityView(QtWidgets.QWidget):
def __init__(self, parent=None):

View File

@@ -490,7 +490,8 @@ class FCComboBox(QtWidgets.QComboBox):
class FCInputDialog(QtWidgets.QInputDialog):
def __init__(self, parent=None, ok=False, val=None, title=None, text=None, min=None, max=None, decimals=None):
def __init__(self, parent=None, ok=False, val=None, title=None, text=None, min=None, max=None, decimals=None,
init_val=None):
super(FCInputDialog, self).__init__(parent)
self.allow_empty = ok
self.empty_val = val
@@ -498,6 +499,8 @@ class FCInputDialog(QtWidgets.QInputDialog):
self.val = 0.0
self.ok = ''
self.init_value = init_val if init_val else 0.0
if title is None:
self.title = 'title'
else:
@@ -521,7 +524,7 @@ class FCInputDialog(QtWidgets.QInputDialog):
def get_value(self):
self.val, self.ok = self.getDouble(self, self.title, self.text, min=self.min,
max=self.max, decimals=self.decimals)
max=self.max, decimals=self.decimals, value=self.init_value)
return [self.val, self.ok]
# "Transform", "Enter the Angle value:"

View File

@@ -26,6 +26,7 @@ CAD program, and create G-Code for Isolation routing.
- added key shortcuts for the shape transformations within Geometry Editor: X, Y keys for Flip(mirror), SHIFT+X, SHIFT+Y combo keys for Skew and ALT+X, ALT+Y combo keys for Offset
- adjusted the plotcanvas.zomm_fit() function so the objects are better fit into view (with a border around)
- modified the GUI in Objects Selected Tab to accommodate 2 different modes: basic and Advanced. In Basic mode, some of the functionality's are hidden from the user.
- added Tool Transform preferences in Edit -> Preferences and used them through out the app
17.02.2019

View File

@@ -379,14 +379,60 @@ class ToolTransform(FlatCAMTool):
def set_tool_ui(self):
## Initialize form
self.rotate_entry.set_value('0')
self.skewx_entry.set_value('0')
self.skewy_entry.set_value('0')
self.scalex_entry.set_value('1')
self.scaley_entry.set_value('1')
self.offx_entry.set_value('0')
self.offy_entry.set_value('0')
self.flip_ref_cb.setChecked(False)
if self.app.defaults["tools_transform_rotate"]:
self.rotate_entry.set_value(self.app.defaults["tools_transform_rotate"])
else:
self.rotate_entry.set_value(0.0)
if self.app.defaults["tools_transform_skew_x"]:
self.skewx_entry.set_value(self.app.defaults["tools_transform_skew_x"])
else:
self.skewx_entry.set_value(0.0)
if self.app.defaults["tools_transform_skew_y"]:
self.skewy_entry.set_value(self.app.defaults["tools_transform_skew_y"])
else:
self.skewy_entry.set_value(0.0)
if self.app.defaults["tools_transform_scale_x"]:
self.scalex_entry.set_value(self.app.defaults["tools_transform_scale_x"])
else:
self.scalex_entry.set_value(1.0)
if self.app.defaults["tools_transform_scale_y"]:
self.scaley_entry.set_value(self.app.defaults["tools_transform_scale_y"])
else:
self.scaley_entry.set_value(1.0)
if self.app.defaults["tools_transform_scale_link"]:
self.scale_link_cb.set_value(self.app.defaults["tools_transform_scale_link"])
else:
self.scale_link_cb.set_value(True)
if self.app.defaults["tools_transform_scale_reference"]:
self.scale_zero_ref_cb.set_value(self.app.defaults["tools_transform_scale_reference"])
else:
self.scale_zero_ref_cb.set_value(True)
if self.app.defaults["tools_transform_offset_x"]:
self.offx_entry.set_value(self.app.defaults["tools_transform_offset_x"])
else:
self.offx_entry.set_value(0.0)
if self.app.defaults["tools_transform_offset_y"]:
self.offy_entry.set_value(self.app.defaults["tools_transform_offset_y"])
else:
self.offy_entry.set_value(0.0)
if self.app.defaults["tools_transform_mirror_reference"]:
self.flip_ref_cb.set_value(self.app.defaults["tools_transform_mirror_reference"])
else:
self.flip_ref_cb.set_value(False)
if self.app.defaults["tools_transform_mirror_point"]:
self.flip_ref_entry.set_value(self.app.defaults["tools_transform_mirror_point"])
else:
self.flip_ref_entry.set_value((0,0))
def on_rotate(self):
try: