Tools2EDrillsPrefGroupUI.py 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  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 Tools2EDrillsPrefGroupUI(OptionsGroupUI):
  17. def __init__(self, decimals=4, parent=None):
  18. super(Tools2EDrillsPrefGroupUI, self).__init__(self, parent=parent)
  19. self.setTitle(str(_("Extract Drills 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': _("Fixed Diameter"), 'value': 'fixed'},
  76. {'label': _("Fixed Annular Ring"), 'value': 'ring'},
  77. {'label': _("Proportional"), 'value': 'prop'}
  78. ],
  79. orientation='vertical',
  80. stretch=False)
  81. self.hole_size_label = QtWidgets.QLabel('<b>%s:</b>' % _("Method"))
  82. self.hole_size_label.setToolTip(
  83. _("The method for processing pads. Can be:\n"
  84. "- Fixed Diameter -> all holes will have a set size\n"
  85. "- Fixed Annular Ring -> all holes will have a set annular ring\n"
  86. "- Proportional -> each hole size will be a fraction of the pad size"))
  87. grid_lay.addWidget(self.hole_size_label, 9, 0)
  88. grid_lay.addWidget(self.hole_size_radio, 9, 1)
  89. # grid_lay1.addWidget(QtWidgets.QLabel(''))
  90. separator_line = QtWidgets.QFrame()
  91. separator_line.setFrameShape(QtWidgets.QFrame.HLine)
  92. separator_line.setFrameShadow(QtWidgets.QFrame.Sunken)
  93. grid_lay.addWidget(separator_line, 10, 0, 1, 2)
  94. # Annular Ring
  95. self.fixed_label = QtWidgets.QLabel('<b>%s</b>' % _("Fixed Diameter"))
  96. grid_lay.addWidget(self.fixed_label, 11, 0, 1, 2)
  97. # Diameter value
  98. self.dia_entry = FCDoubleSpinner()
  99. self.dia_entry.set_precision(self.decimals)
  100. self.dia_entry.set_range(0.0000, 9999.9999)
  101. self.dia_label = QtWidgets.QLabel('%s:' % _("Value"))
  102. self.dia_label.setToolTip(
  103. _("Fixed hole diameter.")
  104. )
  105. grid_lay.addWidget(self.dia_label, 12, 0)
  106. grid_lay.addWidget(self.dia_entry, 12, 1)
  107. # Annular Ring value
  108. self.ring_label = QtWidgets.QLabel('<b>%s</b>' % _("Fixed Annular Ring"))
  109. self.ring_label.setToolTip(
  110. _("The size of annular ring.\n"
  111. "The copper sliver between the hole exterior\n"
  112. "and the margin of the copper pad.")
  113. )
  114. grid_lay.addWidget(self.ring_label, 13, 0, 1, 2)
  115. # Circular Annular Ring Value
  116. self.circular_ring_label = QtWidgets.QLabel('%s:' % _("Circular"))
  117. self.circular_ring_label.setToolTip(
  118. _("The size of annular ring for circular pads.")
  119. )
  120. self.circular_ring_entry = FCDoubleSpinner()
  121. self.circular_ring_entry.set_precision(self.decimals)
  122. self.circular_ring_entry.set_range(0.0000, 9999.9999)
  123. grid_lay.addWidget(self.circular_ring_label, 14, 0)
  124. grid_lay.addWidget(self.circular_ring_entry, 14, 1)
  125. # Oblong Annular Ring Value
  126. self.oblong_ring_label = QtWidgets.QLabel('%s:' % _("Oblong"))
  127. self.oblong_ring_label.setToolTip(
  128. _("The size of annular ring for oblong pads.")
  129. )
  130. self.oblong_ring_entry = FCDoubleSpinner()
  131. self.oblong_ring_entry.set_precision(self.decimals)
  132. self.oblong_ring_entry.set_range(0.0000, 9999.9999)
  133. grid_lay.addWidget(self.oblong_ring_label, 15, 0)
  134. grid_lay.addWidget(self.oblong_ring_entry, 15, 1)
  135. # Square Annular Ring Value
  136. self.square_ring_label = QtWidgets.QLabel('%s:' % _("Square"))
  137. self.square_ring_label.setToolTip(
  138. _("The size of annular ring for square pads.")
  139. )
  140. self.square_ring_entry = FCDoubleSpinner()
  141. self.square_ring_entry.set_precision(self.decimals)
  142. self.square_ring_entry.set_range(0.0000, 9999.9999)
  143. grid_lay.addWidget(self.square_ring_label, 16, 0)
  144. grid_lay.addWidget(self.square_ring_entry, 16, 1)
  145. # Rectangular Annular Ring Value
  146. self.rectangular_ring_label = QtWidgets.QLabel('%s:' % _("Rectangular"))
  147. self.rectangular_ring_label.setToolTip(
  148. _("The size of annular ring for rectangular pads.")
  149. )
  150. self.rectangular_ring_entry = FCDoubleSpinner()
  151. self.rectangular_ring_entry.set_precision(self.decimals)
  152. self.rectangular_ring_entry.set_range(0.0000, 9999.9999)
  153. grid_lay.addWidget(self.rectangular_ring_label, 17, 0)
  154. grid_lay.addWidget(self.rectangular_ring_entry, 17, 1)
  155. # Others Annular Ring Value
  156. self.other_ring_label = QtWidgets.QLabel('%s:' % _("Others"))
  157. self.other_ring_label.setToolTip(
  158. _("The size of annular ring for other pads.")
  159. )
  160. self.other_ring_entry = FCDoubleSpinner()
  161. self.other_ring_entry.set_precision(self.decimals)
  162. self.other_ring_entry.set_range(0.0000, 9999.9999)
  163. grid_lay.addWidget(self.other_ring_label, 18, 0)
  164. grid_lay.addWidget(self.other_ring_entry, 18, 1)
  165. self.prop_label = QtWidgets.QLabel('<b>%s</b>' % _("Proportional Diameter"))
  166. grid_lay.addWidget(self.prop_label, 19, 0, 1, 2)
  167. # Factor value
  168. self.factor_entry = FCDoubleSpinner(suffix='%')
  169. self.factor_entry.set_precision(self.decimals)
  170. self.factor_entry.set_range(0.0000, 100.0000)
  171. self.factor_entry.setSingleStep(0.1)
  172. self.factor_label = QtWidgets.QLabel('%s:' % _("Factor"))
  173. self.factor_label.setToolTip(
  174. _("Proportional Diameter.\n"
  175. "The hole diameter will be a fraction of the pad size.")
  176. )
  177. grid_lay.addWidget(self.factor_label, 20, 0)
  178. grid_lay.addWidget(self.factor_entry, 20, 1)
  179. self.layout.addStretch()