mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-10-04 22:31:02 +00:00
Support extruder variants on every printer (#15964)
# Description Extruder variants (Standard, High Flow, extra high flow) now work on any printer. Any vendor profile can declare them, and a multi-variant filament picks up the right variant on every printer. In the sidebar, users can switch the printer variant and set the nozzle volume type of each extruder on multi-extruder printers. This also fixes a later filament printing at the first filament's temperature on a P1S or X1C with a High Flow nozzle. The profile checks now reject variant arrays of the wrong size and outdated variant strings. Every shipped vendor profile passes them, and the orca-profiles skill documents the rules. Slicing output changes only where the wrong variant was used before. # Screenshots/Recordings/Graphs <img width="393" height="218" alt="Screenshot 2026-09-28 at 11 28 07 PM" src="https://github.com/user-attachments/assets/8bee4b0e-c38c-4039-8c11-096ace6fbad0" /> <img width="448" height="267" alt="Screenshot 2026-09-28 at 11 28 37 PM" src="https://github.com/user-attachments/assets/e767cd97-a5d0-4728-b010-c8ea2bc94ca7" /> <img width="746" height="603" alt="Screenshot 2026-09-28 at 11 28 54 PM" src="https://github.com/user-attachments/assets/23c8af3b-c679-46e5-9fd0-2e43df0449b3" /> https://github.com/user-attachments/assets/10d75d72-86a3-42e8-8a95-b1627bd58e91 ## Tests <!-- > Please describe the tests that you have conducted to verify the changes made in this PR. --> <!-- > A guide for users on how to download the artifacts from this PR. --> [How to Download Pull Requests Artifacts for Testing](https://www.orcaslicer.com/wiki/how_to_download_pr_artifacts)
This commit is contained in:
@@ -3938,6 +3938,9 @@ void Print::update_filament_maps_to_config(std::vector<int> f_maps, std::vector<
|
||||
{
|
||||
int extruder_count = 1, extruder_volume_type_count = 1;
|
||||
bool support_multi = m_ori_full_print_config.support_different_extruders(extruder_count);
|
||||
// Orca: resolve the filament variants wherever Print::apply does, a multi-variant filament
|
||||
// on a single-variant printer included.
|
||||
const bool expand_filaments = (extruder_count > 1) || support_multi || m_ori_full_print_config.has_multi_variant_filament();
|
||||
std::vector<std::vector<NozzleVolumeType>> nozzle_volume_types;
|
||||
extruder_volume_type_count = m_ori_full_print_config.get_extruder_nozzle_volume_count(extruder_count, nozzle_volume_types);
|
||||
|
||||
@@ -3978,7 +3981,7 @@ void Print::update_filament_maps_to_config(std::vector<int> f_maps, std::vector<
|
||||
m_full_print_config = m_ori_full_print_config;
|
||||
std::set<std::string> filament_keys = filament_options_with_variant;
|
||||
filament_keys.insert("filament_self_index");
|
||||
if ((extruder_count > 1) || support_multi)
|
||||
if (expand_filaments)
|
||||
m_full_print_config.update_values_to_printer_extruders_for_multiple_filaments(m_full_print_config, extruder_count, extruder_volume_type_count, filament_keys, "filament_self_index", "filament_extruder_variant");
|
||||
|
||||
const std::vector<std::string> &extruder_retract_keys = print_config_def.extruder_retract_keys();
|
||||
@@ -3995,7 +3998,7 @@ void Print::update_filament_maps_to_config(std::vector<int> f_maps, std::vector<
|
||||
compute_filament_override_value(opt_key, opt_old_machine, opt_new_machine, opt_new_filament, m_full_print_config, print_diff, filament_overrides, m_config.filament_map_2.values);
|
||||
}
|
||||
|
||||
if ((extruder_count > 1) || support_multi) {
|
||||
if (expand_filaments) {
|
||||
t_config_option_keys keys(filament_options_with_variant.begin(), filament_options_with_variant.end());
|
||||
keys.push_back("filament_self_index");
|
||||
m_config.apply_only(m_full_print_config, keys, true);
|
||||
|
||||
Reference in New Issue
Block a user