Skip to content

Instantly share code, notes, and snippets.

@meteozond
Last active February 18, 2022 17:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save meteozond/7ec249190fbd77976ed09b3919c1bb1f to your computer and use it in GitHub Desktop.
Save meteozond/7ec249190fbd77976ed09b3919c1bb1f to your computer and use it in GitHub Desktop.
Ulimaker Cura g-code template insertion PostPocessing script
# 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