Last active
February 12, 2024 15:11
-
-
Save Oliv4945/6fc57ba41e442a1c0fe78b6d830da9ee to your computer and use it in GitHub Desktop.
Add regular temperature changes to a gcode file, useful for temperature towers
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- coding: utf-8 -*- | |
# Usage: python file 8 215 5 | |
import argparse | |
import os | |
import re | |
parser = argparse.ArgumentParser() | |
parser.add_argument("file", help="Input GCode file to be parserd", type=str) | |
parser.add_argument("tower_steps", help="Tower steps in mm", type=int) | |
parser.add_argument( | |
"temperature", help="First step temperature in degrees °C", type=int | |
) | |
parser.add_argument("temperature_step", help="Temperature steps in °C", type=int) | |
args = parser.parse_args() | |
# parameters | |
file = args.file | |
tower_steps_mm = args.tower_steps | |
temperature_c = args.temperature | |
temperature_step_c = args.temperature_step | |
# Intenal var | |
tower_step = 1 | |
with open(file, "r") as file_in: | |
data_in = file_in.readlines() | |
with open(f"out_{file}", "w") as file_out: | |
for line in data_in: | |
# Capture all layer changes | |
# From https://reprap.org/forum/read.php?156,645652,646984#msg-646984 | |
match = re.search(r"Z(\d+\.?\d*)", line) | |
if match: | |
height = match.group(1) | |
# Add temperature change in case of multiple of tower_steps_mm | |
if height == f"{tower_steps_mm*tower_step}.000": | |
print( | |
f"Height {tower_steps_mm*tower_step} mm: temperature set to {temperature_c}°C" | |
) | |
file_out.write(f"G10 S{temperature_c}{os.linesep}") | |
temperature_c -= temperature_step_c | |
tower_step += 1 | |
file_out.write(line) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment