mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-14 02:07:51 -06:00
Make stretch script work with relative movements
CURA-5480
This commit is contained in:
parent
1f15599b4d
commit
952bc54452
1 changed files with 41 additions and 13 deletions
|
@ -35,25 +35,40 @@ class GCodeStep():
|
||||||
Class to store the current value of each G_Code parameter
|
Class to store the current value of each G_Code parameter
|
||||||
for any G-Code step
|
for any G-Code step
|
||||||
"""
|
"""
|
||||||
def __init__(self, step):
|
def __init__(self, step, in_relative_movement: bool = False):
|
||||||
self.step = step
|
self.step = step
|
||||||
self.step_x = 0
|
self.step_x = 0
|
||||||
self.step_y = 0
|
self.step_y = 0
|
||||||
self.step_z = 0
|
self.step_z = 0
|
||||||
self.step_e = 0
|
self.step_e = 0
|
||||||
self.step_f = 0
|
self.step_f = 0
|
||||||
|
|
||||||
|
self.in_relative_movement = in_relative_movement
|
||||||
|
|
||||||
self.comment = ""
|
self.comment = ""
|
||||||
|
|
||||||
def readStep(self, line):
|
def readStep(self, line):
|
||||||
"""
|
"""
|
||||||
Reads gcode from line into self
|
Reads gcode from line into self
|
||||||
"""
|
"""
|
||||||
self.step_x = _getValue(line, "X", self.step_x)
|
if not self.in_relative_movement:
|
||||||
self.step_y = _getValue(line, "Y", self.step_y)
|
self.step_x = _getValue(line, "X", self.step_x)
|
||||||
self.step_z = _getValue(line, "Z", self.step_z)
|
self.step_y = _getValue(line, "Y", self.step_y)
|
||||||
self.step_e = _getValue(line, "E", self.step_e)
|
self.step_z = _getValue(line, "Z", self.step_z)
|
||||||
self.step_f = _getValue(line, "F", self.step_f)
|
self.step_e = _getValue(line, "E", self.step_e)
|
||||||
return
|
self.step_f = _getValue(line, "F", self.step_f)
|
||||||
|
else:
|
||||||
|
delta_step_x = _getValue(line, "X", 0)
|
||||||
|
delta_step_y = _getValue(line, "Y", 0)
|
||||||
|
delta_step_z = _getValue(line, "Z", 0)
|
||||||
|
delta_step_e = _getValue(line, "E", 0)
|
||||||
|
delta_step_f = _getValue(line, "F", 0)
|
||||||
|
|
||||||
|
self.step_x += delta_step_x
|
||||||
|
self.step_y += delta_step_y
|
||||||
|
self.step_z += delta_step_z
|
||||||
|
self.step_e += delta_step_e
|
||||||
|
self.step_f += delta_step_f
|
||||||
|
|
||||||
def copyPosFrom(self, step):
|
def copyPosFrom(self, step):
|
||||||
"""
|
"""
|
||||||
|
@ -65,7 +80,9 @@ class GCodeStep():
|
||||||
self.step_e = step.step_e
|
self.step_e = step.step_e
|
||||||
self.step_f = step.step_f
|
self.step_f = step.step_f
|
||||||
self.comment = step.comment
|
self.comment = step.comment
|
||||||
return
|
|
||||||
|
def setInRelativeMovement(self, value: bool) -> None:
|
||||||
|
self.in_relative_movement = value
|
||||||
|
|
||||||
|
|
||||||
# Execution part of the stretch plugin
|
# Execution part of the stretch plugin
|
||||||
|
@ -86,6 +103,7 @@ class Stretcher():
|
||||||
# of already deposited material for current layer
|
# of already deposited material for current layer
|
||||||
self.layer_z = 0 # Z position of the extrusion moves of the current layer
|
self.layer_z = 0 # Z position of the extrusion moves of the current layer
|
||||||
self.layergcode = ""
|
self.layergcode = ""
|
||||||
|
self._in_relative_movement = False
|
||||||
|
|
||||||
def execute(self, data):
|
def execute(self, data):
|
||||||
"""
|
"""
|
||||||
|
@ -96,7 +114,8 @@ class Stretcher():
|
||||||
+ " and push wall stretch " + str(self.pw_stretch) + "mm")
|
+ " and push wall stretch " + str(self.pw_stretch) + "mm")
|
||||||
retdata = []
|
retdata = []
|
||||||
layer_steps = []
|
layer_steps = []
|
||||||
current = GCodeStep(0)
|
in_relative_movement = False
|
||||||
|
current = GCodeStep(0, in_relative_movement)
|
||||||
self.layer_z = 0.
|
self.layer_z = 0.
|
||||||
current_e = 0.
|
current_e = 0.
|
||||||
for layer in data:
|
for layer in data:
|
||||||
|
@ -107,20 +126,29 @@ class Stretcher():
|
||||||
current.comment = line[line.find(";"):]
|
current.comment = line[line.find(";"):]
|
||||||
if _getValue(line, "G") == 0:
|
if _getValue(line, "G") == 0:
|
||||||
current.readStep(line)
|
current.readStep(line)
|
||||||
onestep = GCodeStep(0)
|
onestep = GCodeStep(0, in_relative_movement)
|
||||||
onestep.copyPosFrom(current)
|
onestep.copyPosFrom(current)
|
||||||
elif _getValue(line, "G") == 1:
|
elif _getValue(line, "G") == 1:
|
||||||
current.readStep(line)
|
current.readStep(line)
|
||||||
onestep = GCodeStep(1)
|
onestep = GCodeStep(1, in_relative_movement)
|
||||||
onestep.copyPosFrom(current)
|
onestep.copyPosFrom(current)
|
||||||
|
|
||||||
|
# end of relative movement
|
||||||
|
elif _getValue(line, "G") == 90:
|
||||||
|
in_relative_movement = False
|
||||||
|
# start of relative movement
|
||||||
|
elif _getValue(line, "G") == 91:
|
||||||
|
in_relative_movement = True
|
||||||
|
|
||||||
elif _getValue(line, "G") == 92:
|
elif _getValue(line, "G") == 92:
|
||||||
current.readStep(line)
|
current.readStep(line)
|
||||||
onestep = GCodeStep(-1)
|
onestep = GCodeStep(-1, in_relative_movement)
|
||||||
onestep.copyPosFrom(current)
|
onestep.copyPosFrom(current)
|
||||||
else:
|
else:
|
||||||
onestep = GCodeStep(-1)
|
onestep = GCodeStep(-1, in_relative_movement)
|
||||||
onestep.copyPosFrom(current)
|
onestep.copyPosFrom(current)
|
||||||
onestep.comment = line
|
onestep.comment = line
|
||||||
|
|
||||||
if line.find(";LAYER:") >= 0 and len(layer_steps):
|
if line.find(";LAYER:") >= 0 and len(layer_steps):
|
||||||
# Previous plugin "forgot" to separate two layers...
|
# Previous plugin "forgot" to separate two layers...
|
||||||
Logger.log("d", "Layer Z " + "{:.3f}".format(self.layer_z)
|
Logger.log("d", "Layer Z " + "{:.3f}".format(self.layer_z)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue