Commit 818b3ea2 authored by sumpfralle's avatar sumpfralle

added support for "touch off" and length compensated tool change

added configurable delay after start/stop spindle


git-svn-id: https://pycam.svn.sourceforge.net/svnroot/pycam/trunk@1002 bbaffbd6-741e-11dd-a85d-61de82d9cad9
parent c74f3163
Version 0.4.1 - UNRELEASED Version 0.5 - UNRELEASED
* added support for EPS/PS contour files * added support for EPS/PS contour files
* added adaptive positioning for DropCutter strategy (improves precision) * added adaptive positioning for DropCutter strategy (improves precision)
* allow conventional/climb milling style for ContourFollow and Engrave strategies * allow conventional/climb milling style for ContourFollow and Engrave strategies
...@@ -13,6 +13,8 @@ Version 0.4.1 - UNRELEASED ...@@ -13,6 +13,8 @@ Version 0.4.1 - UNRELEASED
* added support for DXF features "LWPOLYLINE" and "ARC" * added support for DXF features "LWPOLYLINE" and "ARC"
* added a configuration setting for automatically loading a custom task settings file on startup * added a configuration setting for automatically loading a custom task settings file on startup
* added a simple "undo" feature for reversing model manipulations * added a simple "undo" feature for reversing model manipulations
* GCode features:
* added basic support for "touch off" and length compensated tool change
* added a minimum step width for GCode positions to be written * added a minimum step width for GCode positions to be written
* GCode positioning precision (number of digits) is configurable * GCode positioning precision (number of digits) is configurable
* enabled drag'n'drop for loading models * enabled drag'n'drop for loading models
......
...@@ -5226,6 +5226,19 @@ Choose a small value to minimize rapid moves up and down.</property> ...@@ -5226,6 +5226,19 @@ Choose a small value to minimize rapid moves up and down.</property>
<property name="position">0</property> <property name="position">0</property>
</packing> </packing>
</child> </child>
<child>
<object class="GtkExpander" id="expander3">
<property name="visible">True</property>
<property name="can_focus">True</property>
<child>
<object class="GtkAlignment" id="alignment10">
<property name="visible">True</property>
<property name="left_padding">25</property>
<child>
<object class="GtkTable" id="table17">
<property name="visible">True</property>
<property name="n_rows">2</property>
<property name="n_columns">2</property>
<child> <child>
<object class="GtkCheckButton" id="GCodeStartStopSpindle"> <object class="GtkCheckButton" id="GCodeStartStopSpindle">
<property name="label" translatable="yes">Start / Stop Spindle (M3/M5)</property> <property name="label" translatable="yes">Start / Stop Spindle (M3/M5)</property>
...@@ -5234,9 +5247,52 @@ Choose a small value to minimize rapid moves up and down.</property> ...@@ -5234,9 +5247,52 @@ Choose a small value to minimize rapid moves up and down.</property>
<property name="receives_default">False</property> <property name="receives_default">False</property>
<property name="draw_indicator">True</property> <property name="draw_indicator">True</property>
</object> </object>
<packing>
<property name="right_attach">2</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="GCodeSpindleDelayLabel">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">Delay (in seconds) after start / stop:</property>
</object>
<packing>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
</packing>
</child>
<child>
<object class="GtkSpinButton" id="GCodeSpindleDelay">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="invisible_char">&#x25CF;</property>
<property name="adjustment">GCodeSpindleDelayValue</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
</object>
</child>
</object>
</child>
<child type="label">
<object class="GtkLabel" id="label7">
<property name="visible">True</property>
<property name="label" translatable="yes">Spindle control</property>
</object>
</child>
</object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
<property name="fill">False</property>
<property name="position">1</property> <property name="position">1</property>
</packing> </packing>
</child> </child>
...@@ -5611,7 +5667,7 @@ Choose a small value to minimize rapid moves up and down.</property> ...@@ -5611,7 +5667,7 @@ Choose a small value to minimize rapid moves up and down.</property>
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkSpinButton" id="spinbutton1"> <object class="GtkSpinButton" id="ToolChangeRapidMoveDown">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="invisible_char">&#x25CF;</property> <property name="invisible_char">&#x25CF;</property>
...@@ -5628,7 +5684,7 @@ Choose a small value to minimize rapid moves up and down.</property> ...@@ -5628,7 +5684,7 @@ Choose a small value to minimize rapid moves up and down.</property>
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkSpinButton" id="spinbutton2"> <object class="GtkSpinButton" id="ToolChangeSlowMoveDown">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="invisible_char">&#x25CF;</property> <property name="invisible_char">&#x25CF;</property>
...@@ -5657,7 +5713,7 @@ Choose a small value to minimize rapid moves up and down.</property> ...@@ -5657,7 +5713,7 @@ Choose a small value to minimize rapid moves up and down.</property>
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkSpinButton" id="spinbutton3"> <object class="GtkSpinButton" id="ToolChangeSlowMoveSpeed">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="invisible_char">&#x25CF;</property> <property name="invisible_char">&#x25CF;</property>
...@@ -8928,4 +8984,8 @@ upon interesting bugs and weird results.</property> ...@@ -8928,4 +8984,8 @@ upon interesting bugs and weird results.</property>
<property name="upper">10000</property> <property name="upper">10000</property>
<property name="step_increment">1</property> <property name="step_increment">1</property>
</object> </object>
<object class="GtkAdjustment" id="GCodeSpindleDelayValue">
<property name="upper">100</property>
<property name="step_increment">1</property>
</object>
</interface> </interface>
...@@ -26,10 +26,10 @@ import os ...@@ -26,10 +26,10 @@ import os
DEFAULT_HEADER = ("G40 (disable tool radius compensation)", DEFAULT_HEADER = ("G40 (disable tool radius compensation)",
"G49 (disable_tool_length_compensation)", "G49 (disable tool length compensation)",
"G80 (cancel_modal_motion)", "G80 (cancel modal motion)",
"G54 (select_coordinate_system_1)", "G54 (select coordinate system 1)",
"G90 (use_absolute_coordinates)") "G90 (disable incremental moves)")
PATH_MODES = {"exact_path": 0, "exact_stop": 1, "continuous": 2} PATH_MODES = {"exact_path": 0, "exact_stop": 1, "continuous": 2}
MAX_DIGITS = 12 MAX_DIGITS = 12
...@@ -69,8 +69,11 @@ class GCodeGenerator: ...@@ -69,8 +69,11 @@ class GCodeGenerator:
NUM_OF_AXES = 3 NUM_OF_AXES = 3
def __init__(self, destination, metric_units=True, safety_height=0.0, def __init__(self, destination, metric_units=True, safety_height=0.0,
toggle_spindle_status=False, header=None, comment=None, toggle_spindle_status=False, spindle_delay=3, header=None,
minimum_steps=None): comment=None, minimum_steps=None, touch_off_on_startup=False,
touch_off_on_tool_change=False, touch_off_position=None,
touch_off_rapid_move=0, touch_off_slow_move=1,
touch_off_slow_feedrate=20, touch_off_height=0):
if isinstance(destination, basestring): if isinstance(destination, basestring):
# open the file # open the file
self.destination = file(destination,"w") self.destination = file(destination,"w")
...@@ -83,6 +86,7 @@ class GCodeGenerator: ...@@ -83,6 +86,7 @@ class GCodeGenerator:
self._close_stream_on_exit = False self._close_stream_on_exit = False
self.safety_height = safety_height self.safety_height = safety_height
self.toggle_spindle_status = toggle_spindle_status self.toggle_spindle_status = toggle_spindle_status
self.spindle_delay = spindle_delay
self.comment = comment self.comment = comment
# define all axes steps and the corresponding formatters # define all axes steps and the corresponding formatters
self._axes_formatter = [] self._axes_formatter = []
...@@ -109,10 +113,61 @@ class GCodeGenerator: ...@@ -109,10 +113,61 @@ class GCodeGenerator:
self.append("G20 (imperial)") self.append("G20 (imperial)")
self.last_position = [None, None, None] self.last_position = [None, None, None]
self.last_rapid = None self.last_rapid = None
self.last_tool_id = None
self.last_feedrate = 100
if touch_off_on_startup or touch_off_on_tool_change:
self.store_touch_off_position(touch_off_position)
self.touch_off_on_tool_change = touch_off_on_tool_change
self.touch_off_rapid_move = touch_off_rapid_move
self.touch_off_slow_move = touch_off_slow_move
self.touch_off_slow_feedrate = touch_off_slow_feedrate
if touch_off_on_startup:
self.run_touch_off(force_height=touch_off_height)
def run_touch_off(self, new_tool_id=None, force_height=None):
# either "new_tool_id" or "force_height" should be specified
self.append("")
self.append("(Start of touch off operation)")
self.append("G90 (disable incremental moves)")
self.append("G49 (disable tool offset compensation)")
self.append("G53 G0 Z#5163 (go to touch off position: z)")
self.append("G28 (go to final touch off position)")
self.append("G91 (enter incremental mode)")
self.append("F%f (reduce feed rate during touch off)" % self.touch_off_slow_feedrate)
# measure the current tool length
if self.touch_off_rapid_move > 0:
self.append("G0 Z-%f (go down rapidly)" % self.touch_off_rapid_move)
self.append("G38.2 Z-%f (do the touch off)" % self.touch_off_slow_move)
if not force_height is None:
self.append("G92 Z%f" % force_height)
self.append("G28 (go up again)")
if not new_tool_id is None:
# compensate the length of the new tool
self.append("#1000=#5063 (store current tool length compensation)")
self.append("T%d M6" % new_tool_id)
if self.touch_off_rapid_move > 0:
self.append("G0 Z-%f (go down rapidly)" % self.touch_off_rapid_move)
self.append("G38.2 Z-%f (do the touch off)" % self.touch_off_slow_move)
self.append("G28 (go up again)")
# compensate the tool length difference
self.append("G43.1 Z[#5063-#1000] (compensate the new tool length)")
self.append("F%f (restore feed rate)" % self.last_feedrate)
self.append("G90 (disable incremental mode)")
self.append("(End of touch off operation)")
self.append("")
def store_touch_off_position(self, position):
if position is None:
self.append("G28.1 (store current position for touch off)")
else:
self.append("#5161=%f (touch off position: x)" % position.x)
self.append("#5162=%f (touch off position: y)" % position.y)
self.append("#5163=%f (touch off position: z)" % position.z)
def set_speed(self, feedrate=None, spindle_speed=None): def set_speed(self, feedrate=None, spindle_speed=None):
if not feedrate is None: if not feedrate is None:
self.append("F%.5f" % feedrate) self.append("F%.5f" % feedrate)
self.last_feedrate = feedrate
if not spindle_speed is None: if not spindle_speed is None:
self.append("S%.5f" % spindle_speed) self.append("S%.5f" % spindle_speed)
...@@ -140,29 +195,43 @@ class GCodeGenerator: ...@@ -140,29 +195,43 @@ class GCodeGenerator:
def add_moves(self, moves, tool_id=None, comment=None): def add_moves(self, moves, tool_id=None, comment=None):
if not comment is None: if not comment is None:
self.add_comment(comment) self.add_comment(comment)
# move straight up to safety height
self.add_move_to_safety()
if not tool_id is None: if not tool_id is None:
if self.last_tool_id == tool_id:
# nothing to be done
pass
elif self.touch_off_on_tool_change and \
not (self.last_tool_id is None):
self.run_touch_off(new_tool_id=tool_id)
else:
self.append("T%d M6" % tool_id) self.append("T%d M6" % tool_id)
if self.toggle_spindle_status: self.last_tool_id = tool_id
self.append("M3 (start spindle)") # move straight up to safety height
self.append("G04 P%d (wait for %d seconds)" % (2, 2)) self.add_move_to_safety()
self.set_spindle_status(True)
for pos, rapid in moves: for pos, rapid in moves:
self.add_move(pos, rapid=rapid) self.add_move(pos, rapid=rapid)
# go back to safety height # go back to safety height
self.add_move_to_safety() self.add_move_to_safety()
if self.toggle_spindle_status: self.set_spindle_status(False)
self.append("M5 (stop spindle)")
# make sure that all sections are independent of each other # make sure that all sections are independent of each other
self.last_position = [None, None, None] self.last_position = [None, None, None]
self.last_rapid = None self.last_rapid = None
def set_spindle_status(self, status):
if self.toggle_spindle_status:
if status:
self.append("M3 (start spindle)")
else:
self.append("M5 (stop spindle)")
self.append("G04 P%d (wait for %d seconds)" % (self.spindle_delay,
self.spindle_delay))
def add_move_to_safety(self): def add_move_to_safety(self):
new_pos = [None, None, self.safety_height] new_pos = [None, None, self.safety_height]
self.add_move(new_pos, rapid=True) self.add_move(new_pos, rapid=True)
def add_move(self, position, rapid=False): def add_move(self, position, rapid=False):
""" add the GCode for a machine move to 'position'. Use rapid (G00) or """ add the GCode for a machine move to 'position'. Use rapid (G0) or
normal (G01) speed. normal (G01) speed.
@value position: the new position @value position: the new position
...@@ -208,9 +277,9 @@ class GCodeGenerator: ...@@ -208,9 +277,9 @@ class GCodeGenerator:
if rapid == self.last_rapid: if rapid == self.last_rapid:
prefix = "" prefix = ""
elif rapid: elif rapid:
prefix = "G00" prefix = "G0"
else: else:
prefix = "G01" prefix = "G1"
self.last_rapid = rapid self.last_rapid = rapid
self.append("%s %s" % (prefix, " ".join(pos_string))) self.append("%s %s" % (prefix, " ".join(pos_string)))
......
...@@ -136,12 +136,23 @@ PREFERENCES_DEFAULTS = { ...@@ -136,12 +136,23 @@ PREFERENCES_DEFAULTS = {
"gcode_naive_tolerance": 0, "gcode_naive_tolerance": 0,
"gcode_start_stop_spindle": True, "gcode_start_stop_spindle": True,
"gcode_filename_extension": "", "gcode_filename_extension": "",
"gcode_spindle_delay": 3,
"external_program_inkscape": "", "external_program_inkscape": "",
"external_program_pstoedit": "", "external_program_pstoedit": "",
"server_auth_key": "", "server_auth_key": "",
"server_port_local": pycam.Utils.threading.DEFAULT_PORT, "server_port_local": pycam.Utils.threading.DEFAULT_PORT,
"server_port_remote": pycam.Utils.threading.DEFAULT_PORT, "server_port_remote": pycam.Utils.threading.DEFAULT_PORT,
"server_hostname": "", "server_hostname": "",
"touch_off_on_startup": False,
"touch_off_on_tool_change": False,
"touch_off_position_type": "absolute",
"touch_off_position_x": 0.0,
"touch_off_position_y": 0.0,
"touch_off_position_z": 0.0,
"touch_off_rapid_move": 0.0,
"touch_off_slow_move": 1.0,
"touch_off_slow_feedrate": 20,
"touch_off_height": 0.0,
} }
""" the listed items will be loaded/saved via the preferences file in the """ the listed items will be loaded/saved via the preferences file in the
user's home directory on startup/shutdown""" user's home directory on startup/shutdown"""
...@@ -920,29 +931,69 @@ class ProjectGui: ...@@ -920,29 +931,69 @@ class ProjectGui:
gcode_safety_height = self.gui.get_object("SafetyHeightControl") gcode_safety_height = self.gui.get_object("SafetyHeightControl")
self.settings.add_item("gcode_safety_height", self.settings.add_item("gcode_safety_height",
gcode_safety_height.get_value, gcode_safety_height.set_value) gcode_safety_height.get_value, gcode_safety_height.set_value)
for event, objname in (("toggled", "GCodeTouchOffOnStartup"), gcode_spindle_delay = self.gui.get_object("GCodeSpindleDelay")
("toggled", "GCodeTouchOffOnToolChange"), self.settings.add_item("gcode_spindle_delay",
("changed", "TouchOffLocationSelector")): gcode_spindle_delay.get_value, gcode_spindle_delay.set_value)
self.gui.get_object(objname).connect(event, for objname, setting in (
self.update_gcode_tool_change_controls) ("GCodeTouchOffOnStartup", "touch_off_on_startup"),
("GCodeTouchOffOnToolChange", "touch_off_on_tool_change")):
obj = self.gui.get_object(objname)
obj.connect("toggled", self.update_gcode_controls)
self.settings.add_item(setting, obj.get_active, obj.set_active)
touch_off_pos_selector = self.gui.get_object("TouchOffLocationSelector")
def get_touch_off_position_type():
index = touch_off_pos_selector.get_active()
if index < 0:
return PREFERENCES_DEFAULTS["touch_off_position_type"]
else:
return touch_off_pos_selector.get_model()[index][0]
def set_touch_off_position_type(new_key):
model = touch_off_pos_selector.get_model()
for index, (key, value) in enumerate(model):
if key == new_key:
touch_off_pos_selector.set_active(index)
break
else:
touch_off_pos_selector.set_active(-1)
touch_off_pos_selector.connect("changed", self.update_gcode_controls)
self.settings.add_item("touch_off_position_type",
get_touch_off_position_type, set_touch_off_position_type)
for axis in "XYZ":
obj = self.gui.get_object("ToolChangePos%s" % axis.upper())
self.settings.add_item("touch_off_position_%s" % axis.lower(),
obj.get_value, obj.set_value)
for objname, setting in (
("ToolChangeRapidMoveDown", "touch_off_rapid_move"),
("ToolChangeSlowMoveDown", "touch_off_slow_move"),
("ToolChangeSlowMoveSpeed", "touch_off_slow_feedrate"),
("TouchOffHeight", "touch_off_height")):
obj = self.gui.get_object(objname)
self.settings.add_item(setting, obj.get_value, obj.set_value)
# redraw the toolpath if safety height changed # redraw the toolpath if safety height changed
gcode_safety_height.connect("value-changed", self.update_view) gcode_safety_height.connect("value-changed", self.update_view)
gcode_path_mode = self.gui.get_object("GCodeCornerStyleControl") gcode_path_mode = self.gui.get_object("GCodeCornerStyleControl")
self.settings.add_item("gcode_path_mode", gcode_path_mode.get_active, self.settings.add_item("gcode_path_mode", gcode_path_mode.get_active,
gcode_path_mode.set_active) gcode_path_mode.set_active)
gcode_path_mode.connect("changed", self.update_gcode_controls) gcode_path_mode.connect("changed", self.update_gcode_controls)
gcode_motion_tolerance = self.gui.get_object("GCodeCornerStyleMotionTolerance") gcode_motion_tolerance = self.gui.get_object(
"GCodeCornerStyleMotionTolerance")
self.settings.add_item("gcode_motion_tolerance", self.settings.add_item("gcode_motion_tolerance",
gcode_motion_tolerance.get_value, gcode_motion_tolerance.set_value) gcode_motion_tolerance.get_value,
gcode_naive_tolerance = self.gui.get_object("GCodeCornerStyleCAMTolerance") gcode_motion_tolerance.set_value)
gcode_naive_tolerance = self.gui.get_object(
"GCodeCornerStyleCAMTolerance")
self.settings.add_item("gcode_naive_tolerance", self.settings.add_item("gcode_naive_tolerance",
gcode_naive_tolerance.get_value, gcode_naive_tolerance.set_value) gcode_naive_tolerance.get_value,
gcode_naive_tolerance.set_value)
gcode_start_stop_spindle = self.gui.get_object("GCodeStartStopSpindle") gcode_start_stop_spindle = self.gui.get_object("GCodeStartStopSpindle")
self.settings.add_item("gcode_start_stop_spindle", self.settings.add_item("gcode_start_stop_spindle",
gcode_start_stop_spindle.get_active, gcode_start_stop_spindle.set_active) gcode_start_stop_spindle.get_active,
gcode_start_stop_spindle.set_active)
gcode_start_stop_spindle.connect("toggled", self.update_gcode_controls)
gcode_filename_extension = self.gui.get_object("GCodeFilenameExtension") gcode_filename_extension = self.gui.get_object("GCodeFilenameExtension")
self.settings.add_item("gcode_filename_extension", self.settings.add_item("gcode_filename_extension",
gcode_filename_extension.get_text, gcode_filename_extension.set_text) gcode_filename_extension.get_text,
gcode_filename_extension.set_text)
# configure locations of external programs # configure locations of external programs
for auto_control_name, location_control_name, browse_button, key in ( for auto_control_name, location_control_name, browse_button, key in (
("ExternalProgramInkscapeAuto", ("ExternalProgramInkscapeAuto",
...@@ -1094,9 +1145,16 @@ class ProjectGui: ...@@ -1094,9 +1145,16 @@ class ProjectGui:
self.update_ode_settings() self.update_ode_settings()
self.update_parallel_processes_settings() self.update_parallel_processes_settings()
self.update_model_type_related_controls() self.update_model_type_related_controls()
self.update_gcode_tool_change_controls()
def update_gcode_tool_change_controls(self, widget=None): def update_gcode_controls(self, widget=None):
# path mode
path_mode = self.settings.get("gcode_path_mode")
self.gui.get_object("GCodeToleranceTable").set_sensitive(path_mode == 3)
# spindle delay
sensitive = self.settings.get("gcode_start_stop_spindle")
self.gui.get_object("GCodeSpindleDelayLabel").set_sensitive(sensitive)
self.gui.get_object("GCodeSpindleDelay").set_sensitive(sensitive)
# tool change controls
pos_control = self.gui.get_object("TouchOffLocationSelector") pos_control = self.gui.get_object("TouchOffLocationSelector")
tool_change_pos_model = pos_control.get_model() tool_change_pos_model = pos_control.get_model()
active_pos_index = pos_control.get_active() active_pos_index = pos_control.get_active()
...@@ -1134,10 +1192,6 @@ class ProjectGui: ...@@ -1134,10 +1192,6 @@ class ProjectGui:
and hasattr(self.model, "get_waterline_contour") and hasattr(self.model, "get_waterline_contour")
self.gui.get_object("Projection2D").set_sensitive(is_projectable) self.gui.get_object("Projection2D").set_sensitive(is_projectable)
def update_gcode_controls(self, widget=None):
path_mode = self.settings.get("gcode_path_mode")
self.gui.get_object("GCodeToleranceTable").set_sensitive(path_mode == 3)
def update_ode_settings(self, widget=None): def update_ode_settings(self, widget=None):
if pycam.Utils.threading.is_multiprocessing_enabled() \ if pycam.Utils.threading.is_multiprocessing_enabled() \
or not pycam.Physics.ode_physics.is_ode_available(): or not pycam.Physics.ode_physics.is_ode_available():
...@@ -4013,12 +4067,29 @@ class ProjectGui: ...@@ -4013,12 +4067,29 @@ class ProjectGui:
minimum_steps = [self.settings.get("gcode_minimum_step_x"), minimum_steps = [self.settings.get("gcode_minimum_step_x"),
self.settings.get("gcode_minimum_step_y"), self.settings.get("gcode_minimum_step_y"),
self.settings.get("gcode_minimum_step_z")] self.settings.get("gcode_minimum_step_z")]
getobj = self.gui.get_object
touch_off_pos_selector = getobj("TouchOffLocationSelector")
touch_off_type = touch_off_pos_selector.get_model()[touch_off_pos_selector.get_active()][0]
if touch_off_type == "absolute":
pos_x = getobj("ToolChangePosX").get_value()
pos_y = getobj("ToolChangePosY").get_value()
pos_z = getobj("ToolChangePosZ").get_value()
touch_off_pos = Point(pos_x, pos_y, pos_z)
else:
touch_off_pos = None
generator = GCodeGenerator(destination, generator = GCodeGenerator(destination,
metric_units=(self.settings.get("unit") == "mm"), metric_units=(self.settings.get("unit") == "mm"),
safety_height=safety_height, safety_height=safety_height,
toggle_spindle_status=self.settings.get("gcode_start_stop_spindle"), toggle_spindle_status=self.settings.get("gcode_start_stop_spindle"),
comment=all_info, spindle_delay=self.settings.get("gcode_spindle_delay"),
minimum_steps=minimum_steps) comment=all_info, minimum_steps=minimum_steps,
touch_off_on_startup=getobj("GCodeTouchOffOnStartup").get_active(),
touch_off_on_tool_change=getobj("GCodeTouchOffOnToolChange").get_active(),
touch_off_position=touch_off_pos,
touch_off_rapid_move=getobj("ToolChangeRapidMoveDown").get_value(),
touch_off_slow_move=getobj("ToolChangeSlowMoveDown").get_value(),
touch_off_slow_feedrate=getobj("ToolChangeSlowMoveSpeed").get_value(),
touch_off_height=getobj("TouchOffHeight").get_value())
path_mode = self.settings.get("gcode_path_mode") path_mode = self.settings.get("gcode_path_mode")
if path_mode == 0: if path_mode == 0:
generator.set_path_mode(PATH_MODES["exact_path"]) generator.set_path_mode(PATH_MODES["exact_path"])
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment