[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [38908] trunk/blender: 3D mouse support from merwin-spacenav branch

Mike Erwin significant.bit at gmail.com
Tue Aug 2 06:28:06 CEST 2011


Revision: 38908
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=38908
Author:   merwin
Date:     2011-08-02 04:28:05 +0000 (Tue, 02 Aug 2011)
Log Message:
-----------
3D mouse support from merwin-spacenav branch

Modified Paths:
--------------
    trunk/blender/CMakeLists.txt
    trunk/blender/build_files/cmake/macros.cmake
    trunk/blender/build_files/scons/config/darwin-config.py
    trunk/blender/build_files/scons/config/linux2-config.py
    trunk/blender/intern/ghost/CMakeLists.txt
    trunk/blender/intern/ghost/GHOST_C-api.h
    trunk/blender/intern/ghost/GHOST_ISystem.h
    trunk/blender/intern/ghost/GHOST_Types.h
    trunk/blender/intern/ghost/SConscript
    trunk/blender/intern/ghost/intern/GHOST_C-api.cpp
    trunk/blender/intern/ghost/intern/GHOST_DisplayManagerWin32.cpp
    trunk/blender/intern/ghost/intern/GHOST_DropTargetWin32.cpp
    trunk/blender/intern/ghost/intern/GHOST_DropTargetWin32.h
    trunk/blender/intern/ghost/intern/GHOST_EventManager.cpp
    trunk/blender/intern/ghost/intern/GHOST_EventNDOF.h
    trunk/blender/intern/ghost/intern/GHOST_NDOFManager.cpp
    trunk/blender/intern/ghost/intern/GHOST_NDOFManager.h
    trunk/blender/intern/ghost/intern/GHOST_System.cpp
    trunk/blender/intern/ghost/intern/GHOST_System.h
    trunk/blender/intern/ghost/intern/GHOST_SystemCocoa.h
    trunk/blender/intern/ghost/intern/GHOST_SystemCocoa.mm
    trunk/blender/intern/ghost/intern/GHOST_SystemPathsWin32.cpp
    trunk/blender/intern/ghost/intern/GHOST_SystemPathsWin32.h
    trunk/blender/intern/ghost/intern/GHOST_SystemWin32.cpp
    trunk/blender/intern/ghost/intern/GHOST_SystemWin32.h
    trunk/blender/intern/ghost/intern/GHOST_SystemX11.cpp
    trunk/blender/intern/ghost/intern/GHOST_SystemX11.h
    trunk/blender/intern/ghost/intern/GHOST_TaskbarWin32.h
    trunk/blender/intern/ghost/intern/GHOST_WindowWin32.h
    trunk/blender/release/scripts/startup/bl_ui/space_userpref.py
    trunk/blender/release/scripts/startup/bl_ui/space_userpref_keymap.py
    trunk/blender/release/scripts/startup/bl_ui/space_view3d.py
    trunk/blender/source/blender/blenkernel/BKE_global.h
    trunk/blender/source/blender/editors/gpencil/gpencil_paint.c
    trunk/blender/source/blender/editors/interface/resources.c
    trunk/blender/source/blender/editors/sculpt_paint/paint_stroke.c
    trunk/blender/source/blender/editors/space_image/image_intern.h
    trunk/blender/source/blender/editors/space_image/image_ops.c
    trunk/blender/source/blender/editors/space_image/space_image.c
    trunk/blender/source/blender/editors/space_view3d/view3d_draw.c
    trunk/blender/source/blender/editors/space_view3d/view3d_edit.c
    trunk/blender/source/blender/editors/space_view3d/view3d_fly.c
    trunk/blender/source/blender/editors/space_view3d/view3d_intern.h
    trunk/blender/source/blender/editors/space_view3d/view3d_ops.c
    trunk/blender/source/blender/editors/transform/transform.c
    trunk/blender/source/blender/editors/transform/transform_ops.c
    trunk/blender/source/blender/makesdna/DNA_userdef_types.h
    trunk/blender/source/blender/makesdna/DNA_view3d_types.h
    trunk/blender/source/blender/makesrna/intern/rna_userdef.c
    trunk/blender/source/blender/makesrna/intern/rna_wm.c
    trunk/blender/source/blender/windowmanager/WM_types.h
    trunk/blender/source/blender/windowmanager/intern/wm_event_system.c
    trunk/blender/source/blender/windowmanager/intern/wm_init_exit.c
    trunk/blender/source/blender/windowmanager/intern/wm_operators.c
    trunk/blender/source/blender/windowmanager/intern/wm_window.c
    trunk/blender/source/blender/windowmanager/wm_event_types.h

Modified: trunk/blender/CMakeLists.txt
===================================================================
--- trunk/blender/CMakeLists.txt	2011-08-02 02:28:37 UTC (rev 38907)
+++ trunk/blender/CMakeLists.txt	2011-08-02 04:28:05 UTC (rev 38908)
@@ -179,6 +179,7 @@
 option(WITH_LZMA          "Enable best LZMA compression, (used for pointcache)" ON)
 
 # Misc
+option(WITH_NDOF "Enable NDOF input devices (SpaceNavigator and friends)" ON)
 option(WITH_RAYOPTIMIZATION	"Enable use of SIMD (SSE) optimizations for the raytracer" ON) 
 if(UNIX AND NOT APPLE)
 	option(WITH_INSTALL_PORTABLE "Install redistributeable runtime, otherwise install into CMAKE_INSTALL_PREFIX" ON)
@@ -452,6 +453,15 @@
 		endif()
 	endif()
 
+	if (WITH_NDOF)
+		if(CMAKE_SYSTEM_NAME MATCHES "Linux")
+			set(NDOF /usr)
+			set(NDOF_INC ${NDOF}/include)
+			set(NDOF_LIBRARY spnav)
+			set(NDOF_LIBPATH ${NDOF}/lib)
+		endif()
+	endif()
+
 	# OpenSuse needs lutil, ArchLinux not, for now keep, can avoid by using --as-needed
 	set(PLATFORM_LINKLIBS "-lutil -lc -lm -lpthread -lstdc++")
 
@@ -1029,6 +1039,10 @@
 		set(TIFF_LIBPATH ${TIFF}/lib)
 	endif()
 
+	if (WITH_NDOF)
+		# linker needs "-weak_framework 3DconnexionClient"
+	endif()
+
 	set(EXETYPE MACOSX_BUNDLE)
 
 	set(CMAKE_C_FLAGS_DEBUG "-fno-strict-aliasing -g")

Modified: trunk/blender/build_files/cmake/macros.cmake
===================================================================
--- trunk/blender/build_files/cmake/macros.cmake	2011-08-02 02:28:37 UTC (rev 38907)
+++ trunk/blender/build_files/cmake/macros.cmake	2011-08-02 04:28:05 UTC (rev 38908)
@@ -193,6 +193,9 @@
 	if(WITH_MEM_JEMALLOC)
 		link_directories(${JEMALLOC_LIBPATH})
 	endif()
+	if(WITH_NDOF)
+		link_directories(${NDOF_LIBPATH})
+	endif()
 
 	if(WIN32 AND NOT UNIX)
 		link_directories(${PTHREADS_LIBPATH})
@@ -314,6 +317,10 @@
 	if(WITH_MEM_JEMALLOC)
 		target_link_libraries(${target} ${JEMALLOC_LIBRARIES})
 	endif()
+	if(WITH_NDOF)
+		target_link_libraries(${target} ${NDOF_LIBRARY})
+	endif()
+
 	if(WIN32 AND NOT UNIX)
 		target_link_libraries(${target} ${PTHREADS_LIBRARIES})
 	endif()

Modified: trunk/blender/build_files/scons/config/darwin-config.py
===================================================================
--- trunk/blender/build_files/scons/config/darwin-config.py	2011-08-02 02:28:37 UTC (rev 38907)
+++ trunk/blender/build_files/scons/config/darwin-config.py	2011-08-02 04:28:05 UTC (rev 38908)
@@ -264,8 +264,10 @@
     BF_RAYOPTIMIZATION_SSE_FLAGS = ['-msse']
 elif MACOSX_ARCHITECTURE == 'x86_64':
     BF_RAYOPTIMIZATION_SSE_FLAGS = ['-msse','-msse2']
-    
 
+# SpaceNavigator and related 3D mice
+WITH_BF_3DMOUSE = True
+
 #############################################################################
 ###################  various compile settings and flags    ##################
 #############################################################################
@@ -294,6 +296,9 @@
 	else:
 		PLATFORM_LINKFLAGS = PLATFORM_LINKFLAGS+['-framework','QuickTime']
 
+if WITH_BF_3DMOUSE:
+	PLATFORM_LINKFLAGS = PLATFORM_LINKFLAGS + ['-weak_framework','3DconnexionClient']
+
 #note to build succesfully on 10.3.9 SDK you need to patch  10.3.9 by adding the SystemStubs.a lib from 10.4
 LLIBS = ['stdc++', 'SystemStubs']
 

Modified: trunk/blender/build_files/scons/config/linux2-config.py
===================================================================
--- trunk/blender/build_files/scons/config/linux2-config.py	2011-08-02 02:28:37 UTC (rev 38907)
+++ trunk/blender/build_files/scons/config/linux2-config.py	2011-08-02 04:28:05 UTC (rev 38908)
@@ -192,6 +192,10 @@
 WITH_BF_RAYOPTIMIZATION = True
 BF_RAYOPTIMIZATION_SSE_FLAGS = ['-msse','-pthread']
 
+#SpaceNavigator and friends
+WITH_BF_3DMOUSE = True
+BF_3DMOUSE_LIB = 'spnav'
+
 ##
 CC = 'gcc'
 CXX = 'g++'
@@ -223,6 +227,8 @@
 ##FIX_STUBS_WARNINGS = -Wno-unused
 
 LLIBS = ['util', 'c', 'm', 'dl', 'pthread', 'stdc++']
+if WITH_BF_3DMOUSE:
+	LLIBS = LLIBS + [BF_3DMOUSE_LIB];
 ##LOPTS = --dynamic
 ##DYNLDFLAGS = -shared $(LDFLAGS)
 

Modified: trunk/blender/intern/ghost/CMakeLists.txt
===================================================================
--- trunk/blender/intern/ghost/CMakeLists.txt	2011-08-02 02:28:37 UTC (rev 38907)
+++ trunk/blender/intern/ghost/CMakeLists.txt	2011-08-02 04:28:05 UTC (rev 38908)
@@ -158,11 +158,13 @@
 			intern/GHOST_SystemCocoa.mm
 			intern/GHOST_SystemPathsCocoa.mm
 			intern/GHOST_WindowCocoa.mm
-			
+			intern/GHOST_NDOFManagerCocoa.mm
+
 			intern/GHOST_DisplayManagerCocoa.h
 			intern/GHOST_SystemCocoa.h
 			intern/GHOST_SystemPathsCocoa.h
 			intern/GHOST_WindowCocoa.h
+			intern/GHOST_NDOFManagerCocoa.h
 		)
 	else()
 		list(APPEND SRC
@@ -197,11 +199,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
 	)
 
 	if(NOT WITH_INSTALL_PORTABLE)
