FIX: fix bug when delete filament

update filament of HeightRange
jira: none

Change-Id: I62cb21a65ecdfc36e8bc7d0915a85ecba578e49f
(cherry picked from commit 8232a716e64fcfbd12fc7ebdaeeef4bfde261f66)
This commit is contained in:
zhimin.zeng
2024-07-14 22:14:52 +08:00
committed by Noisyfox
parent d6864a161c
commit 7aa1980813
4 changed files with 37 additions and 4 deletions

View File

@@ -764,6 +764,39 @@ void ObjectList::update_filament_values_for_items_when_delete_filament(const siz
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