GeometryOptPrefGroupUI.py 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251
  1. from PyQt5 import QtWidgets
  2. from PyQt5.QtCore import Qt
  3. from flatcamGUI.GUIElements import FCDoubleSpinner, FCCheckBox, OptionalInputSection, FCEntry, FCSpinner, FCComboBox
  4. from flatcamGUI.preferences import machinist_setting
  5. from flatcamGUI.preferences.OptionsGroupUI import OptionsGroupUI
  6. class GeometryOptPrefGroupUI(OptionsGroupUI):
  7. def __init__(self, decimals=4, parent=None):
  8. # OptionsGroupUI.__init__(self, "Geometry Options Preferences", parent=parent)
  9. super(GeometryOptPrefGroupUI, self).__init__(self)
  10. self.setTitle(str(_("Geometry Options")))
  11. self.decimals = decimals
  12. # ------------------------------
  13. # ## Create CNC Job
  14. # ------------------------------
  15. self.cncjob_label = QtWidgets.QLabel('<b>%s:</b>' % _('Create CNC Job'))
  16. self.cncjob_label.setToolTip(
  17. _("Create a CNC Job object\n"
  18. "tracing the contours of this\n"
  19. "Geometry object.")
  20. )
  21. self.layout.addWidget(self.cncjob_label)
  22. grid1 = QtWidgets.QGridLayout()
  23. self.layout.addLayout(grid1)
  24. grid1.setColumnStretch(0, 0)
  25. grid1.setColumnStretch(1, 1)
  26. # Cut Z
  27. cutzlabel = QtWidgets.QLabel('%s:' % _('Cut Z'))
  28. cutzlabel.setToolTip(
  29. _("Cutting depth (negative)\n"
  30. "below the copper surface.")
  31. )
  32. self.cutz_entry = FCDoubleSpinner()
  33. if machinist_setting == 0:
  34. self.cutz_entry.set_range(-9999.9999, 0.0000)
  35. else:
  36. self.cutz_entry.set_range(-9999.9999, 9999.9999)
  37. self.cutz_entry.set_precision(self.decimals)
  38. self.cutz_entry.setSingleStep(0.1)
  39. self.cutz_entry.setWrapping(True)
  40. grid1.addWidget(cutzlabel, 0, 0)
  41. grid1.addWidget(self.cutz_entry, 0, 1)
  42. # Multidepth CheckBox
  43. self.multidepth_cb = FCCheckBox(label=_('Multi-Depth'))
  44. self.multidepth_cb.setToolTip(
  45. _(
  46. "Use multiple passes to limit\n"
  47. "the cut depth in each pass. Will\n"
  48. "cut multiple times until Cut Z is\n"
  49. "reached."
  50. )
  51. )
  52. grid1.addWidget(self.multidepth_cb, 1, 0)
  53. # Depth/pass
  54. dplabel = QtWidgets.QLabel('%s:' % _('Depth/Pass'))
  55. dplabel.setToolTip(
  56. _("The depth to cut on each pass,\n"
  57. "when multidepth is enabled.\n"
  58. "It has positive value although\n"
  59. "it is a fraction from the depth\n"
  60. "which has negative value.")
  61. )
  62. self.depthperpass_entry = FCDoubleSpinner()
  63. self.depthperpass_entry.set_range(0, 99999)
  64. self.depthperpass_entry.set_precision(self.decimals)
  65. self.depthperpass_entry.setSingleStep(0.1)
  66. self.depthperpass_entry.setWrapping(True)
  67. grid1.addWidget(dplabel, 2, 0)
  68. grid1.addWidget(self.depthperpass_entry, 2, 1)
  69. self.ois_multidepth = OptionalInputSection(self.multidepth_cb, [self.depthperpass_entry])
  70. # Travel Z
  71. travelzlabel = QtWidgets.QLabel('%s:' % _('Travel Z'))
  72. travelzlabel.setToolTip(
  73. _("Height of the tool when\n"
  74. "moving without cutting.")
  75. )
  76. self.travelz_entry = FCDoubleSpinner()
  77. if machinist_setting == 0:
  78. self.travelz_entry.set_range(0.0001, 9999.9999)
  79. else:
  80. self.travelz_entry.set_range(-9999.9999, 9999.9999)
  81. self.travelz_entry.set_precision(self.decimals)
  82. self.travelz_entry.setSingleStep(0.1)
  83. self.travelz_entry.setWrapping(True)
  84. grid1.addWidget(travelzlabel, 3, 0)
  85. grid1.addWidget(self.travelz_entry, 3, 1)
  86. # Tool change:
  87. self.toolchange_cb = FCCheckBox('%s' % _("Tool change"))
  88. self.toolchange_cb.setToolTip(
  89. _(
  90. "Include tool-change sequence\n"
  91. "in the Machine Code (Pause for tool change)."
  92. )
  93. )
  94. grid1.addWidget(self.toolchange_cb, 4, 0, 1, 2)
  95. # Toolchange Z
  96. toolchangezlabel = QtWidgets.QLabel('%s:' % _('Toolchange Z'))
  97. toolchangezlabel.setToolTip(
  98. _(
  99. "Z-axis position (height) for\n"
  100. "tool change."
  101. )
  102. )
  103. self.toolchangez_entry = FCDoubleSpinner()
  104. if machinist_setting == 0:
  105. self.toolchangez_entry.set_range(0.000, 9999.9999)
  106. else:
  107. self.toolchangez_entry.set_range(-9999.9999, 9999.9999)
  108. self.toolchangez_entry.set_precision(self.decimals)
  109. self.toolchangez_entry.setSingleStep(0.1)
  110. self.toolchangez_entry.setWrapping(True)
  111. grid1.addWidget(toolchangezlabel, 5, 0)
  112. grid1.addWidget(self.toolchangez_entry, 5, 1)
  113. # End move Z
  114. endz_label = QtWidgets.QLabel('%s:' % _('End move Z'))
  115. endz_label.setToolTip(
  116. _("Height of the tool after\n"
  117. "the last move at the end of the job.")
  118. )
  119. self.endz_entry = FCDoubleSpinner()
  120. if machinist_setting == 0:
  121. self.endz_entry.set_range(0.000, 9999.9999)
  122. else:
  123. self.endz_entry.set_range(-9999.9999, 9999.9999)
  124. self.endz_entry.set_precision(self.decimals)
  125. self.endz_entry.setSingleStep(0.1)
  126. self.endz_entry.setWrapping(True)
  127. grid1.addWidget(endz_label, 6, 0)
  128. grid1.addWidget(self.endz_entry, 6, 1)
  129. # End Move X,Y
  130. endmove_xy_label = QtWidgets.QLabel('%s:' % _('End move X,Y'))
  131. endmove_xy_label.setToolTip(
  132. _("End move X,Y position. In format (x,y).\n"
  133. "If no value is entered then there is no move\n"
  134. "on X,Y plane at the end of the job.")
  135. )
  136. self.endxy_entry = FCEntry()
  137. grid1.addWidget(endmove_xy_label, 7, 0)
  138. grid1.addWidget(self.endxy_entry, 7, 1)
  139. # Feedrate X-Y
  140. frlabel = QtWidgets.QLabel('%s:' % _('Feedrate X-Y'))
  141. frlabel.setToolTip(
  142. _("Cutting speed in the XY\n"
  143. "plane in units per minute")
  144. )
  145. self.cncfeedrate_entry = FCDoubleSpinner()
  146. self.cncfeedrate_entry.set_range(0, 99999.9999)
  147. self.cncfeedrate_entry.set_precision(self.decimals)
  148. self.cncfeedrate_entry.setSingleStep(0.1)
  149. self.cncfeedrate_entry.setWrapping(True)
  150. grid1.addWidget(frlabel, 8, 0)
  151. grid1.addWidget(self.cncfeedrate_entry, 8, 1)
  152. # Feedrate Z (Plunge)
  153. frz_label = QtWidgets.QLabel('%s:' % _('Feedrate Z'))
  154. frz_label.setToolTip(
  155. _("Cutting speed in the XY\n"
  156. "plane in units per minute.\n"
  157. "It is called also Plunge.")
  158. )
  159. self.feedrate_z_entry = FCDoubleSpinner()
  160. self.feedrate_z_entry.set_range(0, 99999.9999)
  161. self.feedrate_z_entry.set_precision(self.decimals)
  162. self.feedrate_z_entry.setSingleStep(0.1)
  163. self.feedrate_z_entry.setWrapping(True)
  164. grid1.addWidget(frz_label, 9, 0)
  165. grid1.addWidget(self.feedrate_z_entry, 9, 1)
  166. # Spindle Speed
  167. spdlabel = QtWidgets.QLabel('%s:' % _('Spindle speed'))
  168. spdlabel.setToolTip(
  169. _(
  170. "Speed of the spindle in RPM (optional).\n"
  171. "If LASER preprocessor is used,\n"
  172. "this value is the power of laser."
  173. )
  174. )
  175. self.cncspindlespeed_entry = FCSpinner()
  176. self.cncspindlespeed_entry.set_range(0, 1000000)
  177. self.cncspindlespeed_entry.set_step(100)
  178. grid1.addWidget(spdlabel, 10, 0)
  179. grid1.addWidget(self.cncspindlespeed_entry, 10, 1)
  180. # Dwell
  181. self.dwell_cb = FCCheckBox(label='%s' % _('Enable Dwell'))
  182. self.dwell_cb.setToolTip(
  183. _("Pause to allow the spindle to reach its\n"
  184. "speed before cutting.")
  185. )
  186. dwelltime = QtWidgets.QLabel('%s:' % _('Duration'))
  187. dwelltime.setToolTip(
  188. _("Number of time units for spindle to dwell.")
  189. )
  190. self.dwelltime_entry = FCDoubleSpinner()
  191. self.dwelltime_entry.set_range(0, 99999)
  192. self.dwelltime_entry.set_precision(self.decimals)
  193. self.dwelltime_entry.setSingleStep(0.1)
  194. self.dwelltime_entry.setWrapping(True)
  195. grid1.addWidget(self.dwell_cb, 11, 0)
  196. grid1.addWidget(dwelltime, 12, 0)
  197. grid1.addWidget(self.dwelltime_entry, 12, 1)
  198. self.ois_dwell = OptionalInputSection(self.dwell_cb, [self.dwelltime_entry])
  199. # preprocessor selection
  200. pp_label = QtWidgets.QLabel('%s:' % _("Preprocessor"))
  201. pp_label.setToolTip(
  202. _("The Preprocessor file that dictates\n"
  203. "the Machine Code (like GCode, RML, HPGL) output.")
  204. )
  205. self.pp_geometry_name_cb = FCComboBox()
  206. self.pp_geometry_name_cb.setFocusPolicy(Qt.StrongFocus)
  207. grid1.addWidget(pp_label, 13, 0)
  208. grid1.addWidget(self.pp_geometry_name_cb, 13, 1)
  209. self.layout.addStretch()