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:
Gina Häußge 2016-08-19 09:57:19 +02:00
parent aaeb2ef4db
commit 650cfac1cf
3 changed files with 22 additions and 1525 deletions

View file

@ -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:

View file

@ -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