hey Mike, good to see you're makin' progress! :)
in order to get your branch compiled on linux with cmake, I had to tweak it a bit. * install the 'libspnav-dev' package * added the NDOFManagerX11 files to ghosts CMakeLists.txt * added "CMAKE_EXE_LINKER_FLAGS_RELEASE -lspnav" ideally you'd add some cmake flag like WITH_SPACENAV that also does a library check and add the proper compile and linking flags, didn't know how to, so I went the bruteforce way. maybe some cmake guru can help here? running was straight forward after: * run 'spacenavd' (had to run it sudo or it wouldn't create the .sock) keep it up! hth, mario Index: intern/ghost/CMakeLists.txt =================================================================== --- intern/ghost/CMakeLists.txt (revision 37401) +++ intern/ghost/CMakeLists.txt (working copy) @@ -168,11 +168,13 @@ intern/GHOST_SystemX11.cpp intern/GHOST_SystemPathsX11.cpp intern/GHOST_WindowX11.cpp + intern/GHOST_NDOFManagerX11.cpp intern/GHOST_DisplayManagerX11.h intern/GHOST_SystemX11.h intern/GHOST_SystemPathsX11.h intern/GHOST_WindowX11.h + intern/GHOST_NDOFManagerX11.h ) On Sat, Jun 11, 2011 at 2:25 AM, Mike Erwin <significant....@gmail.com>wrote: > Revision: 37394 > > http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=37394 > Author: merwin > Date: 2011-06-11 00:25:48 +0000 (Sat, 11 Jun 2011) > Log Message: > ----------- > SpaceNav works on Linux > > Modified Paths: > -------------- > branches/merwin-spacenav/intern/ghost/GHOST_Types.h > branches/merwin-spacenav/intern/ghost/intern/GHOST_EventManager.cpp > branches/merwin-spacenav/intern/ghost/intern/GHOST_NDOFManager.cpp > branches/merwin-spacenav/intern/ghost/intern/GHOST_NDOFManager.h > branches/merwin-spacenav/intern/ghost/intern/GHOST_NDOFManagerX11.h > branches/merwin-spacenav/intern/ghost/intern/GHOST_SystemWin32.cpp > branches/merwin-spacenav/intern/ghost/intern/GHOST_SystemX11.cpp > branches/merwin-spacenav/intern/ghost/intern/GHOST_SystemX11.h > > branches/merwin-spacenav/source/blender/editors/space_view3d/view3d_edit.c > > > branches/merwin-spacenav/source/blender/windowmanager/intern/wm_event_system.c > branches/merwin-spacenav/source/blender/windowmanager/intern/wm_window.c > > Added Paths: > ----------- > branches/merwin-spacenav/intern/ghost/intern/GHOST_NDOFManagerX11.cpp > > Modified: branches/merwin-spacenav/intern/ghost/GHOST_Types.h > =================================================================== > --- branches/merwin-spacenav/intern/ghost/GHOST_Types.h 2011-06-11 00:22:35 > UTC (rev 37393) > +++ branches/merwin-spacenav/intern/ghost/GHOST_Types.h 2011-06-11 00:25:48 > UTC (rev 37394) > @@ -47,11 +47,6 @@ > typedef int GHOST_TInt32; > typedef unsigned int GHOST_TUns32; > > -#ifdef WIN32 > -#define WM_BLND_NDOF_AXIS WM_USER + 1 > -#define WM_BLND_NDOF_BTN WM_USER + 2 > -#endif > - > #if defined(WIN32) && !defined(FREE_WINDOWS) > typedef __int64 GHOST_TInt64; > typedef unsigned __int64 GHOST_TUns64; > > Modified: > branches/merwin-spacenav/intern/ghost/intern/GHOST_EventManager.cpp > =================================================================== > --- branches/merwin-spacenav/intern/ghost/intern/GHOST_EventManager.cpp > 2011-06-11 00:22:35 UTC (rev 37393) > +++ branches/merwin-spacenav/intern/ghost/intern/GHOST_EventManager.cpp > 2011-06-11 00:25:48 UTC (rev 37394) > @@ -42,8 +42,8 @@ > #include "GHOST_EventManager.h" > #include <algorithm> > #include "GHOST_Debug.h" > +#include <stdio.h> // [mce] temp debug > > - > GHOST_EventManager::GHOST_EventManager() > { > } > @@ -111,6 +111,7 @@ > bool GHOST_EventManager::dispatchEvent(GHOST_IEvent* event) > { > bool handled; > + printf("dispatching %d\n", event->getType()); > if (event) { > handled = true; > TConsumerVector::iterator iter; > > Modified: > branches/merwin-spacenav/intern/ghost/intern/GHOST_NDOFManager.cpp > =================================================================== > --- branches/merwin-spacenav/intern/ghost/intern/GHOST_NDOFManager.cpp > 2011-06-11 00:22:35 UTC (rev 37393) > +++ branches/merwin-spacenav/intern/ghost/intern/GHOST_NDOFManager.cpp > 2011-06-11 00:25:48 UTC (rev 37394) > @@ -16,7 +16,7 @@ > * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. > * > * Contributor(s): > - * Mike Erwin > + * Mike Erwin > * > * ***** END GPL LICENSE BLOCK ***** > */ > @@ -54,12 +54,33 @@ > m_atRest = false; > } > > -void GHOST_NDOFManager::updateButtons(unsigned short buttons, GHOST_TUns64 > time) > +void GHOST_NDOFManager::updateButton(int button_number, bool press, > GHOST_TUns64 time) > { > GHOST_IWindow* window = > m_system.getWindowManager()->getActiveWindow(); > > - unsigned short diff = m_buttons ^ buttons; > + GHOST_EventNDOFButton* event = new GHOST_EventNDOFButton(time, > window); > + GHOST_TEventNDOFButtonData* data = (GHOST_TEventNDOFButtonData*) > event->getData(); > > + data->action = press ? GHOST_kPress : GHOST_kRelease; > + data->button = button_number + 1; > + > + printf("sending button %d %s\n", data->button, (data->action == > GHOST_kPress) ? "pressed" : "released"); > + > + m_system.pushEvent(event); > + > + unsigned short mask = 1 << button_number; > + if (press) > + m_buttons |= mask; // set this button's bit > + else > + m_buttons &= ~mask; // clear this button's bit > + } > + > +void GHOST_NDOFManager::updateButtons(unsigned short button_bits, > GHOST_TUns64 time) > + { > + GHOST_IWindow* window = > m_system.getWindowManager()->getActiveWindow(); > + > + unsigned short diff = m_buttons ^ button_bits; > + > for (int i = 0; i < 16; ++i) > { > unsigned short mask = 1 << i; > @@ -69,16 +90,16 @@ > GHOST_EventNDOFButton* event = new > GHOST_EventNDOFButton(time, window); > GHOST_TEventNDOFButtonData* data = > (GHOST_TEventNDOFButtonData*) event->getData(); > > - data->action = (buttons & mask) ? GHOST_kPress : > GHOST_kRelease; > + data->action = (button_bits & mask) ? GHOST_kPress > : GHOST_kRelease; > data->button = i + 1; > > - // printf("sending button %d %s\n", data->button, > (data->action == GHOST_kPress) ? "pressed" : "released"); > + printf("sending button %d %s\n", data->button, > (data->action == GHOST_kPress) ? "pressed" : "released"); > > m_system.pushEvent(event); > } > } > > - m_buttons = buttons; > + m_buttons = button_bits; > } > > bool GHOST_NDOFManager::sendMotionEvent() > @@ -109,14 +130,16 @@ > > m_prevMotionTime = m_motionTime; > > - // printf("sending T=(%.2f,%.2f,%.2f) R=(%.2f,%.2f,%.2f) > dt=%.3f\n", > - // data->tx, data->ty, data->tz, data->rx, data->ry, data->rz, > data->dt); > + printf("sending T=(%.2f,%.2f,%.2f) R=(%.2f,%.2f,%.2f) dt=%.3f\n", > + data->tx, data->ty, data->tz, data->rx, data->ry, data->rz, > data->dt); > > m_system.pushEvent(event); > > // 'at rest' test goes at the end so that the first 'rest' event > gets sent > m_atRest = m_rotation[0] == 0 && m_rotation[1] == 0 && m_rotation[2] > == 0 && > m_translation[0] == 0 && m_translation[1] == 0 && > m_translation[2] == 0; > + // this needs to be aware of calibration -- 0.01 0.01 0.03 might be > 'rest' > > return true; > } > + > > Modified: branches/merwin-spacenav/intern/ghost/intern/GHOST_NDOFManager.h > =================================================================== > --- branches/merwin-spacenav/intern/ghost/intern/GHOST_NDOFManager.h > 2011-06-11 00:22:35 UTC (rev 37393) > +++ branches/merwin-spacenav/intern/ghost/intern/GHOST_NDOFManager.h > 2011-06-11 00:25:48 UTC (rev 37394) > @@ -15,7 +15,8 @@ > * along with this program; if not, write to the Free Software Foundation, > * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. > * > - * Contributor(s): none yet. > + * Contributor(s): > + * Mike Erwin > * > * ***** END GPL LICENSE BLOCK ***** > */ > @@ -40,27 +41,28 @@ > // the latest raw data from the device > void updateTranslation(short t[3], GHOST_TUns64 time); > void updateRotation(short r[3], GHOST_TUns64 time); > - // this one sends events immediately for changed buttons > - void updateButtons(unsigned short b, GHOST_TUns64 time); > + // send events immediately for changed buttons > + void updateButton(int button_number, bool press, GHOST_TUns64 > time); > + void updateButtons(unsigned short button_bits, GHOST_TUns64 time); > > // processes most recent raw data into an NDOFMotion event and sends > it > // returns whether an event was sent > - virtual bool sendMotionEvent(); > + bool sendMotionEvent(); > > protected: > GHOST_System& m_system; > > short m_translation[3]; > short m_rotation[3]; > - unsigned short m_buttons; > + unsigned short m_buttons; // bit field > > - GHOST_TUns64 m_motionTime; > + GHOST_TUns64 m_motionTime; // in milliseconds > GHOST_TUns64 m_prevMotionTime; // time of most recent Motion event > sent > bool m_atRest; > > - void updateMotionTime(GHOST_TUns64 t); > - void resetMotion(); > +// void updateMotionTime(GHOST_TUns64 t); > +// void resetMotion(); > }; > > +#endif > > -#endif > > Added: > branches/merwin-spacenav/intern/ghost/intern/GHOST_NDOFManagerX11.cpp > =================================================================== > --- branches/merwin-spacenav/intern/ghost/intern/GHOST_NDOFManagerX11.cpp > (rev 0) > +++ branches/merwin-spacenav/intern/ghost/intern/GHOST_NDOFManagerX11.cpp > 2011-06-11 00:25:48 UTC (rev 37394) > @@ -0,0 +1,86 @@ > +/* > + * ***** BEGIN GPL LICENSE BLOCK ***** > + * > + * 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. > + * > + * This program is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + * GNU General Public License for more details. > + * > + * You should have received a copy of the GNU General Public License > + * along with this program; if not, write to the Free Software Foundation, > + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. > + * > + * Contributor(s): > + * Mike Erwin > + * > + * ***** END GPL LICENSE BLOCK ***** > + */ > + > +#include "GHOST_NDOFManagerX11.h" > +#include "GHOST_SystemX11.h" > +#include <spnav.h> > +#include <stdio.h> > + > + > +GHOST_NDOFManagerX11::GHOST_NDOFManagerX11(GHOST_System& sys) > + : GHOST_NDOFManager(sys) > + { > + if (spnav_open() != -1) > + { > + m_available = true; > + } > + else > + { > + printf("<!> SpaceNav driver not found\n"); > + // This isn't a hard error, just means the user doesn't > have a SpaceNavigator. > + m_available = false; > + } > + } > + > +GHOST_NDOFManagerX11::~GHOST_NDOFManagerX11() > + { > + if (m_available) > + { > + spnav_remove_events(SPNAV_EVENT_ANY); // ask nuclear if > this is needed > + spnav_close(); > + } > + } > + > +bool GHOST_NDOFManagerX11::available() > + { > + return m_available; > + } > + > +bool GHOST_NDOFManagerX11::processEvents() > + { > + GHOST_TUns64 now = m_system.getMilliSeconds(); > + > + bool anyProcessed = false; > + spnav_event e; > + while (spnav_poll_event(&e)) > + { > + switch (e.type) > + { > + case SPNAV_EVENT_MOTION: > + { > + short t[3] = {e.motion.x, e.motion.y, > e.motion.z}; > + short r[3] = {e.motion.rx, e.motion.ry, > e.motion.rz}; > + > + updateTranslation(t, now); > + updateRotation(r, now); > + break; > + } > + case SPNAV_EVENT_BUTTON: > + updateButton(e.button.bnum, e.button.press, > now); > + break; > + } > + anyProcessed = true; > + } > + return anyProcessed; > + } > + > > Modified: > branches/merwin-spacenav/intern/ghost/intern/GHOST_NDOFManagerX11.h > =================================================================== > --- branches/merwin-spacenav/intern/ghost/intern/GHOST_NDOFManagerX11.h > 2011-06-11 00:22:35 UTC (rev 37393) > +++ branches/merwin-spacenav/intern/ghost/intern/GHOST_NDOFManagerX11.h > 2011-06-11 00:25:48 UTC (rev 37394) > @@ -15,7 +15,8 @@ > * along with this program; if not, write to the Free Software Foundation, > * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. > * > - * Contributor(s): none yet. > + * Contributor(s): > + * Mike Erwin > * > * ***** END GPL LICENSE BLOCK ***** > */ > @@ -24,77 +25,18 @@ > #define _GHOST_NDOFMANAGERX11_H_ > > #include "GHOST_NDOFManager.h" > -#include "GHOST_Types.h" > -#include "GHOST_WindowX11.h" > -#include "GHOST_EventNDOF.h" > -#include <X11/Xlib.h> > -#include <stdio.h> > > class GHOST_NDOFManagerX11 : public GHOST_NDOFManager > -{ > -GHOST_WindowX11 * m_ghost_window_x11; > - > + { > public: > - GHOST_NDOFManagerX11(GHOST_System& sys) > - : GHOST_NDOFManager(sys) > - {} > + GHOST_NDOFManagerX11(GHOST_System&); > + ~GHOST_NDOFManagerX11(); > + bool available(); > + bool processEvents(); > > - void setGHOSTWindowX11(GHOST_WindowX11 * w){ > - if (m_ghost_window_x11 == NULL) > - m_ghost_window_x11 = w; > - } > +private: > + bool m_available; > + }; > > - GHOST_WindowX11 * getGHOSTWindowX11(){ > - return m_ghost_window_x11; > - } > - > - // whether multi-axis functionality is available (via the OS or > driver) > - // does not imply that a device is plugged in or being used > - bool available() > - { > - // never available since I've not yet written it! > - return true; > - } > - > - virtual bool sendMotionEvent() > - { > > @@ Diff output truncated at 10240 characters. @@ > _______________________________________________ > Bf-blender-cvs mailing list > bf-blender-...@blender.org > http://lists.blender.org/mailman/listinfo/bf-blender-cvs > _______________________________________________ Bf-committers mailing list Bf-committers@blender.org http://lists.blender.org/mailman/listinfo/bf-committers