Tools2CThievingPrefGroupUI.py 11 KB

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