From 5d832a35cbc6dad3f52c16b020d52403b864c4cf Mon Sep 17 00:00:00 2001 From: novamxd Date: Thu, 12 Dec 2019 21:16:27 -0600 Subject: [PATCH] Revamped ChangeAtZ Fixed bugs where TargetZ, Bed Temp, Extruder Temps, Retract Feed Rate and Retract Length weren't properly considered as floats. Now capable of properly targeting decimal Z values, and altering others as decimals Updated debug cases to test for it. --- .../PostProcessingPlugin/scripts/ChangeAtZ.py | 59 +++++++++++++------ 1 file changed, 42 insertions(+), 17 deletions(-) diff --git a/plugins/PostProcessingPlugin/scripts/ChangeAtZ.py b/plugins/PostProcessingPlugin/scripts/ChangeAtZ.py index 9e93600fbf..42dcae2ece 100644 --- a/plugins/PostProcessingPlugin/scripts/ChangeAtZ.py +++ b/plugins/PostProcessingPlugin/scripts/ChangeAtZ.py @@ -266,7 +266,7 @@ class ChangeAtZ(Script): "label": "Retract Feed Rate", "description": "New Retract Feed Rate (units/s)", "unit": "units/s", - "type": "int", + "type": "float", "default_value": 40, "minimum_value": "0", "minimum_value_warning": "0", @@ -283,7 +283,7 @@ class ChangeAtZ(Script): "label": "Retract Length", "description": "New Retract Length (units)", "unit": "units", - "type": "int", + "type": "float", "default_value": 6, "minimum_value": "0", "minimum_value_warning": "0", @@ -308,12 +308,12 @@ class ChangeAtZ(Script): self.setIntSettingIfEnabled(caz_instance, "g1_Change_flowrate", "flowrate", "g2_flowrate") self.setIntSettingIfEnabled(caz_instance, "g3_Change_flowrateOne", "flowrateOne", "g4_flowrateOne") self.setIntSettingIfEnabled(caz_instance, "g5_Change_flowrateTwo", "flowrateTwo", "g6_flowrateTwo") - self.setIntSettingIfEnabled(caz_instance, "h1_Change_bedTemp", "bedTemp", "h2_bedTemp") - self.setIntSettingIfEnabled(caz_instance, "i1_Change_extruderOne", "extruderOne", "i2_extruderOne") - self.setIntSettingIfEnabled(caz_instance, "i3_Change_extruderTwo", "extruderTwo", "i4_extruderTwo") + self.setFloatSettingIfEnabled(caz_instance, "h1_Change_bedTemp", "bedTemp", "h2_bedTemp") + 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") - self.setIntSettingIfEnabled(caz_instance, "caz_change_retractfeedrate", "retractfeedrate", "caz_retractfeedrate") - self.setIntSettingIfEnabled(caz_instance, "caz_change_retractlength", "retractlength", "caz_retractlength") + self.setFloatSettingIfEnabled(caz_instance, "caz_change_retractfeedrate", "retractfeedrate", "caz_retractfeedrate") + self.setFloatSettingIfEnabled(caz_instance, "caz_change_retractlength", "retractlength", "caz_retractlength") # see if we're applying to a single layer or to all layers hence forth caz_instance.IsApplyToSingleLayer = self.getSettingValueByKey("c_behavior") == "single_layer" @@ -323,7 +323,7 @@ class ChangeAtZ(Script): # change our target based on what we're targeting caz_instance.TargetLayer = self.getIntSettingByKey("b_targetL", None) - caz_instance.TargetZ = self.getIntSettingByKey("b_targetZ", None) + caz_instance.TargetZ = self.getFloatSettingByKey("b_targetZ", None) # run our script return caz_instance.execute(data) @@ -345,6 +345,23 @@ class ChangeAtZ(Script): # set our value in the target settings caz_instance.TargetValues[target] = value + # Sets the given TargetValue in the ChangeAtZ instance if the trigger is specified + def setFloatSettingIfEnabled(self, caz_instance, trigger, target, setting): + + # stop here if our trigger isn't enabled + if not self.getSettingValueByKey(trigger): + return + + # get our value from the settings + value = self.getFloatSettingByKey(setting, None) + + # skip if there's no value or we can't interpret it + if value is None: + return + + # set our value in the target settings + caz_instance.TargetValues[target] = value + # Returns the given settings value as an integer or the default if it cannot parse it def getIntSettingByKey(self, key, default): @@ -354,6 +371,14 @@ class ChangeAtZ(Script): except: return default + # Returns the given settings value as an integer or the default if it cannot parse it + def getFloatSettingByKey(self, key, default): + + # change our target based on what we're targeting + try: + return float(self.getSettingValueByKey(key)) + except: + return default # The primary ChangeAtZ class that does all the gcode editing. This was broken out into an # independent class so it could be debugged using a standard IDE @@ -408,7 +433,7 @@ class ChangeAtZProcessor: self.processLayerHeight(line) # skip this line if we're not there yet - if not self.isTargetLayerOrHeight(line): + if not self.isTargetLayerOrHeight(): # read any settings we might need self.processSetting(line) @@ -599,7 +624,7 @@ class ChangeAtZProcessor: return default # Determines if the current line is at or below the target required to start modifying - def isTargetLayerOrHeight(self, line): + def isTargetLayerOrHeight(self): # target selected by layer no. if self.IsTargetByLayer: @@ -650,7 +675,7 @@ class ChangeAtZProcessor: return # get our value from the command - current_z = self.getIntValue(line_no_comments, "Z", None) + current_z = self.getFloatValue(line_no_comments, "Z", None) # stop if there's no change if current_z == self.CurrentZ: @@ -767,7 +792,7 @@ class ChangeAtZProcessor: return new_line # get our desired retract length - retract_length = int(self.TargetValues["retractlength"]) + retract_length = float(self.TargetValues["retractlength"]) # subtract the difference between the default and the desired extrude_length -= (retract_length - self.RetractLength) @@ -819,7 +844,7 @@ class ChangeAtZProcessor: return new_line # get our desired retract feed rate - retract_feed_rate = int(self.TargetValues["retractfeedrate"]) + retract_feed_rate = float(self.TargetValues["retractfeedrate"]) # convert to units/min retract_feed_rate *= 60 @@ -896,11 +921,11 @@ def debug(): caz_instance.reset() caz_instance.IsTargetByLayer = False - caz_instance.TargetZ = 10 - caz_instance.TargetValues["bedTemp"] = 75 + caz_instance.TargetZ = 10.5 + caz_instance.TargetValues["bedTemp"] = 75.111 caz_instance.TargetValues["printspeed"] = 150 - caz_instance.TargetValues["retractfeedrate"] = 40 - caz_instance.TargetValues["retractlength"] = 10 + caz_instance.TargetValues["retractfeedrate"] = 40.555 + caz_instance.TargetValues["retractlength"] = 10.3333 # and again gcode = debug_iteration(gcode, caz_instance)