mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-10-30 20:21:12 -06:00 
			
		
		
		
	Fixed update of ModelVolume rotation after GLVolume manipulation
This commit is contained in:
		
							parent
							
								
									b05aa00089
								
							
						
					
					
						commit
						92528ebcb3
					
				
					 1 changed files with 18 additions and 11 deletions
				
			
		|  | @ -6345,30 +6345,36 @@ void GLCanvas3D::_on_rotate() | |||
|     if (m_model == nullptr) | ||||
|         return; | ||||
| 
 | ||||
|     std::set<std::pair<int, int>> done;  // prevent rotating instances twice
 | ||||
|     std::set<std::pair<int, int>> done;  // keeps track of moved instances
 | ||||
| 
 | ||||
|     Selection::EMode selection_mode = m_selection.get_mode(); | ||||
|      | ||||
|     for (const GLVolume* v : m_volumes.volumes) | ||||
|     { | ||||
|         int object_idx = v->object_idx(); | ||||
|         if (object_idx >= 1000) | ||||
|         if ((object_idx < 0) || ((int)m_model->objects.size() <= object_idx)) | ||||
|             continue; | ||||
| 
 | ||||
|         int instance_idx = v->instance_idx(); | ||||
|         int volume_idx = v->volume_idx(); | ||||
| 
 | ||||
|         // prevent rotating instances twice
 | ||||
|         std::pair<int, int> done_id(object_idx, instance_idx); | ||||
|         if (done.find(done_id) != done.end()) | ||||
|             continue; | ||||
|         done.insert(std::pair<int, int>(object_idx, instance_idx)); | ||||
| 
 | ||||
|         done.insert(done_id); | ||||
| 
 | ||||
|         // Rotate instances.
 | ||||
|         // Rotate instances/volumes.
 | ||||
|         ModelObject* model_object = m_model->objects[object_idx]; | ||||
|         if (model_object != nullptr) | ||||
|         { | ||||
| #if ENABLE_MODELVOLUME_TRANSFORM | ||||
|             model_object->instances[instance_idx]->set_rotation(v->get_instance_rotation()); | ||||
|             model_object->instances[instance_idx]->set_offset(v->get_instance_offset()); | ||||
|             if (selection_mode == Selection::Instance) | ||||
|             { | ||||
|                 model_object->instances[instance_idx]->set_rotation(v->get_instance_rotation()); | ||||
|                 model_object->instances[instance_idx]->set_offset(v->get_instance_offset()); | ||||
|             } | ||||
|             else if (selection_mode == Selection::Volume) | ||||
|             { | ||||
|                 model_object->volumes[volume_idx]->set_rotation(v->get_volume_rotation()); | ||||
|                 model_object->volumes[volume_idx]->set_offset(v->get_volume_offset()); | ||||
|             } | ||||
| #else | ||||
|             model_object->instances[instance_idx]->set_rotation(v->get_rotation()); | ||||
|             model_object->instances[instance_idx]->set_offset(v->get_offset()); | ||||
|  | @ -6377,6 +6383,7 @@ void GLCanvas3D::_on_rotate() | |||
|         } | ||||
|     } | ||||
| 
 | ||||
|     // Fixes sinking/flying instances
 | ||||
|     for (const std::pair<int, int>& i : done) | ||||
|     { | ||||
|         ModelObject* m = m_model->objects[i.first]; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Enrico Turri
						Enrico Turri