GerberGenPrefGroupUI.py 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. from PyQt5 import QtWidgets, QtCore, QtGui
  2. from PyQt5.QtCore import QSettings
  3. from appGUI.GUIElements import FCCheckBox, FCSpinner, RadioSet, FCEntry, FCSliderWithSpinner, FCColorEntry
  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 GerberGenPrefGroupUI(OptionsGroupUI):
  17. def __init__(self, decimals=4, parent=None):
  18. # OptionsGroupUI.__init__(self, "Gerber General Preferences", parent=parent)
  19. super(GerberGenPrefGroupUI, self).__init__(self, parent=parent)
  20. self.setTitle(str(_("Gerber General")))
  21. self.decimals = decimals
  22. # ## Plot options
  23. self.plot_options_label = QtWidgets.QLabel("<b>%s:</b>" % _("Plot Options"))
  24. self.layout.addWidget(self.plot_options_label)
  25. grid0 = QtWidgets.QGridLayout()
  26. self.layout.addLayout(grid0)
  27. # Plot CB
  28. self.plot_cb = FCCheckBox(label='%s' % _('Plot'))
  29. self.plot_options_label.setToolTip(
  30. _("Plot (show) this object.")
  31. )
  32. grid0.addWidget(self.plot_cb, 0, 0)
  33. # Solid CB
  34. self.solid_cb = FCCheckBox(label='%s' % _('Solid'))
  35. self.solid_cb.setToolTip(
  36. _("Solid color polygons.")
  37. )
  38. grid0.addWidget(self.solid_cb, 0, 1)
  39. # Multicolored CB
  40. self.multicolored_cb = FCCheckBox(label='%s' % _('M-Color'))
  41. self.multicolored_cb.setToolTip(
  42. _("Draw polygons in different colors.")
  43. )
  44. grid0.addWidget(self.multicolored_cb, 0, 2)
  45. # Number of circle steps for circular aperture linear approximation
  46. self.circle_steps_label = QtWidgets.QLabel('%s:' % _("Circle Steps"))
  47. self.circle_steps_label.setToolTip(
  48. _("The number of circle steps for Gerber \n"
  49. "circular aperture linear approximation.")
  50. )
  51. self.circle_steps_entry = FCSpinner()
  52. self.circle_steps_entry.set_range(0, 9999)
  53. grid0.addWidget(self.circle_steps_label, 1, 0)
  54. grid0.addWidget(self.circle_steps_entry, 1, 1, 1, 2)
  55. grid0.addWidget(QtWidgets.QLabel(''), 2, 0, 1, 3)
  56. # Default format for Gerber
  57. self.gerber_default_label = QtWidgets.QLabel('<b>%s:</b>' % _('Default Values'))
  58. self.gerber_default_label.setToolTip(
  59. _("Those values will be used as fallback values\n"
  60. "in case that they are not found in the Gerber file.")
  61. )
  62. grid0.addWidget(self.gerber_default_label, 3, 0, 1, 3)
  63. # Gerber Units
  64. self.gerber_units_label = QtWidgets.QLabel('%s:' % _('Units'))
  65. self.gerber_units_label.setToolTip(
  66. _("The units used in the Gerber file.")
  67. )
  68. self.gerber_units_radio = RadioSet([{'label': _('INCH'), 'value': 'IN'},
  69. {'label': _('MM'), 'value': 'MM'}])
  70. self.gerber_units_radio.setToolTip(
  71. _("The units used in the Gerber file.")
  72. )
  73. grid0.addWidget(self.gerber_units_label, 4, 0)
  74. grid0.addWidget(self.gerber_units_radio, 4, 1, 1, 2)
  75. # Gerber Zeros
  76. self.gerber_zeros_label = QtWidgets.QLabel('%s:' % _('Zeros'))
  77. self.gerber_zeros_label.setAlignment(QtCore.Qt.AlignLeft)
  78. self.gerber_zeros_label.setToolTip(
  79. _("This sets the type of Gerber zeros.\n"
  80. "If LZ then Leading Zeros are removed and\n"
  81. "Trailing Zeros are kept.\n"
  82. "If TZ is checked then Trailing Zeros are removed\n"
  83. "and Leading Zeros are kept.")
  84. )
  85. self.gerber_zeros_radio = RadioSet([{'label': _('LZ'), 'value': 'L'},
  86. {'label': _('TZ'), 'value': 'T'}])
  87. self.gerber_zeros_radio.setToolTip(
  88. _("This sets the type of Gerber zeros.\n"
  89. "If LZ then Leading Zeros are removed and\n"
  90. "Trailing Zeros are kept.\n"
  91. "If TZ is checked then Trailing Zeros are removed\n"
  92. "and Leading Zeros are kept.")
  93. )
  94. grid0.addWidget(self.gerber_zeros_label, 5, 0)
  95. grid0.addWidget(self.gerber_zeros_radio, 5, 1, 1, 2)
  96. separator_line = QtWidgets.QFrame()
  97. separator_line.setFrameShape(QtWidgets.QFrame.HLine)
  98. separator_line.setFrameShadow(QtWidgets.QFrame.Sunken)
  99. grid0.addWidget(separator_line, 6, 0, 1, 3)
  100. # Apertures Cleaning
  101. self.gerber_clean_cb = FCCheckBox(label='%s' % _('Clean Apertures'))
  102. self.gerber_clean_cb.setToolTip(
  103. _("Will remove apertures that do not have geometry\n"
  104. "thus lowering the number of apertures in the Gerber object.")
  105. )
  106. grid0.addWidget(self.gerber_clean_cb, 7, 0, 1, 3)
  107. # Apply Extra Buffering
  108. self.gerber_extra_buffering = FCCheckBox(label='%s' % _('Polarity change buffer'))
  109. self.gerber_extra_buffering.setToolTip(
  110. _("Will apply extra buffering for the\n"
  111. "solid geometry when we have polarity changes.\n"
  112. "May help loading Gerber files that otherwise\n"
  113. "do not load correctly.")
  114. )
  115. grid0.addWidget(self.gerber_extra_buffering, 8, 0, 1, 3)
  116. separator_line = QtWidgets.QFrame()
  117. separator_line.setFrameShape(QtWidgets.QFrame.HLine)
  118. separator_line.setFrameShadow(QtWidgets.QFrame.Sunken)
  119. grid0.addWidget(separator_line, 9, 0, 1, 3)
  120. # Gerber Object Color
  121. self.gerber_color_label = QtWidgets.QLabel('<b>%s</b>' % _('Object Color'))
  122. grid0.addWidget(self.gerber_color_label, 10, 0, 1, 3)
  123. # Plot Line Color
  124. self.line_color_label = QtWidgets.QLabel('%s:' % _('Outline'))
  125. self.line_color_label.setToolTip(
  126. _("Set the line color for plotted objects.")
  127. )
  128. self.line_color_entry = FCColorEntry()
  129. grid0.addWidget(self.line_color_label, 11, 0)
  130. grid0.addWidget(self.line_color_entry, 11, 1, 1, 2)
  131. # Plot Fill Color
  132. self.fill_color_label = QtWidgets.QLabel('%s:' % _('Fill'))
  133. self.fill_color_label.setToolTip(
  134. _("Set the fill color for plotted objects.\n"
  135. "First 6 digits are the color and the last 2\n"
  136. "digits are for alpha (transparency) level.")
  137. )
  138. self.fill_color_entry = FCColorEntry()
  139. grid0.addWidget(self.fill_color_label, 12, 0)
  140. grid0.addWidget(self.fill_color_entry, 12, 1, 1, 2)
  141. # Plot Fill Transparency Level
  142. self.gerber_alpha_label = QtWidgets.QLabel('%s:' % _('Alpha'))
  143. self.gerber_alpha_label.setToolTip(
  144. _("Set the fill transparency for plotted objects.")
  145. )
  146. self.gerber_alpha_entry = FCSliderWithSpinner(0, 255, 1)
  147. grid0.addWidget(self.gerber_alpha_label, 13, 0)
  148. grid0.addWidget(self.gerber_alpha_entry, 13, 1, 1, 2)
  149. self.layout.addStretch()
  150. # Setting plot colors signals
  151. self.line_color_entry.editingFinished.connect(self.on_line_color_changed)
  152. self.fill_color_entry.editingFinished.connect(self.on_fill_color_changed)
  153. self.gerber_alpha_entry.valueChanged.connect(self.on_gerber_alpha_changed) # alpha
  154. # Setting plot colors handlers
  155. def on_fill_color_changed(self):
  156. self.app.defaults['gerber_plot_fill'] = self.fill_color_entry.get_value()[:7] + \
  157. self.app.defaults['gerber_plot_fill'][7:9]
  158. def on_gerber_alpha_changed(self, spinner_value):
  159. self.app.defaults['gerber_plot_fill'] = \
  160. self.app.defaults['gerber_plot_fill'][:7] + \
  161. (hex(spinner_value)[2:] if int(hex(spinner_value)[2:], 16) > 0 else '00')
  162. self.app.defaults['gerber_plot_line'] = \
  163. self.app.defaults['gerber_plot_line'][:7] + \
  164. (hex(spinner_value)[2:] if int(hex(spinner_value)[2:], 16) > 0 else '00')
  165. def on_line_color_changed(self):
  166. self.app.defaults['gerber_plot_line'] = self.line_color_entry.get_value()[:7] + \
  167. self.app.defaults['gerber_plot_line'][7:9]