- Java 74.9%
- Python 20.5%
- Just 4.6%
| .agents/skills | ||
| .claude | ||
| src | ||
| .gitignore | ||
| AGENTS.md | ||
| AI_USAGE.md | ||
| CLAUDE.md | ||
| justfile | ||
| LICENSE | ||
| README.md | ||
Space mouse navigation for Sweet Home 3D
A Sweet Home 3D plug-in that moves the camera of the 3D view with a 3Dconnexion device (SpaceMouse, SpaceNavigator...) managed by spacenavd. It talks to the daemon directly over its UNIX domain socket, without libspnav or any native library.
AI disclosure
Built with agentic software engineering (Claude Code) from two agent skills I wrote first, then reviewed and used by me. See AI_USAGE.md for the process, scope and review.
Requirements
- Sweet Home 3D 6.0 or later, run with Java 16 or later (for UNIX domain sockets)
- a running spacenavd, reachable at
$SPNAV_SOCKET, thesocketof/etc/spnavrc,$XDG_RUNTIME_DIR/spnav.sockor/var/run/spnav.sock
Build and install
Building needs just, a command runner, as a development dependency. It isn't needed to run the plug-in.
just # builds build/SpacenavPlugin-1.0.sh3p
just install # copies it to ~/.eteks/sweethome3d/plugins
SH3D_JAR and PLUGINS_DIR override the location of SweetHome3D.jar and of the
plug-ins folder. Restart Sweet Home 3D after installing.
Use
The puck acts on the home of the active window only.
| Puck | Virtual visit | Aerial view |
|---|---|---|
| Push forwards / pull backwards | Walk forwards / backwards | Move the home away / closer |
| Push left / right | Step sideways | |
| Lift / press | Raise / lower the camera | |
| Twist | Turn left / right | Rotate the home |
| Tilt forwards / backwards | Look down / up | Tilt the home |
| Button 1 | Switch to aerial view | Switch to virtual visit |
| Button 2 | Level the camera |
In aerial view, Sweet Home 3D keeps the camera pointed at the centre of the home, so there is no panning in that mode.
Tools > Space mouse settings... sets the translation and rotation speeds, inverts individual axes, and chooses whether the puck holds the home or the camera in aerial view. It also shows the connection state and the last values received from the daemon. Settings apply at once and are shared by all windows.
Sensitivity, dead zone and axis mapping configured in spacenavd (spnavrc, spnavcfg)
apply before the plug-in sees the values. A button bound to an action or a key in
spnavrc isn't sent to the plug-in.
Contributing
Bug reports and pull requests are welcome. A proper test suite and KISS-style cleanup are especially welcome ;)
- Write commit messages as Conventional Commits:
feat: ...,fix: ...,docs: ...,chore: ... - Check that
justbuilds the plug-in, and try your change in Sweet Home 3D - If you use AI tools, follow the rules in AI_USAGE.md
License
Copyright (C) 2026 Tim Jagenberg
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. It is distributed WITHOUT ANY WARRANTY. See LICENSE for the full text.
This is the license of Sweet Home 3D itself, which the plug-in extends.