-
Notifications
You must be signed in to change notification settings - Fork 0
/
autoTower.py
73 lines (63 loc) · 2.74 KB
/
autoTower.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#!/usr/bin/python
import argparse
import sys
from subprocess import call
ARGS = None
def main(temperatures, bedTemp):
temperaturesString = ",".join(['"{}"'.format(x) for x in temperatures])
print temperaturesString
# Change scad file
with open('tower.scad', 'r') as scadBaseFile:
with open('towerOut.scad', 'w') as scadOutFile:
scadOutFile.write(scadBaseFile.read().replace('###NumberOfBlocks###', str(len(temperatures))).replace('###Labels###', temperaturesString))
# Generate stl
call(["openscad", "-o", "tower.stl", "towerOut.scad"])
# Slice, output in .gcode
call(["miracle_grue", "-c", "miracle.json", "-o", "tower.gcode", "tower.stl"])
# Replace temperatures in gcode
with open('tower.gcode', 'r') as gcodeFile:
with open('header.gcode', 'r') as gcodeHeaderFile:
with open('towerOut.gcode', 'w') as gcodeOutFile:
#set first temperature in header
gcodeHeader = gcodeHeaderFile.read().replace('###ExtruderTemp###', str(temperatures[0])).replace('###BedTemp###', str(bedTemp))
gcodeString = gcodeFile.read()
for tempNumber in range(1, len(temperatures)-1):
index = gcodeString.find('Z' + str(tempNumber*10))
gcodeString = gcodeString[:index-18]+'\nM104 S' + str(temperatures[tempNumber])+' T0 \n'+gcodeString[index-17:len(gcodeString)]
gcodeOutFile.write(gcodeHeader + gcodeString)
# Convert gcode to x3g
call(["gpx", "-v", "towerOut.gcode", "tower.x3g"])
def parse_arguements():
"""Parse the command line arguments."""
# Define a parser
parser = argparse.ArgumentParser(description="Generate temperature calibration tower for Makerbot Replicator2x (g3x)")
parser.add_argument('--list', '-l', type=int, nargs='*',
default=None,
help='list of temperatures')
parser.add_argument('--bed', '-b', type=int,
default='110',
help='temperature of the bed')
parser.add_argument('--from', '-f', type=int, dest='start',
default=None,
help='from temperature')
parser.add_argument('--to', '-t', type=int,
default=None,
help='to temperature')
parser.add_argument('--step', '-s', type=int,
default=None,
help='temperature step')
# Parse the arguments
return parser.parse_args()
if __name__ == "__main__":
# Parse arguments
ARGS = parse_arguements()
if ARGS.list is not None:
temperatures = ARGS.list
elif ARGS.start is not None and ARGS.to is not None and ARGS.step is not None:
temperatures = list(range(ARGS.start, ARGS.to + 1, ARGS.step))
else:
sys.exit(1)
print(temperatures)
print(ARGS.bed)
# Run the application
sys.exit(main(temperatures, ARGS.bed))