@@ -230,6 +234,7 @@
 		intern/GHOST_SystemPathsWin32.cpp
 		intern/GHOST_WindowWin32.cpp
 		intern/GHOST_DropTargetWin32.cpp
+		intern/GHOST_NDOFManagerWin32.cpp
 
 		intern/GHOST_DisplayManagerWin32.h
 		intern/GHOST_DropTargetWin32.h
@@ -237,6 +242,7 @@
 		intern/GHOST_SystemPathsWin32.h
 		intern/GHOST_WindowWin32.h
 		intern/GHOST_TaskbarWin32.h
+		intern/GHOST_NDOFManagerWin32.h
 	)
 endif()
 

Modified: trunk/blender/intern/ghost/GHOST_C-api.h
===================================================================
--- trunk/blender/intern/ghost/GHOST_C-api.h	2011-08-02 02:28:37 UTC (rev 38907)
+++ trunk/blender/intern/ghost/GHOST_C-api.h	2011-08-02 04:28:05 UTC (rev 38908)
@@ -288,21 +288,6 @@
  * @param windowhandle The handle to the window
  */
 extern GHOST_TSuccess GHOST_EndProgressBar(GHOST_WindowHandle windowhandle);
-	
-	
-/***************************************************************************************
- ** N-degree of freedom device management functionality
- ***************************************************************************************/
- 
-/**
-* Open N-degree of freedom devices
- */
-extern int GHOST_OpenNDOF(GHOST_SystemHandle systemhandle, 
-                           GHOST_WindowHandle windowhandle,
-                          GHOST_NDOFLibraryInit_fp setNdofLibraryInit, 
-                          GHOST_NDOFLibraryShutdown_fp setNdofLibraryShutdown,
-                          GHOST_NDOFDeviceOpen_fp setNdofDeviceOpen
-                          );
 
 /***************************************************************************************
  ** Cursor management functionality

Modified: trunk/blender/intern/ghost/GHOST_ISystem.h
===================================================================
--- trunk/blender/intern/ghost/GHOST_ISystem.h	2011-08-02 02:28:37 UTC (rev 38907)
+++ trunk/blender/intern/ghost/GHOST_ISystem.h	2011-08-02 04:28:05 UTC (rev 38908)
@@ -298,22 +298,6 @@
 	 */
 	virtual GHOST_TSuccess removeEventConsumer(GHOST_IEventConsumer* consumer) = 0;
 
