mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-10-09 16:51:12 +00:00
Belt printer: retire the redundant and unused options
Removed, with the keys added to handle_legacy()'s ignore list so saved
profiles and 3MFs keep loading:
- belt_slice_rotation_global and preslice_remap_global. Both were only
consulted when belt_preslice_global ("Global mesh transforms") was off,
which no profile does; belt_preslice_global is now the single global
mode and is presumed on everywhere the old flags were ORed in
(PrintObjectSlice, BeltBackTransform, BeltGCode, Print::process,
PrintApply). The Belt tilt row is axis + angle only.
- preslice_remap_x/y/z. No profile used the pre-slice axis remap; the belt
tilt axis plus the G-code axis remap cover the machines that exist, and
its implementation only agreed with itself for a plain swap (matrix
columns vs remap_bbox rows). BeltTransformPipeline::build_preslice_remap,
remap_bbox and has_preslice_remap are gone, the forward transform is the
rotation, and the G-code header no longer carries the remap.
- belt_support_z_offset_mode. Saved and invalidated steps, but no support
generator read it.
- first_layer_plane and first_layer_plane_offset, with FirstLayerPlane.cpp.
On every shipped configuration the band is measured from the belt
surface (GCode::belt_height_above_floor) and the evaluator was only
reached for an explicit XY/YZ/XZ choice or a non-zero offset, which
nobody set. first_layer_plane_thickness stays as the band unit,
relabelled "First layer band thickness".
UI: the Machine frame transforms group is five single-option rows (G-code
remap X / Y / Z, Decouple machine-frame tilt, Machine-frame tilt angle;
the angle row is shown only when decoupled) instead of two multi-column
lines, and the remap fields carry full labels.
Also carries the phong.fs struct fix from #16226 so the worktree build
links its shaders.
libslic3r_tests and fff_print_tests pass; clang-tidy diff check clean;
orca_profile_tool.py check clean.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5.1
parent
199758f67f
commit
8039d4d2ac
+15
-121
@@ -404,25 +404,6 @@ static t_config_enum_values s_keys_map_BeltSupportFloorMode {
|
||||
};
|
||||
CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(BeltSupportFloorMode)
|
||||
|
||||
static t_config_enum_values s_keys_map_BeltSupportZOffsetMode {
|
||||
{ "none", int(BeltSupportZOffsetMode::None) },
|
||||
{ "unconditional", int(BeltSupportZOffsetMode::Unconditional) },
|
||||
{ "raft_only", int(BeltSupportZOffsetMode::RaftOnly) },
|
||||
};
|
||||
CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(BeltSupportZOffsetMode)
|
||||
|
||||
static t_config_enum_values s_keys_map_FirstLayerPlaneMode {
|
||||
{ "auto", int(FirstLayerPlaneMode::Auto) },
|
||||
{ "xy", int(FirstLayerPlaneMode::XY) },
|
||||
{ "yz", int(FirstLayerPlaneMode::YZ) },
|
||||
{ "xz", int(FirstLayerPlaneMode::XZ) },
|
||||
{ "belt_affine", int(FirstLayerPlaneMode::BeltAffine) },
|
||||
// Back-compat alias: pre-rotation builds serialised this mode as
|
||||
// "belt_shear". Accept it on parse so old 3MFs / presets keep loading.
|
||||
{ "belt_shear", int(FirstLayerPlaneMode::BeltAffine) },
|
||||
};
|
||||
CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(FirstLayerPlaneMode)
|
||||
|
||||
static t_config_enum_values s_keys_map_SupportMaterialPattern {
|
||||
{ "rectilinear", smpRectilinear },
|
||||
{ "rectilinear-grid", smpRectilinearGrid },
|
||||
@@ -7425,16 +7406,6 @@ void PrintConfigDef::init_fff_params()
|
||||
def->mode = comAdvanced;
|
||||
def->set_default_value(new ConfigOptionFloat(45.));
|
||||
|
||||
def = this->add("belt_slice_rotation_global", coBool);
|
||||
def->label = L("Global");
|
||||
def->category = L("Printable space");
|
||||
def->tooltip = L("Treat the slicing rotation as part of the global forward transform "
|
||||
"that BeltBackTransform inverts before the machine-frame remap. "
|
||||
"Required for rotation-mode belt printers. "
|
||||
"Defaults to on because virtually all rotation-mode printers need it.");
|
||||
def->mode = comAdvanced;
|
||||
def->set_default_value(new ConfigOptionBool(true));
|
||||
|
||||
def = this->add("belt_frame_tilt_decouple", coBool);
|
||||
def->label = L("Decouple machine-frame tilt");
|
||||
def->category = L("Printable space");
|
||||
@@ -7458,7 +7429,7 @@ void PrintConfigDef::init_fff_params()
|
||||
def->mode = comExpert;
|
||||
def->set_default_value(new ConfigOptionFloat(45.));
|
||||
|
||||
// G-code axis remap with sign
|
||||
// G-code axis remap with sign. Each field is its own row in the settings tab.
|
||||
auto add_belt_remap = [this](const char *key, const char *label, const char *tooltip,
|
||||
RemapAxis default_axis, ConfigOptionMode mode = comSimple) {
|
||||
auto def = this->add(key, coEnum);
|
||||
@@ -7472,39 +7443,9 @@ void PrintConfigDef::init_fff_params()
|
||||
def->set_default_value(new ConfigOptionEnum<RemapAxis>(default_axis));
|
||||
};
|
||||
|
||||
add_belt_remap("preslice_remap_x", "X",
|
||||
"Before slicing, which model-space axis becomes the slicer's X axis. "
|
||||
"Use this to re-orient the coordinate system so the slicer's XY plane matches "
|
||||
"your belt printer's physical bed plane. For a printer whose bed is in the XZ plane, "
|
||||
"set Y to +Z and Z to +Y (or -Y) to swap the vertical and belt-travel axes. "
|
||||
"Default +X: no change.",
|
||||
RemapAxis::PosX, comDevelop);
|
||||
add_belt_remap("preslice_remap_y", "Y",
|
||||
"Before slicing, which model-space axis becomes the slicer's Y axis. "
|
||||
"The slicer treats Y as one of the two horizontal bed axes. If your physical "
|
||||
"belt surface runs along the Z axis, map Y to +Z here so the slicer slices "
|
||||
"along the correct plane. Default +Y: no change.",
|
||||
RemapAxis::PosY, comDevelop);
|
||||
add_belt_remap("preslice_remap_z", "Z",
|
||||
"Before slicing, which model-space axis becomes the slicer's Z axis (layer stacking direction). "
|
||||
"The slicer builds layers upward along this axis. If your printer's layer-stacking "
|
||||
"direction is the physical Y axis, map Z to +Y (or -Y for inverted direction). "
|
||||
"Rev mode mirrors relative to the build volume maximum. Default +Z: no change.",
|
||||
RemapAxis::PosZ, comDevelop);
|
||||
|
||||
def = this->add("preslice_remap_global", coBool);
|
||||
def->label = L("Global");
|
||||
def->category = L("Printable space");
|
||||
def->tooltip = L("When enabled, the pre-slice axis remap accounts for each object's bed position. "
|
||||
"Without this, the remap is applied locally around each object's center, so "
|
||||
"objects at different positions don't get a position-dependent contribution. "
|
||||
"Mirrors the 'Global' option on the belt slicing rotation, but for the remap.");
|
||||
def->mode = comDevelop;
|
||||
def->set_default_value(new ConfigOptionBool(false));
|
||||
|
||||
add_belt_remap("gcode_remap_x", "X", "Which slicing axis maps to machine X in G-code output. Applied AFTER slicing, during G-code generation.", RemapAxis::PosX, comDevelop);
|
||||
add_belt_remap("gcode_remap_y", "Y", "Which slicing axis maps to machine Y in G-code output. Applied AFTER slicing, during G-code generation.", RemapAxis::PosY, comDevelop);
|
||||
add_belt_remap("gcode_remap_z", "Z", "Which slicing axis maps to machine Z in G-code output. Applied AFTER slicing, during G-code generation.", RemapAxis::PosZ, comDevelop);
|
||||
add_belt_remap("gcode_remap_x", "G-code remap X", "Which slicing axis maps to machine X in G-code output. Applied AFTER slicing, during G-code generation.", RemapAxis::PosX, comDevelop);
|
||||
add_belt_remap("gcode_remap_y", "G-code remap Y", "Which slicing axis maps to machine Y in G-code output. Applied AFTER slicing, during G-code generation.", RemapAxis::PosY, comDevelop);
|
||||
add_belt_remap("gcode_remap_z", "G-code remap Z", "Which slicing axis maps to machine Z in G-code output. Applied AFTER slicing, during G-code generation.", RemapAxis::PosZ, comDevelop);
|
||||
|
||||
// The machine-frame G-code transform (shear + scale) is no longer configured
|
||||
// by per-axis keys: it is derived from the belt tilt (belt_slice_rotation axis
|
||||
@@ -7528,53 +7469,14 @@ void PrintConfigDef::init_fff_params()
|
||||
def->mode = comExpert;
|
||||
def->set_default_value(new ConfigOptionBool(true));
|
||||
|
||||
// First-layer plane: which surface defines "first layer" for fan / speed /
|
||||
// accel decisions. On belt printers the slicing-frame layer 0 is a tilted
|
||||
// slab that no longer corresponds to the physical first printed layer.
|
||||
// Auto picks BeltAffine when any belt-side affine transform is active
|
||||
// (Z shear or slicing rotation), otherwise XY (legacy).
|
||||
def = this->add("first_layer_plane", coEnum);
|
||||
def->label = L("First layer plane");
|
||||
def->category = L("Printable space");
|
||||
def->tooltip = L("Selects the reference plane used to decide which extrusions get "
|
||||
"first-layer settings (no fan, slow speed, initial-layer accel/jerk, "
|
||||
"deferred temperature drop). On belt printers a single slicing layer "
|
||||
"contains paths at many machine-Z values, so layer-index based detection "
|
||||
"fails. Auto resolves to Belt affine plane when any belt-side affine "
|
||||
"transform (Z shear or slicing rotation) is active, otherwise XY (legacy). "
|
||||
"Pick XY explicitly to opt out and force the legacy slicing-layer-0 "
|
||||
"detection.");
|
||||
def->enum_keys_map = &ConfigOptionEnum<FirstLayerPlaneMode>::get_enum_values();
|
||||
def->enum_values = {"auto", "xy", "yz", "xz", "belt_affine"};
|
||||
def->enum_labels = {L("Auto"), L("XY (machine bed)"), L("YZ"), L("XZ"), L("Belt affine plane")};
|
||||
def->mode = comExpert;
|
||||
// Auto, not BeltAffine: BeltAffine activates the plane evaluator unconditionally, so on a
|
||||
// non-belt printer on_first_layer(point) stopped agreeing with the legacy slicing-layer-0
|
||||
// test and first-layer speeds were skipped (brim printed at the volumetric fallback rather
|
||||
// than initial_layer_speed). Auto resolves to BeltAffine only when belt_printer is set with
|
||||
// a non-zero slicing rotation, and to XY (evaluator inactive, legacy behaviour) otherwise --
|
||||
// which is what this option's own description promises.
|
||||
def->set_default_value(new ConfigOptionEnum<FirstLayerPlaneMode>(FirstLayerPlaneMode::Auto));
|
||||
|
||||
def = this->add("first_layer_plane_offset", coFloat);
|
||||
def->label = L("Belt plane offset");
|
||||
def->category = L("Printable space");
|
||||
def->tooltip = L("Shifts the first-layer plane along its normal (mm). For axis-aligned "
|
||||
"planes this is just a coordinate shift. Positive values move the plane "
|
||||
"away from the belt surface (deeper into the model).");
|
||||
def->sidetext = L("mm");
|
||||
def->min = -1000;
|
||||
def->max = 1000;
|
||||
def->mode = comAdvanced;
|
||||
def->set_default_value(new ConfigOptionFloat(0.0));
|
||||
|
||||
def = this->add("first_layer_plane_thickness", coFloat);
|
||||
def->label = L("Plane band thickness");
|
||||
def->label = L("First layer band thickness");
|
||||
def->category = L("Printable space");
|
||||
def->tooltip = L("Thickness of one 'band' relative to the first-layer plane, in mm. "
|
||||
"Used as the unit by which 'No cooling for the first N layers' (and "
|
||||
"similar layer-count thresholds) is multiplied when the first-layer "
|
||||
"plane is active. -1 means use initial_layer_print_height.");
|
||||
def->tooltip = L("Belt printers only. Every tilted layer touches the belt, so the first-layer "
|
||||
"settings apply to a band above the belt surface rather than to the first "
|
||||
"slicing layer. This is the thickness of one band, in mm: the unit by which "
|
||||
"'No cooling for the first N layers' and similar layer-count thresholds are "
|
||||
"multiplied. -1 means use the first layer height.");
|
||||
def->sidetext = L("mm");
|
||||
def->min = -1;
|
||||
def->max = 100;
|
||||
@@ -7605,19 +7507,6 @@ void PrintConfigDef::init_fff_params()
|
||||
def->set_default_value(new ConfigOptionEnum<BeltSupportFloorMode>(BeltSupportFloorMode::GeneratorOnly));
|
||||
}
|
||||
|
||||
{
|
||||
auto def = this->add("belt_support_z_offset_mode", coEnum);
|
||||
def->label = L("Z offset mode");
|
||||
def->category = L("Printable space");
|
||||
def->tooltip = L("How global Z offset is applied to support layers for belt printers with global shear. "
|
||||
"'None' = don't offset. 'Unconditional' = offset all layers. 'Raft only' = only offset raft layers.");
|
||||
def->enum_keys_map = &ConfigOptionEnum<BeltSupportZOffsetMode>::get_enum_values();
|
||||
def->enum_values = {"none", "unconditional", "raft_only"};
|
||||
def->enum_labels = {L("None"), L("Unconditional"), L("Raft only")};
|
||||
def->mode = comExpert;
|
||||
def->set_default_value(new ConfigOptionEnum<BeltSupportZOffsetMode>(BeltSupportZOffsetMode::Unconditional));
|
||||
}
|
||||
|
||||
def = this->add("enable_belt_purge_tower", coBool);
|
||||
def->label = L("Enable belt purge tower");
|
||||
def->category = L("Multimaterial");
|
||||
@@ -9793,6 +9682,11 @@ void PrintConfigDef::handle_legacy(t_config_option_key &opt_key, std::string &va
|
||||
"smooth_coefficient", "overhang_totally_speed", "silent_mode",
|
||||
"overhang_speed_classic",
|
||||
"anisotropic_surfaces", // superseded by top_surface_fill_order / bottom_surface_fill_order
|
||||
// Belt printer keys retired before the first release: the global switches collapsed
|
||||
// into belt_preslice_global, the pre-slice axis remap and the support Z offset mode
|
||||
// were removed.
|
||||
"belt_slice_rotation_global", "preslice_remap_x", "preslice_remap_y", "preslice_remap_z", "preslice_remap_global",
|
||||
"belt_support_z_offset_mode", "first_layer_plane", "first_layer_plane_offset",
|
||||
};
|
||||
|
||||
if (ignore.find(opt_key) != ignore.end()) {
|
||||
|
||||
Reference in New Issue
Block a user