- added Tool Transform preferences in Edit -> Preferences and used them through out the app
This commit is contained in:
@@ -465,7 +465,20 @@ class App(QtCore.QObject):
|
|||||||
"tools_calc_electro_length": self.tools_defaults_form.tools_calculators_group.pcblength_entry,
|
"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_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_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
|
# loads postprocessors
|
||||||
self.postprocessors = load_postprocessors(self)
|
self.postprocessors = load_postprocessors(self)
|
||||||
@@ -675,7 +688,19 @@ class App(QtCore.QObject):
|
|||||||
"tools_calc_electro_length": 10.0,
|
"tools_calc_electro_length": 10.0,
|
||||||
"tools_calc_electro_width": 10.0,
|
"tools_calc_electro_width": 10.0,
|
||||||
"tools_calc_electro_cdensity":13.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:
|
else:
|
||||||
if silent is False:
|
if silent is False:
|
||||||
rotatebox = FCInputDialog(title="Transform", text="Enter the Angle value:",
|
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()
|
num, ok = rotatebox.get_value()
|
||||||
else:
|
else:
|
||||||
num = preset
|
num = preset
|
||||||
@@ -4059,7 +4085,8 @@ class App(QtCore.QObject):
|
|||||||
self.inform.emit("[WARNING_NOTCL] No object selected to Skew/Shear on X axis.")
|
self.inform.emit("[WARNING_NOTCL] No object selected to Skew/Shear on X axis.")
|
||||||
else:
|
else:
|
||||||
skewxbox = FCInputDialog(title="Transform", text="Enter the Angle value:",
|
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()
|
num, ok = skewxbox.get_value()
|
||||||
if ok:
|
if ok:
|
||||||
# first get a bounding box to fit all
|
# 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.")
|
self.inform.emit("[WARNING_NOTCL] No object selected to Skew/Shear on Y axis.")
|
||||||
else:
|
else:
|
||||||
skewybox = FCInputDialog(title="Transform", text="Enter the Angle value:",
|
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()
|
num, ok = skewybox.get_value()
|
||||||
if ok:
|
if ok:
|
||||||
# first get a bounding box to fit all
|
# first get a bounding box to fit all
|
||||||
|
|||||||
107
FlatCAMEditor.py
107
FlatCAMEditor.py
@@ -972,45 +972,61 @@ class TransformEditorTool(FlatCAMTool):
|
|||||||
FlatCAMTool.install(self, icon, separator, shortcut='ALT+T', **kwargs)
|
FlatCAMTool.install(self, icon, separator, shortcut='ALT+T', **kwargs)
|
||||||
|
|
||||||
def set_tool_ui(self):
|
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
|
## Initialize form
|
||||||
self.rotate_entry.set_value('0')
|
if self.app.defaults["tools_transform_rotate"]:
|
||||||
self.skewx_entry.set_value('0')
|
self.rotate_entry.set_value(self.app.defaults["tools_transform_rotate"])
|
||||||
self.skewy_entry.set_value('0')
|
else:
|
||||||
self.scalex_entry.set_value('1')
|
self.rotate_entry.set_value(0.0)
|
||||||
self.scaley_entry.set_value('1')
|
|
||||||
self.offx_entry.set_value('0')
|
if self.app.defaults["tools_transform_skew_x"]:
|
||||||
self.offy_entry.set_value('0')
|
self.skewx_entry.set_value(self.app.defaults["tools_transform_skew_x"])
|
||||||
self.flip_ref_cb.setChecked(False)
|
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):
|
def template(self):
|
||||||
if not self.fcdraw.selected:
|
if not self.fcdraw.selected:
|
||||||
@@ -1452,7 +1468,8 @@ class TransformEditorTool(FlatCAMTool):
|
|||||||
def on_rotate_key(self):
|
def on_rotate_key(self):
|
||||||
val_box = FCInputDialog(title="Rotate ...",
|
val_box = FCInputDialog(title="Rotate ...",
|
||||||
text='Enter an Angle Value (degrees):',
|
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_box.setWindowIcon(QtGui.QIcon('share/rotate.png'))
|
||||||
|
|
||||||
val, ok = val_box.get_value()
|
val, ok = val_box.get_value()
|
||||||
@@ -1470,7 +1487,8 @@ class TransformEditorTool(FlatCAMTool):
|
|||||||
|
|
||||||
val_box = FCInputDialog(title="Offset on X axis ...",
|
val_box = FCInputDialog(title="Offset on X axis ...",
|
||||||
text=('Enter a distance Value (%s):' % str(units)),
|
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_box.setWindowIcon(QtGui.QIcon('share/offsetx32.png'))
|
||||||
|
|
||||||
val, ok = val_box.get_value()
|
val, ok = val_box.get_value()
|
||||||
@@ -1488,7 +1506,8 @@ class TransformEditorTool(FlatCAMTool):
|
|||||||
|
|
||||||
val_box = FCInputDialog(title="Offset on Y axis ...",
|
val_box = FCInputDialog(title="Offset on Y axis ...",
|
||||||
text=('Enter a distance Value (%s):' % str(units)),
|
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_box.setWindowIcon(QtGui.QIcon('share/offsety32.png'))
|
||||||
|
|
||||||
val, ok = val_box.get_value()
|
val, ok = val_box.get_value()
|
||||||
@@ -1504,7 +1523,8 @@ class TransformEditorTool(FlatCAMTool):
|
|||||||
def on_skewx_key(self):
|
def on_skewx_key(self):
|
||||||
val_box = FCInputDialog(title="Skew on X axis ...",
|
val_box = FCInputDialog(title="Skew on X axis ...",
|
||||||
text='Enter an Angle Value (degrees):',
|
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_box.setWindowIcon(QtGui.QIcon('share/skewX.png'))
|
||||||
|
|
||||||
val, ok = val_box.get_value()
|
val, ok = val_box.get_value()
|
||||||
@@ -1520,7 +1540,8 @@ class TransformEditorTool(FlatCAMTool):
|
|||||||
def on_skewy_key(self):
|
def on_skewy_key(self):
|
||||||
val_box = FCInputDialog(title="Skew on Y axis ...",
|
val_box = FCInputDialog(title="Skew on Y axis ...",
|
||||||
text='Enter an Angle Value (degrees):',
|
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_box.setWindowIcon(QtGui.QIcon('share/skewY.png'))
|
||||||
|
|
||||||
val, ok = val_box.get_value()
|
val, ok = val_box.get_value()
|
||||||
|
|||||||
138
FlatCAMGUI.py
138
FlatCAMGUI.py
@@ -1699,7 +1699,7 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
|
|||||||
|
|
||||||
# Rotate Object by 90 degree CCW
|
# Rotate Object by 90 degree CCW
|
||||||
if key == QtCore.Qt.Key_R:
|
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
|
return
|
||||||
|
|
||||||
# Run a Script
|
# Run a Script
|
||||||
@@ -1875,7 +1875,7 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
|
|||||||
|
|
||||||
# Rotate Object by 90 degree CW
|
# Rotate Object by 90 degree CW
|
||||||
if key == QtCore.Qt.Key_R:
|
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
|
# Shell toggle
|
||||||
if key == QtCore.Qt.Key_S:
|
if key == QtCore.Qt.Key_S:
|
||||||
@@ -2563,6 +2563,9 @@ class ToolsPreferencesUI(QtWidgets.QWidget):
|
|||||||
self.tools_calculators_group = ToolsCalculatorsPrefGroupUI()
|
self.tools_calculators_group = ToolsCalculatorsPrefGroupUI()
|
||||||
self.tools_calculators_group.setMinimumWidth(220)
|
self.tools_calculators_group.setMinimumWidth(220)
|
||||||
|
|
||||||
|
self.tools_transform_group = ToolsTransformPrefGroupUI()
|
||||||
|
self.tools_transform_group.setMinimumWidth(200)
|
||||||
|
|
||||||
self.vlay = QtWidgets.QVBoxLayout()
|
self.vlay = QtWidgets.QVBoxLayout()
|
||||||
self.vlay.addWidget(self.tools_ncc_group)
|
self.vlay.addWidget(self.tools_ncc_group)
|
||||||
self.vlay.addWidget(self.tools_paint_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_panelize_group)
|
||||||
self.vlay2.addWidget(self.tools_calculators_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.vlay)
|
||||||
self.layout.addLayout(self.vlay1)
|
self.layout.addLayout(self.vlay1)
|
||||||
self.layout.addLayout(self.vlay2)
|
self.layout.addLayout(self.vlay2)
|
||||||
|
self.layout.addLayout(self.vlay3)
|
||||||
|
|
||||||
self.layout.addStretch()
|
self.layout.addStretch()
|
||||||
|
|
||||||
@@ -4972,6 +4979,133 @@ class ToolsCalculatorsPrefGroupUI(OptionsGroupUI):
|
|||||||
self.layout.addStretch()
|
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):
|
class FlatCAMActivityView(QtWidgets.QWidget):
|
||||||
|
|
||||||
def __init__(self, parent=None):
|
def __init__(self, parent=None):
|
||||||
|
|||||||
@@ -490,7 +490,8 @@ class FCComboBox(QtWidgets.QComboBox):
|
|||||||
|
|
||||||
|
|
||||||
class FCInputDialog(QtWidgets.QInputDialog):
|
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)
|
super(FCInputDialog, self).__init__(parent)
|
||||||
self.allow_empty = ok
|
self.allow_empty = ok
|
||||||
self.empty_val = val
|
self.empty_val = val
|
||||||
@@ -498,6 +499,8 @@ class FCInputDialog(QtWidgets.QInputDialog):
|
|||||||
self.val = 0.0
|
self.val = 0.0
|
||||||
self.ok = ''
|
self.ok = ''
|
||||||
|
|
||||||
|
self.init_value = init_val if init_val else 0.0
|
||||||
|
|
||||||
if title is None:
|
if title is None:
|
||||||
self.title = 'title'
|
self.title = 'title'
|
||||||
else:
|
else:
|
||||||
@@ -521,7 +524,7 @@ class FCInputDialog(QtWidgets.QInputDialog):
|
|||||||
|
|
||||||
def get_value(self):
|
def get_value(self):
|
||||||
self.val, self.ok = self.getDouble(self, self.title, self.text, min=self.min,
|
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]
|
return [self.val, self.ok]
|
||||||
|
|
||||||
# "Transform", "Enter the Angle value:"
|
# "Transform", "Enter the Angle value:"
|
||||||
|
|||||||
@@ -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
|
- 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)
|
- 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.
|
- 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
|
17.02.2019
|
||||||
|
|
||||||
|
|||||||
@@ -379,14 +379,60 @@ class ToolTransform(FlatCAMTool):
|
|||||||
|
|
||||||
def set_tool_ui(self):
|
def set_tool_ui(self):
|
||||||
## Initialize form
|
## Initialize form
|
||||||
self.rotate_entry.set_value('0')
|
if self.app.defaults["tools_transform_rotate"]:
|
||||||
self.skewx_entry.set_value('0')
|
self.rotate_entry.set_value(self.app.defaults["tools_transform_rotate"])
|
||||||
self.skewy_entry.set_value('0')
|
else:
|
||||||
self.scalex_entry.set_value('1')
|
self.rotate_entry.set_value(0.0)
|
||||||
self.scaley_entry.set_value('1')
|
|
||||||
self.offx_entry.set_value('0')
|
if self.app.defaults["tools_transform_skew_x"]:
|
||||||
self.offy_entry.set_value('0')
|
self.skewx_entry.set_value(self.app.defaults["tools_transform_skew_x"])
|
||||||
self.flip_ref_cb.setChecked(False)
|
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):
|
def on_rotate(self):
|
||||||
try:
|
try:
|
||||||
|
|||||||
Reference in New Issue
Block a user