mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-10-30 20:21:12 -06:00 
			
		
		
		
	ENABLE_3DCONNEXION_DEVICES -> Increased limit of device buttons
This commit is contained in:
		
							parent
							
								
									b11704d380
								
							
						
					
					
						commit
						d58dedd459
					
				
					 3 changed files with 31 additions and 18 deletions
				
			
		|  | @ -2551,7 +2551,7 @@ void GLCanvas3D::on_mouse_wheel(wxMouseEvent& evt) | |||
| #if ENABLE_3DCONNEXION_DEVICES | ||||
|     // try to filter out events coming from mouse 3d controller
 | ||||
|     const Mouse3DController& controller = wxGetApp().plater()->get_mouse3d_controller(); | ||||
|     if (controller.has_rotation() || controller.has_translation()) | ||||
|     if (controller.has_translation_or_rotation()) | ||||
|         return; | ||||
| #endif // ENABLE_3DCONNEXION_DEVICES
 | ||||
| 
 | ||||
|  |  | |||
|  | @ -30,7 +30,7 @@ static const std::vector<int> _3DCONNEXION_DEVICES = | |||
|     0xc629  // SPACEPILOTPRO = 50729
 | ||||
| }; | ||||
| 
 | ||||
| static const unsigned int _3DCONNEXION_BUTTONS_COUNT = 2; | ||||
| static const unsigned int _3DCONNEXION_MAX_BUTTONS_COUNT = 256; | ||||
| 
 | ||||
| namespace Slic3r { | ||||
| namespace GUI { | ||||
|  | @ -41,7 +41,6 @@ const float Mouse3DController::State::DefaultRotationScale = 1.0; | |||
| Mouse3DController::State::State() | ||||
|     : m_translation(Vec3d::Zero()) | ||||
|     , m_rotation(Vec3f::Zero()) | ||||
|     , m_buttons(_3DCONNEXION_BUTTONS_COUNT, false) | ||||
|     , m_translation_scale(DefaultTranslationScale) | ||||
|     , m_rotation_scale(DefaultRotationScale) | ||||
| { | ||||
|  | @ -62,8 +61,7 @@ void Mouse3DController::State::set_rotation(const Vec3f& rotation) | |||
| void Mouse3DController::State::set_button(unsigned int id) | ||||
| { | ||||
|     std::lock_guard<std::mutex> lock(m_mutex); | ||||
|     if (id < _3DCONNEXION_BUTTONS_COUNT) | ||||
|         m_buttons[id] = true; | ||||
|     m_buttons.push_back(id); | ||||
| } | ||||
| 
 | ||||
| bool Mouse3DController::State::has_translation() const | ||||
|  | @ -71,21 +69,23 @@ bool Mouse3DController::State::has_translation() const | |||
|     std::lock_guard<std::mutex> lock(m_mutex); | ||||
|     return !m_translation.isApprox(Vec3d::Zero()); | ||||
| } | ||||
| 
 | ||||
| bool Mouse3DController::State::has_rotation() const | ||||
| { | ||||
|     std::lock_guard<std::mutex> lock(m_mutex); | ||||
|     return !m_rotation.isApprox(Vec3f::Zero()); | ||||
| } | ||||
| 
 | ||||
| bool Mouse3DController::State::has_translation_or_rotation() const | ||||
| { | ||||
|     std::lock_guard<std::mutex> lock(m_mutex); | ||||
|     return !m_translation.isApprox(Vec3d::Zero()) && !m_rotation.isApprox(Vec3f::Zero()); | ||||
| } | ||||
| 
 | ||||
| bool Mouse3DController::State::has_any_button() const | ||||
| { | ||||
|     std::lock_guard<std::mutex> lock(m_mutex); | ||||
|     for (int i = 0; i < _3DCONNEXION_BUTTONS_COUNT; ++i) | ||||
|     { | ||||
|         if (m_buttons[i]) | ||||
|             return true; | ||||
|     } | ||||
|     return false; | ||||
|     return !m_buttons.empty(); | ||||
| } | ||||
| 
 | ||||
| bool Mouse3DController::State::apply(GLCanvas3D& canvas) | ||||
|  | @ -116,12 +116,17 @@ bool Mouse3DController::State::apply(GLCanvas3D& canvas) | |||
| 
 | ||||
|     if (has_any_button()) | ||||
|     { | ||||
|         if (m_buttons[0]) | ||||
|             canvas.set_camera_zoom(1.0); | ||||
|         else if (m_buttons[1]) | ||||
|             canvas.set_camera_zoom(-1.0); | ||||
|         for (unsigned int i : m_buttons) | ||||
|         { | ||||
|             switch (i) | ||||
|             { | ||||
|             case 0: { canvas.set_camera_zoom(1.0); break; } | ||||
|             case 1: { canvas.set_camera_zoom(-1.0); break; } | ||||
|             default: { break; } | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         m_buttons = std::vector<bool>(_3DCONNEXION_BUTTONS_COUNT, false); | ||||
|         m_buttons.clear(); | ||||
|         ret = true; | ||||
|     } | ||||
| 
 | ||||
|  | @ -314,7 +319,7 @@ void Mouse3DController::collect_input() | |||
|             } | ||||
|         case Button: | ||||
|             { | ||||
|                 for (unsigned int i = 0; i < _3DCONNEXION_BUTTONS_COUNT; ++i) | ||||
|                 for (unsigned int i = 0; i < _3DCONNEXION_MAX_BUTTONS_COUNT; ++i) | ||||
|                 { | ||||
|                     if (retrieved_data[1] & (0x1 << i)) | ||||
|                         m_state.set_button(i); | ||||
|  |  | |||
|  | @ -26,7 +26,7 @@ class Mouse3DController | |||
| 
 | ||||
|         Vec3d m_translation; | ||||
|         Vec3f m_rotation; | ||||
|         std::vector<bool> m_buttons; | ||||
|         std::vector<unsigned int> m_buttons; | ||||
| 
 | ||||
|         double m_translation_scale; | ||||
|         float m_rotation_scale; | ||||
|  | @ -40,8 +40,15 @@ class Mouse3DController | |||
| 
 | ||||
|         bool has_translation() const; | ||||
|         bool has_rotation() const; | ||||
|         bool has_translation_or_rotation() const; | ||||
|         bool has_any_button() const; | ||||
| 
 | ||||
|         double get_translation_scale() const { return m_translation_scale; } | ||||
|         void set_translation_scale(double scale) { m_translation_scale = scale; } | ||||
| 
 | ||||
|         float get_rotation_scale() const { return m_rotation_scale; } | ||||
|         void set_rotation_scale(float scale) { m_rotation_scale = scale; } | ||||
| 
 | ||||
|         // return true if any change to the camera took place
 | ||||
|         bool apply(GLCanvas3D& canvas); | ||||
|     }; | ||||
|  | @ -71,6 +78,7 @@ public: | |||
| 
 | ||||
|     bool has_translation() const { return m_state.has_translation(); } | ||||
|     bool has_rotation() const { return m_state.has_rotation(); } | ||||
|     bool has_translation_or_rotation() const { return m_state.has_translation_or_rotation(); } | ||||
|     bool has_any_button() const { return m_state.has_any_button(); } | ||||
| 
 | ||||
|     bool apply() | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Enrico Turri
						Enrico Turri