FIX: fix bug when delete filament

update filament of HeightRange
jira: none

Change-Id: I62cb21a65ecdfc36e8bc7d0915a85ecba578e49f
This commit is contained in:
zhimin.zeng 2024-07-14 22:14:52 +08:00 committed by lane.wei
parent a6ad5c8be8
commit 8232a716e6
4 changed files with 37 additions and 4 deletions

View File

@ -3090,7 +3090,7 @@ void ModelVolume::update_extruder_count_when_delete_filament(size_t extruder_cou
std::vector<int> used_extruders = get_extruders(); std::vector<int> used_extruders = get_extruders();
for (int extruder_id : used_extruders) { for (int extruder_id : used_extruders) {
if (extruder_id == filament_id) { if (extruder_id == filament_id) {
mmu_segmentation_facets.set_enforcer_block_type_limit(*this, (EnforcerBlockerType)(extruder_count + 1), (EnforcerBlockerType) filament_id); mmu_segmentation_facets.set_enforcer_block_type_limit(*this, (EnforcerBlockerType)(extruder_count + 1), (EnforcerBlockerType)(filament_id + 1));
break; break;
} }
} }

View File

@ -1558,7 +1558,7 @@ void TriangleSelector::get_facets_split_by_tjoints(const Vec3i &vertices, const
this->get_facets_split_by_tjoints( this->get_facets_split_by_tjoints(
{ vertices(0), midpoints(0), midpoints(2) }, { vertices(0), midpoints(0), midpoints(2) },
{ this->neighbor_child(neighbors(0), vertices(1), vertices(0), Partition::Second), { this->neighbor_child(neighbors(0), vertices(1), vertices(0), Partition::Second),
-1, -1,
this->neighbor_child(neighbors(2), vertices(0), vertices(2), Partition::First) }, this->neighbor_child(neighbors(2), vertices(0), vertices(2), Partition::First) },
out_triangles); out_triangles);
this->get_facets_split_by_tjoints( this->get_facets_split_by_tjoints(
@ -1764,7 +1764,7 @@ void TriangleSelector::deserialize(const std::pair<std::vector<std::pair<int, in
} }
// BBS // BBS
if (state > max_ebt) if (state > max_ebt || state == to_delete_filament)
state = EnforcerBlockerType::NONE; state = EnforcerBlockerType::NONE;
if (to_delete_filament != EnforcerBlockerType::NONE && state != EnforcerBlockerType::NONE) { if (to_delete_filament != EnforcerBlockerType::NONE && state != EnforcerBlockerType::NONE) {

View File

@ -744,6 +744,39 @@ void ObjectList::update_filament_values_for_items_when_delete_filament(const siz
object->volumes[id]->config.erase(key); object->volumes[id]->config.erase(key);
} }
} }
item = m_objects_model->GetItemById(i);
ObjectDataViewModelNode *object_node = static_cast<ObjectDataViewModelNode *>(item.GetID());
if (object_node->GetChildCount() == 0)
continue;
// update height_range
for (size_t i = 0; i < object_node->GetChildCount(); i++) {
ObjectDataViewModelNode * layer_root_node = object_node->GetNthChild(i);
if (layer_root_node->GetType() != ItemType::itLayerRoot)
continue;
for (size_t j = 0; j < layer_root_node->GetChildCount(); j++) {
ObjectDataViewModelNode * layer_node = layer_root_node->GetNthChild(j);
auto layer_item = wxDataViewItem((void *) layer_root_node->GetNthChild(j));
if (!layer_item)
continue;
auto l_iter = object->layer_config_ranges.find(layer_node->GetLayerRange());
if (l_iter != object->layer_config_ranges.end()) {
auto& layer_range_item = *(l_iter);
if (layer_range_item.second.has("extruder") && layer_range_item.second.option("extruder")->getInt() == filament_id + 1) {
int new_extruder = 0;
extruder = wxString::Format("%d", new_extruder);
layer_range_item.second.set("extruder", new_extruder);
} else {
int layer_filament_id = layer_range_item.second.option("extruder")->getInt();
int new_extruder = layer_filament_id > filament_id ? layer_filament_id - 1 : layer_filament_id;
extruder = wxString::Format("%d", new_extruder);
layer_range_item.second.set("extruder", new_extruder);
}
m_objects_model->SetExtruder(extruder, layer_item);
}
}
}
} }
// BBS // BBS

View File

@ -1895,7 +1895,7 @@ void Sidebar::delete_filament(size_t filament_id) {
if (filament_id > filament_count) if (filament_id > filament_count)
return; return;
if (wxGetApp().preset_bundle->is_the_only_edited_filament(filament_id) || (filament_id == 1)) { if (wxGetApp().preset_bundle->is_the_only_edited_filament(filament_id) || (filament_id == 0)) {
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);
} }