On 07/04/15 19:44, Boudewijn Rempt wrote: > On Tue, 7 Apr 2015, Christian Gagneraud wrote: > >> Hi there, >> >> Is anyone aware of a Qt based lib that would provide support for devices >> like the SpaceNavigator? [1] >> >> I'm aware of at least one Qt based app (FreeCAD [2]) that works on >> Linux, OS X and Windows and which has support for this device. I had a >> look at the source code, it is not that complicated [3], but there's lot >> of boilerplate for multi-platform support. >> >> So i just wondered if someone out there has a nice Qt lib that is easy >> to integrate into existing projects or even better a Qt input plugin? >> > > Hm, the space navigator support code in Calligra doesn't have any > platform boilerplate, but whether that means it works on Windows, I > don't know -- all our space navigators have disappeared in the mists of > time.
Hi Boudewijn, I just had a look at the source code, and indeed, Calligra rely solely on libspacenav [1] which AFAIU is *not* multi platform. Quick comparison between FreeCAD and Calligra: - Calligra use only libspnav, Freecad can use either proprietary SDK (Windows and Mac) or libspnav (X11) - Calligra use a polling thread, which communicate with the main thread through signal/slots, the receiver then calls some custom event handler of a KoToolBase class instance. FreeCAD uses raw event filtering on QApp instance and calls postEvent() on focusWidget() - Freecad have some logic to manage event accumulation, flooding and flushing (didn't quite understand why and how) - Freecad as a built-in "calibrate" feature (not sure how this works) - Calligra uses the 2 Space navigator buttons as if they were the mouse left/right buttons, Freecad defines them as 2 new sort of buttons - Calligra interpret the events as position/rotation, FreeCAD as translation/rotation, not sure if it's just semantics here. (libspnav uses translation/rotation) - Device support in Calligra is done by a KoInputDeviceHandler plugin, FreeCAD doesn't use the plugin approach. - And last thing, FreeCAD has a nice device configuration Widget, Calligra relies on the system/user configuration of the spacenavd daemon. spnavcfg is the command that provides a GUI with even more controls than what FreeCAD provides. Both approaches have pros and cons. Side note: On ubuntu, only 3 stock apps depends on libspnav0: freecad, calligra and blender: $ apt-cache rdepends libspnav0 libspnav0 Reverse Depends: libspnav0:i386 libspnav-dev freecad calligra-libs blender Googling or DuckDuckGoing reveals more 3D related projects (Qt based or not) that supports such as OpenSceneGraph, GoogleEarth, Ogre, ... (Not counting professional CAD/EDA Software) I think it would be very nice if Qt had support for this kind of input device. Qt already provides key, mouse, native gesture, tablet and touch input events. Chris > > >> Thx, >> Chris >> >> [1] http://www.3dconnexion.eu/products/spacemouse/spacenavigator.html >> [2] >> http://www.freecadweb.org/wiki/index.php?title=3Dconnexion_input_devices >> [3] >> https://github.com/FreeCAD/FreeCAD_sf_master/blob/master/src/Gui/GuiApplicationNativeEventAware.h >> >> _______________________________________________ >> Interest mailing list >> [email protected] >> http://lists.qt-project.org/mailman/listinfo/interest >> _______________________________________________ Interest mailing list [email protected] http://lists.qt-project.org/mailman/listinfo/interest
