X-Git-Url: http://git.hcoop.net/clinton/3d-models.git/blobdiff_plain/c7006aad4037a607f719738276d573bff3e4dfae..2d3019ff8781b6c9b6c6f24e04a080dd325921c9:/cura/dual_temp_lower.py diff --git a/cura/dual_temp_lower.py b/cura/dual_temp_lower.py index 05cf520..d516f63 100644 --- a/cura/dual_temp_lower.py +++ b/cura/dual_temp_lower.py @@ -2,13 +2,15 @@ #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: coolTemperatureDifference(float:50.0) Drop idle nozzle temperature (C) #Param: heatupTimeDelay(float:20.0) Heatup nozzle before use (sec) +#Param: zHop(float:0.0) Raise Z when reheating active extruder (mm) -__copyright__ = "Copyright (C) 2013 David Braam - Released under terms of the AGPLv3 License" + +__copyright__ = "Copyright (C) 2013 David Braam, Copyright (C) 2016 Clinton Ebadi - Released under terms of the AGPLv3 License" import re import math +from Cura.util import profile def getValue(line, key, default = None): if not key in line or (';' in line and line.find(key) > line.find(';')): @@ -29,13 +31,29 @@ z = 0. x = 0. y = 0. e = 0. -feedrate = 5000 +feedrate = float(profile.getProfileSetting('print_speed')) +wipeTowerP = profile.getProfileSetting('wipe_tower') == 'True' currentSectionType = 'CUSTOM' activeExtruder = -1 + +# todo: move custom gcode to here +# detect priming tower and inject reheat there + +# grab setting from the profile, add a tag at the end of postSwitch, +# inject right before the move that sets E0 + +# todo: use 2nd/3rd/etc extruder temp if available (arrays are alright...) +printTemperature = float(profile.getProfileSetting('print_temperature')) +coolTemperature = printTemperature - coolTemperatureDifference with open(filename, "w") as f: - startIdx = 0 - idx = 0 - while idx < len(lines): + # skip start gcode + idx = lines.index (';LAYER:0\n') + startIdx = idx + for line in lines[0:idx+1]: + if getValue(line, 'T', None) is not None and getValue(line, 'M', None) is None: + activeExtruder = getValue(line, 'T', None) + f.write (line) + 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) @@ -57,21 +75,34 @@ with open(filename, "w") as f: x = nx y = ny z = nz - heatupTime = printTime - heatupTimeDelay + heatupTime = max (printTime - heatupTimeDelay, 0.0) + heatupBlocked = True # do not reheat until active extruder is heated 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 + + f.write("M104 T%d S%d\n" % (nextExtruder, coolTemperature)) + f.write("T%d\n" % (activeExtruder)) + printTime = 0.0 for n in xrange(startIdx, idx): line = lines[n] if line.startswith(';'): f.write(line) continue + # find where the newly activated extruder is unspooled and block until fully reheated + if getValue(line, 'G', None) is not None and getValue (line, 'E', 666) == 0.0: + # todo: if wipeTowerP, only + # wait for a few degrees below + # printTemperature and allow + # it to finish heating while + # priming + if zHop > 0.0: + f.write ("G91\nG0 Z%.3f\n" % zHop) + f.write("M109 T%d S%d\n" % (activeExtruder, printTemperature)) + if zHop > 0.0: + f.write ("G0 Z%.3f\nG90\n" % -zHop) + heatupBlocked = False if heatupTime is not None: g = getValue(line, 'G', None) if g == 0 or g == 1: @@ -80,7 +111,7 @@ with open(filename, "w") as f: 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: + if (printTime > heatupTime) and (not heatupBlocked): f.write("M104 T%d S%d\n" % (nextExtruder, printTemperature)) f.write("T%d\n" % (activeExtruder)) heatupTime = None @@ -89,7 +120,7 @@ with open(filename, "w") as f: z = nz f.write(line) f.write(lines[idx]) - startIdx = idx + 1 + startIdx = idx + 1 activeExtruder = nextExtruder idx += 1 for n in xrange(startIdx, idx):