FIX:avoid color array out of bounds

jira: none
Change-Id: I27874b327c1b9dbff9555b08bff4d1b1bf9db80e
This commit is contained in:
zhou.xu 2024-10-30 09:27:49 +08:00 committed by Lane.Wei
parent 1445157a2d
commit f0eeca97cc
2 changed files with 13 additions and 3 deletions

View File

@ -837,6 +837,11 @@ void GLVolume::render(bool with_outline, const std::array<float, 4>& body_color)
if (mv->mmu_segmentation_facets.empty()) if (mv->mmu_segmentation_facets.empty())
break; break;
std::vector<std::array<float, 4>> colors = get_extruders_colors();
if (colors.size() == 1) {
break;
}
color_volume = true; color_volume = true;
if (mv->mmu_segmentation_facets.timestamp() != mmuseg_ts) { if (mv->mmu_segmentation_facets.timestamp() != mmuseg_ts) {
BOOST_LOG_TRIVIAL(debug) << __FUNCTION__<< boost::format(", this %1%, name %2%, current mmuseg_ts %3%, current color size %4%") BOOST_LOG_TRIVIAL(debug) << __FUNCTION__<< boost::format(", this %1%, name %2%, current mmuseg_ts %3%, current color size %4%")
@ -845,10 +850,13 @@ void GLVolume::render(bool with_outline, const std::array<float, 4>& body_color)
std::vector<indexed_triangle_set> its_per_color; std::vector<indexed_triangle_set> its_per_color;
mv->mmu_segmentation_facets.get_facets(*mv, its_per_color); mv->mmu_segmentation_facets.get_facets(*mv, its_per_color);
mmuseg_ivas.resize(its_per_color.size()); mmuseg_ivas.resize(its_per_color.size());
for (int idx = 0; idx < its_per_color.size(); idx++) { for (int idx = 0; idx < its_per_color.size(); idx++) {
if (its_per_color[idx].indices.size() > 0) {
mmuseg_ivas[idx].load_its_flat_shading(its_per_color[idx]); mmuseg_ivas[idx].load_its_flat_shading(its_per_color[idx]);
mmuseg_ivas[idx].finalize_geometry(true); mmuseg_ivas[idx].finalize_geometry(true);
} }
}
mmuseg_ts = mv->mmu_segmentation_facets.timestamp(); mmuseg_ts = mv->mmu_segmentation_facets.timestamp();
BOOST_LOG_TRIVIAL(debug) << __FUNCTION__<< boost::format(", this %1%, name %2%, new mmuseg_ts %3%, new color size %4%") BOOST_LOG_TRIVIAL(debug) << __FUNCTION__<< boost::format(", this %1%, name %2%, new mmuseg_ts %3%, new color size %4%")
%this %this->name %mmuseg_ts %mmuseg_ivas.size(); %this %this->name %mmuseg_ts %mmuseg_ivas.size();
@ -877,6 +885,7 @@ void GLVolume::render(bool with_outline, const std::array<float, 4>& body_color)
int extruder_id = mv->extruder_id(); int extruder_id = mv->extruder_id();
//shader->set_uniform("uniform_color", colors[extruder_id - 1]); //shader->set_uniform("uniform_color", colors[extruder_id - 1]);
//to make black not too hard too see //to make black not too hard too see
if (extruder_id <= 0) { extruder_id = 1; }
std::array<float, 4> new_color = adjust_color_for_rendering(colors[extruder_id - 1]); std::array<float, 4> new_color = adjust_color_for_rendering(colors[extruder_id - 1]);
shader->set_uniform("uniform_color", new_color); shader->set_uniform("uniform_color", new_color);
} }
@ -1127,6 +1136,7 @@ void GLVolume::simple_render(GLShaderProgram *shader, ModelObjectPtrs &model_obj
if (shader) { if (shader) {
if (idx == 0) { if (idx == 0) {
int extruder_id = model_volume->extruder_id(); int extruder_id = model_volume->extruder_id();
if (extruder_id <= 0) { extruder_id = 1; }
//to make black not too hard too see //to make black not too hard too see
std::array<float, 4> new_color = adjust_color_for_rendering(extruder_colors[extruder_id - 1]); std::array<float, 4> new_color = adjust_color_for_rendering(extruder_colors[extruder_id - 1]);
if (ban_light) { if (ban_light) {

View File

@ -1626,7 +1626,7 @@ void Sidebar::add_filament() {
void Sidebar::delete_filament() { void Sidebar::delete_filament() {
if (p->combos_filament.size() <= 1) return; if (p->combos_filament.size() <= 1) return;
wxBusyCursor busy;
size_t filament_count = p->combos_filament.size() - 1; size_t filament_count = p->combos_filament.size() - 1;
if (wxGetApp().preset_bundle->is_the_only_edited_filament(filament_count) || (filament_count == 1)) { if (wxGetApp().preset_bundle->is_the_only_edited_filament(filament_count) || (filament_count == 1)) {
wxGetApp().get_tab(Preset::TYPE_FILAMENT)->select_preset(wxGetApp().preset_bundle->filament_presets[0], false, "", true); wxGetApp().get_tab(Preset::TYPE_FILAMENT)->select_preset(wxGetApp().preset_bundle->filament_presets[0], false, "", true);