Skip to content

Instantly share code, notes, and snippets.

@maximkulkin
Created February 6, 2019 10:17
Show Gist options
  • Save maximkulkin/fdfbf3284db62d76375ce006a7938869 to your computer and use it in GitHub Desktop.
Save maximkulkin/fdfbf3284db62d76375ce006a7938869 to your computer and use it in GitHub Desktop.
Ultimaker Cura script to head nozzle and bed at the same time
from ..Script import Script
import re
## Modifies G-Code to start nozzle heating without waiting for bed reaching
# defined temperature which speeds up print start.
#
# Due to technical limitations, the search can't cross the border between
# layers.
class HeatBedAndNozzleAtTheSameTime(Script):
def getSettingDataString(self):
return """{
"name": "Heat bed and nozzle at the same time",
"key": "HeatBedAndNozzleAtTheSameTime",
"metadata": {},
"version": 2,
"settings": {}
}"""
def execute(self, data):
for layerno, layer in enumerate(data):
bed_temperature, bed_temperature_line = None, -1
nozzle_temperature, nozzle_temperature_line = None, -1
lines = layer.split('\n')
for lineno, line in enumerate(lines):
if line.startswith('M190'):
m = re.search(' S(\d+)', line)
if m:
bed_temperature = int(m.group(1))
bed_temperature_line = lineno
break
for lineno, line in enumerate(lines):
if line.startswith('M104'):
m = re.search(' S(\d+)', line)
if m:
nozzle_temperature = int(m.group(1))
nozzle_temperature_line = lineno
break
if bed_temperature or nozzle_temperature:
commands = []
temperature_line = len(lines)
if bed_temperature >= 0:
commands.append('M140 S%d' % bed_temperature)
temperature_line = min(temperature_line, bed_temperature_line)
if nozzle_temperature >= 0:
commands.append('M104 S%d' % nozzle_temperature)
temperature_line = min(temperature_line, nozzle_temperature_line)
data[layerno] = '\n'.join(
lines[:temperature_line] + commands + lines[temperature_line:]
)
break
return data
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment