- made the 'M2' Gcode command footer optional, default is False (can be set using the TclCommand: set_sys cncjob_footer True)
- added a setting in Preferences to force the GCode output to have the Windows line-endings even for non-Windows OS's
This commit is contained in:
parent
26d2831ded
commit
892c9130f2
|
@ -651,6 +651,8 @@ class App(QtCore.QObject):
|
||||||
"cncjob_coords_decimals": 4,
|
"cncjob_coords_decimals": 4,
|
||||||
"cncjob_fr_decimals": 2,
|
"cncjob_fr_decimals": 2,
|
||||||
"cncjob_steps_per_circle": 128,
|
"cncjob_steps_per_circle": 128,
|
||||||
|
"cncjob_footer": False,
|
||||||
|
"cncjob_line_ending": False,
|
||||||
|
|
||||||
# CNC Job Options
|
# CNC Job Options
|
||||||
"cncjob_prepend": "",
|
"cncjob_prepend": "",
|
||||||
|
@ -1188,6 +1190,7 @@ class App(QtCore.QObject):
|
||||||
"cncjob_coords_decimals": self.ui.cncjob_defaults_form.cncjob_gen_group.coords_dec_entry,
|
"cncjob_coords_decimals": self.ui.cncjob_defaults_form.cncjob_gen_group.coords_dec_entry,
|
||||||
"cncjob_fr_decimals": self.ui.cncjob_defaults_form.cncjob_gen_group.fr_dec_entry,
|
"cncjob_fr_decimals": self.ui.cncjob_defaults_form.cncjob_gen_group.fr_dec_entry,
|
||||||
"cncjob_steps_per_circle": self.ui.cncjob_defaults_form.cncjob_gen_group.steps_per_circle_entry,
|
"cncjob_steps_per_circle": self.ui.cncjob_defaults_form.cncjob_gen_group.steps_per_circle_entry,
|
||||||
|
"cncjob_line_ending": self.ui.cncjob_defaults_form.cncjob_gen_group.line_ending_cb,
|
||||||
|
|
||||||
# CNC Job Options
|
# CNC Job Options
|
||||||
"cncjob_prepend": self.ui.cncjob_defaults_form.cncjob_opt_group.prepend_text,
|
"cncjob_prepend": self.ui.cncjob_defaults_form.cncjob_opt_group.prepend_text,
|
||||||
|
|
|
@ -6071,13 +6071,24 @@ class FlatCAMCNCjob(FlatCAMObj, CNCjob):
|
||||||
self.app.inform.emit('[success] %s...' %
|
self.app.inform.emit('[success] %s...' %
|
||||||
_('Loaded Machine Code into Code Editor'))
|
_('Loaded Machine Code into Code Editor'))
|
||||||
|
|
||||||
def gcode_header(self):
|
def gcode_header(self, comment_start_symbol=None, comment_stop_symbol=None):
|
||||||
|
"""
|
||||||
|
Will create a header to be added to all GCode files generated by FlatCAM
|
||||||
|
|
||||||
|
:param comment_start_symbol: a symbol to be used as the first symbol in a comment
|
||||||
|
:param comment_stop_symbol: a symbol to be used as the last symbol in a comment
|
||||||
|
:return: a string with a GCode header
|
||||||
|
"""
|
||||||
|
|
||||||
log.debug("FlatCAMCNCJob.gcode_header()")
|
log.debug("FlatCAMCNCJob.gcode_header()")
|
||||||
time_str = "{:%A, %d %B %Y at %H:%M}".format(datetime.now())
|
time_str = "{:%A, %d %B %Y at %H:%M}".format(datetime.now())
|
||||||
marlin = False
|
marlin = False
|
||||||
hpgl = False
|
hpgl = False
|
||||||
probe_pp = False
|
probe_pp = False
|
||||||
|
|
||||||
|
start_comment = comment_start_symbol if comment_start_symbol is not None else '('
|
||||||
|
stop_comment = comment_stop_symbol if comment_stop_symbol is not None else ')'
|
||||||
|
|
||||||
try:
|
try:
|
||||||
for key in self.cnc_tools:
|
for key in self.cnc_tools:
|
||||||
ppg = self.cnc_tools[key]['data']['ppname_g']
|
ppg = self.cnc_tools[key]['data']['ppname_g']
|
||||||
|
@ -6151,17 +6162,17 @@ class FlatCAMCNCjob(FlatCAMObj, CNCjob):
|
||||||
gcode += '(Units: ' + self.units.upper() + ')\n' + "\n"
|
gcode += '(Units: ' + self.units.upper() + ')\n' + "\n"
|
||||||
gcode += '(Created on ' + time_str + ')\n' + '\n'
|
gcode += '(Created on ' + time_str + ')\n' + '\n'
|
||||||
else:
|
else:
|
||||||
gcode = '(G-CODE GENERATED BY FLATCAM v%s - www.flatcam.org - Version Date: %s)\n' % \
|
gcode = '%sG-CODE GENERATED BY FLATCAM v%s - www.flatcam.org - Version Date: %s%s\n' % \
|
||||||
(str(self.app.version), str(self.app.version_date)) + '\n'
|
(start_comment, str(self.app.version), str(self.app.version_date), stop_comment) + '\n'
|
||||||
|
|
||||||
gcode += '(Name: ' + str(self.options['name']) + ')\n'
|
gcode += '%sName: ' % start_comment + str(self.options['name']) + '%s\n' % stop_comment
|
||||||
gcode += '(Type: ' + "G-code from " + str(self.options['type']) + ')\n'
|
gcode += '%sType: ' % start_comment + "G-code from " + str(self.options['type']) + '%s\n' % stop_comment
|
||||||
|
|
||||||
# if str(p['options']['type']) == 'Excellon' or str(p['options']['type']) == 'Excellon Geometry':
|
# if str(p['options']['type']) == 'Excellon' or str(p['options']['type']) == 'Excellon Geometry':
|
||||||
# gcode += '(Tools in use: ' + str(p['options']['Tools_in_use']) + ')\n'
|
# gcode += '(Tools in use: ' + str(p['options']['Tools_in_use']) + ')\n'
|
||||||
|
|
||||||
gcode += '(Units: ' + self.units.upper() + ')\n' + "\n"
|
gcode += '%sUnits: ' % start_comment + self.units.upper() + '%s\n' % stop_comment + "\n"
|
||||||
gcode += '(Created on ' + time_str + ')\n' + '\n'
|
gcode += '%sCreated on ' % start_comment + time_str + '%s\n' % stop_comment + '\n'
|
||||||
|
|
||||||
return gcode
|
return gcode
|
||||||
|
|
||||||
|
@ -6177,6 +6188,15 @@ class FlatCAMCNCjob(FlatCAMObj, CNCjob):
|
||||||
return 'M02'
|
return 'M02'
|
||||||
|
|
||||||
def export_gcode(self, filename=None, preamble='', postamble='', to_file=False):
|
def export_gcode(self, filename=None, preamble='', postamble='', to_file=False):
|
||||||
|
"""
|
||||||
|
This will save the GCode from the Gcode object to a file on the OS filesystem
|
||||||
|
|
||||||
|
:param filename: filename for the GCode file
|
||||||
|
:param preamble: a custom Gcode block to be added at the beginning of the Gcode file
|
||||||
|
:param postamble: a custom Gcode block to be added at the end of the Gcode file
|
||||||
|
:param to_file: if False then no actual file is saved but the app will know that a file was created
|
||||||
|
:return: None
|
||||||
|
"""
|
||||||
gcode = ''
|
gcode = ''
|
||||||
roland = False
|
roland = False
|
||||||
hpgl = False
|
hpgl = False
|
||||||
|
@ -6241,7 +6261,9 @@ class FlatCAMCNCjob(FlatCAMObj, CNCjob):
|
||||||
_("G-code does not have a units code: either G20 or G21"))
|
_("G-code does not have a units code: either G20 or G21"))
|
||||||
return
|
return
|
||||||
|
|
||||||
g = gcode[:g_idx] + preamble + '\n' + gcode[g_idx:] + postamble + self.gcode_footer()
|
footer = self.app.defaults['cncjob_footer']
|
||||||
|
end_gcode = self.gcode_footer() if footer is True else ''
|
||||||
|
g = gcode[:g_idx] + preamble + '\n' + gcode[g_idx:] + postamble + end_gcode
|
||||||
|
|
||||||
# if toolchange custom is used, replace M6 code with the code from the Toolchange Custom Text box
|
# if toolchange custom is used, replace M6 code with the code from the Toolchange Custom Text box
|
||||||
if self.ui.toolchange_cb.get_value() is True:
|
if self.ui.toolchange_cb.get_value() is True:
|
||||||
|
@ -6258,15 +6280,20 @@ class FlatCAMCNCjob(FlatCAMObj, CNCjob):
|
||||||
self.app.inform.emit('[success] %s' %
|
self.app.inform.emit('[success] %s' %
|
||||||
_("Toolchange G-code was replaced by a custom code."))
|
_("Toolchange G-code was replaced by a custom code."))
|
||||||
|
|
||||||
# lines = StringIO(self.gcode)
|
|
||||||
lines = StringIO(g)
|
lines = StringIO(g)
|
||||||
|
|
||||||
# Write
|
# Write
|
||||||
if filename is not None:
|
if filename is not None:
|
||||||
try:
|
try:
|
||||||
with open(filename, 'w') as f:
|
force_windows_line_endings = self.app.defaults['cncjob_line_ending']
|
||||||
for line in lines:
|
if force_windows_line_endings and sys.platform != 'win32':
|
||||||
f.write(line)
|
with open(filename, 'w', newline='\r\n') as f:
|
||||||
|
for line in lines:
|
||||||
|
f.write(line)
|
||||||
|
else:
|
||||||
|
with open(filename, 'w') as f:
|
||||||
|
for line in lines:
|
||||||
|
f.write(line)
|
||||||
except FileNotFoundError:
|
except FileNotFoundError:
|
||||||
self.app.inform.emit('[WARNING_NOTCL] %s' %
|
self.app.inform.emit('[WARNING_NOTCL] %s' %
|
||||||
_("No such file or directory"))
|
_("No such file or directory"))
|
||||||
|
|
|
@ -12,6 +12,8 @@ CAD program, and create G-Code for Isolation routing.
|
||||||
7.11.2019
|
7.11.2019
|
||||||
|
|
||||||
- added the '.ngc' fiel extension to the GCode Save file dialog filter
|
- added the '.ngc' fiel extension to the GCode Save file dialog filter
|
||||||
|
- made the 'M2' Gcode command footer optional, default is False (can be set using the TclCommand: set_sys cncjob_footer True)
|
||||||
|
- added a setting in Preferences to force the GCode output to have the Windows line-endings even for non-Windows OS's
|
||||||
|
|
||||||
6.11.2019
|
6.11.2019
|
||||||
|
|
||||||
|
|
|
@ -3458,18 +3458,15 @@ class CNCJobGenPrefGroupUI(OptionsGroupUI):
|
||||||
grid0.addWidget(QtWidgets.QLabel(''), 1, 2)
|
grid0.addWidget(QtWidgets.QLabel(''), 1, 2)
|
||||||
|
|
||||||
# Display Annotation
|
# Display Annotation
|
||||||
self.annotation_label = QtWidgets.QLabel('%s:' % _("Display Annotation"))
|
self.annotation_cb = FCCheckBox(_("Display Annotation"))
|
||||||
self.annotation_label.setToolTip(
|
self.annotation_cb.setToolTip(
|
||||||
_("This selects if to display text annotation on the plot.\n"
|
_("This selects if to display text annotation on the plot.\n"
|
||||||
"When checked it will display numbers in order for each end\n"
|
"When checked it will display numbers in order for each end\n"
|
||||||
"of a travel line."
|
"of a travel line."
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
self.annotation_cb = FCCheckBox()
|
|
||||||
|
|
||||||
grid0.addWidget(self.annotation_label, 2, 0)
|
grid0.addWidget(self.annotation_cb, 2, 0, 1, 3)
|
||||||
grid0.addWidget(self.annotation_cb, 2, 1)
|
|
||||||
grid0.addWidget(QtWidgets.QLabel(''), 2, 2)
|
|
||||||
|
|
||||||
# ###################################################################
|
# ###################################################################
|
||||||
# Number of circle steps for circular aperture linear approximation #
|
# Number of circle steps for circular aperture linear approximation #
|
||||||
|
@ -3547,6 +3544,15 @@ class CNCJobGenPrefGroupUI(OptionsGroupUI):
|
||||||
coords_type_label.hide()
|
coords_type_label.hide()
|
||||||
self.coords_type_radio.hide()
|
self.coords_type_radio.hide()
|
||||||
|
|
||||||
|
# Line Endings
|
||||||
|
self.line_ending_cb = FCCheckBox(_("Force Windows style line-ending"))
|
||||||
|
self.line_ending_cb.setToolTip(
|
||||||
|
_("When checked will force a Windows style line-ending\n"
|
||||||
|
"(\\r\\n) on non-Windows OS's.")
|
||||||
|
)
|
||||||
|
|
||||||
|
grid0.addWidget(self.line_ending_cb, 9, 0, 1, 3)
|
||||||
|
|
||||||
self.layout.addStretch()
|
self.layout.addStretch()
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue