This change introduces support for 3Dconnexion SpaceMouse devices on Linux
within the 3DConnexion plugin.
Key changes:
- Added `LinuxSpacenavClient.py`, which uses `ctypes` to interface with the
system-provided `libspnav.so.0` library. This client handles opening a
connection to the `spacenavd` daemon and polling for motion and button
events.
- Modified `NavlibClient.py` to include platform detection. On Linux, it
now uses `LinuxSpacenavClient` for device input. On Windows and macOS,
it continues to use the existing `pynavlib`.
- Updated the plugin initialization in `plugins/3DConnexion/__init__.py`
to gracefully handle cases where `libspnav.so.0` might be missing or
`spacenavd` is not accessible on Linux, disabling the plugin in such
scenarios.
- The core camera manipulation logic in `NavlibClient.py` has been adapted
to accept transformation matrices from either `pynavlib` or the new
Linux client, aiming for consistent behavior.
- Placeholder adaptations for some `pynavlib`-specific methods have been
added for the Linux path, returning `None` or basic Python types where
`pynav.*` types were previously used.
This implementation relies on you having `spacenavd` (version 0.6 or newer recommended)
installed and running, along with `libspnav0` (or equivalent).
Testing for this feature is currently manual, involving checking device
response for camera manipulation (pan, zoom, rotate) within Cura on a
Linux environment with a configured SpaceMouse.
Output: