| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249 |
- from PyQt5 import QtWidgets
- from PyQt5.QtCore import QSettings
- from AppGUI.GUIElements import FCDoubleSpinner, FCCheckBox, NumericalEvalTupleEntry
- from AppGUI.preferences.OptionsGroupUI import OptionsGroupUI
- import gettext
- import AppTranslation as fcTranslate
- import builtins
- fcTranslate.apply_language('strings')
- if '_' not in builtins.__dict__:
- _ = gettext.gettext
- settings = QSettings("Open Source", "FlatCAM")
- if settings.contains("machinist"):
- machinist_setting = settings.value('machinist', type=int)
- else:
- machinist_setting = 0
- class ToolsTransformPrefGroupUI(OptionsGroupUI):
- def __init__(self, decimals=4, parent=None):
- super(ToolsTransformPrefGroupUI, self).__init__(self, parent=parent)
- self.setTitle(str(_("Transform Tool Options")))
- self.decimals = decimals
- # ## Transformations
- self.transform_label = QtWidgets.QLabel("<b>%s:</b>" % _("Parameters"))
- self.transform_label.setToolTip(
- _("Various transformations that can be applied\n"
- "on a application object.")
- )
- self.layout.addWidget(self.transform_label)
- grid0 = QtWidgets.QGridLayout()
- self.layout.addLayout(grid0)
- grid0.setColumnStretch(0, 0)
- grid0.setColumnStretch(1, 1)
- # ## Rotate Angle
- rotate_title_lbl = QtWidgets.QLabel('<b>%s</b>' % _("Rotate"))
- grid0.addWidget(rotate_title_lbl, 0, 0, 1, 2)
- self.rotate_entry = FCDoubleSpinner()
- self.rotate_entry.set_range(-360.0, 360.0)
- self.rotate_entry.set_precision(self.decimals)
- self.rotate_entry.setSingleStep(15)
- self.rotate_label = QtWidgets.QLabel('%s:' % _("Angle"))
- self.rotate_label.setToolTip(
- _("Angle for Rotation action, in degrees.\n"
- "Float number between -360 and 359.\n"
- "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)
- # ## Skew/Shear Angle on X axis
- skew_title_lbl = QtWidgets.QLabel('<b>%s</b>' % _("Skew"))
- grid0.addWidget(skew_title_lbl, 2, 0, 1, 2)
- self.skewx_entry = FCDoubleSpinner()
- self.skewx_entry.set_range(-360.0, 360.0)
- self.skewx_entry.set_precision(self.decimals)
- self.skewx_entry.setSingleStep(0.1)
- self.skewx_label = QtWidgets.QLabel('%s:' % _("X angle"))
- self.skewx_label.setToolTip(
- _("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)
- # ## Skew/Shear Angle on Y axis
- self.skewy_entry = FCDoubleSpinner()
- self.skewy_entry.set_range(-360.0, 360.0)
- self.skewy_entry.set_precision(self.decimals)
- self.skewy_entry.setSingleStep(0.1)
- self.skewy_label = QtWidgets.QLabel('%s:' % _("Y angle"))
- self.skewy_label.setToolTip(
- _("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)
- # ## Scale
- scale_title_lbl = QtWidgets.QLabel('<b>%s</b>' % _("Scale"))
- grid0.addWidget(scale_title_lbl, 5, 0, 1, 2)
- self.scalex_entry = FCDoubleSpinner()
- self.scalex_entry.set_range(0, 9999.9999)
- self.scalex_entry.set_precision(self.decimals)
- self.scalex_entry.setSingleStep(0.1)
- self.scalex_label = QtWidgets.QLabel('%s:' % _("X factor"))
- self.scalex_label.setToolTip(
- _("Factor for scaling on X axis.")
- )
- grid0.addWidget(self.scalex_label, 6, 0)
- grid0.addWidget(self.scalex_entry, 6, 1)
- # ## Scale factor on X axis
- self.scaley_entry = FCDoubleSpinner()
- self.scaley_entry.set_range(0, 9999.9999)
- self.scaley_entry.set_precision(self.decimals)
- self.scaley_entry.setSingleStep(0.1)
- self.scaley_label = QtWidgets.QLabel('%s:' % _("Y factor"))
- 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)
- # ## Offset
- offset_title_lbl = QtWidgets.QLabel('<b>%s</b>' % _("Offset"))
- grid0.addWidget(offset_title_lbl, 9, 0, 1, 2)
- self.offx_entry = FCDoubleSpinner()
- self.offx_entry.set_range(-9999.9999, 9999.9999)
- self.offx_entry.set_precision(self.decimals)
- self.offx_entry.setSingleStep(0.1)
- self.offx_label = QtWidgets.QLabel('%s:' % _("X val"))
- 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)
- # ## Offset distance on Y axis
- self.offy_entry = FCDoubleSpinner()
- self.offy_entry.set_range(-9999.9999, 9999.9999)
- self.offy_entry.set_precision(self.decimals)
- self.offy_entry.setSingleStep(0.1)
- self.offy_label = QtWidgets.QLabel('%s:' % _("Y val"))
- 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)
- # ## Buffer
- buffer_title_lbl = QtWidgets.QLabel('<b>%s</b>' % _("Buffer"))
- grid0.addWidget(buffer_title_lbl, 16, 0, 1, 2)
- self.buffer_label = QtWidgets.QLabel('%s:' % _("Distance"))
- self.buffer_label.setToolTip(
- _("A positive value will create the effect of dilation,\n"
- "while a negative value will create the effect of erosion.\n"
- "Each geometry element of the object will be increased\n"
- "or decreased with the 'distance'.")
- )
- self.buffer_entry = FCDoubleSpinner()
- self.buffer_entry.set_precision(self.decimals)
- self.buffer_entry.setSingleStep(0.1)
- 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)
- self.buffer_factor_label = QtWidgets.QLabel('%s:' % _("Value"))
- self.buffer_factor_label.setToolTip(
- _("A positive value will create the effect of dilation,\n"
- "while a negative value will create the effect of erosion.\n"
- "Each geometry element of the object will be increased\n"
- "or decreased to fit the 'Value'. Value is a percentage\n"
- "of the initial dimension.")
- )
- self.buffer_factor_entry = FCDoubleSpinner(suffix='%')
- self.buffer_factor_entry.set_range(-100.0000, 1000.0000)
- self.buffer_factor_entry.set_precision(self.decimals)
- 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)
- self.layout.addStretch()
|