Yes, what Joris said. Write a plugin. It will be awesome. And please share it! Note also that the newest versions of Cura (15.06.* and newer) have a totally different way of doing plugins and I don't know if anyone knows how to do that yet so I would go for the older version e.g. 15.04 and I'm sure all the work you did for the plugin will still be useful - I suspect converting plugins from 15.04 to 15.06 will be pretty simple once someone documents the process.
- 2 weeks later...
Regular edits with search and replace has sped up the process considerably. Thank you for taking the time to send me your suggestion. I am considering writing a plug in to eliminate the editing for all future projects, but I don't have the time to go down that road right now.
- 5 years later...
I wrote a post process plugin to solve this problem
# Copyright (c) 2020 Belin Fieldson
# LaserCode is released under the terms of the AGPLv3 or higher.
from ..Script import Script
class LaserCode(Script):
version = "1.01"
def __init__(self):
super().__init__()
def getSettingDataString(self):
return """{
"name":"Laser Code v.(""" + self.version + """)",
"key":"LaserCode",
"metadata": {},
"version": 2,
"settings":
{
"_activation":
{
"label": "Laser Activate",
"description": "The code to use to activate the laser",
"type": "str",
"default_value": "M3"
},
"_deactivation":
{
"label": "Laser Deactivate",
"description": "The code to use to deactivate the laser",
"type": "str",
"default_value": "M5"
},
"_prefixActivation":
{
"label": "Active GCODE",
"description": "The gcode that the activate code should be prefixed to",
"type": "str",
"default_value": "G1"
},
"_prefixDeactivation":
{
"label": "Inactive GCODE",
"description": "The gcode that the deactivate code should be prefixed to",
"type": "str",
"default_value": "G0"
}
}
}"""
def execute(self, data):
activation = self.getSettingValueByKey("_activation");
deactivation = self.getSettingValueByKey("_deactivation");
searchActivation = self.getSettingValueByKey("_prefixActivation");
searchDeactivation = self.getSettingValueByKey("_prefixDeactivation");
activated = False;
# Declare output gcode
for layer in data:
index = data.index(layer)
lines = layer.split("\n")
newLayer = ""
for line in lines:
if (searchActivation in line and not activated):
newLayer += activation + "\n"
activated = True
if (searchDeactivation in line and activated):
newLayer += deactivation + "\n"
activated = False
newLayer += line + "\n"
data[index] = newLayer
return data
Recommended Posts
rooiejoris 5
Hi,
You could use a plugin in Cura, don't know if this worked, but an intern tried this a year ago:
other option is to use regular expressions in a better text editor:
find:
G0 (.*)
replace:
yourcode
G0 /1
[btw, i am not a programmer, but i really like google and copy/paste...]
cheers \ joris
#Name: Powder Printing
#Info: Switch off fan power during travel moves
#Help: PowderPrinting
#Depend: GCode
#Type: postprocess
#Param: fanpowermin(int:) Fan Power Min(0-255)
#Param: fanpowermax(int:) Fan Power Max(0-255)
## Written by Tom Kerckhaert, based on TweakAtZ by Steven Morlock
## Special Thanks to Joris van Tubergen
## This script is licensed under the Creative Commons - Attribution - Share Alike (CC BY-SA) terms
# Uses - Switch off fan power during travel moves
# TODO:
# Get rid of the unnecessary fan on / off between two G moves
# Fan power variables do not work yet
import re
def getValue(line, key, default = None):
if not key in line or (';' in line and line.find(key) > line.find(';')):
return default
subPart = line[line.find(key) + 1:]
m = re.search('^[0-9]+\.?[0-9]*', subPart)
if m == None:
return default
try:
return float(m.group(0))
except:
return default
with open(filename, "r") as f:
lines = f.readlines()
with open(filename, "w") as f:
for line in lines:
if getValue(line, 'G', None) == 0:
f.write("; Powder Plugin\n")
f.write("M106 S0\n")
f.write(line)
f.write("M106 S255\n")
f.write("; Plugin: End\n")
f.write(line)
if getValue(line, 'G', None) == 1:
x = getValue(line, 'X', dx)
y = getValue(line, 'Y', dy)
z = getValue(line, 'Z', dz)
e = getValue(line, 'E', e)
f = getValue(line, 'F', f)
line = 'G1 '
if dx != x:
line += 'X%f ' % x
if dy != y:
line += 'Y%f ' % y
if dz != z:
line += 'Z%f ' % z
if df != f:
line += 'F%f ' % f
line += '\n'
# if comment is the extruder movements before and after the print, remove that line
g.write(line)
Link to post
Share on other sites