-	 /***************************************************************************************
-	 ** N-degree of freedom device management functionality
-	 ***************************************************************************************/
-
-   /**
-    * Starts the N-degree of freedom device manager
-    */
-   virtual int openNDOF(GHOST_IWindow*,
-       GHOST_NDOFLibraryInit_fp setNdofLibraryInit, 
-       GHOST_NDOFLibraryShutdown_fp setNdofLibraryShutdown,
-       GHOST_NDOFDeviceOpen_fp setNdofDeviceOpen
-       // original patch only
-      // GHOST_NDOFEventHandler_fp setNdofEventHandler
-       ) = 0;
-
-
 	/***************************************************************************************
 	 ** Cursor management functionality
 	 ***************************************************************************************/

Modified: trunk/blender/intern/ghost/GHOST_Types.h
===================================================================
--- trunk/blender/intern/ghost/GHOST_Types.h	2011-08-02 02:28:37 UTC (rev 38907)
+++ trunk/blender/intern/ghost/GHOST_Types.h	2011-08-02 04:28:05 UTC (rev 38908)
@@ -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;
@@ -440,38 +435,34 @@
 	GHOST_TUns8 **strings;
 } GHOST_TStringArray;
 
+typedef enum {
+	GHOST_kNotStarted,
+	GHOST_kStarting,
+	GHOST_kInProgress,
+	GHOST_kFinishing,
+	GHOST_kFinished
+	} GHOST_TProgress;
 
