Source: cura-engine Version: 1:4.13.0-1build1 Severity: normal X-Debbugs-Cc: daniel.bung...@canonical.com
Dear Maintainer, Visible in both Sid and Ubuntu Mantic is the following autopkgtest error: [ERROR] Trying to retrieve setting with no value given: 'adhesion_extruder_nr' See the attached patch, which is just a trivial backport of https://github.com/Ultimaker/CuraEngine/pull/1693 (I submitted this bug twice before, if duplicates show up later for some reason please forgive me) -Dan
Description: Fix ADT - setting with no value given: 'adhesion_extruder_nr' Origin: https://github.com/Ultimaker/CuraEngine/pull/1693/commits/adecda53fff5c77ccf43a54ee37d5654a4032858 Bug-Ubuntu: https://bugs.launchpad.net/bugs/2026769 Bug: https://github.com/Ultimaker/CuraEngine/pull/1693 Forwarded: not-needed Last-Update: 2023-07-10 --- a/src/raft.cpp +++ b/src/raft.cpp @@ -18,7 +18,7 @@ void Raft::generate(SliceDataStorage& storage) { assert(storage.raftOutline.size() == 0 && "Raft polygon isn't generated yet, so should be empty!"); - const Settings& settings = Application::getInstance().current_slice->scene.current_mesh_group->settings.get<ExtruderTrain&>("adhesion_extruder_nr").settings; + const Settings& settings = Application::getInstance().current_slice->scene.current_mesh_group->settings.get<ExtruderTrain&>("raft_base_extruder_nr").settings; const coord_t distance = settings.get<coord_t>("raft_margin"); constexpr bool include_support = true; constexpr bool include_prime_tower = true; @@ -51,16 +51,19 @@ coord_t Raft::getTotalThickness() { - const ExtruderTrain& train = Application::getInstance().current_slice->scene.current_mesh_group->settings.get<ExtruderTrain&>("adhesion_extruder_nr"); - return train.settings.get<coord_t>("raft_base_thickness") - + train.settings.get<size_t>("raft_interface_layers") * train.settings.get<coord_t>("raft_interface_thickness") - + train.settings.get<size_t>("raft_surface_layers") * train.settings.get<coord_t>("raft_surface_thickness"); + const Settings& mesh_group_settings =Application::getInstance().current_slice->scene.current_mesh_group->settings; + const ExtruderTrain& base_train = mesh_group_settings.get<ExtruderTrain&>("raft_base_extruder_nr"); + const ExtruderTrain& interface_train = mesh_group_settings.get<ExtruderTrain&>("raft_interface_extruder_nr"); + const ExtruderTrain& surface_train = mesh_group_settings.get<ExtruderTrain&>("raft_surface_extruder_nr"); + return base_train.settings.get<coord_t>("raft_base_thickness") + + interface_train.settings.get<size_t>("raft_interface_layers") * interface_train.settings.get<coord_t>("raft_interface_thickness") + + surface_train.settings.get<size_t>("raft_surface_layers") * surface_train.settings.get<coord_t>("raft_surface_thickness"); } coord_t Raft::getZdiffBetweenRaftAndLayer1() { const Settings& mesh_group_settings = Application::getInstance().current_slice->scene.current_mesh_group->settings; - const ExtruderTrain& train = mesh_group_settings.get<ExtruderTrain&>("adhesion_extruder_nr"); + const ExtruderTrain& train = mesh_group_settings.get<ExtruderTrain&>("raft_surface_extruder_nr"); if (mesh_group_settings.get<EPlatformAdhesion>("adhesion_type") != EPlatformAdhesion::RAFT) { return 0; @@ -94,12 +97,15 @@ size_t Raft::getTotalExtraLayers() { - const ExtruderTrain& train = Application::getInstance().current_slice->scene.current_mesh_group->settings.get<ExtruderTrain&>("adhesion_extruder_nr"); - if (train.settings.get<EPlatformAdhesion>("adhesion_type") != EPlatformAdhesion::RAFT) + const Settings& mesh_group_settings =Application::getInstance().current_slice->scene.current_mesh_group->settings; + const ExtruderTrain& base_train = mesh_group_settings.get<ExtruderTrain&>("raft_base_extruder_nr"); + const ExtruderTrain& interface_train = mesh_group_settings.get<ExtruderTrain&>("raft_interface_extruder_nr"); + const ExtruderTrain& surface_train = mesh_group_settings.get<ExtruderTrain&>("raft_surface_extruder_nr"); + if (base_train.settings.get<EPlatformAdhesion>("adhesion_type") != EPlatformAdhesion::RAFT) { return 0; } - return 1 + train.settings.get<size_t>("raft_interface_layers") + train.settings.get<size_t>("raft_surface_layers") + getFillerLayerCount(); + return 1 + interface_train.settings.get<size_t>("raft_interface_layers") + surface_train.settings.get<size_t>("raft_surface_layers") + getFillerLayerCount(); } --- a/src/sliceDataStorage.cpp +++ b/src/sliceDataStorage.cpp @@ -595,12 +595,15 @@ } coord_t adhesion_size = 0; //Make sure there is enough room for the platform adhesion around support. - const ExtruderTrain& adhesion_extruder = mesh_group_settings.get<ExtruderTrain&>("adhesion_extruder_nr"); + const ExtruderTrain& base_train = mesh_group_settings.get<ExtruderTrain&>("raft_base_extruder_nr"); + const ExtruderTrain& interface_train = mesh_group_settings.get<ExtruderTrain&>("raft_interface_extruder_nr"); + const ExtruderTrain& surface_train = mesh_group_settings.get<ExtruderTrain&>("raft_surface_extruder_nr"); + const ExtruderTrain& skirt_brim_train = mesh_group_settings.get<ExtruderTrain&>("skirt_brim_extruder_nr"); coord_t extra_skirt_line_width = 0; const std::vector<bool> is_extruder_used = getExtrudersUsed(); for (size_t extruder_nr = 0; extruder_nr < Application::getInstance().current_slice->scene.extruders.size(); extruder_nr++) { - if (extruder_nr == adhesion_extruder.extruder_nr || !is_extruder_used[extruder_nr]) //Unused extruders and the primary adhesion extruder don't generate an extra skirt line. + if (extruder_nr == skirt_brim_train.extruder_nr || !is_extruder_used[extruder_nr]) //Unused extruders and the primary adhesion extruder don't generate an extra skirt line. { continue; } @@ -610,13 +613,23 @@ switch (mesh_group_settings.get<EPlatformAdhesion>("adhesion_type")) { case EPlatformAdhesion::BRIM: - adhesion_size = adhesion_extruder.settings.get<coord_t>("skirt_brim_line_width") * adhesion_extruder.settings.get<Ratio>("initial_layer_line_width_factor") * adhesion_extruder.settings.get<size_t>("brim_line_count") + extra_skirt_line_width; + adhesion_size = skirt_brim_train.settings.get<coord_t>("skirt_brim_line_width") + * skirt_brim_train.settings.get<Ratio>("initial_layer_line_width_factor") + * skirt_brim_train.settings.get<size_t>("brim_line_count") + extra_skirt_line_width; break; case EPlatformAdhesion::RAFT: - adhesion_size = adhesion_extruder.settings.get<coord_t>("raft_margin"); + adhesion_size = std::max({ + base_train.settings.get<coord_t>("raft_margin"), + interface_train.settings.get<coord_t>("raft_margin"), + surface_train.settings.get<coord_t>("raft_margin") + }); break; case EPlatformAdhesion::SKIRT: - adhesion_size = adhesion_extruder.settings.get<coord_t>("skirt_gap") + adhesion_extruder.settings.get<coord_t>("skirt_brim_line_width") * adhesion_extruder.settings.get<Ratio>("initial_layer_line_width_factor") * adhesion_extruder.settings.get<size_t>("skirt_line_count") + extra_skirt_line_width; + adhesion_size = skirt_brim_train.settings.get<coord_t>("skirt_gap") + + skirt_brim_train.settings.get<coord_t>("skirt_brim_line_width") + * skirt_brim_train.settings.get<Ratio>("initial_layer_line_width_factor") + * skirt_brim_train.settings.get<size_t>("skirt_line_count") + + extra_skirt_line_width; break; case EPlatformAdhesion::NONE: adhesion_size = 0; --- a/src/support.cpp +++ b/src/support.cpp @@ -504,8 +504,11 @@ break; case EPlatformAdhesion::RAFT: { - const ExtruderTrain& raft_extruder = mesh_group_settings.get<ExtruderTrain&>("adhesion_extruder_nr"); - adhesion_size = raft_extruder.settings.get<coord_t>("raft_margin"); + adhesion_size = std::max({ + mesh_group_settings.get<ExtruderTrain&>("raft_base_extruder_nr").settings.get<coord_t>("raft_margin"), + mesh_group_settings.get<ExtruderTrain&>("raft_interface_extruder_nr").settings.get<coord_t>("raft_margin"), + mesh_group_settings.get<ExtruderTrain&>("raft_surface_extruder_nr").settings.get<coord_t>("raft_margin") + }); break; } case EPlatformAdhesion::SKIRT: