diff --git a/resources/profiles/Qidi.json b/resources/profiles/Qidi.json index 92e1d141c9..f2326e1111 100644 --- a/resources/profiles/Qidi.json +++ b/resources/profiles/Qidi.json @@ -1,6 +1,6 @@ { "name": "Qidi", - "version": "02.03.02.51", + "version": "02.03.02.52", "force_update": "0", "description": "Qidi configurations", "machine_model_list": [ diff --git a/resources/profiles/Qidi/machine/fdm_machine_x_common.json b/resources/profiles/Qidi/machine/fdm_machine_x_common.json index 9b862ad7bc..7f28b44e7b 100644 --- a/resources/profiles/Qidi/machine/fdm_machine_x_common.json +++ b/resources/profiles/Qidi/machine/fdm_machine_x_common.json @@ -64,6 +64,7 @@ "scan_first_layer": "0", "silent_mode": "0", "single_extruder_multi_material": "1", + "wipe_tower_type": "type1", "support_air_filtration": ["1"], "support_box_temp_control": "1", "support_chamber_temp_control": "1", diff --git a/resources/profiles/Qidi/machine/fdm_q_common.json b/resources/profiles/Qidi/machine/fdm_q_common.json index a36bf68f68..3669ea8860 100644 --- a/resources/profiles/Qidi/machine/fdm_q_common.json +++ b/resources/profiles/Qidi/machine/fdm_q_common.json @@ -128,6 +128,7 @@ "scan_first_layer": "0", "silent_mode": "0", "single_extruder_multi_material": "1", + "wipe_tower_type": "type1", "support_air_filtration": [ "1" ], diff --git a/resources/profiles/Qidi/machine/fdm_qidi_common.json b/resources/profiles/Qidi/machine/fdm_qidi_common.json index 46e8f5d67d..e97fe8502f 100644 --- a/resources/profiles/Qidi/machine/fdm_qidi_common.json +++ b/resources/profiles/Qidi/machine/fdm_qidi_common.json @@ -118,6 +118,7 @@ ], "silent_mode": "0", "single_extruder_multi_material": "1", + "wipe_tower_type": "type1", "change_filament_gcode": "", "machine_pause_gcode": "M25 ;pause print", "wipe": [ diff --git a/resources/profiles/Qidi/machine/fdm_qidi_x3_common.json b/resources/profiles/Qidi/machine/fdm_qidi_x3_common.json index bb8f41aad0..74a27bd841 100644 --- a/resources/profiles/Qidi/machine/fdm_qidi_x3_common.json +++ b/resources/profiles/Qidi/machine/fdm_qidi_x3_common.json @@ -9,6 +9,7 @@ "change_filament_gcode": "", "machine_pause_gcode": "M0", "support_chamber_temp_control": "1", + "wipe_tower_type": "type1", "filament_tower_interface_pre_extrusion_dist": ["10"], "filament_tower_interface_pre_extrusion_length": ["0"], "filament_tower_ironing_area": ["4"], diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index 7a4b94dc1d..fe10cbcd41 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -1456,7 +1456,7 @@ static std::vector get_path_of_change_filament(const Print& print) std::string WipeTowerIntegration::prime(GCode &gcodegen) { std::string gcode; - if (!gcodegen.is_BBL_Printer() && !gcodegen.is_QIDI_Printer()) { + if (gcodegen.wipe_tower_type() == WipeTowerType::Type2) { for (const WipeTower::ToolChangeResult &tcr : m_priming) { if (!tcr.extrusions.empty()) gcode += append_tcr2(gcodegen, tcr, tcr.new_tool); @@ -1472,7 +1472,7 @@ static std::vector get_path_of_change_filament(const Print& print) assert(m_layer_idx >= 0); if (m_layer_idx >= (int) m_tool_changes.size()) return gcode; - if (!gcodegen.is_BBL_Printer() && !gcodegen.is_QIDI_Printer()) { + if (gcodegen.wipe_tower_type() == WipeTowerType::Type2) { if (gcodegen.writer().need_toolchange(extruder_id) || finish_layer) { if (m_layer_idx < (int) m_tool_changes.size()) { if (!(size_t(m_tool_change_idx) < m_tool_changes[m_layer_idx].size())) @@ -1561,7 +1561,7 @@ static std::vector get_path_of_change_filament(const Print& print) std::string WipeTowerIntegration::finalize(GCode &gcodegen) { std::string gcode; - if (!gcodegen.is_BBL_Printer() && !gcodegen.is_QIDI_Printer()) { + if (gcodegen.wipe_tower_type() == WipeTowerType::Type2) { if (std::abs(gcodegen.writer().get_position().z() - m_final_purge.print_z) > EPSILON) gcode += gcodegen.change_layer(m_final_purge.print_z); gcode += append_tcr2(gcodegen, m_final_purge, -1); @@ -1983,11 +1983,11 @@ bool GCode::is_BBL_Printer() return false; } -bool GCode::is_QIDI_Printer() +WipeTowerType GCode::wipe_tower_type() { if (m_curr_print) - return m_curr_print->is_QIDI_printer(); - return false; + return m_curr_print->wipe_tower_type(); + return WipeTowerType::Type2; } void GCode::do_export(Print* print, const char* path, GCodeProcessorResult* result, ThumbnailsGeneratorCallback thumbnail_cb) @@ -2400,7 +2400,7 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato // modifies m_silent_time_estimator_enabled DoExport::init_gcode_processor(print.config(), m_processor, m_silent_time_estimator_enabled); const bool is_bbl_printers = print.is_BBL_printer(); - const bool is_qidi_printers = print.is_QIDI_printer(); + const WipeTowerType wipe_tower_type = print.wipe_tower_type(); m_calib_config.clear(); // resets analyzer's tracking data m_last_height = 0.f; @@ -2701,7 +2701,7 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato throw Slic3r::SlicingError(_(L("No object can be printed. Maybe too small"))); has_wipe_tower = print.has_wipe_tower() && tool_ordering.has_wipe_tower(); // Orca: support all extruder priming - initial_extruder_id = (!is_bbl_printers && has_wipe_tower && !print.config().single_extruder_multi_material_priming && !is_qidi_printers) ? + initial_extruder_id = (wipe_tower_type == WipeTowerType::Type2 && has_wipe_tower && !print.config().single_extruder_multi_material_priming) ? // The priming towers will be skipped. tool_ordering.all_extruders().back() : // Don't skip the priming towers. @@ -2814,7 +2814,7 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato this->placeholder_parser().set("current_object_idx", 0); // For the start / end G-code to do the priming and final filament pull in case there is no wipe tower provided. this->placeholder_parser().set("has_wipe_tower", has_wipe_tower); - this->placeholder_parser().set("has_single_extruder_multi_material_priming", !is_bbl_printers && has_wipe_tower && print.config().single_extruder_multi_material_priming); + this->placeholder_parser().set("has_single_extruder_multi_material_priming", wipe_tower_type == WipeTowerType::Type2 && has_wipe_tower && print.config().single_extruder_multi_material_priming); this->placeholder_parser().set("total_toolchanges", std::max(0, print.wipe_tower_data().number_of_toolchanges)); // Check for negative toolchanges (single extruder mode) and set to 0 (no tool change). this->placeholder_parser().set("num_extruders", int(print.config().nozzle_diameter.values.size())); this->placeholder_parser().set("retract_length", new ConfigOptionFloats(print.config().retraction_length)); @@ -3134,7 +3134,7 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato } // Orca: support extruder priming - if (is_bbl_printers || ! (has_wipe_tower && print.config().single_extruder_multi_material_priming)) + if (wipe_tower_type != WipeTowerType::Type2 || ! (has_wipe_tower && print.config().single_extruder_multi_material_priming)) { // Set initial extruder only after custom start G-code. // Ugly hack: Do not set the initial extruder if the extruder is primed using the MMU priming towers at the edge of the print bed. @@ -3290,7 +3290,7 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato //BBS file.write(m_writer.travel_to_z(initial_layer_print_height + m_config.z_offset.value, "Move to the first layer height")); - if (!is_bbl_printers && print.config().single_extruder_multi_material_priming) { + if (wipe_tower_type == WipeTowerType::Type2 && print.config().single_extruder_multi_material_priming) { file.write(m_wipe_tower->prime(*this)); // Verify, whether the print overaps the priming extrusions. BoundingBoxf bbox_print(get_print_extrusions_extents(print)); diff --git a/src/libslic3r/GCode.hpp b/src/libslic3r/GCode.hpp index 96c15a5df8..d379300bad 100644 --- a/src/libslic3r/GCode.hpp +++ b/src/libslic3r/GCode.hpp @@ -251,7 +251,7 @@ public: std::string unretract() { return m_writer.unlift() + m_writer.unretract(); } std::string set_extruder(unsigned int extruder_id, double print_z, bool by_object=false, int toolchange_temp_override = -1); bool is_BBL_Printer(); - bool is_QIDI_Printer(); + WipeTowerType wipe_tower_type(); // SoftFever std::string set_object_info(Print* print); diff --git a/src/libslic3r/GCode/ToolOrdering.cpp b/src/libslic3r/GCode/ToolOrdering.cpp index 08e004bc30..2fed1924ac 100644 --- a/src/libslic3r/GCode/ToolOrdering.cpp +++ b/src/libslic3r/GCode/ToolOrdering.cpp @@ -381,7 +381,7 @@ void ToolOrdering::sort_and_build_data(const PrintObject& object , unsigned int // (print->config().print_sequence == PrintSequence::ByObject is true). ToolOrdering::ToolOrdering(const PrintObject &object, unsigned int first_extruder, bool prime_multi_material) { - m_is_BBL_printer = object.print()->is_BBL_printer(); + m_wipe_tower_type = object.print()->wipe_tower_type(); m_print_full_config = &object.print()->full_print_config(); m_print_object_ptr = &object; m_print = const_cast(object.print()); @@ -427,7 +427,7 @@ ToolOrdering::ToolOrdering(const PrintObject &object, unsigned int first_extrude // (print->config().print_sequence == PrintSequence::ByObject is false). ToolOrdering::ToolOrdering(const Print &print, unsigned int first_extruder, bool prime_multi_material) { - m_is_BBL_printer = print.is_BBL_printer(); + m_wipe_tower_type = print.wipe_tower_type(); m_print_full_config = &print.full_print_config(); m_print = const_cast(&print); // for update the context of print m_print_config_ptr = &print.config(); @@ -1227,7 +1227,7 @@ void ToolOrdering::reorder_extruders_for_minimum_flush_volume(bool reorder_first for (size_t nozzle_id = 0; nozzle_id < nozzle_nums; ++nozzle_id) { std::vector flush_matrix(cast(get_flush_volumes_matrix(print_config->flush_volumes_matrix.values, nozzle_id, nozzle_nums))); std::vector> wipe_volumes; - if ((print_config->purge_in_prime_tower && print_config->single_extruder_multi_material) || m_is_BBL_printer) { + if ((print_config->purge_in_prime_tower && print_config->single_extruder_multi_material) || m_wipe_tower_type == WipeTowerType::Type1) { for (unsigned int i = 0; i < number_of_extruders; ++i) wipe_volumes.push_back(std::vector(flush_matrix.begin() + i * number_of_extruders, flush_matrix.begin() + (i + 1) * number_of_extruders)); } else { diff --git a/src/libslic3r/GCode/ToolOrdering.hpp b/src/libslic3r/GCode/ToolOrdering.hpp index 7bbfa2da1f..fdac3be98a 100644 --- a/src/libslic3r/GCode/ToolOrdering.hpp +++ b/src/libslic3r/GCode/ToolOrdering.hpp @@ -279,7 +279,7 @@ private: const PrintObject* m_print_object_ptr = nullptr; Print* m_print; bool m_sorted = false; - bool m_is_BBL_printer = false; + WipeTowerType m_wipe_tower_type = WipeTowerType::Type1; FilamentChangeStats m_stats_by_single_extruder; FilamentChangeStats m_stats_by_multi_extruder_curr; diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index 7cb0569cff..826d8a1a19 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -1028,7 +1028,7 @@ static std::vector s_Preset_printer_options { "use_relative_e_distances", "extruder_type", "use_firmware_retraction", "printer_notes", "grab_length", "support_object_skip_flush", "physical_extruder_map", "cooling_tube_retraction", - "cooling_tube_length", "high_current_on_filament_swap", "parking_pos_retraction", "extra_loading_move", "purge_in_prime_tower", "enable_filament_ramming", + "cooling_tube_length", "high_current_on_filament_swap", "parking_pos_retraction", "extra_loading_move", "wipe_tower_type", "purge_in_prime_tower", "enable_filament_ramming", "z_offset", "disable_m73", "preferred_orientation", "emit_machine_limits_to_gcode", "pellet_modded_printer", "support_multi_bed_types", "default_bed_type", "bed_mesh_min","bed_mesh_max","bed_mesh_probe_distance", "adaptive_bed_mesh_margin", "enable_long_retraction_when_cut","long_retractions_when_cut","retraction_distances_when_cut", "bed_temperature_formula", "nozzle_flush_dataset" diff --git a/src/libslic3r/PresetBundle.hpp b/src/libslic3r/PresetBundle.hpp index 51eed5646f..528b7cf636 100644 --- a/src/libslic3r/PresetBundle.hpp +++ b/src/libslic3r/PresetBundle.hpp @@ -145,7 +145,6 @@ public: VendorType get_current_vendor_type(); // Vendor related handy functions bool is_bbl_vendor() { return get_current_vendor_type() == VendorType::Marlin_BBL; } - bool is_qidi_vendor() { return get_current_vendor_type() == VendorType::Klipper_Qidi; } // Whether using bbl network for print upload bool use_bbl_network(); diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index 7ec220dc73..914cfe4bec 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -315,6 +315,7 @@ bool Print::invalidate_state_by_config_options(const ConfigOptionResolver & /* n || opt_key == "prime_tower_enable_framework" || opt_key == "prime_tower_width" || opt_key == "prime_tower_brim_width" + || opt_key == "wipe_tower_type" || opt_key == "prime_tower_skip_points" || opt_key == "prime_tower_flat_ironing" || opt_key == "enable_tower_interface_features" @@ -3127,10 +3128,10 @@ void Print::_make_wipe_tower() // BBS const unsigned int number_of_extruders = (unsigned int)(m_config.filament_colour.values.size()); - const auto bUseWipeTower2 = is_BBL_printer() || is_QIDI_printer() ? false : true; + const bool is_wipe_tower_type2 = this->wipe_tower_type() == WipeTowerType::Type2; // Let the ToolOrdering class know there will be initial priming extrusions at the start of the print. - m_wipe_tower_data.tool_ordering = ToolOrdering(*this, (unsigned int) -1, bUseWipeTower2 ? true : false); - m_wipe_tower_data.tool_ordering.sort_and_build_data(*this, (unsigned int)-1, bUseWipeTower2 ? true : false); + m_wipe_tower_data.tool_ordering = ToolOrdering(*this, (unsigned int) -1, is_wipe_tower_type2); + m_wipe_tower_data.tool_ordering.sort_and_build_data(*this, (unsigned int)-1, is_wipe_tower_type2); if (!m_wipe_tower_data.tool_ordering.has_wipe_tower()) // Don't generate any wipe tower. @@ -3173,7 +3174,7 @@ void Print::_make_wipe_tower() } this->throw_if_canceled(); - if (!bUseWipeTower2) { + if (!is_wipe_tower_type2) { // in BBL machine, wipe tower is only use to prime extruder. So just use a global wipe volume. WipeTower wipe_tower(m_config, m_plate_index, m_origin, m_wipe_tower_data.tool_ordering.first_extruder(), m_wipe_tower_data.tool_ordering.empty() ? 0.f : m_wipe_tower_data.tool_ordering.back().print_z, m_wipe_tower_data.tool_ordering.all_extruders()); @@ -3311,7 +3312,7 @@ void Print::_make_wipe_tower() wipe_volumes.push_back(std::vector(flush_matrix.begin()+i*number_of_extruders, flush_matrix.begin()+(i+1)*number_of_extruders)); // Orca: itertate over wipe_volumes and change the non-zero values to the prime_volume - if ((!m_config.purge_in_prime_tower || !m_config.single_extruder_multi_material) && !is_BBL_printer() && !is_QIDI_printer()) { + if ((!m_config.purge_in_prime_tower || !m_config.single_extruder_multi_material) && is_wipe_tower_type2) { for (unsigned int i = 0; i < number_of_extruders; ++i) { for (unsigned int j = 0; j < number_of_extruders; ++j) { if (wipe_volumes[i][j] > 0) { diff --git a/src/libslic3r/Print.hpp b/src/libslic3r/Print.hpp index 80755d1821..b98811c8e3 100644 --- a/src/libslic3r/Print.hpp +++ b/src/libslic3r/Print.hpp @@ -1066,8 +1066,7 @@ public: //SoftFever bool &is_BBL_printer() { return m_isBBLPrinter; } const bool is_BBL_printer() const { return m_isBBLPrinter; } - bool &is_QIDI_printer() { return m_isQIDIPrinter; } - const bool is_QIDI_printer() const { return m_isQIDIPrinter; } + WipeTowerType wipe_tower_type() const { return is_BBL_printer() ? WipeTowerType::Type1 : m_config.wipe_tower_type.value; } CalibMode& calib_mode() { return m_calib_params.mode; } const CalibMode calib_mode() const { return m_calib_params.mode; } void set_calib_params(const Calib_Params& params); @@ -1135,7 +1134,6 @@ private: //SoftFever bool m_isBBLPrinter; - bool m_isQIDIPrinter; // Ordered collections of extrusion paths to build skirt loops and brim. ExtrusionEntityCollection m_skirt; diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 6066c28a28..80308156a8 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -187,6 +187,12 @@ static t_config_enum_values s_keys_map_NoiseType { }; CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(NoiseType) +static t_config_enum_values s_keys_map_WipeTowerType { + { "type1", int(WipeTowerType::Type1) }, + { "type2", int(WipeTowerType::Type2) } +}; +CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(WipeTowerType) + static t_config_enum_values s_keys_map_FuzzySkinMode { { "displacement", int(FuzzySkinMode::Displacement) }, { "extrusion", int(FuzzySkinMode::Extrusion) }, @@ -5484,6 +5490,17 @@ void PrintConfigDef::init_fff_params() def->mode = comAdvanced; def->set_default_value(new ConfigOptionBool(false)); + def = this->add("wipe_tower_type", coEnum); + def->label = L("Wipe tower type"); + def->tooltip = L("Choose the wipe tower implementation for multi-material prints. Type 1 is recommended for Bambu and Qidi printers with a filament cutter. Type 2 offers better compatibility with multi-tool and MMU printers and provide overall better compatibility."); + def->enum_keys_map = &ConfigOptionEnum::get_enum_values(); + def->enum_values.emplace_back("type1"); + def->enum_values.emplace_back("type2"); + def->enum_labels.emplace_back(L("Type 1")); + def->enum_labels.emplace_back(L("Type 2")); + def->mode = comAdvanced; + def->set_default_value(new ConfigOptionEnum(WipeTowerType::Type2)); + def = this->add("purge_in_prime_tower", coBool); def->label = L("Purge in prime tower"); def->tooltip = L("Purge remaining filament into prime tower."); diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index 45d72b313d..54c26c312a 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -58,6 +58,11 @@ enum class NoiseType { Voronoi, }; +enum class WipeTowerType { + Type1, + Type2, +}; + enum PrintHostType { htPrusaLink, htPrusaConnect, htOctoPrint, htDuet, htFlashAir, htAstroBox, htRepetier, htMKS, htESP3D, htCrealityPrint, htObico, htFlashforge, htSimplyPrint, htElegooLink }; @@ -490,6 +495,7 @@ CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(PrinterTechnology) CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(GCodeFlavor) CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(FuzzySkinType) CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(FuzzySkinMode) +CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(WipeTowerType) CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(NoiseType) CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(InfillPattern) CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(IroningType) @@ -1388,6 +1394,7 @@ PRINT_CONFIG_CLASS_DEFINE( ((ConfigOptionFloats, filament_multitool_ramming_flow)) ((ConfigOptionFloats, filament_stamping_loading_speed)) ((ConfigOptionFloats, filament_stamping_distance)) + ((ConfigOptionEnum, wipe_tower_type)) ((ConfigOptionBool, purge_in_prime_tower)) ((ConfigOptionBool, enable_filament_ramming)) ((ConfigOptionBool, support_multi_bed_types)) diff --git a/src/slic3r/GUI/BackgroundSlicingProcess.cpp b/src/slic3r/GUI/BackgroundSlicingProcess.cpp index 919aeaf4b5..c1624f4a4e 100644 --- a/src/slic3r/GUI/BackgroundSlicingProcess.cpp +++ b/src/slic3r/GUI/BackgroundSlicingProcess.cpp @@ -681,7 +681,6 @@ StringObjectException BackgroundSlicingProcess::validate(StringObjectException * assert(m_print == m_fff_print); m_fff_print->is_BBL_printer() = wxGetApp().preset_bundle->is_bbl_vendor(); - m_fff_print->is_QIDI_printer() = wxGetApp().preset_bundle->is_qidi_vendor(); return m_print->validate(warning, collison_polygons, height_polygons); } diff --git a/src/slic3r/GUI/ConfigManipulation.cpp b/src/slic3r/GUI/ConfigManipulation.cpp index 2ff580717f..f3f98a6fad 100644 --- a/src/slic3r/GUI/ConfigManipulation.cpp +++ b/src/slic3r/GUI/ConfigManipulation.cpp @@ -807,6 +807,7 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, co toggle_field("single_extruder_multi_material", !is_BBL_Printer); auto bSEMM = preset_bundle->printers.get_edited_preset().config.opt_bool("single_extruder_multi_material"); + const bool supports_wipe_tower_2 = !is_BBL_Printer && preset_bundle->printers.get_edited_preset().config.opt_enum("wipe_tower_type") == WipeTowerType::Type2; toggle_field("ooze_prevention", !bSEMM); bool have_ooze_prevention = config->opt_bool("ooze_prevention"); @@ -831,17 +832,17 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, co "wipe_tower_extra_spacing", "wipe_tower_max_purge_speed", "wipe_tower_bridging", "wipe_tower_extra_flow", "wipe_tower_no_sparse_layers"}) - toggle_line(el, have_prime_tower && !is_BBL_Printer); + toggle_line(el, have_prime_tower && supports_wipe_tower_2); WipeTowerWallType wipe_tower_wall_type = config->opt_enum("wipe_tower_wall_type"); bool have_rib_wall = (wipe_tower_wall_type == WipeTowerWallType::wtwRib)&&have_prime_tower; - toggle_line("wipe_tower_cone_angle", have_prime_tower && !is_BBL_Printer && wipe_tower_wall_type == WipeTowerWallType::wtwCone); + toggle_line("wipe_tower_cone_angle", have_prime_tower && supports_wipe_tower_2 && wipe_tower_wall_type == WipeTowerWallType::wtwCone); toggle_line("wipe_tower_extra_rib_length", have_rib_wall); toggle_line("wipe_tower_rib_width", have_rib_wall); toggle_line("wipe_tower_fillet_wall", have_rib_wall); - toggle_field("prime_tower_width", have_prime_tower && !(is_BBL_Printer && have_rib_wall)); + toggle_field("prime_tower_width", have_prime_tower && (supports_wipe_tower_2 || have_rib_wall)); - toggle_line("single_extruder_multi_material_priming", !bSEMM && have_prime_tower && !is_BBL_Printer); + toggle_line("single_extruder_multi_material_priming", !bSEMM && have_prime_tower && supports_wipe_tower_2); toggle_line("prime_volume",have_prime_tower && (!purge_in_primetower || !bSEMM)); diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index 469412a74c..954923cfdd 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -4911,6 +4911,7 @@ if (is_marlin_flavor) optgroup->append_single_option_line("bed_temperature_formula", "printer_basic_information_advanced#bed-temperature-type"); optgroup = page->new_optgroup(L("Wipe tower"), "param_tower"); + optgroup->append_single_option_line("wipe_tower_type", "printer_multimaterial_wipe_tower"); optgroup->append_single_option_line("purge_in_prime_tower", "printer_multimaterial_wipe_tower#purge-in-prime-tower"); optgroup->append_single_option_line("enable_filament_ramming", "printer_multimaterial_wipe_tower#enable-filament-ramming"); @@ -5204,11 +5205,6 @@ void TabPrinter::toggle_options() is_BBL_printer = wxGetApp().preset_bundle->is_bbl_vendor(); } - bool is_QIDI_printer = false; - if (m_preset_bundle) { - is_QIDI_printer = wxGetApp().preset_bundle->is_qidi_vendor(); - } - bool have_multiple_extruders = true; //m_extruders_count > 1; //if (m_active_page->title() == "Custom G-code") { @@ -5236,6 +5232,8 @@ void TabPrinter::toggle_options() } if (m_active_page->title() == L("Multimaterial")) { + const bool supports_wipe_tower_2 = !is_BBL_printer && m_config->opt_enum("wipe_tower_type") == WipeTowerType::Type2; + toggle_line("wipe_tower_type", !is_BBL_printer); // SoftFever: hide specific settings for BBL printer for (auto el : { "enable_filament_ramming", @@ -5245,7 +5243,7 @@ void TabPrinter::toggle_options() "extra_loading_move", "high_current_on_filament_swap", }) - toggle_option(el, !is_BBL_printer && !is_QIDI_printer); + toggle_option(el, supports_wipe_tower_2); auto bSEMM = m_config->opt_bool("single_extruder_multi_material"); if (!bSEMM && m_config->opt_bool("manual_filament_change")) { @@ -5255,7 +5253,7 @@ void TabPrinter::toggle_options() } toggle_option("extruders_count", !bSEMM); toggle_option("manual_filament_change", bSEMM); - toggle_option("purge_in_prime_tower", bSEMM && (!is_BBL_printer && !is_QIDI_printer)); + toggle_option("purge_in_prime_tower", bSEMM && supports_wipe_tower_2); } wxString extruder_number; long val = 1;