GerberEditorPrefGroupUI.py 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248
  1. from PyQt5 import QtWidgets
  2. from PyQt5.QtCore import QSettings
  3. from appGUI.GUIElements import FCSpinner, FCDoubleSpinner, FCComboBox, FCEntry, RadioSet, NumericalEvalTupleEntry
  4. from appGUI.preferences.OptionsGroupUI import OptionsGroupUI
  5. import gettext
  6. import appTranslation as fcTranslate
  7. import builtins
  8. fcTranslate.apply_language('strings')
  9. if '_' not in builtins.__dict__:
  10. _ = gettext.gettext
  11. settings = QSettings("Open Source", "FlatCAM")
  12. if settings.contains("machinist"):
  13. machinist_setting = settings.value('machinist', type=int)
  14. else:
  15. machinist_setting = 0
  16. class GerberEditorPrefGroupUI(OptionsGroupUI):
  17. def __init__(self, decimals=4, parent=None):
  18. # OptionsGroupUI.__init__(self, "Gerber Adv. Options Preferences", parent=parent)
  19. super(GerberEditorPrefGroupUI, self).__init__(self, parent=parent)
  20. self.setTitle(str(_("Gerber Editor")))
  21. self.decimals = decimals
  22. # Advanced Gerber Parameters
  23. self.param_label = QtWidgets.QLabel("<b>%s:</b>" % _("Parameters"))
  24. self.param_label.setToolTip(
  25. _("A list of Gerber Editor parameters.")
  26. )
  27. self.layout.addWidget(self.param_label)
  28. grid0 = QtWidgets.QGridLayout()
  29. self.layout.addLayout(grid0)
  30. # Selection Limit
  31. self.sel_limit_label = QtWidgets.QLabel('%s:' % _("Selection limit"))
  32. self.sel_limit_label.setToolTip(
  33. _("Set the number of selected Gerber geometry\n"
  34. "items above which the utility geometry\n"
  35. "becomes just a selection rectangle.\n"
  36. "Increases the performance when moving a\n"
  37. "large number of geometric elements.")
  38. )
  39. self.sel_limit_entry = FCSpinner()
  40. self.sel_limit_entry.set_range(0, 9999)
  41. grid0.addWidget(self.sel_limit_label, 0, 0)
  42. grid0.addWidget(self.sel_limit_entry, 0, 1)
  43. # New aperture code
  44. self.addcode_entry_lbl = QtWidgets.QLabel('%s:' % _('New Aperture code'))
  45. self.addcode_entry_lbl.setToolTip(
  46. _("Code for the new aperture")
  47. )
  48. self.addcode_entry = FCSpinner()
  49. self.addcode_entry.set_range(10, 99)
  50. self.addcode_entry.setWrapping(True)
  51. grid0.addWidget(self.addcode_entry_lbl, 1, 0)
  52. grid0.addWidget(self.addcode_entry, 1, 1)
  53. # New aperture size
  54. self.addsize_entry_lbl = QtWidgets.QLabel('%s:' % _('New Aperture size'))
  55. self.addsize_entry_lbl.setToolTip(
  56. _("Size for the new aperture")
  57. )
  58. self.addsize_entry = FCDoubleSpinner()
  59. self.addsize_entry.set_range(0, 100)
  60. self.addsize_entry.set_precision(self.decimals)
  61. grid0.addWidget(self.addsize_entry_lbl, 2, 0)
  62. grid0.addWidget(self.addsize_entry, 2, 1)
  63. # New aperture type
  64. self.addtype_combo_lbl = QtWidgets.QLabel('%s:' % _('New Aperture type'))
  65. self.addtype_combo_lbl.setToolTip(
  66. _("Type for the new aperture.\n"
  67. "Can be 'C', 'R' or 'O'.")
  68. )
  69. self.addtype_combo = FCComboBox()
  70. self.addtype_combo.addItems(['C', 'R', 'O'])
  71. grid0.addWidget(self.addtype_combo_lbl, 3, 0)
  72. grid0.addWidget(self.addtype_combo, 3, 1)
  73. # Number of pads in a pad array
  74. self.grb_array_size_label = QtWidgets.QLabel('%s:' % _('Nr of pads'))
  75. self.grb_array_size_label.setToolTip(
  76. _("Specify how many pads to be in the array.")
  77. )
  78. self.grb_array_size_entry = FCSpinner()
  79. self.grb_array_size_entry.set_range(0, 9999)
  80. grid0.addWidget(self.grb_array_size_label, 4, 0)
  81. grid0.addWidget(self.grb_array_size_entry, 4, 1)
  82. self.adddim_label = QtWidgets.QLabel('%s:' % _('Aperture Dimensions'))
  83. self.adddim_label.setToolTip(
  84. _("Diameters of the tools, separated by comma.\n"
  85. "The value of the diameter has to use the dot decimals separator.\n"
  86. "Valid values: 0.3, 1.0")
  87. )
  88. self.adddim_entry = NumericalEvalTupleEntry(border_color='#0069A9')
  89. grid0.addWidget(self.adddim_label, 5, 0)
  90. grid0.addWidget(self.adddim_entry, 5, 1)
  91. self.grb_array_linear_label = QtWidgets.QLabel('<b>%s:</b>' % _('Linear Pad Array'))
  92. grid0.addWidget(self.grb_array_linear_label, 6, 0, 1, 2)
  93. # Linear Pad Array direction
  94. self.grb_axis_label = QtWidgets.QLabel('%s:' % _('Linear Direction'))
  95. self.grb_axis_label.setToolTip(
  96. _("Direction on which the linear array is oriented:\n"
  97. "- 'X' - horizontal axis \n"
  98. "- 'Y' - vertical axis or \n"
  99. "- 'Angle' - a custom angle for the array inclination")
  100. )
  101. self.grb_axis_radio = RadioSet([{'label': _('X'), 'value': 'X'},
  102. {'label': _('Y'), 'value': 'Y'},
  103. {'label': _('Angle'), 'value': 'A'}])
  104. grid0.addWidget(self.grb_axis_label, 7, 0)
  105. grid0.addWidget(self.grb_axis_radio, 7, 1)
  106. # Linear Pad Array pitch distance
  107. self.grb_pitch_label = QtWidgets.QLabel('%s:' % _('Pitch'))
  108. self.grb_pitch_label.setToolTip(
  109. _("Pitch = Distance between elements of the array.")
  110. )
  111. # self.drill_pitch_label.setMinimumWidth(100)
  112. self.grb_pitch_entry = FCDoubleSpinner()
  113. self.grb_pitch_entry.set_precision(self.decimals)
  114. grid0.addWidget(self.grb_pitch_label, 8, 0)
  115. grid0.addWidget(self.grb_pitch_entry, 8, 1)
  116. # Linear Pad Array custom angle
  117. self.grb_angle_label = QtWidgets.QLabel('%s:' % _('Angle'))
  118. self.grb_angle_label.setToolTip(
  119. _("Angle at which each element in circular array is placed.")
  120. )
  121. self.grb_angle_entry = FCDoubleSpinner()
  122. self.grb_angle_entry.set_precision(self.decimals)
  123. self.grb_angle_entry.set_range(-360, 360)
  124. self.grb_angle_entry.setSingleStep(5)
  125. grid0.addWidget(self.grb_angle_label, 9, 0)
  126. grid0.addWidget(self.grb_angle_entry, 9, 1)
  127. self.grb_array_circ_label = QtWidgets.QLabel('<b>%s:</b>' % _('Circular Pad Array'))
  128. grid0.addWidget(self.grb_array_circ_label, 10, 0, 1, 2)
  129. # Circular Pad Array direction
  130. self.grb_circular_direction_label = QtWidgets.QLabel('%s:' % _('Circular Direction'))
  131. self.grb_circular_direction_label.setToolTip(
  132. _("Direction for circular array.\n"
  133. "Can be CW = clockwise or CCW = counter clockwise.")
  134. )
  135. self.grb_circular_dir_radio = RadioSet([{'label': _('CW'), 'value': 'CW'},
  136. {'label': _('CCW'), 'value': 'CCW'}])
  137. grid0.addWidget(self.grb_circular_direction_label, 11, 0)
  138. grid0.addWidget(self.grb_circular_dir_radio, 11, 1)
  139. # Circular Pad Array Angle
  140. self.grb_circular_angle_label = QtWidgets.QLabel('%s:' % _('Circular Angle'))
  141. self.grb_circular_angle_label.setToolTip(
  142. _("Angle at which each element in circular array is placed.")
  143. )
  144. self.grb_circular_angle_entry = FCDoubleSpinner()
  145. self.grb_circular_angle_entry.set_precision(self.decimals)
  146. self.grb_circular_angle_entry.set_range(-360, 360)
  147. self.grb_circular_angle_entry.setSingleStep(5)
  148. grid0.addWidget(self.grb_circular_angle_label, 12, 0)
  149. grid0.addWidget(self.grb_circular_angle_entry, 12, 1)
  150. self.grb_array_tools_b_label = QtWidgets.QLabel('<b>%s:</b>' % _('Buffer Tool'))
  151. grid0.addWidget(self.grb_array_tools_b_label, 13, 0, 1, 2)
  152. # Buffer Distance
  153. self.grb_buff_label = QtWidgets.QLabel('%s:' % _('Buffer distance'))
  154. self.grb_buff_label.setToolTip(
  155. _("Distance at which to buffer the Gerber element.")
  156. )
  157. self.grb_buff_entry = FCDoubleSpinner()
  158. self.grb_buff_entry.set_precision(self.decimals)
  159. self.grb_buff_entry.set_range(-9999, 9999)
  160. grid0.addWidget(self.grb_buff_label, 14, 0)
  161. grid0.addWidget(self.grb_buff_entry, 14, 1)
  162. self.grb_array_tools_s_label = QtWidgets.QLabel('<b>%s:</b>' % _('Scale Tool'))
  163. grid0.addWidget(self.grb_array_tools_s_label, 15, 0, 1, 2)
  164. # Scale Factor
  165. self.grb_scale_label = QtWidgets.QLabel('%s:' % _('Scale factor'))
  166. self.grb_scale_label.setToolTip(
  167. _("Factor to scale the Gerber element.")
  168. )
  169. self.grb_scale_entry = FCDoubleSpinner()
  170. self.grb_scale_entry.set_precision(self.decimals)
  171. self.grb_scale_entry.set_range(0, 9999)
  172. grid0.addWidget(self.grb_scale_label, 16, 0)
  173. grid0.addWidget(self.grb_scale_entry, 16, 1)
  174. self.grb_array_tools_ma_label = QtWidgets.QLabel('<b>%s:</b>' % _('Mark Area Tool'))
  175. grid0.addWidget(self.grb_array_tools_ma_label, 17, 0, 1, 2)
  176. # Mark area Tool low threshold
  177. self.grb_ma_low_label = QtWidgets.QLabel('%s:' % _('Threshold low'))
  178. self.grb_ma_low_label.setToolTip(
  179. _("Threshold value under which the apertures are not marked.")
  180. )
  181. self.grb_ma_low_entry = FCDoubleSpinner()
  182. self.grb_ma_low_entry.set_precision(self.decimals)
  183. self.grb_ma_low_entry.set_range(0, 9999)
  184. grid0.addWidget(self.grb_ma_low_label, 18, 0)
  185. grid0.addWidget(self.grb_ma_low_entry, 18, 1)
  186. # Mark area Tool high threshold
  187. self.grb_ma_high_label = QtWidgets.QLabel('%s:' % _('Threshold high'))
  188. self.grb_ma_high_label.setToolTip(
  189. _("Threshold value over which the apertures are not marked.")
  190. )
  191. self.grb_ma_high_entry = FCDoubleSpinner()
  192. self.grb_ma_high_entry.set_precision(self.decimals)
  193. self.grb_ma_high_entry.set_range(0, 9999)
  194. grid0.addWidget(self.grb_ma_high_label, 19, 0)
  195. grid0.addWidget(self.grb_ma_high_entry, 19, 1)
  196. self.layout.addStretch()