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:
CURA-12101
The printer parses the machine_start_gcode to allow selecting the filaments mapping at start time, without it the user has to set the filaments in fixed order. This is probably a security to ensure the proper filament is loaded at start.
CURA-12346
For some dark reason, importing the ExtruderStack class in the ThreeMFWriter somehow corrupts the loading of the extruders stacks. As it is imported only for typing, do the import only for type-checking.
- Fix: Need to fill the package's API version into the (template) URL, instead of using latest.
- Fix: Loop was closing over the package ID, which caused the recieving function to always only get the last handled package ID instead of the one it needed to handle.
part of CURA-12156
This change adds a setting for "minimum Z height" for the "nail down the string" moves.
Update PurgeLinesAndUnload.py
Bug fix. The prime blob code didn't account for the retraction at the end. This adds an 'unretract' to compensate.
It's now in a state where it can actually upload ... something (that should work). Not tested the restore yet.
I did run into trouble with the max concurrent requests, which I had to up to [more than 4, now on 8] to get it to work -- I'm not sure if I'm just working around a bug here, or if that's expected behaviour.
part of CURA-12156
Update PurgeLinesAndUnload.py
Added 2 settings so the user can dictate where the prime blob will be.
"Blob Location X" and "Blob Location Y".
Delete PurgeLinesAndUnload_old.py
I'm not sure how I do these things.