Tools2PunchGerberPrefGroupUI.py 8.1 KB

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