Tools2CThievingPrefGroupUI.py 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274
  1. from PyQt5 import QtWidgets
  2. from PyQt5.QtCore import QSettings
  3. from AppGUI.GUIElements import FCSpinner, FCDoubleSpinner, RadioSet
  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 Tools2CThievingPrefGroupUI(OptionsGroupUI):
  17. def __init__(self, decimals=4, parent=None):
  18. super(Tools2CThievingPrefGroupUI, self).__init__(self, parent=parent)
  19. self.setTitle(str(_("Copper Thieving Tool Options")))
  20. self.decimals = decimals
  21. # ## Grid Layout
  22. grid_lay = QtWidgets.QGridLayout()
  23. self.layout.addLayout(grid_lay)
  24. grid_lay.setColumnStretch(0, 0)
  25. grid_lay.setColumnStretch(1, 1)
  26. # ## Parameters
  27. self.cflabel = QtWidgets.QLabel('<b>%s</b>' % _('Parameters'))
  28. self.cflabel.setToolTip(
  29. _("A tool to generate a Copper Thieving that can be added\n"
  30. "to a selected Gerber file.")
  31. )
  32. grid_lay.addWidget(self.cflabel, 0, 0, 1, 2)
  33. # CIRCLE STEPS - to be used when buffering
  34. self.circle_steps_lbl = QtWidgets.QLabel('%s:' % _("Circle Steps"))
  35. self.circle_steps_lbl.setToolTip(
  36. _("Number of steps (lines) used to interpolate circles.")
  37. )
  38. self.circlesteps_entry = FCSpinner()
  39. self.circlesteps_entry.set_range(1, 9999)
  40. grid_lay.addWidget(self.circle_steps_lbl, 1, 0)
  41. grid_lay.addWidget(self.circlesteps_entry, 1, 1)
  42. # CLEARANCE #
  43. self.clearance_label = QtWidgets.QLabel('%s:' % _("Clearance"))
  44. self.clearance_label.setToolTip(
  45. _("This set the distance between the copper Thieving components\n"
  46. "(the polygon fill may be split in multiple polygons)\n"
  47. "and the copper traces in the Gerber file.")
  48. )
  49. self.clearance_entry = FCDoubleSpinner()
  50. self.clearance_entry.setMinimum(0.00001)
  51. self.clearance_entry.set_precision(self.decimals)
  52. self.clearance_entry.setSingleStep(0.1)
  53. grid_lay.addWidget(self.clearance_label, 2, 0)
  54. grid_lay.addWidget(self.clearance_entry, 2, 1)
  55. # MARGIN #
  56. self.margin_label = QtWidgets.QLabel('%s:' % _("Margin"))
  57. self.margin_label.setToolTip(
  58. _("Bounding box margin.")
  59. )
  60. self.margin_entry = FCDoubleSpinner()
  61. self.margin_entry.setMinimum(0.0)
  62. self.margin_entry.set_precision(self.decimals)
  63. self.margin_entry.setSingleStep(0.1)
  64. grid_lay.addWidget(self.margin_label, 3, 0)
  65. grid_lay.addWidget(self.margin_entry, 3, 1)
  66. # Reference #
  67. self.reference_radio = RadioSet([
  68. {'label': _('Itself'), 'value': 'itself'},
  69. {"label": _("Area Selection"), "value": "area"},
  70. {'label': _("Reference Object"), 'value': 'box'}
  71. ], orientation='vertical', stretch=False)
  72. self.reference_label = QtWidgets.QLabel(_("Reference:"))
  73. self.reference_label.setToolTip(
  74. _("- 'Itself' - the copper Thieving extent is based on the object extent.\n"
  75. "- 'Area Selection' - left mouse click to start selection of the area to be filled.\n"
  76. "- 'Reference Object' - will do copper thieving within the area specified by another object.")
  77. )
  78. grid_lay.addWidget(self.reference_label, 4, 0)
  79. grid_lay.addWidget(self.reference_radio, 4, 1)
  80. # Bounding Box Type #
  81. self.bbox_type_radio = RadioSet([
  82. {'label': _('Rectangular'), 'value': 'rect'},
  83. {"label": _("Minimal"), "value": "min"}
  84. ], stretch=False)
  85. self.bbox_type_label = QtWidgets.QLabel(_("Box Type:"))
  86. self.bbox_type_label.setToolTip(
  87. _("- 'Rectangular' - the bounding box will be of rectangular shape.\n"
  88. "- 'Minimal' - the bounding box will be the convex hull shape.")
  89. )
  90. grid_lay.addWidget(self.bbox_type_label, 5, 0)
  91. grid_lay.addWidget(self.bbox_type_radio, 5, 1)
  92. separator_line = QtWidgets.QFrame()
  93. separator_line.setFrameShape(QtWidgets.QFrame.HLine)
  94. separator_line.setFrameShadow(QtWidgets.QFrame.Sunken)
  95. grid_lay.addWidget(separator_line, 6, 0, 1, 2)
  96. # Fill Type
  97. self.fill_type_radio = RadioSet([
  98. {'label': _('Solid'), 'value': 'solid'},
  99. {"label": _("Dots Grid"), "value": "dot"},
  100. {"label": _("Squares Grid"), "value": "square"},
  101. {"label": _("Lines Grid"), "value": "line"}
  102. ], orientation='vertical', stretch=False)
  103. self.fill_type_label = QtWidgets.QLabel(_("Fill Type:"))
  104. self.fill_type_label.setToolTip(
  105. _("- 'Solid' - copper thieving will be a solid polygon.\n"
  106. "- 'Dots Grid' - the empty area will be filled with a pattern of dots.\n"
  107. "- 'Squares Grid' - the empty area will be filled with a pattern of squares.\n"
  108. "- 'Lines Grid' - the empty area will be filled with a pattern of lines.")
  109. )
  110. grid_lay.addWidget(self.fill_type_label, 7, 0)
  111. grid_lay.addWidget(self.fill_type_radio, 7, 1)
  112. self.dots_label = QtWidgets.QLabel('<b>%s</b>:' % _("Dots Grid Parameters"))
  113. grid_lay.addWidget(self.dots_label, 8, 0, 1, 2)
  114. # Dot diameter #
  115. self.dotdia_label = QtWidgets.QLabel('%s:' % _("Dia"))
  116. self.dotdia_label.setToolTip(
  117. _("Dot diameter in Dots Grid.")
  118. )
  119. self.dot_dia_entry = FCDoubleSpinner()
  120. self.dot_dia_entry.set_range(0.0, 9999.9999)
  121. self.dot_dia_entry.set_precision(self.decimals)
  122. self.dot_dia_entry.setSingleStep(0.1)
  123. grid_lay.addWidget(self.dotdia_label, 9, 0)
  124. grid_lay.addWidget(self.dot_dia_entry, 9, 1)
  125. # Dot spacing #
  126. self.dotspacing_label = QtWidgets.QLabel('%s:' % _("Spacing"))
  127. self.dotspacing_label.setToolTip(
  128. _("Distance between each two dots in Dots Grid.")
  129. )
  130. self.dot_spacing_entry = FCDoubleSpinner()
  131. self.dot_spacing_entry.set_range(0.0, 9999.9999)
  132. self.dot_spacing_entry.set_precision(self.decimals)
  133. self.dot_spacing_entry.setSingleStep(0.1)
  134. grid_lay.addWidget(self.dotspacing_label, 10, 0)
  135. grid_lay.addWidget(self.dot_spacing_entry, 10, 1)
  136. self.squares_label = QtWidgets.QLabel('<b>%s</b>:' % _("Squares Grid Parameters"))
  137. grid_lay.addWidget(self.squares_label, 11, 0, 1, 2)
  138. # Square Size #
  139. self.square_size_label = QtWidgets.QLabel('%s:' % _("Size"))
  140. self.square_size_label.setToolTip(
  141. _("Square side size in Squares Grid.")
  142. )
  143. self.square_size_entry = FCDoubleSpinner()
  144. self.square_size_entry.set_range(0.0, 9999.9999)
  145. self.square_size_entry.set_precision(self.decimals)
  146. self.square_size_entry.setSingleStep(0.1)
  147. grid_lay.addWidget(self.square_size_label, 12, 0)
  148. grid_lay.addWidget(self.square_size_entry, 12, 1)
  149. # Squares spacing #
  150. self.squares_spacing_label = QtWidgets.QLabel('%s:' % _("Spacing"))
  151. self.squares_spacing_label.setToolTip(
  152. _("Distance between each two squares in Squares Grid.")
  153. )
  154. self.squares_spacing_entry = FCDoubleSpinner()
  155. self.squares_spacing_entry.set_range(0.0, 9999.9999)
  156. self.squares_spacing_entry.set_precision(self.decimals)
  157. self.squares_spacing_entry.setSingleStep(0.1)
  158. grid_lay.addWidget(self.squares_spacing_label, 13, 0)
  159. grid_lay.addWidget(self.squares_spacing_entry, 13, 1)
  160. self.lines_label = QtWidgets.QLabel('<b>%s</b>:' % _("Lines Grid Parameters"))
  161. grid_lay.addWidget(self.lines_label, 14, 0, 1, 2)
  162. # Square Size #
  163. self.line_size_label = QtWidgets.QLabel('%s:' % _("Size"))
  164. self.line_size_label.setToolTip(
  165. _("Line thickness size in Lines Grid.")
  166. )
  167. self.line_size_entry = FCDoubleSpinner()
  168. self.line_size_entry.set_range(0.0, 9999.9999)
  169. self.line_size_entry.set_precision(self.decimals)
  170. self.line_size_entry.setSingleStep(0.1)
  171. grid_lay.addWidget(self.line_size_label, 15, 0)
  172. grid_lay.addWidget(self.line_size_entry, 15, 1)
  173. # Lines spacing #
  174. self.lines_spacing_label = QtWidgets.QLabel('%s:' % _("Spacing"))
  175. self.lines_spacing_label.setToolTip(
  176. _("Distance between each two lines in Lines Grid.")
  177. )
  178. self.lines_spacing_entry = FCDoubleSpinner()
  179. self.lines_spacing_entry.set_range(0.0, 9999.9999)
  180. self.lines_spacing_entry.set_precision(self.decimals)
  181. self.lines_spacing_entry.setSingleStep(0.1)
  182. grid_lay.addWidget(self.lines_spacing_label, 16, 0)
  183. grid_lay.addWidget(self.lines_spacing_entry, 16, 1)
  184. self.robber_bar_label = QtWidgets.QLabel('<b>%s</b>' % _('Robber Bar Parameters'))
  185. self.robber_bar_label.setToolTip(
  186. _("Parameters used for the robber bar.\n"
  187. "Robber bar = copper border to help in pattern hole plating.")
  188. )
  189. grid_lay.addWidget(self.robber_bar_label, 17, 0, 1, 2)
  190. # ROBBER BAR MARGIN #
  191. self.rb_margin_label = QtWidgets.QLabel('%s:' % _("Margin"))
  192. self.rb_margin_label.setToolTip(
  193. _("Bounding box margin for robber bar.")
  194. )
  195. self.rb_margin_entry = FCDoubleSpinner()
  196. self.rb_margin_entry.set_range(-9999.9999, 9999.9999)
  197. self.rb_margin_entry.set_precision(self.decimals)
  198. self.rb_margin_entry.setSingleStep(0.1)
  199. grid_lay.addWidget(self.rb_margin_label, 18, 0)
  200. grid_lay.addWidget(self.rb_margin_entry, 18, 1)
  201. # THICKNESS #
  202. self.rb_thickness_label = QtWidgets.QLabel('%s:' % _("Thickness"))
  203. self.rb_thickness_label.setToolTip(
  204. _("The robber bar thickness.")
  205. )
  206. self.rb_thickness_entry = FCDoubleSpinner()
  207. self.rb_thickness_entry.set_range(0.0000, 9999.9999)
  208. self.rb_thickness_entry.set_precision(self.decimals)
  209. self.rb_thickness_entry.setSingleStep(0.1)
  210. grid_lay.addWidget(self.rb_thickness_label, 19, 0)
  211. grid_lay.addWidget(self.rb_thickness_entry, 19, 1)
  212. self.patern_mask_label = QtWidgets.QLabel('<b>%s</b>' % _('Pattern Plating Mask'))
  213. self.patern_mask_label.setToolTip(
  214. _("Generate a mask for pattern plating.")
  215. )
  216. grid_lay.addWidget(self.patern_mask_label, 20, 0, 1, 2)
  217. # Openings CLEARANCE #
  218. self.clearance_ppm_label = QtWidgets.QLabel('%s:' % _("Clearance"))
  219. self.clearance_ppm_label.setToolTip(
  220. _("The distance between the possible copper thieving elements\n"
  221. "and/or robber bar and the actual openings in the mask.")
  222. )
  223. self.clearance_ppm_entry = FCDoubleSpinner()
  224. self.clearance_ppm_entry.set_range(-9999.9999, 9999.9999)
  225. self.clearance_ppm_entry.set_precision(self.decimals)
  226. self.clearance_ppm_entry.setSingleStep(0.1)
  227. grid_lay.addWidget(self.clearance_ppm_label, 21, 0)
  228. grid_lay.addWidget(self.clearance_ppm_entry, 21, 1)
  229. self.layout.addStretch()