diff --git a/src/slic3r/GUI/GUI_ObjectList.cpp b/src/slic3r/GUI/GUI_ObjectList.cpp index 14c6db6541..8d5c3fda98 100644 --- a/src/slic3r/GUI/GUI_ObjectList.cpp +++ b/src/slic3r/GUI/GUI_ObjectList.cpp @@ -2633,20 +2633,17 @@ bool ObjectList::is_selected(const ItemType type) const return false; } -t_layer_height_range ObjectList::get_selected_layers_range() const +int ObjectList::get_selected_layers_range_idx() const { - t_layer_height_range layer_range = { 0.0, 0.0 }; const wxDataViewItem& item = GetSelection(); if (!item) - return layer_range; + return -1; const ItemType type = m_objects_model->GetItemType(item); if (type & itSettings && m_objects_model->GetItemType(m_objects_model->GetParent(item)) != itLayer) - return layer_range; + return -1; - return type & itLayer ? m_objects_model->GetLayerRangeByItem(item) : - type & itSettings ? m_objects_model->GetLayerRangeByItem(m_objects_model->GetParent(item)) : - layer_range; + return m_objects_model->GetLayerIdByItem(type & itLayer ? item : m_objects_model->GetParent(item)); } void ObjectList::update_selections() @@ -2687,15 +2684,15 @@ void ObjectList::update_selections() wxDataViewItem obj_item = m_objects_model->GetItemById(obj_idx); if (m_selection_mode & smSettings) { - if (m_selected_layers_range.first <= EPSILON && m_selected_layers_range.second <= EPSILON) + if (m_selected_layers_range_idx < 0) sels.Add(m_objects_model->GetSettingsItem(obj_item)); else - sels.Add(m_objects_model->GetSettingsItem(m_objects_model->GetItemByLayerRange(obj_idx, m_selected_layers_range))); + sels.Add(m_objects_model->GetSettingsItem(m_objects_model->GetItemByLayerId(obj_idx, m_selected_layers_range_idx))); } else if (m_selection_mode & smLayerRoot) sels.Add(m_objects_model->GetLayerRootItem(obj_item)); else if (m_selection_mode & smLayer) - sels.Add(m_objects_model->GetItemByLayerRange(obj_idx, m_selected_layers_range)); + sels.Add(m_objects_model->GetItemByLayerId(obj_idx, m_selected_layers_range_idx)); } else { for (const auto& object : objects_content) { diff --git a/src/slic3r/GUI/GUI_ObjectList.hpp b/src/slic3r/GUI/GUI_ObjectList.hpp index 1c30a4d974..5c971c40f8 100644 --- a/src/slic3r/GUI/GUI_ObjectList.hpp +++ b/src/slic3r/GUI/GUI_ObjectList.hpp @@ -78,8 +78,8 @@ public: }; private: - SELECTION_MODE m_selection_mode {smUndef}; - t_layer_height_range m_selected_layers_range; + SELECTION_MODE m_selection_mode {smUndef}; + int m_selected_layers_range_idx; struct dragged_item_data { @@ -309,8 +309,8 @@ public: void init_objects(); bool multiple_selection() const ; bool is_selected(const ItemType type) const; - t_layer_height_range get_selected_layers_range() const; - void set_selected_layers_range(const t_layer_height_range range) { m_selected_layers_range = range; } + int get_selected_layers_range_idx() const; + void set_selected_layers_range_idx(const int range_idx) { m_selected_layers_range_idx = range_idx; } void set_selection_mode(SELECTION_MODE mode) { m_selection_mode = mode; } void update_selections(); void update_selections_on_canvas(); diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 3d1e7b97ce..067d13b8ab 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -3731,11 +3731,11 @@ void Plater::priv::take_snapshot(const std::string& snapshot_name) snapshot_data.flags |= UndoRedo::SnapshotData::VARIABLE_LAYER_EDITING_ACTIVE; if (this->sidebar->obj_list()->is_selected(itSettings)) { snapshot_data.flags |= UndoRedo::SnapshotData::SELECTED_SETTINGS_ON_SIDEBAR; - snapshot_data.layer_range = this->sidebar->obj_list()->get_selected_layers_range(); + snapshot_data.layer_range_idx = this->sidebar->obj_list()->get_selected_layers_range_idx(); } else if (this->sidebar->obj_list()->is_selected(itLayer)) { snapshot_data.flags |= UndoRedo::SnapshotData::SELECTED_LAYER_ON_SIDEBAR; - snapshot_data.layer_range = this->sidebar->obj_list()->get_selected_layers_range(); + snapshot_data.layer_range_idx = this->sidebar->obj_list()->get_selected_layers_range_idx(); } else if (this->sidebar->obj_list()->is_selected(itLayerRoot)) snapshot_data.flags |= UndoRedo::SnapshotData::SELECTED_LAYERROOT_ON_SIDEBAR; @@ -3807,11 +3807,11 @@ void Plater::priv::undo_redo_to(std::vector::const_iterator top_snapshot_data.flags |= UndoRedo::SnapshotData::VARIABLE_LAYER_EDITING_ACTIVE; if (this->sidebar->obj_list()->is_selected(itSettings)) { top_snapshot_data.flags |= UndoRedo::SnapshotData::SELECTED_SETTINGS_ON_SIDEBAR; - top_snapshot_data.layer_range = this->sidebar->obj_list()->get_selected_layers_range(); + top_snapshot_data.layer_range_idx = this->sidebar->obj_list()->get_selected_layers_range_idx(); } else if (this->sidebar->obj_list()->is_selected(itLayer)) { top_snapshot_data.flags |= UndoRedo::SnapshotData::SELECTED_LAYER_ON_SIDEBAR; - top_snapshot_data.layer_range = this->sidebar->obj_list()->get_selected_layers_range(); + top_snapshot_data.layer_range_idx = this->sidebar->obj_list()->get_selected_layers_range_idx(); } else if (this->sidebar->obj_list()->is_selected(itLayerRoot)) top_snapshot_data.flags |= UndoRedo::SnapshotData::SELECTED_LAYERROOT_ON_SIDEBAR; @@ -3820,7 +3820,6 @@ void Plater::priv::undo_redo_to(std::vector::const_iterator bool new_selected_layer_on_sidebar = (new_flags & UndoRedo::SnapshotData::SELECTED_LAYER_ON_SIDEBAR) != 0; bool new_selected_layerroot_on_sidebar = (new_flags & UndoRedo::SnapshotData::SELECTED_LAYERROOT_ON_SIDEBAR) != 0; - t_layer_height_range layer_range = it_snapshot->snapshot_data.layer_range; // Disable layer editing before the Undo / Redo jump. if (!new_variable_layer_editing_active && view3D->is_layers_editing_enabled()) view3D->get_canvas3d()->force_main_toolbar_left_action(view3D->get_canvas3d()->get_main_toolbar_item_id("layersediting")); @@ -3859,7 +3858,7 @@ void Plater::priv::undo_redo_to(std::vector::const_iterator new_selected_layerroot_on_sidebar ? ObjectList::SELECTION_MODE::smLayerRoot : ObjectList::SELECTION_MODE::smUndef); if (new_selected_settings_on_sidebar || new_selected_layer_on_sidebar) - this->sidebar->obj_list()->set_selected_layers_range(/*top_snapshot_data.*/layer_range); + this->sidebar->obj_list()->set_selected_layers_range_idx(it_snapshot->snapshot_data.layer_range_idx); this->update_after_undo_redo(temp_snapshot_was_taken); // Enable layer editing after the Undo / Redo jump. diff --git a/src/slic3r/Utils/UndoRedo.cpp b/src/slic3r/Utils/UndoRedo.cpp index 9b12be00eb..daf6752b71 100644 --- a/src/slic3r/Utils/UndoRedo.cpp +++ b/src/slic3r/Utils/UndoRedo.cpp @@ -36,7 +36,7 @@ namespace Slic3r { namespace UndoRedo { -SnapshotData::SnapshotData() : printer_technology(ptUnknown), flags(0), layer_range({0.0, 0.0}) +SnapshotData::SnapshotData() : printer_technology(ptUnknown), flags(0), layer_range_idx(-1) { } diff --git a/src/slic3r/Utils/UndoRedo.hpp b/src/slic3r/Utils/UndoRedo.hpp index 85ad11b828..37cc5a049f 100644 --- a/src/slic3r/Utils/UndoRedo.hpp +++ b/src/slic3r/Utils/UndoRedo.hpp @@ -37,6 +37,7 @@ struct SnapshotData PrinterTechnology printer_technology; // Bitmap of Flags (see the Flags enum). unsigned int flags; + int layer_range_idx; // Bitmask of various binary flags to be stored with the snapshot. enum Flags { @@ -45,8 +46,6 @@ struct SnapshotData SELECTED_LAYERROOT_ON_SIDEBAR = 4, SELECTED_LAYER_ON_SIDEBAR = 8, }; - - t_layer_height_range layer_range; }; struct Snapshot