From: Clinton Ebadi Date: Sun, 14 Aug 2016 00:50:55 +0000 (-0400) Subject: initial import of upstream cura dual temp plugin X-Git-Url: http://git.hcoop.net/clinton/3d-models.git/commitdiff_plain/c7006aad4037a607f719738276d573bff3e4dfae initial import of upstream cura dual temp plugin https://ultimaker.com/en/community/10405-ooze-from-inactive-2nd-extruder-destroying-my-prints --- diff --git a/cura/dual_temp_lower.py b/cura/dual_temp_lower.py new file mode 100644 index 0000000..05cf520 --- /dev/null +++ b/cura/dual_temp_lower.py @@ -0,0 +1,96 @@ +#Name: Dual Temp Test +#Info: Lower the temperature for the nozzle that is not printing +#Depend: GCode +#Type: postprocess +#Param: printTemperature(float:220.0) Print temperature (C) +#Param: coolTemperature(float:170.0) Cool nozzle temperature (C) +#Param: heatupTimeDelay(float:20.0) Heatup nozzle before use (sec) + +__copyright__ = "Copyright (C) 2013 David Braam - Released under terms of the AGPLv3 License" +import re +import math + +def getValue(line, key, default = None): + if not key in line or (';' in line and line.find(key) > line.find(';')): + return default + subPart = line[line.find(key) + 1:] + m = re.search('^[0-9]+\.?[0-9]*', subPart) + if m is None: + return default + try: + return float(m.group(0)) + except: + return default + +with open(filename, "r") as f: + lines = f.readlines() + +z = 0. +x = 0. +y = 0. +e = 0. +feedrate = 5000 +currentSectionType = 'CUSTOM' +activeExtruder = -1 +with open(filename, "w") as f: + startIdx = 0 + idx = 0 + while idx < len(lines): + line = lines[idx] + if getValue(line, 'T', None) is not None and getValue(line, 'M', None) is None: + nextExtruder = getValue(line, 'T', None) + printTime = 0.0 + sx = x + sy = y + sz = z + for n in xrange(startIdx, idx): + line = lines[n] + if line.startswith(';'): + continue + g = getValue(line, 'G', None) + if g == 0 or g == 1: + nx = getValue(line, 'X', x) + ny = getValue(line, 'Y', y) + nz = getValue(line, 'Z', z) + feedrate = getValue(line, 'F', feedrate) + printTime += math.sqrt((nx-x)*(nx-x)+(ny-y)*(ny-y)+(nz-z)*(nz-z)) / feedrate * 60 + x = nx + y = ny + z = nz + heatupTime = printTime - heatupTimeDelay + x = sx + y = sy + z = sz + if heatupTime > 0.0: + f.write("M104 T%d S%d\n" % (nextExtruder, coolTemperature)) + f.write("T%d\n" % (activeExtruder)) + else: + heatupTime = None + printTime = 0.0 + for n in xrange(startIdx, idx): + line = lines[n] + if line.startswith(';'): + f.write(line) + continue + if heatupTime is not None: + g = getValue(line, 'G', None) + if g == 0 or g == 1: + nx = getValue(line, 'X', x) + ny = getValue(line, 'Y', y) + nz = getValue(line, 'Z', z) + feedrate = getValue(line, 'F', feedrate) + printTime += math.sqrt((nx-x)*(nx-x)+(ny-y)*(ny-y)+(nz-z)*(nz-z)) / feedrate * 60 + if printTime > heatupTime: + f.write("M104 T%d S%d\n" % (nextExtruder, printTemperature)) + f.write("T%d\n" % (activeExtruder)) + heatupTime = None + x = nx + y = ny + z = nz + f.write(line) + f.write(lines[idx]) + startIdx = idx + 1 + activeExtruder = nextExtruder + idx += 1 + for n in xrange(startIdx, idx): + f.write(lines[n])