Tools2PunchGerberPrefGroupUI.py 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. from PyQt5 import QtWidgets
  2. from PyQt5.QtCore import QSettings
  3. from AppGUI.GUIElements import FCCheckBox, RadioSet, FCDoubleSpinner
  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 Tools2PunchGerberPrefGroupUI(OptionsGroupUI):
  17. def __init__(self, decimals=4, parent=None):
  18. super(Tools2PunchGerberPrefGroupUI, self).__init__(self, parent=parent)
  19. self.setTitle(str(_("Punch Gerber 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. self.param_label = QtWidgets.QLabel('<b>%s:</b>' % _('Parameters'))
  27. self.param_label.setToolTip(
  28. _("Parameters used for this tool.")
  29. )
  30. grid_lay.addWidget(self.param_label, 0, 0, 1, 2)
  31. self.padt_label = QtWidgets.QLabel("<b>%s:</b>" % _("Processed Pads Type"))
  32. self.padt_label.setToolTip(
  33. _("The type of pads shape to be processed.\n"
  34. "If the PCB has many SMD pads with rectangular pads,\n"
  35. "disable the Rectangular aperture.")
  36. )
  37. grid_lay.addWidget(self.padt_label, 2, 0, 1, 2)
  38. # Circular Aperture Selection
  39. self.circular_cb = FCCheckBox('%s' % _("Circular"))
  40. self.circular_cb.setToolTip(
  41. _("Process Circular Pads.")
  42. )
  43. grid_lay.addWidget(self.circular_cb, 3, 0, 1, 2)
  44. # Oblong Aperture Selection
  45. self.oblong_cb = FCCheckBox('%s' % _("Oblong"))
  46. self.oblong_cb.setToolTip(
  47. _("Process Oblong Pads.")
  48. )
  49. grid_lay.addWidget(self.oblong_cb, 4, 0, 1, 2)
  50. # Square Aperture Selection
  51. self.square_cb = FCCheckBox('%s' % _("Square"))
  52. self.square_cb.setToolTip(
  53. _("Process Square Pads.")
  54. )
  55. grid_lay.addWidget(self.square_cb, 5, 0, 1, 2)
  56. # Rectangular Aperture Selection
  57. self.rectangular_cb = FCCheckBox('%s' % _("Rectangular"))
  58. self.rectangular_cb.setToolTip(
  59. _("Process Rectangular Pads.")
  60. )
  61. grid_lay.addWidget(self.rectangular_cb, 6, 0, 1, 2)
  62. # Others type of Apertures Selection
  63. self.other_cb = FCCheckBox('%s' % _("Others"))
  64. self.other_cb.setToolTip(
  65. _("Process pads not in the categories above.")
  66. )
  67. grid_lay.addWidget(self.other_cb, 7, 0, 1, 2)
  68. separator_line = QtWidgets.QFrame()
  69. separator_line.setFrameShape(QtWidgets.QFrame.HLine)
  70. separator_line.setFrameShadow(QtWidgets.QFrame.Sunken)
  71. grid_lay.addWidget(separator_line, 8, 0, 1, 2)
  72. # ## Axis
  73. self.hole_size_radio = RadioSet(
  74. [
  75. {'label': _("Excellon"), 'value': 'exc'},
  76. {'label': _("Fixed Diameter"), 'value': 'fixed'},
  77. {'label': _("Fixed Annular Ring"), 'value': 'ring'},
  78. {'label': _("Proportional"), 'value': 'prop'}
  79. ],
  80. orientation='vertical',
  81. stretch=False)
  82. self.hole_size_label = QtWidgets.QLabel('<b>%s:</b>' % _("Method"))
  83. self.hole_size_label.setToolTip(
  84. _("The punch hole source can be:\n"
  85. "- Excellon Object-> the Excellon object drills center will serve as reference.\n"
  86. "- Fixed Diameter -> will try to use the pads center as reference adding fixed diameter holes.\n"
  87. "- Fixed Annular Ring -> will try to keep a set annular ring.\n"
  88. "- Proportional -> will make a Gerber punch hole having the diameter a percentage of the pad diameter.")
  89. )
  90. grid_lay.addWidget(self.hole_size_label, 9, 0)
  91. grid_lay.addWidget(self.hole_size_radio, 9, 1)
  92. # grid_lay1.addWidget(QtWidgets.QLabel(''))
  93. separator_line = QtWidgets.QFrame()
  94. separator_line.setFrameShape(QtWidgets.QFrame.HLine)
  95. separator_line.setFrameShadow(QtWidgets.QFrame.Sunken)
  96. grid_lay.addWidget(separator_line, 10, 0, 1, 2)
  97. # Annular Ring
  98. self.fixed_label = QtWidgets.QLabel('<b>%s</b>' % _("Fixed Diameter"))
  99. grid_lay.addWidget(self.fixed_label, 11, 0, 1, 2)
  100. # Diameter value
  101. self.dia_entry = FCDoubleSpinner()
  102. self.dia_entry.set_precision(self.decimals)
  103. self.dia_entry.set_range(0.0000, 9999.9999)
  104. self.dia_label = QtWidgets.QLabel('%s:' % _("Value"))
  105. self.dia_label.setToolTip(
  106. _("Fixed hole diameter.")
  107. )
  108. grid_lay.addWidget(self.dia_label, 12, 0)
  109. grid_lay.addWidget(self.dia_entry, 12, 1)
  110. # Annular Ring value
  111. self.ring_label = QtWidgets.QLabel('<b>%s</b>' % _("Fixed Annular Ring"))
  112. self.ring_label.setToolTip(
  113. _("The size of annular ring.\n"
  114. "The copper sliver between the hole exterior\n"
  115. "and the margin of the copper pad.")
  116. )
  117. grid_lay.addWidget(self.ring_label, 13, 0, 1, 2)
  118. # Circular Annular Ring Value
  119. self.circular_ring_label = QtWidgets.QLabel('%s:' % _("Circular"))
  120. self.circular_ring_label.setToolTip(
  121. _("The size of annular ring for circular pads.")
  122. )
  123. self.circular_ring_entry = FCDoubleSpinner()
  124. self.circular_ring_entry.set_precision(self.decimals)
  125. self.circular_ring_entry.set_range(0.0000, 9999.9999)
  126. grid_lay.addWidget(self.circular_ring_label, 14, 0)
  127. grid_lay.addWidget(self.circular_ring_entry, 14, 1)
  128. # Oblong Annular Ring Value
  129. self.oblong_ring_label = QtWidgets.QLabel('%s:' % _("Oblong"))
  130. self.oblong_ring_label.setToolTip(
  131. _("The size of annular ring for oblong pads.")
  132. )
  133. self.oblong_ring_entry = FCDoubleSpinner()
  134. self.oblong_ring_entry.set_precision(self.decimals)
  135. self.oblong_ring_entry.set_range(0.0000, 9999.9999)
  136. grid_lay.addWidget(self.oblong_ring_label, 15, 0)
  137. grid_lay.addWidget(self.oblong_ring_entry, 15, 1)
  138. # Square Annular Ring Value
  139. self.square_ring_label = QtWidgets.QLabel('%s:' % _("Square"))
  140. self.square_ring_label.setToolTip(
  141. _("The size of annular ring for square pads.")
  142. )
  143. self.square_ring_entry = FCDoubleSpinner()
  144. self.square_ring_entry.set_precision(self.decimals)
  145. self.square_ring_entry.set_range(0.0000, 9999.9999)
  146. grid_lay.addWidget(self.square_ring_label, 16, 0)
  147. grid_lay.addWidget(self.square_ring_entry, 16, 1)
  148. # Rectangular Annular Ring Value
  149. self.rectangular_ring_label = QtWidgets.QLabel('%s:' % _("Rectangular"))
  150. self.rectangular_ring_label.setToolTip(
  151. _("The size of annular ring for rectangular pads.")
  152. )
  153. self.rectangular_ring_entry = FCDoubleSpinner()
  154. self.rectangular_ring_entry.set_precision(self.decimals)
  155. self.rectangular_ring_entry.set_range(0.0000, 9999.9999)
  156. grid_lay.addWidget(self.rectangular_ring_label, 17, 0)
  157. grid_lay.addWidget(self.rectangular_ring_entry, 17, 1)
  158. # Others Annular Ring Value
  159. self.other_ring_label = QtWidgets.QLabel('%s:' % _("Others"))
  160. self.other_ring_label.setToolTip(
  161. _("The size of annular ring for other pads.")
  162. )
  163. self.other_ring_entry = FCDoubleSpinner()
  164. self.other_ring_entry.set_precision(self.decimals)
  165. self.other_ring_entry.set_range(0.0000, 9999.9999)
  166. grid_lay.addWidget(self.other_ring_label, 18, 0)
  167. grid_lay.addWidget(self.other_ring_entry, 18, 1)
  168. self.prop_label = QtWidgets.QLabel('<b>%s</b>' % _("Proportional Diameter"))
  169. grid_lay.addWidget(self.prop_label, 19, 0, 1, 2)
  170. # Factor value
  171. self.factor_entry = FCDoubleSpinner(suffix='%')
  172. self.factor_entry.set_precision(self.decimals)
  173. self.factor_entry.set_range(0.0000, 100.0000)
  174. self.factor_entry.setSingleStep(0.1)
  175. self.factor_label = QtWidgets.QLabel('%s:' % _("Factor"))
  176. self.factor_label.setToolTip(
  177. _("Proportional Diameter.\n"
  178. "The hole diameter will be a fraction of the pad size.")
  179. )
  180. grid_lay.addWidget(self.factor_label, 20, 0)
  181. grid_lay.addWidget(self.factor_entry, 20, 1)
  182. self.layout.addStretch()