From 8e246b4165988128ae86d5266985aec7475da7f0 Mon Sep 17 00:00:00 2001 From: Kunlong Ma Date: Thu, 2 Nov 2023 16:57:52 +0800 Subject: [PATCH] FIX: ObjectSetting changed when search plate JIRA: STUDIO-5095 Signed-off-by: Kunlong Ma Change-Id: I39b1ad997d51ac4224ff5ad2b3555f56da4bd911 --- src/slic3r/GUI/GUI_ObjectSettings.cpp | 9 ++++++--- src/slic3r/GUI/ObjectDataViewModel.cpp | 13 +++++++++++++ src/slic3r/GUI/ObjectDataViewModel.hpp | 1 + 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/src/slic3r/GUI/GUI_ObjectSettings.cpp b/src/slic3r/GUI/GUI_ObjectSettings.cpp index 700f66676..826804f28 100644 --- a/src/slic3r/GUI/GUI_ObjectSettings.cpp +++ b/src/slic3r/GUI/GUI_ObjectSettings.cpp @@ -212,10 +212,13 @@ bool ObjectSettings::update_settings_list() if (type == itPlate) { is_plate_settings = true; + int plate_id = objects_model->GetPlateIdByItem(item); + assert(plate_id >= 0); + static ModelConfig cfg; - auto plate = wxGetApp().plater()->get_partplate_list().get_curr_plate(); - cfg.assign_config(*plate->config()); - plate_configs.emplace(plate, &cfg); + PartPlateList& ppl = wxGetApp().plater()->get_partplate_list(); + cfg.assign_config(*ppl.get_plate(plate_id)->config()); + plate_configs.emplace(ppl.get_plate(plate_id), &cfg); } if (type != itObject && type != itVolume && type != itLayerRoot && type != itLayer) { continue; diff --git a/src/slic3r/GUI/ObjectDataViewModel.cpp b/src/slic3r/GUI/ObjectDataViewModel.cpp index 577948f46..22c790ec1 100644 --- a/src/slic3r/GUI/ObjectDataViewModel.cpp +++ b/src/slic3r/GUI/ObjectDataViewModel.cpp @@ -1364,6 +1364,19 @@ int ObjectDataViewModel::GetIdByItem(const wxDataViewItem& item) const return it - m_objects.begin(); } +int ObjectDataViewModel::GetPlateIdByItem(const wxDataViewItem& item) const +{ + if (!item.IsOk()) + return -1; + + ObjectDataViewModelNode* node = static_cast(item.GetID()); + auto it = find(m_plates.begin(), m_plates.end(), node); + if (it == m_plates.end()) + return -1; + + return it - m_plates.begin(); +} + int ObjectDataViewModel::GetIdByItemAndType(const wxDataViewItem& item, const ItemType type) const { wxASSERT(item.IsOk()); diff --git a/src/slic3r/GUI/ObjectDataViewModel.hpp b/src/slic3r/GUI/ObjectDataViewModel.hpp index 9d0e32385..5fcf716dc 100644 --- a/src/slic3r/GUI/ObjectDataViewModel.hpp +++ b/src/slic3r/GUI/ObjectDataViewModel.hpp @@ -370,6 +370,7 @@ public: wxDataViewItem GetItemByLayerRange(const int obj_idx, const t_layer_height_range& layer_range); int GetItemIdByLayerRange(const int obj_idx, const t_layer_height_range& layer_range); int GetIdByItem(const wxDataViewItem& item) const; + int GetPlateIdByItem(const wxDataViewItem& item) const; int GetIdByItemAndType(const wxDataViewItem& item, const ItemType type) const; int GetObjectIdByItem(const wxDataViewItem& item) const; int GetVolumeIdByItem(const wxDataViewItem& item) const;