Commit | Line | Data |
---|---|---|
c7006aad CE |
1 | #Name: Dual Temp Test |
2 | #Info: Lower the temperature for the nozzle that is not printing | |
3 | #Depend: GCode | |
4 | #Type: postprocess | |
5 | #Param: printTemperature(float:220.0) Print temperature (C) | |
6 | #Param: coolTemperature(float:170.0) Cool nozzle temperature (C) | |
7 | #Param: heatupTimeDelay(float:20.0) Heatup nozzle before use (sec) | |
8 | ||
9 | __copyright__ = "Copyright (C) 2013 David Braam - Released under terms of the AGPLv3 License" | |
10 | import re | |
11 | import math | |
12 | ||
13 | def getValue(line, key, default = None): | |
14 | if not key in line or (';' in line and line.find(key) > line.find(';')): | |
15 | return default | |
16 | subPart = line[line.find(key) + 1:] | |
17 | m = re.search('^[0-9]+\.?[0-9]*', subPart) | |
18 | if m is None: | |
19 | return default | |
20 | try: | |
21 | return float(m.group(0)) | |
22 | except: | |
23 | return default | |
24 | ||
25 | with open(filename, "r") as f: | |
26 | lines = f.readlines() | |
27 | ||
28 | z = 0. | |
29 | x = 0. | |
30 | y = 0. | |
31 | e = 0. | |
32 | feedrate = 5000 | |
33 | currentSectionType = 'CUSTOM' | |
34 | activeExtruder = -1 | |
35 | with open(filename, "w") as f: | |
36 | startIdx = 0 | |
37 | idx = 0 | |
38 | while idx < len(lines): | |
39 | line = lines[idx] | |
40 | if getValue(line, 'T', None) is not None and getValue(line, 'M', None) is None: | |
41 | nextExtruder = getValue(line, 'T', None) | |
42 | printTime = 0.0 | |
43 | sx = x | |
44 | sy = y | |
45 | sz = z | |
46 | for n in xrange(startIdx, idx): | |
47 | line = lines[n] | |
48 | if line.startswith(';'): | |
49 | continue | |
50 | g = getValue(line, 'G', None) | |
51 | if g == 0 or g == 1: | |
52 | nx = getValue(line, 'X', x) | |
53 | ny = getValue(line, 'Y', y) | |
54 | nz = getValue(line, 'Z', z) | |
55 | feedrate = getValue(line, 'F', feedrate) | |
56 | printTime += math.sqrt((nx-x)*(nx-x)+(ny-y)*(ny-y)+(nz-z)*(nz-z)) / feedrate * 60 | |
57 | x = nx | |
58 | y = ny | |
59 | z = nz | |
60 | heatupTime = printTime - heatupTimeDelay | |
61 | x = sx | |
62 | y = sy | |
63 | z = sz | |
64 | if heatupTime > 0.0: | |
65 | f.write("M104 T%d S%d\n" % (nextExtruder, coolTemperature)) | |
66 | f.write("T%d\n" % (activeExtruder)) | |
67 | else: | |
68 | heatupTime = None | |
69 | printTime = 0.0 | |
70 | for n in xrange(startIdx, idx): | |
71 | line = lines[n] | |
72 | if line.startswith(';'): | |
73 | f.write(line) | |
74 | continue | |
75 | if heatupTime is not None: | |
76 | g = getValue(line, 'G', None) | |
77 | if g == 0 or g == 1: | |
78 | nx = getValue(line, 'X', x) | |
79 | ny = getValue(line, 'Y', y) | |
80 | nz = getValue(line, 'Z', z) | |
81 | feedrate = getValue(line, 'F', feedrate) | |
82 | printTime += math.sqrt((nx-x)*(nx-x)+(ny-y)*(ny-y)+(nz-z)*(nz-z)) / feedrate * 60 | |
83 | if printTime > heatupTime: | |
84 | f.write("M104 T%d S%d\n" % (nextExtruder, printTemperature)) | |
85 | f.write("T%d\n" % (activeExtruder)) | |
86 | heatupTime = None | |
87 | x = nx | |
88 | y = ny | |
89 | z = nz | |
90 | f.write(line) | |
91 | f.write(lines[idx]) | |
92 | startIdx = idx + 1 | |
93 | activeExtruder = nextExtruder | |
94 | idx += 1 | |
95 | for n in xrange(startIdx, idx): | |
96 | f.write(lines[n]) |