Removed semi-finished CuraEngine 15.06+ implementation
We'll need to turn that into a separate plugin and while at it also move away from the generalized slicing profile format. That's more a topic for after 1.3.0 however, so for now, just clean this up.
This commit is contained in:
parent
aaeb2ef4db
commit
650cfac1cf
3 changed files with 22 additions and 1525 deletions
|
|
@ -265,22 +265,12 @@ class CuraPlugin(octoprint.plugin.SlicerPlugin,
|
|||
|
||||
working_dir = os.path.dirname(executable)
|
||||
|
||||
engine_settings = self._convert_to_engine(profile_path, printer_profile, posX, posY)
|
||||
|
||||
# Start building the argument list for the CuraEngine command execution
|
||||
args = [executable, '-v', '-p']
|
||||
|
||||
# Get the CuraEngine version out of the "usage" line that is gotten when calling the CuraEngine with the -h argument
|
||||
new_engine = self._is_new_engine_version(executable)
|
||||
|
||||
# If the CuraEngine is the new version, add the JSON file path as argument
|
||||
if new_engine:
|
||||
args += ['-j', os.path.join(self._basefolder, "profiles", "fdmprinter.json")]
|
||||
|
||||
profile = Profile(self._load_profile(profile_path), printer_profile, posX, posY)
|
||||
|
||||
engine_settings = self._convert_to_engine(profile, new_engine=new_engine)
|
||||
|
||||
# Add the settings (sorted alphabetically) to the command
|
||||
|
||||
for k, v in sorted(engine_settings.items(), key=lambda s: s[0]):
|
||||
args += ["-s", "%s=%s" % (k, str(v))]
|
||||
args += ["-o", machinecode_path, model_path]
|
||||
|
|
@ -385,15 +375,10 @@ class CuraPlugin(octoprint.plugin.SlicerPlugin,
|
|||
analysis["filament"][tool_key] = dict()
|
||||
|
||||
if profile.get_float("filament_diameter") != None:
|
||||
# The new CuraEngine outputs the "Filament" value as volume independently from the Gcode flavor
|
||||
if new_engine:
|
||||
if profile.get("gcode_flavor") == GcodeFlavors.ULTIGCODE or profile.get("gcode_flavor") == GcodeFlavors.REPRAP_VOLUME:
|
||||
analysis["filament"][tool_key] = _get_usage_from_volume(filament, profile.get_float("filament_diameter"))
|
||||
# The old CuraEngine outputs the "Filament" value as volume only for ULTIGCODE and REPRAP_VOLUME
|
||||
else:
|
||||
if profile.get("gcode_flavor") == GcodeFlavors.ULTIGCODE or profile.get("gcode_flavor") == GcodeFlavors.REPRAP_VOLUME:
|
||||
analysis["filament"][tool_key] = _get_usage_from_volume(filament, profile.get_float("filament_diameter"))
|
||||
else:
|
||||
analysis["filament"][tool_key] = _get_usage_from_length(filament, profile.get_float("filament_diameter"))
|
||||
analysis["filament"][tool_key] = _get_usage_from_length(filament, profile.get_float("filament_diameter"))
|
||||
|
||||
except:
|
||||
pass
|
||||
|
|
@ -456,28 +441,9 @@ class CuraPlugin(octoprint.plugin.SlicerPlugin,
|
|||
with octoprint.util.atomic_write(path, "wb") as f:
|
||||
yaml.safe_dump(profile, f, default_flow_style=False, indent=" ", allow_unicode=True)
|
||||
|
||||
def _convert_to_engine(self, profile, new_engine):
|
||||
if new_engine:
|
||||
return profile.convert_to_new_engine()
|
||||
else:
|
||||
return profile.convert_to_engine()
|
||||
|
||||
def _is_new_engine_version(self, executable):
|
||||
import sarge
|
||||
|
||||
command = [executable, "-j", os.path.join(self._basefolder, "profiles", "fdmprinter.json")]
|
||||
p = sarge.run(command, stdout=sarge.Capture(), stderr=sarge.Capture())
|
||||
if p.returncode != 0:
|
||||
self._logger.warn("Could not run {} -j, returned {}".format(executable, p.returncode))
|
||||
self._logger.info(u"Assuming pre 15.06 version of CuraEngine.")
|
||||
return False
|
||||
|
||||
for line in p.stderr.read().split('\n'):
|
||||
if "unknown option: j" in line.strip().lower():
|
||||
self._logger.info(u"Using pre 15.06 version of CuraEngine.")
|
||||
return False
|
||||
self._logger.info(u"Using post 15.06 version of CuraEngine.")
|
||||
return True
|
||||
def _convert_to_engine(self, profile_path, printer_profile, posX, posY):
|
||||
profile = Profile(self._load_profile(profile_path), printer_profile, posX, posY)
|
||||
return profile.convert_to_engine()
|
||||
|
||||
def _sanitize_name(name):
|
||||
if name is None:
|
||||
|
|
|
|||
|
|
@ -404,32 +404,6 @@ class Profile(object):
|
|||
}
|
||||
)
|
||||
|
||||
# Translation dict for new CuraEngine option names
|
||||
new_engine_options = dict(
|
||||
fill_sparse_density="fill_density",
|
||||
machine_nozzle_size="nozzle_size",
|
||||
material_print_temperature="print_temperature",
|
||||
#support_type="support", # In conflict with "support_type" from old CuraEngine
|
||||
support_pattern="support_type",
|
||||
adhesion_type="platform_adhesion",
|
||||
material_diameter="filament_diameter",
|
||||
material_flow="filament_flow",
|
||||
speed_travel="travel_speed",
|
||||
speed_layer_0="bottom_layer_speed",
|
||||
speed_print="print_speed",
|
||||
speed_infill="infill_speed",
|
||||
speed_wall_0="outer_shell_speed",
|
||||
speed_wall_x="inner_shell_speed",
|
||||
cool_fan_enabled="fan_enabled",
|
||||
cool_fan_full_at_height="fan_full_height",
|
||||
cool_fan_speed="fan_speed",
|
||||
cool_fan_speed_max="fan_speed_max",
|
||||
cool_lift_head="cool_head_lift",
|
||||
cool_min_speed="cool_min_feedrate",
|
||||
machine_start_gcode="start_gcode",
|
||||
machine_end_gcode="end_gcode",
|
||||
machine_gcode_flavor="gcode_flavor")
|
||||
|
||||
result = dict()
|
||||
for section in config.sections():
|
||||
|
||||
|
|
@ -482,10 +456,6 @@ class Profile(object):
|
|||
# if the key has to be translated to a new value, do that now
|
||||
key = translated_options[key]
|
||||
|
||||
if key in new_engine_options:
|
||||
# if the key has to be translated from the new CuraEngine versions, do that now
|
||||
key = new_engine_options[key]
|
||||
|
||||
if key in value_conversions and value in value_conversions[key]:
|
||||
value = value_conversions[key][value]
|
||||
|
||||
|
|
@ -761,7 +731,7 @@ class Profile(object):
|
|||
|
||||
return pre + str(f)
|
||||
|
||||
def get_gcode(self, key, new_engine=False):
|
||||
def get_gcode(self, key):
|
||||
prefix = ""
|
||||
postfix = ""
|
||||
|
||||
|
|
@ -772,10 +742,7 @@ class Profile(object):
|
|||
|
||||
if key == "start_gcode":
|
||||
contents = self.get_gcode_template("start_gcode")
|
||||
|
||||
# If using the new CuraEngine, there is no need to extend the start_gcode
|
||||
if not new_engine:
|
||||
prefix += self.get_start_gcode_prefix(contents)
|
||||
prefix += self.get_start_gcode_prefix(contents)
|
||||
|
||||
else:
|
||||
contents = self.get_gcode_template(key)
|
||||
|
|
@ -1030,131 +997,20 @@ class Profile(object):
|
|||
|
||||
return settings
|
||||
|
||||
def convert_to_new_engine(self):
|
||||
|
||||
settings = {
|
||||
"layer_height": self.get_float("layer_height"),
|
||||
"wall_thickness": self.get_float("wall_thickness"),
|
||||
"retraction_enable": self.get_boolean("retraction_enable"),
|
||||
"top_bottom_thickness": self.get_float("solid_layer_thickness"),
|
||||
"fill_sparse_density": self.get_float("fill_density"),
|
||||
"machine_nozzle_size": self.get_float("nozzle_size"),
|
||||
"speed_print": self.get_float("print_speed"),
|
||||
"material_print_temperature": self.get_float("print_temperature"),
|
||||
"material_diameter": self.get_float("filament_diameter"),
|
||||
"material_flow": self.get_float("filament_flow"),
|
||||
"retraction_speed": self.get_float("retraction_speed"),
|
||||
"retraction_amount": self.get_float("retraction_amount") if self.get_boolean("retraction_enable") else 0,
|
||||
"retraction_min_travel": self.get_float("retraction_min_travel"),
|
||||
"retraction_combing": self.get_boolean("retraction_combing"),
|
||||
"retraction_hop": self.get_float("retraction_hop"),
|
||||
"bottom_thickness": self.get_float("bottom_thickness"),
|
||||
"top_layers": self.calculate_solid_layer_count(),
|
||||
"bottom_layers": self.calculate_solid_layer_count(),
|
||||
"speed_travel": self.get_float("travel_speed"),
|
||||
"speed_layer_0": self.get_float("bottom_layer_speed"),
|
||||
"speed_infill": self.get_float("infill_speed") if self.get_float("infill_speed") > 0 else self.get_float("print_speed"),
|
||||
"speed_wall_0": self.get_float("outer_shell_speed") if self.get_float("outer_shell_speed") > 0 else self.get_float("print_speed"), # Translated from "inset0_speed"
|
||||
"speed_wall_x": self.get_float("inner_shell_speed") if self.get_float("inner_shell_speed") > 0 else self.get_float("print_speed"), # Translated from "insetx_speed"
|
||||
"cool_min_layer_time": self.get_float("cool_min_layer_time"),
|
||||
"cool_fan_enabled": self.get_boolean("fan_enabled"),
|
||||
"cool_fan_full_at_height": self.get_int("fan_full_height"),
|
||||
"cool_fan_speed": self.get_float("fan_speed"),
|
||||
"cool_fan_speed_max": self.get_float("fan_speed_max") if self.get_boolean("fan_enabled") else 0,
|
||||
"cool_lift_head": self.get_boolean("cool_head_lift"),
|
||||
"cool_min_speed": self.get_float("cool_min_feedrate"),
|
||||
"skirt_line_count": self.get_int("skirt_line_count"),
|
||||
"fill_overlap": self.get_float("fill_overlap"),
|
||||
"magic_spiralize": self.get_boolean("spiralize"),
|
||||
|
||||
# machine settings
|
||||
|
||||
"machine_width": self.get_float("machine_width"),
|
||||
"machine_depth": self.get_float("machine_depth"),
|
||||
"machine_center_is_zero": self.get_boolean("machine_center_is_zero"),
|
||||
"machine_heated_bed": self.get_boolean("has_heated_bed"),
|
||||
|
||||
# gcodes
|
||||
|
||||
"machine_start_gcode": self.get_gcode("start_gcode", new_engine=True),
|
||||
"machine_end_gcode": self.get_gcode("end_gcode", new_engine=True),
|
||||
}
|
||||
|
||||
# gcode flavor
|
||||
|
||||
settings["machine_gcode_flavor"] = self.get("gcode_flavor")[0]
|
||||
|
||||
# heated bed - The new CuraEngine uses the integer "material_bed_temperature" instead of the boolean "machine_heated_bed"
|
||||
|
||||
if self.get_boolean("has_heated_bed"):
|
||||
settings["material_bed_temperature"] = self.get_float("print_bed_temperature")
|
||||
else:
|
||||
settings["material_bed_temperature"] = 0
|
||||
|
||||
# support
|
||||
|
||||
if self.get("support") == SupportLocationTypes.NONE:
|
||||
settings["support_enable"] = False
|
||||
else:
|
||||
settings["support_enable"] = True
|
||||
settings["support_angle"] = self.get_float("support_angle")
|
||||
settings["support_fill_rate"] = self.get_float("support_fill_rate")
|
||||
settings["support_xy_distance"] = self.get_float("support_xy_distance")
|
||||
settings["support_z_distance"] = self.get_float("support_z_distance")
|
||||
|
||||
# support type
|
||||
|
||||
if self.get("support") == SupportLocationTypes.TOUCHING_BUILDPLATE:
|
||||
settings["support_type"] = "Touching Buildplate"
|
||||
elif self.get("support") == SupportLocationTypes.EVERYWHERE:
|
||||
settings["support_type"] = "Everywhere"
|
||||
|
||||
# support pattern
|
||||
|
||||
if self.get("support_type") == SupportTypes.GRID:
|
||||
settings["support_pattern"] = "Grid"
|
||||
elif self.get("support_type") == SupportTypes.LINES:
|
||||
settings["support_pattern"] = "Lines"
|
||||
|
||||
# adhesion type
|
||||
|
||||
if self.get("platform_adhesion") == PlatformAdhesionTypes.NONE:
|
||||
settings["adhesion_type"] = "None"
|
||||
elif self.get("platform_adhesion") == PlatformAdhesionTypes.BRIM:
|
||||
settings["adhesion_type"] = "Brim"
|
||||
settings["brim_line_count"] = self.get_int("brim_line_count")
|
||||
elif self.get("platform_adhesion") == PlatformAdhesionTypes.RAFT:
|
||||
settings["adhesion_type"] = "Raft"
|
||||
settings["raft_margin"] = self.get_int("raft_margin")
|
||||
settings["raft_line_spacing"] = self.get_float("raft_line_spacing")
|
||||
settings["raft_base_thickness"] = self.get_float("raft_base_thickness")
|
||||
settings["raft_base_linewidth"] = self.get_float("raft_base_linewidth")
|
||||
settings["raft_interface_thickness"] = self.get_float("raft_interface_thickness")
|
||||
settings["raft_interface_linewidth"] = self.get_float("raft_interface_linewidth")
|
||||
settings["raft_airgap"] = self.get_float("raft_airgap")
|
||||
settings["raft_surface_layers"] = self.get_int("raft_surface_layers")
|
||||
|
||||
# skirt
|
||||
|
||||
if self.get_int("skirt_line_count") != 0:
|
||||
settings["skirt_gap"] = self.get_float("skirt_gap")
|
||||
settings["skirt_minimal_length"] = self.get_float("skirt_minimal_length")
|
||||
|
||||
return settings
|
||||
|
||||
def parse_gcode_flavor(value):
|
||||
|
||||
value = value.lower()
|
||||
value = value.lower()
|
||||
|
||||
if "reprap" in value and ("volume" in value or "volumatric" in value):
|
||||
return GcodeFlavors.REPRAP_VOLUME
|
||||
elif "ultigcode" in value:
|
||||
return GcodeFlavors.ULTIGCODE
|
||||
elif "makerbot" in value:
|
||||
return GcodeFlavors.MAKERBOT
|
||||
elif "bfb" in value:
|
||||
return GcodeFlavors.BFB
|
||||
elif "mach3" in value:
|
||||
return GcodeFlavors.MACH3
|
||||
else:
|
||||
return GcodeFlavors.REPRAP
|
||||
if "reprap" in value and ("volume" in value or "volumatric" in value):
|
||||
return GcodeFlavors.REPRAP_VOLUME
|
||||
elif "ultigcode" in value:
|
||||
return GcodeFlavors.ULTIGCODE
|
||||
elif "makerbot" in value:
|
||||
return GcodeFlavors.MAKERBOT
|
||||
elif "bfb" in value:
|
||||
return GcodeFlavors.BFB
|
||||
elif "mach3" in value:
|
||||
return GcodeFlavors.MACH3
|
||||
else:
|
||||
return GcodeFlavors.REPRAP
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue