mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-09-09 10:16:50 +00:00
Honor symbolic default bed types for new printers (#15273)
Co-authored-by: Rodrigo Faselli <162915171+RF47@users.noreply.github.com>
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "Snapmaker",
|
"name": "Snapmaker",
|
||||||
"version": "02.04.00.09",
|
"version": "02.04.00.10",
|
||||||
"force_update": "0",
|
"force_update": "0",
|
||||||
"description": "Snapmaker configurations",
|
"description": "Snapmaker configurations",
|
||||||
"machine_model_list": [
|
"machine_model_list": [
|
||||||
|
|||||||
@@ -184,7 +184,7 @@
|
|||||||
"nozzle_type": "undefine",
|
"nozzle_type": "undefine",
|
||||||
"auxiliary_fan": "0",
|
"auxiliary_fan": "0",
|
||||||
"support_multi_bed_types": "1",
|
"support_multi_bed_types": "1",
|
||||||
"default_bed_type": "4",
|
"default_bed_type": "Textured PEI Plate",
|
||||||
"printable_area": [
|
"printable_area": [
|
||||||
"0.5x1",
|
"0.5x1",
|
||||||
"270.5x1",
|
"270.5x1",
|
||||||
|
|||||||
@@ -983,15 +983,19 @@ BedType Preset::get_default_bed_type(PresetBundle* preset_bundle)
|
|||||||
if (config.has("default_bed_type") && !config.opt_string("default_bed_type").empty()) {
|
if (config.has("default_bed_type") && !config.opt_string("default_bed_type").empty()) {
|
||||||
try {
|
try {
|
||||||
std::string str_bed_type = config.opt_string("default_bed_type");
|
std::string str_bed_type = config.opt_string("default_bed_type");
|
||||||
|
BedType bed_type;
|
||||||
// Try parsing as integer first (legacy format)
|
if (ConfigOptionEnum<BedType>::from_string(str_bed_type, bed_type) &&
|
||||||
|
bed_type > btDefault && bed_type < btCount) {
|
||||||
|
return bed_type;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Try parsing as integer (legacy format)
|
||||||
int bed_type_value = atoi(str_bed_type.c_str());
|
int bed_type_value = atoi(str_bed_type.c_str());
|
||||||
if (bed_type_value > 0) {
|
if (bed_type_value > 0 && bed_type_value < BedType::btCount) {
|
||||||
return BedType(bed_type_value);
|
return BedType(bed_type_value);
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
BOOST_LOG_TRIVIAL(error) << "default_bed_type: invalid bed type: " << str_bed_type;
|
BOOST_LOG_TRIVIAL(error) << "default_bed_type: invalid bed type: " << str_bed_type;
|
||||||
}
|
|
||||||
return BedType::btPEI;
|
return BedType::btPEI;
|
||||||
|
|
||||||
} catch(...) {
|
} catch(...) {
|
||||||
|
|||||||
@@ -2920,6 +2920,16 @@ void PresetBundle::load_selections(AppConfig &config, const PresetPreferences& p
|
|||||||
// If executed due to a Config Wizard update, preferred_printer contains the first newly installed printer, otherwise nullptr.
|
// If executed due to a Config Wizard update, preferred_printer contains the first newly installed printer, otherwise nullptr.
|
||||||
const Preset *preferred_printer = printers.find_system_preset_by_model_and_variant(preferred_selection.printer_model_id, preferred_selection.printer_variant);
|
const Preset *preferred_printer = printers.find_system_preset_by_model_and_variant(preferred_selection.printer_model_id, preferred_selection.printer_variant);
|
||||||
printers.select_preset_by_name(preferred_printer ? preferred_printer->name : initial_printer_profile_name, true);
|
printers.select_preset_by_name(preferred_printer ? preferred_printer->name : initial_printer_profile_name, true);
|
||||||
|
Preset &selected_printer = printers.get_edited_preset();
|
||||||
|
if (selected_printer.printer_technology() == ptFFF) {
|
||||||
|
BedType bed_type = selected_printer.get_default_bed_type(this);
|
||||||
|
const std::string saved_bed_type = config.get_printer_setting(selected_printer.name, "curr_bed_type");
|
||||||
|
const int saved_bed_type_value = atoi(saved_bed_type.c_str());
|
||||||
|
if (saved_bed_type_value > btDefault && saved_bed_type_value < btCount)
|
||||||
|
bed_type = static_cast<BedType>(saved_bed_type_value);
|
||||||
|
project_config.set_key_value("curr_bed_type", new ConfigOptionEnum<BedType>(bed_type));
|
||||||
|
config.set("curr_bed_type", std::to_string(static_cast<int>(bed_type)));
|
||||||
|
}
|
||||||
CNumericLocalesSetter locales_setter;
|
CNumericLocalesSetter locales_setter;
|
||||||
|
|
||||||
// Orca: load from orca_presets
|
// Orca: load from orca_presets
|
||||||
|
|||||||
@@ -184,6 +184,44 @@ TEST_CASE("Printer extruder count tolerates missing nozzle diameter", "[Preset][
|
|||||||
CHECK(bundle.get_printer_extruder_count() == 2);
|
CHECK(bundle.get_printer_extruder_count() == 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_CASE("Selected printer uses its default or saved bed type", "[Preset][Bundle]")
|
||||||
|
{
|
||||||
|
PresetBundle bundle;
|
||||||
|
Preset& printer = add_inmemory_preset(bundle.printers, "Test Printer");
|
||||||
|
printer.is_system = true;
|
||||||
|
printer.config.option<ConfigOptionString>("printer_model")->value = "TEST-MODEL";
|
||||||
|
printer.config.option<ConfigOptionString>("printer_variant")->value = "0.4";
|
||||||
|
printer.config.option<ConfigOptionString>("default_bed_type")->value = "Engineering Plate";
|
||||||
|
|
||||||
|
AppConfig app_config;
|
||||||
|
app_config.set("curr_bed_type", std::to_string(static_cast<int>(btPTE)));
|
||||||
|
PresetBundle::PresetPreferences preferred_selection;
|
||||||
|
BedType expected_bed_type;
|
||||||
|
|
||||||
|
SECTION("New printer uses its symbolic default") {
|
||||||
|
expected_bed_type = btEP;
|
||||||
|
preferred_selection = {"TEST-MODEL", "0.4"};
|
||||||
|
}
|
||||||
|
SECTION("Re-enabled printer uses its saved selection") {
|
||||||
|
expected_bed_type = btPC;
|
||||||
|
preferred_selection = {"TEST-MODEL", "0.4"};
|
||||||
|
app_config.set_printer_setting("Test Printer", "curr_bed_type",
|
||||||
|
std::to_string(static_cast<int>(expected_bed_type)));
|
||||||
|
}
|
||||||
|
SECTION("Existing printer keeps its saved selection after presets reload") {
|
||||||
|
expected_bed_type = btPCT;
|
||||||
|
app_config.set("presets", PRESET_PRINTER_NAME, "Test Printer");
|
||||||
|
app_config.set_printer_setting("Test Printer", "curr_bed_type",
|
||||||
|
std::to_string(static_cast<int>(expected_bed_type)));
|
||||||
|
}
|
||||||
|
|
||||||
|
bundle.load_selections(app_config, preferred_selection);
|
||||||
|
bundle.export_selections(app_config);
|
||||||
|
|
||||||
|
CHECK(bundle.project_config.opt_enum<BedType>("curr_bed_type") == expected_bed_type);
|
||||||
|
CHECK(app_config.get_printer_setting("Test Printer", "curr_bed_type") == std::to_string(static_cast<int>(expected_bed_type)));
|
||||||
|
}
|
||||||
|
|
||||||
TEST_CASE("find_preset resolves a system preset's renamed_from", "[Preset][Rename]")
|
TEST_CASE("find_preset resolves a system preset's renamed_from", "[Preset][Rename]")
|
||||||
{
|
{
|
||||||
RenameTestCollection coll;
|
RenameTestCollection coll;
|
||||||
|
|||||||
Reference in New Issue
Block a user