From 7c74594f0677e45e6c9218d3b8735cdf32da8a7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Wed, 11 Jan 2017 14:50:09 +0100 Subject: [PATCH] Adjusted Cura profile handling to match latest Cura Legacy version * Added/changed mappings of profile to engine settings to match Cura Legacy mapping: * perimeterBeforeInfill: taken from perimeter_before_infill (new, fixes #1693) * skinSpeed: taken from solidarea_speed (new) * raftAirGapLayer0: sum of raft_airgap and raft_airgap_all * raftAirGap: taken from raft_airgap_all (new) * raftFanSpeed: changed to 0 * raftSurfaceThickness: taken from raft_surface_thickness (new) * raftSurfaceLinewidth & raftSurfaceLineSpacing: taken from raft_surface_linewidth (new) * Mach3 Gcode Flavor replaces S parameter with P parameter in temperature commands within generated GCODE, like in Cura Legacy --- src/octoprint/plugins/cura/profile.py | 41 ++++++++++++++++++--------- 1 file changed, 27 insertions(+), 14 deletions(-) diff --git a/src/octoprint/plugins/cura/profile.py b/src/octoprint/plugins/cura/profile.py index 9e3ce7be..65c81e08 100644 --- a/src/octoprint/plugins/cura/profile.py +++ b/src/octoprint/plugins/cura/profile.py @@ -63,12 +63,14 @@ defaults = dict( solid_top=True, solid_bottom=True, fill_overlap=15, + perimeter_before_infill=False, # speeds print_speed=50.0, travel_speed=150.0, bottom_layer_speed=20.0, infill_speed=0.0, + solidarea_speed=0.0, outer_shell_speed=0.0, inner_shell_speed=0.0, @@ -117,8 +119,11 @@ defaults = dict( raft_base_linewidth=1.0, raft_interface_thickness=0.27, raft_interface_linewidth=0.4, + raft_airgap_all=0.0, raft_airgap=0.22, raft_surface_layers=2, + raft_surface_thickness=0.27, + raft_surface_linewidth=0.4, # repairing fix_horrible_union_all_type_a=True, @@ -754,9 +759,13 @@ class Profile(object): prefix = "" + gcode_parameter_key = "S" + if self.get("gcode_flavor") == GcodeFlavors.MACH3: + gcode_parameter_key = "P" + e_steps = self.get_float("steps_per_e") if e_steps > 0: - prefix += "M92 E{e_steps}\n" % (e_steps) + prefix += "M92 E{e_steps}\n".format(e_steps=e_steps) temp = self.get_float("print_temperature") bed_temp = 0 @@ -765,30 +774,30 @@ class Profile(object): include_bed_temp = bed_temp > 0 and not "{print_bed_temperature}" in Profile.regex_strip_comments.sub("", contents) if include_bed_temp: - prefix += "M140 S{bed_temp}\n".format(bed_temp=bed_temp) + prefix += "M140 {param}{bed_temp}\n".format(param=gcode_parameter_key, bed_temp=bed_temp) if temp > 0 and not "{print_temperature}" in Profile.regex_strip_comments.sub("", contents): if extruder_count > 0: - def temp_line(temp, extruder, template): + def temp_line(temp, extruder, param, template): t = temp if extruder > 0: print_temp = self.get_float("print_temperature%d" % (extruder + 1)) if print_temp > 0: t = print_temp - return template.format(extruder=extruder, temp=t) + return template.format(extruder=extruder, temp=t, param=param) prefix_preheat = "" prefix_waitheat = "" for n in range(0, extruder_count): if n > 0: - prefix_preheat += temp_line(temp, n, "M104 T{extruder} S{temp}\n") - prefix_waitheat += temp_line(temp, n, "M109 T{extruder} S{temp}\n") + prefix_preheat += temp_line(temp, n, gcode_parameter_key, "M104 T{extruder} {param}{temp}\n") + prefix_waitheat += temp_line(temp, n, gcode_parameter_key, "M109 T{extruder} {param}{temp}\n") prefix += prefix_preheat + prefix_waitheat + "T0\n" else: - prefix += "M109 S{temp}\n".format(temp=temp) + prefix += "M109 {param}{temp}\n".format(param=gcode_parameter_key, temp=temp) if include_bed_temp: - prefix += "M190 S{bed_temp}\n".format(bed_temp=bed_temp) + prefix += "M190 {param}{bed_temp}\n".format(param=gcode_parameter_key, bed_temp=bed_temp) return prefix @@ -871,12 +880,14 @@ class Profile(object): "downSkinCount": solid_layer_count if self.get_boolean("solid_bottom") else 0, "upSkinCount": solid_layer_count if self.get_boolean("solid_top") else 0, "infillOverlap": self.get_int("fill_overlap"), + "perimeterBeforeInfill": 1 if self.get_boolean("perimeter_before_infill") else 0, "initialSpeedupLayers": int(4), "initialLayerSpeed": self.get_int("bottom_layer_speed"), "printSpeed": self.get_int("print_speed"), "infillSpeed": self.get_int("infill_speed") if self.get_int("infill_speed") > 0 else self.get_int("print_speed"), "inset0Speed": self.get_int("outer_shell_speed") if self.get_int("outer_shell_speed") > 0 else self.get_int("print_speed"), "insetXSpeed": self.get_int("inner_shell_speed") if self.get_int("inner_shell_speed") > 0 else self.get_int("print_speed"), + "skinSpeed": self.get_int("solidarea_speed") if self.get_int("solidarea_speed") > 0 > 0 else self.get_int("print_speed"), "moveSpeed": self.get_int("travel_speed"), "fanSpeedMin": self.get_int("fan_speed") if self.get_boolean("fan_enabled") else 0, "fanSpeedMax": self.get_int("fan_speed_max") if self.get_boolean("fan_enabled") else 0, @@ -892,13 +903,14 @@ class Profile(object): "retractionAmountExtruderSwitch": self.get_microns("retraction_dual_amount"), "retractionZHop": self.get_microns("retraction_hop"), "minimalExtrusionBeforeRetraction": self.get_microns("retraction_minimal_extrusion"), - "enableCombing": 1 if self.get("retraction_combing") == RetractionCombingTypes.ALL else (2 if self.get("retraction_combing") == RetractionCombingTypes.NO_SKIN else 0), "multiVolumeOverlap": self.get_microns("overlap_dual"), "objectSink": max(0, self.get_microns("object_sink")), "minimalLayerTime": self.get_int("cool_min_layer_time"), "minimalFeedrate": self.get_int("cool_min_feedrate"), "coolHeadLift": 1 if self.get_boolean("cool_head_lift") else 0, + "enableCombing": 1 if self.get("retraction_combing") == RetractionCombingTypes.ALL else (2 if self.get("retraction_combing") == RetractionCombingTypes.NO_SKIN else 0), + # model positioning "posx": self.get_pos_x() * 1000, # in microns "posy": self.get_pos_y() * 1000, # in microns @@ -952,12 +964,13 @@ class Profile(object): settings["raftInterfaceThickness"] = self.get_microns("raft_interface_thickness") settings["raftInterfaceLinewidth"] = self.get_microns("raft_interface_linewidth") settings["raftInterfaceLineSpacing"] = self.get_microns("raft_interface_linewidth") * 2 - settings["raftAirGapLayer0"] = self.get_microns("raft_airgap") + settings["raftAirGapLayer0"] = self.get_microns("raft_airgap") + self.get_microns("raft_airgap_all") + settings["raftAirGap"] = self.get_microns("raft_airgap_all") settings["raftBaseSpeed"] = self.get_int("bottom_layer_speed") - settings["raftFanSpeed"] = 100 - settings["raftSurfaceThickness"] = settings["raftInterfaceThickness"] - settings["raftSurfaceLinewidth"] = int(edge_width * 1000) - settings["raftSurfaceLineSpacing"] = int(edge_width * 1000 * 0.9) + settings["raftFanSpeed"] = 0 + settings["raftSurfaceThickness"] = self.get_microns("raft_surface_thickness") + settings["raftSurfaceLinewidth"] = self.get_microns("raft_surface_linewidth") + settings["raftSurfaceLineSpacing"] = self.get_microns("raft_surface_linewidth") settings["raftSurfaceLayers"] = self.get_int("raft_surface_layers") settings["raftSurfaceSpeed"] = self.get_int("bottom_layer_speed")