diff --git a/src/libslic3r/FilamentGroup.cpp b/src/libslic3r/FilamentGroup.cpp index 2c893e61a..59f2a83bc 100644 --- a/src/libslic3r/FilamentGroup.cpp +++ b/src/libslic3r/FilamentGroup.cpp @@ -195,8 +195,10 @@ namespace Slic3r for (size_t idx = 0; idx < ams_filament_colors_str.size(); ++idx) { std::vector tmp; - for (auto& item : ams_filament_colors_str[idx]) - tmp.emplace_back(Color(item)); + for (auto& item : ams_filament_colors_str[idx]) { + if (!item.empty()) + tmp.emplace_back(Color(item)); + } ams_filament_colors[idx] = std::move(tmp); } diff --git a/src/libslic3r/GCode/ToolOrderUtils.cpp b/src/libslic3r/GCode/ToolOrderUtils.cpp index 5b65a3c85..2809be6a0 100644 --- a/src/libslic3r/GCode/ToolOrderUtils.cpp +++ b/src/libslic3r/GCode/ToolOrderUtils.cpp @@ -421,8 +421,9 @@ namespace Slic3r template - static std::vector collect_filaments_in_groups(const std::set& group, const std::vector& filament_list) { + static std::vector collect_filaments_in_groups(const std::unordered_set& group, const std::vector& filament_list) { std::vectorret; + ret.reserve(group.size()); for (auto& f : filament_list) { if (auto iter = group.find(f); iter != group.end()) ret.emplace_back(static_cast(f)); @@ -471,7 +472,7 @@ namespace Slic3r //only when layer filament num <= 5,we do forcast constexpr int max_n_with_forcast = 5; int cost = 0; - std::vector>groups(2); //save the grouped filaments + std::vector>groups(2); //save the grouped filaments std::vector>> layer_sequences(2); //save the reordered filament sequence by group std::map> custom_layer_sequence_map; // save the filament sequences of custom layer @@ -501,27 +502,26 @@ namespace Slic3r custom_layer_sequence_map[layer] = unsign_custom_extruder_seq; } } - using uint128_t = boost::multiprecision::uint128_t; auto extruders_to_hash_key = [](const std::vector& curr_layer_extruders, - const std::vector& next_layer_extruders, - const std::optional& prev_extruder, - bool use_forcast)->uint128_t - { - uint128_t hash_key = 0; - //31-0 bit define current layer extruder,63-32 bit define next layer extruder,95~64 define prev extruder - if (prev_extruder) - hash_key |= (uint128_t(1) << (64 + *prev_extruder)); + const std::vector& next_layer_extruders, + const std::optional& prev_extruder, + bool use_forcast)->uint128_t + { + uint128_t hash_key = 0; + //31-0 bit define current layer extruder,63-32 bit define next layer extruder,95~64 define prev extruder + if (prev_extruder) + hash_key |= (uint128_t(1) << (64 + *prev_extruder)); - if (use_forcast) { - for (auto item : next_layer_extruders) - hash_key |= (uint128_t(1) << (32 + item)); - } + if (use_forcast) { + for (auto item : next_layer_extruders) + hash_key |= (uint128_t(1) << (32 + item)); + } - for (auto item : curr_layer_extruders) - hash_key |= (uint128_t(1) << item); - return hash_key; - }; + for (auto item : curr_layer_extruders) + hash_key |= (uint128_t(1) << item); + return hash_key; + }; // get best layer sequence by group