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;
}