from ..Script import Script class AddGcodeAtHeight(Script): def getSettingDataString(self): return """{ "name": "Add G Code at height", "key": "AddGcodeAtHeight", "metadata": {}, "version": 2, "settings": { "add_height": { "label": "Height", "description": "At what height should the G Code be inserted", "unit": "mm", "type": "float", "default_value": 2.0 }, "gcode_to_add": { "label": "G_CODE", "description": "GCODE to add at height. - Must be G or M code", "type": "str", "default_value": "" } } }""" def execute(self, data): current_z = 0. add_z = self.getSettingValueByKey("add_height") g_code=self.getSettingValueByKey("gcode_to_add") g_code=g_code.strip() if not (g_code.startswith('G') or g_code.startswith('M')): g_code =";Invalid command. Must be G or M command : " + g_code #only accept M or G codes, othherwise comment line out layers_started = False for layer_number, layer in enumerate(data): lines = layer.split("\n") for line in lines: if ";LAYER:0" in line: layers_started = True continue if not layers_started: continue if self.getValue(line, 'G') == 1 or self.getValue(line, 'G') == 0: current_z = self.getValue(line, 'Z') if current_z != None: if current_z >= add_z: prepend_gcode = ";TYPE:CUSTOM\n" prepend_gcode += "; -- Insert GCode at height (%.2f mm) --\n" % add_z prepend_gcode += "M291 S1 R\"Adding G Code @ height %smm\" T10 P\"%s\" \n" % (add_z,g_code.replace('"','""',6)) prepend_gcode += "%s \n" % g_code layer = prepend_gcode + layer data[layer_number] = layer # Override the data of this layer with the modified data return data break return data