-/* original patch used floats, but the driver return ints and uns. We will calibrate in view, no sense on doing conversions twice */
-/* as all USB device controls are likely to use ints, this is also more future proof */
-//typedef struct {
-//   /** N-degree of freedom device data */
-//   float tx, ty, tz;   /** -x left, +y up, +z forward */
-//   float rx, ry, rz;
-//   float dt;
-//} GHOST_TEventNDOFData;
-
 typedef struct {
-   /** N-degree of freedom device data v2*/
-   int changed;
-   GHOST_TUns64 client;
-   GHOST_TUns64 address;
-   GHOST_TInt16 tx, ty, tz;   /** -x left, +y up, +z forward */
-   GHOST_TInt16 rx, ry, rz;
-   GHOST_TInt16 buttons;
-   GHOST_TUns64 time;
-   GHOST_TUns64 delta;
-} GHOST_TEventNDOFData;
+	/** N-degree of freedom device data v3 [GSoC 2010] */
+	// Each component normally ranges from -1 to +1, but can exceed that.
+	// These use blender standard view coordinates, with positive rotations being CCW about the axis.
+	float tx, ty, tz; // translation
+	float rx, ry, rz; // rotation:
+		// axis = (rx,ry,rz).normalized
+		// amount = (rx,ry,rz).magnitude [in revolutions, 1.0 = 360 deg]
+	float dt; // time since previous NDOF Motion event
+	GHOST_TProgress progress; // Starting, InProgress or Finishing (for modal handlers)
+} GHOST_TEventNDOFMotionData;
 
-typedef int     (*GHOST_NDOFLibraryInit_fp)(void);
-typedef void    (*GHOST_NDOFLibraryShutdown_fp)(void* deviceHandle);
-typedef void*   (*GHOST_NDOFDeviceOpen_fp)(void* platformData);
+typedef enum { GHOST_kPress, GHOST_kRelease } GHOST_TButtonAction;
+	// good for mouse or other buttons too, hmmm?
 
-// original patch windows callback. In mac os X version the callback is internal to the plug-in and post an event to main thead.
-// not necessary faster, but better integration with other events. 

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list