Last active
February 18, 2022 17:56
-
-
Save meteozond/7ec249190fbd77976ed09b3919c1bb1f to your computer and use it in GitHub Desktop.
Ulimaker Cura g-code template insertion PostPocessing script
This file contains hidden or 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
# Copyright (c) 2022 Meteozond | |
# The PostProcessingPlugin is released under the terms of the AGPLv3 or higher. | |
import json | |
import traceback | |
from ..Script import Script | |
class TemplateAtLayerChange(Script): | |
""" | |
Performs Python f-string flavored insertion | |
""" | |
def getSettingDataString(self): | |
return json.dumps({ | |
"name": "Template at layer change", | |
"key": "TemplateAtLayerChange", | |
"metadata": {}, | |
"version": 2, | |
"settings": { | |
"template": { | |
"label": "Template", | |
"description": "Python-flavored template, possible values: {l} - layer, {i} - insetion, {layer_count}, {insertion_count}, {l * 2}", | |
"type": "str", | |
"default_value": "; Layer: {l}/{layer_count} {i}/{insertion_count}" | |
}, | |
"layers_step": { | |
"label": "Layers step", | |
"description": "Steps between insertions", | |
"type": "int", | |
"default_value": 1 | |
}}}) | |
def execute(self, data): | |
template = self.getSettingValueByKey("template") | |
layer_step = int(self.getSettingValueByKey("layers_step")) | |
vars = {'layer_count': len(data), 'insertion_count': len(data) // layer_step} | |
for layer_number, layer in enumerate(data): | |
try: | |
if not layer_number % layer_step: | |
code = eval(f'f"""{template}"""', {**vars, **{'l': layer_number, 'i': layer_number // layer_step}}) + '\r\n' | |
data[layer_number] = '; TemplateAtLayerChange:\n' + code + data[layer_number] | |
except Exception: | |
data[layer_number] = ';TemplateAtLayerChange: \n;' + traceback.format_exc().replace('\n', '\n;') + '\n' + str({**vars, 'layer_number': layer_number}) + data[layer_number] | |
return data |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment