mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-07-11 00:37:51 -06:00
Fix for 0592ae65ee
This commit is contained in:
parent
0592ae65ee
commit
1a3fc0994b
5 changed files with 18 additions and 23 deletions
|
@ -2633,20 +2633,17 @@ bool ObjectList::is_selected(const ItemType type) const
|
||||||
return false;
|
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();
|
const wxDataViewItem& item = GetSelection();
|
||||||
if (!item)
|
if (!item)
|
||||||
return layer_range;
|
return -1;
|
||||||
|
|
||||||
const ItemType type = m_objects_model->GetItemType(item);
|
const ItemType type = m_objects_model->GetItemType(item);
|
||||||
if (type & itSettings && m_objects_model->GetItemType(m_objects_model->GetParent(item)) != itLayer)
|
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) :
|
return m_objects_model->GetLayerIdByItem(type & itLayer ? item : m_objects_model->GetParent(item));
|
||||||
type & itSettings ? m_objects_model->GetLayerRangeByItem(m_objects_model->GetParent(item)) :
|
|
||||||
layer_range;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ObjectList::update_selections()
|
void ObjectList::update_selections()
|
||||||
|
@ -2687,15 +2684,15 @@ void ObjectList::update_selections()
|
||||||
wxDataViewItem obj_item = m_objects_model->GetItemById(obj_idx);
|
wxDataViewItem obj_item = m_objects_model->GetItemById(obj_idx);
|
||||||
if (m_selection_mode & smSettings)
|
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));
|
sels.Add(m_objects_model->GetSettingsItem(obj_item));
|
||||||
else
|
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)
|
else if (m_selection_mode & smLayerRoot)
|
||||||
sels.Add(m_objects_model->GetLayerRootItem(obj_item));
|
sels.Add(m_objects_model->GetLayerRootItem(obj_item));
|
||||||
else if (m_selection_mode & smLayer)
|
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 {
|
else {
|
||||||
for (const auto& object : objects_content) {
|
for (const auto& object : objects_content) {
|
||||||
|
|
|
@ -78,8 +78,8 @@ public:
|
||||||
};
|
};
|
||||||
|
|
||||||
private:
|
private:
|
||||||
SELECTION_MODE m_selection_mode {smUndef};
|
SELECTION_MODE m_selection_mode {smUndef};
|
||||||
t_layer_height_range m_selected_layers_range;
|
int m_selected_layers_range_idx;
|
||||||
|
|
||||||
struct dragged_item_data
|
struct dragged_item_data
|
||||||
{
|
{
|
||||||
|
@ -309,8 +309,8 @@ public:
|
||||||
void init_objects();
|
void init_objects();
|
||||||
bool multiple_selection() const ;
|
bool multiple_selection() const ;
|
||||||
bool is_selected(const ItemType type) const;
|
bool is_selected(const ItemType type) const;
|
||||||
t_layer_height_range get_selected_layers_range() const;
|
int get_selected_layers_range_idx() const;
|
||||||
void set_selected_layers_range(const t_layer_height_range range) { m_selected_layers_range = range; }
|
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 set_selection_mode(SELECTION_MODE mode) { m_selection_mode = mode; }
|
||||||
void update_selections();
|
void update_selections();
|
||||||
void update_selections_on_canvas();
|
void update_selections_on_canvas();
|
||||||
|
|
|
@ -3731,11 +3731,11 @@ void Plater::priv::take_snapshot(const std::string& snapshot_name)
|
||||||
snapshot_data.flags |= UndoRedo::SnapshotData::VARIABLE_LAYER_EDITING_ACTIVE;
|
snapshot_data.flags |= UndoRedo::SnapshotData::VARIABLE_LAYER_EDITING_ACTIVE;
|
||||||
if (this->sidebar->obj_list()->is_selected(itSettings)) {
|
if (this->sidebar->obj_list()->is_selected(itSettings)) {
|
||||||
snapshot_data.flags |= UndoRedo::SnapshotData::SELECTED_SETTINGS_ON_SIDEBAR;
|
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)) {
|
else if (this->sidebar->obj_list()->is_selected(itLayer)) {
|
||||||
snapshot_data.flags |= UndoRedo::SnapshotData::SELECTED_LAYER_ON_SIDEBAR;
|
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))
|
else if (this->sidebar->obj_list()->is_selected(itLayerRoot))
|
||||||
snapshot_data.flags |= UndoRedo::SnapshotData::SELECTED_LAYERROOT_ON_SIDEBAR;
|
snapshot_data.flags |= UndoRedo::SnapshotData::SELECTED_LAYERROOT_ON_SIDEBAR;
|
||||||
|
@ -3807,11 +3807,11 @@ void Plater::priv::undo_redo_to(std::vector<UndoRedo::Snapshot>::const_iterator
|
||||||
top_snapshot_data.flags |= UndoRedo::SnapshotData::VARIABLE_LAYER_EDITING_ACTIVE;
|
top_snapshot_data.flags |= UndoRedo::SnapshotData::VARIABLE_LAYER_EDITING_ACTIVE;
|
||||||
if (this->sidebar->obj_list()->is_selected(itSettings)) {
|
if (this->sidebar->obj_list()->is_selected(itSettings)) {
|
||||||
top_snapshot_data.flags |= UndoRedo::SnapshotData::SELECTED_SETTINGS_ON_SIDEBAR;
|
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)) {
|
else if (this->sidebar->obj_list()->is_selected(itLayer)) {
|
||||||
top_snapshot_data.flags |= UndoRedo::SnapshotData::SELECTED_LAYER_ON_SIDEBAR;
|
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))
|
else if (this->sidebar->obj_list()->is_selected(itLayerRoot))
|
||||||
top_snapshot_data.flags |= UndoRedo::SnapshotData::SELECTED_LAYERROOT_ON_SIDEBAR;
|
top_snapshot_data.flags |= UndoRedo::SnapshotData::SELECTED_LAYERROOT_ON_SIDEBAR;
|
||||||
|
@ -3820,7 +3820,6 @@ void Plater::priv::undo_redo_to(std::vector<UndoRedo::Snapshot>::const_iterator
|
||||||
bool new_selected_layer_on_sidebar = (new_flags & UndoRedo::SnapshotData::SELECTED_LAYER_ON_SIDEBAR) != 0;
|
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;
|
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.
|
// Disable layer editing before the Undo / Redo jump.
|
||||||
if (!new_variable_layer_editing_active && view3D->is_layers_editing_enabled())
|
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"));
|
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<UndoRedo::Snapshot>::const_iterator
|
||||||
new_selected_layerroot_on_sidebar ? ObjectList::SELECTION_MODE::smLayerRoot :
|
new_selected_layerroot_on_sidebar ? ObjectList::SELECTION_MODE::smLayerRoot :
|
||||||
ObjectList::SELECTION_MODE::smUndef);
|
ObjectList::SELECTION_MODE::smUndef);
|
||||||
if (new_selected_settings_on_sidebar || new_selected_layer_on_sidebar)
|
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);
|
this->update_after_undo_redo(temp_snapshot_was_taken);
|
||||||
// Enable layer editing after the Undo / Redo jump.
|
// Enable layer editing after the Undo / Redo jump.
|
||||||
|
|
|
@ -36,7 +36,7 @@
|
||||||
namespace Slic3r {
|
namespace Slic3r {
|
||||||
namespace UndoRedo {
|
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)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -37,6 +37,7 @@ struct SnapshotData
|
||||||
PrinterTechnology printer_technology;
|
PrinterTechnology printer_technology;
|
||||||
// Bitmap of Flags (see the Flags enum).
|
// Bitmap of Flags (see the Flags enum).
|
||||||
unsigned int flags;
|
unsigned int flags;
|
||||||
|
int layer_range_idx;
|
||||||
|
|
||||||
// Bitmask of various binary flags to be stored with the snapshot.
|
// Bitmask of various binary flags to be stored with the snapshot.
|
||||||
enum Flags {
|
enum Flags {
|
||||||
|
@ -45,8 +46,6 @@ struct SnapshotData
|
||||||
SELECTED_LAYERROOT_ON_SIDEBAR = 4,
|
SELECTED_LAYERROOT_ON_SIDEBAR = 4,
|
||||||
SELECTED_LAYER_ON_SIDEBAR = 8,
|
SELECTED_LAYER_ON_SIDEBAR = 8,
|
||||||
};
|
};
|
||||||
|
|
||||||
t_layer_height_range layer_range;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Snapshot
|
struct Snapshot
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue