From 4508f60ce553860f0576699789a2313ec4faaaa1 Mon Sep 17 00:00:00 2001 From: legend069 Date: Sun, 3 Oct 2021 19:43:50 +1100 Subject: [PATCH 1/3] Update ChangeAtZ.py PR --- .../PostProcessingPlugin/scripts/ChangeAtZ.py | 66 +++++++++++++++---- 1 file changed, 55 insertions(+), 11 deletions(-) diff --git a/plugins/PostProcessingPlugin/scripts/ChangeAtZ.py b/plugins/PostProcessingPlugin/scripts/ChangeAtZ.py index 712af63b07..dc9f171e9e 100644 --- a/plugins/PostProcessingPlugin/scripts/ChangeAtZ.py +++ b/plugins/PostProcessingPlugin/scripts/ChangeAtZ.py @@ -11,6 +11,8 @@ # Modified by Jaime van Kessel (Ultimaker), j.vankessel@ultimaker.com to make it work for 15.10 / 2.x # Modified by Ruben Dulek (Ultimaker), r.dulek@ultimaker.com, to debug. # Modified by Wes Hanney, https://github.com/novamxd, Retract Length + Speed, Clean up +# Modified by Alex Jaxon, https://github.com/legend069, Added option to modify enclosure temperature + # history / changelog: # V3.0.1: TweakAtZ-state default 1 (i.e. the plugin works without any TweakAtZ comment) @@ -33,13 +35,18 @@ # V5.0: Bugfix for fall back after one layer and doubled G0 commands when using print speed tweak, Initial version for Cura 2.x # V5.0.1: Bugfix for calling unknown property 'bedTemp' of previous settings storage and unknown variable 'speed' # V5.1: API Changes included for use with Cura 2.2 -# V5.2.0: Wes Hanney. Added support for changing Retract Length and Speed. Removed layer spread option. Fixed issue of cumulative ChangeZ +# V5.2.0: Wes Hanney. Added support for changing Retract Length and Speed. Removed layer spread option. Fixed issue of cumulative ChangeAtZ # mods so they can now properly be stacked on top of each other. Applied code refactoring to clean up various coding styles. Added comments. # Broke up functions for clarity. Split up class so it can be debugged outside of Cura. # V5.2.1: Wes Hanney. Added support for firmware based retractions. Fixed issue of properly restoring previous values in single layer option. # Added support for outputting changes to LCD (untested). Added type hints to most functions and variables. Added more comments. Created GCodeCommand # class for better detection of G1 vs G10 or G11 commands, and accessing arguments. Moved most GCode methods to GCodeCommand class. Improved wording # of Single Layer vs Keep Layer to better reflect what was happening. +# V5.2.2 Alex Jaxon, Added option to modify enclosure temperature keeping current format +# updated from "Experimental" to "Beta" +# + + # Uses - # M220 S - set speed factor override percentage @@ -56,20 +63,20 @@ from ..Script import Script import re -# this was broken up into a separate class so the main ChangeZ script could be debugged outside of Cura +# this was broken up into a separate class so the main ChangeAtZ script could be debugged outside of Cura class ChangeAtZ(Script): - version = "5.2.1" + version = "5.2.2" def getSettingDataString(self): return """{ - "name": "ChangeAtZ """ + self.version + """(Experimental)", + "name": "ChangeAtZ """ + self.version + """(Beta)", "key": "ChangeAtZ", "metadata": {}, "version": 2, "settings": { "caz_enabled": { "label": "Enabled", - "description": "Allows adding multiple ChangeZ mods and disabling them as needed.", + "description": "Allows adding multiple ChangeAtZ mods and disabling them as needed.", "type": "bool", "default_value": true }, @@ -153,7 +160,7 @@ class ChangeAtZ(Script): "minimum_value_warning": "10", "maximum_value_warning": "200", "enabled": "f1_Change_printspeed" - }, + }, "g1_Change_flowrate": { "label": "Change Flow Rate", "description": "Select if flow rate has to be changed", @@ -221,6 +228,23 @@ class ChangeAtZ(Script): "minimum_value_warning": "30", "maximum_value_warning": "120", "enabled": "h1_Change_bedTemp" + }, + "h1_Change_enclosureTemp": { + "label": "Change Enclosure Temp", + "description": "Select if Enclosure Temperature has to be changed", + "type": "bool", + "default_value": false + }, + "h2_enclosureTemp": { + "label": "Enclosure Temp", + "description": "New Enclosure Temperature", + "unit": "C", + "type": "float", + "default_value": 20, + "minimum_value": "0", + "minimum_value_warning": "10", + "maximum_value_warning": "50", + "enabled": "h1_Change_enclosureTemp" }, "i1_Change_extruderOne": { "label": "Change Extruder 1 Temp", @@ -324,8 +348,8 @@ class ChangeAtZ(Script): "minimum_value": "0", "minimum_value_warning": "0", "maximum_value_warning": "20", - "enabled": "caz_change_retractlength" - } + "enabled": "caz_change_retractlength" + } } }""" @@ -345,6 +369,8 @@ class ChangeAtZ(Script): self.setIntSettingIfEnabled(caz_instance, "g3_Change_flowrateOne", "flowrateOne", "g4_flowrateOne") self.setIntSettingIfEnabled(caz_instance, "g5_Change_flowrateTwo", "flowrateTwo", "g6_flowrateTwo") self.setFloatSettingIfEnabled(caz_instance, "h1_Change_bedTemp", "bedTemp", "h2_bedTemp") + self.setFloatSettingIfEnabled(caz_instance, "h1_Change_enclosureTemp", "enclosureTemp", "h2_enclosureTemp") + self.setFloatSettingIfEnabled(caz_instance, "i1_Change_extruderOne", "extruderOne", "i2_extruderOne") self.setFloatSettingIfEnabled(caz_instance, "i3_Change_extruderTwo", "extruderTwo", "i4_extruderTwo") self.setIntSettingIfEnabled(caz_instance, "j1_Change_fanSpeed", "fanSpeed", "j2_fanSpeed") @@ -776,6 +802,10 @@ class ChangeAtZProcessor: if "bedTemp" in values: codes.append("BedTemp: " + str(round(values["bedTemp"]))) + # looking for wait for enclosure temp + if "enclosureTemp" in values: + codes.append("EnclosureTemp: " + str(round(values["enclosureTemp"]))) + # set our extruder one temp (if specified) if "extruderOne" in values: codes.append("Extruder 1 Temp: " + str(round(values["extruderOne"]))) @@ -858,6 +888,10 @@ class ChangeAtZProcessor: if "bedTemp" in values: codes.append("M140 S" + str(values["bedTemp"])) + # looking for wait for enclosure temp + if "enclosureTemp" in values: + codes.append("M141 S" + str(values["enclosureTemp"])) + # set our extruder one temp (if specified) if "extruderOne" in values: codes.append("M104 S" + str(values["extruderOne"]) + " T0") @@ -943,7 +977,7 @@ class ChangeAtZProcessor: # nothing to do return "" - # Returns the unmodified GCODE line from previous ChangeZ edits + # Returns the unmodified GCODE line from previous ChangeAtZ edits @staticmethod def getOriginalLine(line: str) -> str: @@ -990,7 +1024,7 @@ class ChangeAtZProcessor: else: return self.currentZ >= self.targetZ - # Marks any current ChangeZ layer defaults in the layer for deletion + # Marks any current ChangeAtZ layer defaults in the layer for deletion @staticmethod def markChangesForDeletion(layer: str): return re.sub(r";\[CAZD:", ";[CAZD:DELETE:", layer) @@ -1288,7 +1322,7 @@ class ChangeAtZProcessor: # flag that we're inside our target layer self.insideTargetLayer = True - # Removes all the ChangeZ layer defaults from the given layer + # Removes all the ChangeAtZ layer defaults from the given layer @staticmethod def removeMarkedChanges(layer: str) -> str: return re.sub(r";\[CAZD:DELETE:[\s\S]+?:CAZD\](\n|$)", "", layer) @@ -1364,6 +1398,16 @@ class ChangeAtZProcessor: # move to the next command return + # handle enclosure temp changes, really shouldn't want to wait for enclousure temp mid print though. + if command.command == "M141" or command.command == "M191": + + # get our bed temp if provided + if "S" in command.arguments: + self.lastValues["enclosureTemp"] = command.getArgumentAsFloat("S") + + # move to the next command + return + # handle extruder temp changes if command.command == "M104" or command.command == "M109": From 35dd43675cb8b9c850d1bdb432dcb5355854a6bf Mon Sep 17 00:00:00 2001 From: legend069 Date: Sun, 3 Oct 2021 20:00:08 +1100 Subject: [PATCH 2/3] Update ChangeAtZ.py fixed typos and the gcode insert makes it easier to find for others "changeatz" --- .../PostProcessingPlugin/scripts/ChangeAtZ.py | 31 +++++++++---------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/plugins/PostProcessingPlugin/scripts/ChangeAtZ.py b/plugins/PostProcessingPlugin/scripts/ChangeAtZ.py index dc9f171e9e..8f41a1e3fb 100644 --- a/plugins/PostProcessingPlugin/scripts/ChangeAtZ.py +++ b/plugins/PostProcessingPlugin/scripts/ChangeAtZ.py @@ -79,7 +79,7 @@ class ChangeAtZ(Script): "description": "Allows adding multiple ChangeAtZ mods and disabling them as needed.", "type": "bool", "default_value": true - }, + }, "a_trigger": { "label": "Trigger", "description": "Trigger at height or at layer no.", @@ -126,7 +126,7 @@ class ChangeAtZ(Script): "description": "Displays the current changes to the LCD", "type": "bool", "default_value": false - }, + }, "e1_Change_speed": { "label": "Change Speed", "description": "Select if total speed (print and travel) has to be changed", @@ -160,7 +160,7 @@ class ChangeAtZ(Script): "minimum_value_warning": "10", "maximum_value_warning": "200", "enabled": "f1_Change_printspeed" - }, + }, "g1_Change_flowrate": { "label": "Change Flow Rate", "description": "Select if flow rate has to be changed", @@ -302,25 +302,25 @@ class ChangeAtZ(Script): "description": "Indicates you would like to modify retraction properties.", "type": "bool", "default_value": false - }, + }, "caz_retractstyle": { "label": "Retract Style", "description": "Specify if you're using firmware retraction or linear move based retractions. Check your printer settings to see which you're using.", "type": "enum", "options": { - "linear": "Linear Move", + "linear": "Linear Move", "firmware": "Firmware" }, "default_value": "linear", "enabled": "caz_change_retract" - }, + }, "caz_change_retractfeedrate": { "label": "Change Retract Feed Rate", "description": "Changes the retraction feed rate during print", "type": "bool", "default_value": false, "enabled": "caz_change_retract" - }, + }, "caz_retractfeedrate": { "label": "Retract Feed Rate", "description": "New Retract Feed Rate (mm/s)", @@ -370,7 +370,6 @@ class ChangeAtZ(Script): self.setIntSettingIfEnabled(caz_instance, "g5_Change_flowrateTwo", "flowrateTwo", "g6_flowrateTwo") self.setFloatSettingIfEnabled(caz_instance, "h1_Change_bedTemp", "bedTemp", "h2_bedTemp") self.setFloatSettingIfEnabled(caz_instance, "h1_Change_enclosureTemp", "enclosureTemp", "h2_enclosureTemp") - self.setFloatSettingIfEnabled(caz_instance, "i1_Change_extruderOne", "extruderOne", "i2_extruderOne") self.setFloatSettingIfEnabled(caz_instance, "i3_Change_extruderTwo", "extruderTwo", "i4_extruderTwo") self.setIntSettingIfEnabled(caz_instance, "j1_Change_fanSpeed", "fanSpeed", "j2_fanSpeed") @@ -876,7 +875,7 @@ class ChangeAtZProcessor: return "" # return our default block for this layer - return ";[CAZD:\n" + "\n".join(codes) + "\n;:CAZD]" + return ";[ChangeAtZ:\n" + "\n".join(codes) + "\n;ChangeAtZ]" # Builds the relevant GCODE lines from the given collection of values def getCodeLinesFromValues(self, values: Dict[str, any]) -> List[str]: @@ -981,8 +980,8 @@ class ChangeAtZProcessor: @staticmethod def getOriginalLine(line: str) -> str: - # get the change at z original (cazo) details - original_line = re.search(r"\[CAZO:(.*?):CAZO\]", line) + # get the change at z original (ChangeAtZ) details + original_line = re.search(r"\[ChangeAtZ:(.*?):ChangeAtZ\]", line) # if we didn't get a hit, this is the original line if original_line is None: @@ -1027,7 +1026,7 @@ class ChangeAtZProcessor: # Marks any current ChangeAtZ layer defaults in the layer for deletion @staticmethod def markChangesForDeletion(layer: str): - return re.sub(r";\[CAZD:", ";[CAZD:DELETE:", layer) + return re.sub(r";\[ChangeAtZ:", ";[ChangeAtZ:DELETE:", layer) # Grabs the current height def processLayerHeight(self, line: str): @@ -1100,8 +1099,8 @@ class ChangeAtZProcessor: self.processSetting(line) # if we haven't hit our target yet, leave the defaults as is (unmark them for deletion) - if "[CAZD:DELETE:" in line: - line = line.replace("[CAZD:DELETE:", "[CAZD:") + if "[ChangeAtZ:DELETE:" in line: + line = line.replace("[ChangeAtZ:DELETE:", "[ChangeAtZ:") # if we're targeting by Z, we want to add our values before the first linear move if "G1 " in line or "G0 " in line: @@ -1325,7 +1324,7 @@ class ChangeAtZProcessor: # Removes all the ChangeAtZ layer defaults from the given layer @staticmethod def removeMarkedChanges(layer: str) -> str: - return re.sub(r";\[CAZD:DELETE:[\s\S]+?:CAZD\](\n|$)", "", layer) + return re.sub(r";\[ChangeAtZ:DELETE:[\s\S]+?:ChangeAtZ\](\n|$)", "", layer) # Resets the class contents to defaults def reset(self): @@ -1350,7 +1349,7 @@ class ChangeAtZProcessor: # Sets the original GCODE line in a given GCODE command @staticmethod def setOriginalLine(line, original) -> str: - return line + ";[CAZO:" + original + ":CAZO]" + return line + ";[ChangeAtZ:" + original + ":ChangeAtZ]" # Tracks the change in gcode values we're interested in def trackChangeableValues(self, line: str): From 3b639d21191694561e5ca71d5eb5a273f58b02b0 Mon Sep 17 00:00:00 2001 From: legend069 Date: Mon, 11 Oct 2021 19:57:42 +1100 Subject: [PATCH 3/3] Update ChangeAtZ.py updated, as suggested by https://github.com/Ultimaker/Cura/pull/10554#issuecomment-939812755 --- .../PostProcessingPlugin/scripts/ChangeAtZ.py | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/plugins/PostProcessingPlugin/scripts/ChangeAtZ.py b/plugins/PostProcessingPlugin/scripts/ChangeAtZ.py index 8f41a1e3fb..a96603e9ee 100644 --- a/plugins/PostProcessingPlugin/scripts/ChangeAtZ.py +++ b/plugins/PostProcessingPlugin/scripts/ChangeAtZ.py @@ -11,7 +11,7 @@ # Modified by Jaime van Kessel (Ultimaker), j.vankessel@ultimaker.com to make it work for 15.10 / 2.x # Modified by Ruben Dulek (Ultimaker), r.dulek@ultimaker.com, to debug. # Modified by Wes Hanney, https://github.com/novamxd, Retract Length + Speed, Clean up -# Modified by Alex Jaxon, https://github.com/legend069, Added option to modify enclosure temperature +# Modified by Alex Jaxon, https://github.com/legend069, Added option to modify Build Volume Temperature # history / changelog: @@ -42,7 +42,7 @@ # Added support for outputting changes to LCD (untested). Added type hints to most functions and variables. Added more comments. Created GCodeCommand # class for better detection of G1 vs G10 or G11 commands, and accessing arguments. Moved most GCode methods to GCodeCommand class. Improved wording # of Single Layer vs Keep Layer to better reflect what was happening. -# V5.2.2 Alex Jaxon, Added option to modify enclosure temperature keeping current format +# V5.2.2 Alex Jaxon, Added option to modify Build Volume Temperature keeping current format # updated from "Experimental" to "Beta" # @@ -229,22 +229,22 @@ class ChangeAtZ(Script): "maximum_value_warning": "120", "enabled": "h1_Change_bedTemp" }, - "h1_Change_enclosureTemp": { - "label": "Change Enclosure Temp", - "description": "Select if Enclosure Temperature has to be changed", + "h1_Change_BuildVolumeTemperature": { + "label": "Change Build Volume Temperature", + "description": "Select if Build Volume Temperature has to be changed", "type": "bool", "default_value": false }, - "h2_enclosureTemp": { - "label": "Enclosure Temp", - "description": "New Enclosure Temperature", + "h2_BuildVolumeTemperature": { + "label": "Build Volume Temperature", + "description": "New Build Volume Temperature", "unit": "C", "type": "float", "default_value": 20, "minimum_value": "0", "minimum_value_warning": "10", "maximum_value_warning": "50", - "enabled": "h1_Change_enclosureTemp" + "enabled": "h1_Change_BuildVolumeTemperature" }, "i1_Change_extruderOne": { "label": "Change Extruder 1 Temp", @@ -369,7 +369,7 @@ class ChangeAtZ(Script): self.setIntSettingIfEnabled(caz_instance, "g3_Change_flowrateOne", "flowrateOne", "g4_flowrateOne") self.setIntSettingIfEnabled(caz_instance, "g5_Change_flowrateTwo", "flowrateTwo", "g6_flowrateTwo") self.setFloatSettingIfEnabled(caz_instance, "h1_Change_bedTemp", "bedTemp", "h2_bedTemp") - self.setFloatSettingIfEnabled(caz_instance, "h1_Change_enclosureTemp", "enclosureTemp", "h2_enclosureTemp") + self.setFloatSettingIfEnabled(caz_instance, "h1_Change_BuildVolumeTemperature", "BuildVolumeTemperature", "h2_BuildVolumeTemperature") self.setFloatSettingIfEnabled(caz_instance, "i1_Change_extruderOne", "extruderOne", "i2_extruderOne") self.setFloatSettingIfEnabled(caz_instance, "i3_Change_extruderTwo", "extruderTwo", "i4_extruderTwo") self.setIntSettingIfEnabled(caz_instance, "j1_Change_fanSpeed", "fanSpeed", "j2_fanSpeed") @@ -801,9 +801,9 @@ class ChangeAtZProcessor: if "bedTemp" in values: codes.append("BedTemp: " + str(round(values["bedTemp"]))) - # looking for wait for enclosure temp - if "enclosureTemp" in values: - codes.append("EnclosureTemp: " + str(round(values["enclosureTemp"]))) + # looking for wait for Build Volume Temperature + if "BuildVolumeTemperature" in values: + codes.append("BuildVolumeTemperature: " + str(round(values["BuildVolumeTemperature"]))) # set our extruder one temp (if specified) if "extruderOne" in values: @@ -887,9 +887,9 @@ class ChangeAtZProcessor: if "bedTemp" in values: codes.append("M140 S" + str(values["bedTemp"])) - # looking for wait for enclosure temp - if "enclosureTemp" in values: - codes.append("M141 S" + str(values["enclosureTemp"])) + # looking for wait for Build Volume Temperature + if "BuildVolumeTemperature" in values: + codes.append("M141 S" + str(values["BuildVolumeTemperature"])) # set our extruder one temp (if specified) if "extruderOne" in values: @@ -1397,12 +1397,12 @@ class ChangeAtZProcessor: # move to the next command return - # handle enclosure temp changes, really shouldn't want to wait for enclousure temp mid print though. + # handle Build Volume Temperature changes, really shouldn't want to wait for enclousure temp mid print though. if command.command == "M141" or command.command == "M191": # get our bed temp if provided if "S" in command.arguments: - self.lastValues["enclosureTemp"] = command.getArgumentAsFloat("S") + self.lastValues["BuildVolumeTemperature"] = command.getArgumentAsFloat("S") # move to the next command return