-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathTemperatureTower.py
103 lines (99 loc) · 4.42 KB
/
TemperatureTower.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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
# Created by Jakub Wietrzyk <jakub@wietrzyk.com> https://github.com/jaaaco
# Based on https://github.com/asmaurya/Temperature-Tower-Plugin-for-Cura-4.-
from typing import List
from ..Script import Script
from UM.Application import Application
# Performs a search-and-replace on all g-code.
class TemperatureTower(Script):
def getSettingDataString(self):
return """{
"name": "Temperature Tower",
"key": "TemperatureTower",
"metadata": {},
"version": 2,
"settings":
{
"change_at":
{
"label": "Change Temp at",
"description": "Whether to decrease temp at layer or height interval",
"type": "enum",
"options": {"height": "Height", "layer": "Layer No."},
"default_value": "layer"
},
"height_inc":
{
"label": "Height Interval",
"description": "At the increase of how many mm height does the temp decreases",
"unit": "mm",
"type": "float",
"default_value": 5.0,
"minimum_value": 0,
"enabled": "change_at == 'height'"
},
"layer_inc":
{
"label": "Layer Interval",
"description": "At the increase of how many layers does the temp decreases",
"type": "int",
"value": 1,
"minimum_value": 0,
"minimum_value_warning": "1",
"enabled": "change_at == 'layer'"
},
"layer_start":
{
"label": "Start Layer",
"description": "From which layer the temp decrease has to be started",
"type": "int",
"value": 1,
"minimum_value": 0,
"minimum_value_warning": "1",
"enabled": "change_at == 'layer'"
},
"height_start":
{
"label": "Start Height (mm)",
"description": "From which height the temp decrease has to be started",
"type": "float",
"value": 0.2,
"unit": "mm",
"minimum_value": 0.2,
"minimum_value_warning": "1",
"enabled": "change_at == 'height'"
},
"temperature_start":
{
"label": "Start Temperature",
"description": "Initial temperature",
"unit": "°C",
"type": "int",
"default_value": 200
},
"temperature_dec":
{
"label": "Temperature Decrement Step",
"description": "Decrease temperature by this much with each increment",
"unit": "°C",
"type": "int",
"default_value": 5
}
}
}"""
def execute(self, data: List[str]):
new_temperature = self.getSettingValueByKey("temperature_start") + self.getSettingValueByKey("temperature_dec")
comment = " ; Added by Temperature Tower Post Processing Plugin \n"
layer_height = Application.getInstance().getGlobalContainerStack().getProperty("layer_height", "value")
if self.getSettingValueByKey("change_at") == "layer":
for layer in range(self.getSettingValueByKey("layer_start"), len(data)-2, self.getSettingValueByKey("layer_inc")):
new_temperature -= self.getSettingValueByKey("temperature_dec")
if new_temperature < 0:
new_temperature = 0
data[layer] = "\nM104 S" + str(new_temperature) + comment + data[layer]
else:
for layer in range(int(self.getSettingValueByKey("height_start") / layer_height), len(data)-2, int(self.getSettingValueByKey("height_inc") / layer_height)):
new_temperature -= self.getSettingValueByKey("temperature_dec")
if new_temperature < 0:
new_temperature = 0
data[layer] = "\nM104 S" + str(new_temperature) + comment + data[layer]
return data