diff --git a/resources/images/bbl_bed_ep_left_bottom.svg b/resources/images/bbl_bed_ep_left_bottom.svg new file mode 100644 index 0000000000..5df6b7d4ad --- /dev/null +++ b/resources/images/bbl_bed_ep_left_bottom.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/resources/images/bbl_bed_pc_left_bottom.svg b/resources/images/bbl_bed_pc_left_bottom.svg new file mode 100644 index 0000000000..5df6b7d4ad --- /dev/null +++ b/resources/images/bbl_bed_pc_left_bottom.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/resources/images/bbl_bed_st_left_bottom.svg b/resources/images/bbl_bed_st_left_bottom.svg new file mode 100644 index 0000000000..5df6b7d4ad --- /dev/null +++ b/resources/images/bbl_bed_st_left_bottom.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/resources/profiles/BBL/machine/Bambu Lab H2S.json b/resources/profiles/BBL/machine/Bambu Lab H2S.json index 66ac24a655..f70454809d 100644 --- a/resources/profiles/BBL/machine/Bambu Lab H2S.json +++ b/resources/profiles/BBL/machine/Bambu Lab H2S.json @@ -5,6 +5,7 @@ "url": "http://www.bambulab.com/Parameters/printer_model/Bambu Lab X1.json", "bed_model": "bbl-3dp-O1S.stl", "bed_texture": "bbl-3dp-logo.svg", + "use_double_extruder_default_texture": "true", "default_bed_type": "Textured PEI Plate", "right_icon_offset_bed": "10", "family": "BBL-3DP", diff --git a/src/libslic3r/Preset.hpp b/src/libslic3r/Preset.hpp index 53cb7d3343..da3fb7edac 100644 --- a/src/libslic3r/Preset.hpp +++ b/src/libslic3r/Preset.hpp @@ -62,6 +62,7 @@ #define BBL_JSON_KEY_BED_TEXTURE "bed_texture" #define BBL_JSON_KEY_IMAGE_BED_TYPE "image_bed_type" #define BBL_JSON_KEY_BOTTOM_TEXTURE_END_NAME "bottom_texture_end_name" +#define BBL_JSON_KEY_USE_DOUBLE_EXTRUDER_DEFAULT_TEXTURE "use_double_extruder_default_texture" #define BBL_JSON_KEY_BOTTOM_TEXTURE_RECT "bottom_texture_rect" #define BBL_JSON_KEY_MIDDLE_TEXTURE_RECT "middle_texture_rect" @@ -127,6 +128,7 @@ public: std::string bed_texture; std::string image_bed_type; std::string bottom_texture_end_name; + std::string use_double_extruder_default_texture; std::string bottom_texture_rect; std::string middle_texture_rect; std::string hotend_model; diff --git a/src/libslic3r/PresetBundle.cpp b/src/libslic3r/PresetBundle.cpp index b2a09ac560..a8719e40ec 100644 --- a/src/libslic3r/PresetBundle.cpp +++ b/src/libslic3r/PresetBundle.cpp @@ -3727,6 +3727,8 @@ std::pair PresetBundle::load_vendor_configs_ model.bed_model = it.value(); } else if (boost::iequals(it.key(), BBL_JSON_KEY_BOTTOM_TEXTURE_END_NAME)) { model.bottom_texture_end_name = it.value(); + } else if (boost::iequals(it.key(), BBL_JSON_KEY_USE_DOUBLE_EXTRUDER_DEFAULT_TEXTURE)) { + model.use_double_extruder_default_texture = it.value(); } else if (boost::iequals(it.key(), BBL_JSON_KEY_BOTTOM_TEXTURE_RECT)) { model.bottom_texture_rect = it.value(); } else if (boost::iequals(it.key(), BBL_JSON_KEY_MIDDLE_TEXTURE_RECT)) { diff --git a/src/slic3r/GUI/PartPlate.cpp b/src/slic3r/GUI/PartPlate.cpp index 8b27b396d6..9652fd8188 100644 --- a/src/slic3r/GUI/PartPlate.cpp +++ b/src/slic3r/GUI/PartPlate.cpp @@ -6155,6 +6155,7 @@ void PartPlateList::init_bed_type_info() std::string bottom_texture_end_name = bed_texture_maps.find("bottom_texture_end_name") != bed_texture_maps.end() ? bed_texture_maps["bottom_texture_end_name"] : ""; std::string bottom_texture_rect_str = bed_texture_maps.find("bottom_texture_rect") != bed_texture_maps.end() ? bed_texture_maps["bottom_texture_rect"] : ""; std::string middle_texture_rect_str = bed_texture_maps.find("middle_texture_rect") != bed_texture_maps.end() ? bed_texture_maps["middle_texture_rect"] : ""; + std::string use_double_extruder_default_texture = bed_texture_maps.find("use_double_extruder_default_texture") != bed_texture_maps.end() ? bed_texture_maps["use_double_extruder_default_texture"] : ""; std::array bottom_texture_rect = {0, 0, 0, 0}, middle_texture_rect = {0, 0, 0, 0}; if (bottom_texture_rect_str.size() > 0) { std::vector items; @@ -6177,7 +6178,8 @@ void PartPlateList::init_bed_type_info() } } auto is_single_extruder = wxGetApp().preset_bundle->get_printer_extruder_count() == 1; - if (!is_single_extruder) { + bool use_double_extruder_texture = !is_single_extruder || use_double_extruder_default_texture == "true"; + if (use_double_extruder_texture) { pte_part1 = BedTextureInfo::TexturePart(57, 300, 236.12f, 10.f, "bbl_bed_pte_middle.svg"); auto &middle_rect = middle_texture_rect; if (middle_rect[2] > 0.f) { @@ -6219,6 +6221,16 @@ void PartPlateList::init_bed_type_info() std::string ep_part2_name = "bbl_bed_ep_bottom_" + bottom_texture_end_name + ".svg"; ep_part2 = BedTextureInfo::TexturePart(bottom_rect[0], bottom_rect[1], bottom_rect[2], bottom_rect[3], ep_part2_name); } + + pc_part1 = BedTextureInfo::TexturePart(57, 300, 236.12f, 10.f, "bbl_bed_pc_middle.svg"); + if (middle_rect[2] > 0.f) { + pc_part1 = BedTextureInfo::TexturePart(middle_rect[0], middle_rect[1], middle_rect[2], middle_rect[3], "bbl_bed_pc_middle.svg"); } + pc_part2 = BedTextureInfo::TexturePart(45, -14.5, 70, 8, "bbl_bed_pc_left_bottom.svg"); + if (bottom_texture_end_name.size() > 0 && bottom_rect[2] > 0.f) { + std::string pc_part2_name = "bbl_bed_pc_bottom_" + bottom_texture_end_name + ".svg"; + pc_part2 = BedTextureInfo::TexturePart(bottom_rect[0], bottom_rect[1], bottom_rect[2], bottom_rect[3], pc_part2_name); + } + m_allow_bed_type_in_double_nozzle.clear(); auto bed_types = wxGetApp().plater()->sidebar().get_cur_combox_bed_types(); for (int i = 0; i < bed_types.size(); i++) { @@ -6248,7 +6260,7 @@ void PartPlateList::init_bed_type_info() int bed_height = bed_ext.size()(1); float base_width = 256;//standard 256*256 for single_extruder float base_height = 256; - if (!is_single_extruder) {//standard 350*325 for double_extruder + if (use_double_extruder_texture) { // standard 350*325 for double_extruder base_width = bed_width; base_height = bed_height; } @@ -6337,9 +6349,13 @@ bool PartPlateList::init_extruder_only_area_info() extruder_only_area_info[i].parts.clear(); } extruder_only_area_info[(unsigned char) ExtruderOnlyAreaType::Engilish].parts.push_back(left_part); - extruder_only_area_info[(unsigned char) ExtruderOnlyAreaType::Engilish].parts.push_back(right_part); + if (base_right[2]>5) {//width should >5 + extruder_only_area_info[(unsigned char) ExtruderOnlyAreaType::Engilish].parts.push_back(right_part); + } extruder_only_area_info[(unsigned char) ExtruderOnlyAreaType::Chinese].parts.push_back(left_ch_part); - extruder_only_area_info[(unsigned char) ExtruderOnlyAreaType::Chinese].parts.push_back(right_ch_part); + if (base_right[2] > 5) { // width should >5 + extruder_only_area_info[(unsigned char) ExtruderOnlyAreaType::Chinese].parts.push_back(right_ch_part); + } for (int i = 0; i < (unsigned char) ExtruderOnlyAreaType::btAreaCount; i++) { for (int j = 0; j < extruder_only_area_info[i].parts.size(); j++) { diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 3b83f19835..82454ecf8c 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -5001,6 +5001,9 @@ std::map Plater::get_bed_texture_maps() auto pm = get_curr_printer_model(); if (pm) { std::map maps; + if (pm->use_double_extruder_default_texture.size() > 0) { + maps["use_double_extruder_default_texture"] = pm->use_double_extruder_default_texture; + } if (pm->bottom_texture_end_name.size() > 0) { maps["bottom_texture_end_name"] = pm->bottom_texture_end_name; }