mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-10-30 12:11:15 -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; | ||||
| } | ||||
| 
 | ||||
| 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) { | ||||
|  |  | |||
|  | @ -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(); | ||||
|  |  | |||
|  | @ -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<UndoRedo::Snapshot>::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<UndoRedo::Snapshot>::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<UndoRedo::Snapshot>::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.
 | ||||
|  |  | |||
|  | @ -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) | ||||
| { | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -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 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 YuSanka
						YuSanka