initial import of upstream cura dual temp plugin
authorClinton Ebadi <clinton@unknownlamer.org>
Sun, 14 Aug 2016 00:50:55 +0000 (20:50 -0400)
committerClinton Ebadi <clinton@unknownlamer.org>
Sun, 14 Aug 2016 00:50:55 +0000 (20:50 -0400)
https://ultimaker.com/en/community/10405-ooze-from-inactive-2nd-extruder-destroying-my-prints

cura/dual_temp_lower.py [new file with mode: 0644]

diff --git a/cura/dual_temp_lower.py b/cura/dual_temp_lower.py
new file mode 100644 (file)
index 0000000..05cf520
--- /dev/null
@@ -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])