Thanks!

>From the svn logs he made very good progress.
He commented there that his ndof implementation is working in Windows
and Mac but in my Linux it did not worked :(
And based on the part of the code I saw, I think that his work is
going to be much more clean than my patch :D
When his work is going to be merged to the trunk? Only at the end of
the GSoC project?
>From the GSoC project log I think he still has a lot of work to do :(
I'm sending my patch with the corrections proposed by Ton if someone
find it's useful let me know! :D

att.
Rafael Ortis

2011/1/2 M.G. Kishalmi <l...@kishalmi.net>:
> GSoC log of Mike Erwin (Matts student)
>  -> http://www.invisible-cow.com/blender/soc/index.html
>
> soc-2010-merwin branch
>  -> https://svn.blender.org/svnroot/bf-blender/branches/soc-2010-merwin/
>
> cheers,
>  mario
>
>
> On Sun, Jan 2, 2011 at 8:41 PM, Rafael Ortis <rsor...@gmail.com> wrote:
>> I have read about it in some forum but I didn't find it on Blender GSoC 
>> pages.
>> Where can i find Matts work?
>>
>>
>> 2011/1/1 Tom M <letter...@gmail.com>:
>>> Didn't matts student work on 3dconnexxion as part of GSoC?
>>>
>>> Not sure what stage that part of his project achieved but it might be
>>> worth looking at.
>>>
>>> LetterRip
>>>
>>> On Sat, Jan 1, 2011 at 8:26 AM, Rafael Ortis <rsor...@gmail.com> wrote:
>>>> Yes this is interesting!
>>>>
>>>> I have installed this drivers but in my initial tests the
>>>> rotations/translations was a little bit uncontrollable. But I will
>>>> test with this driver them again.
>>>>
>>>> att
>>>> Rafael Ortis
>>>>
>>>> 2011/1/1 Stephen Swaney <sswa...@centurytel.net>:
>>>>> Also worth noting is the open source SpaceNav project.
>>>>>
>>>>> They have a drop-in replacement for the 3dconnexion driver
>>>>> that also supports a non-proprietary protocol.  Looks
>>>>> interesting.
>>>>>
>>>>> http://spacenav.sourceforge.net/
>>>>>
>>>>> --
>>>>> Stephen Swaney
>>>>> sswa...@centurytel.net
>>>>>
>>>>> _______________________________________________
>>>>> Bf-committers mailing list
>>>>> Bf-committers@blender.org
>>>>> http://lists.blender.org/mailman/listinfo/bf-committers
>>>>>
>>>> _______________________________________________
>>>> Bf-committers mailing list
>>>> Bf-committers@blender.org
>>>> http://lists.blender.org/mailman/listinfo/bf-committers
>>>>
>>> _______________________________________________
>>> Bf-committers mailing list
>>> Bf-committers@blender.org
>>> http://lists.blender.org/mailman/listinfo/bf-committers
>>>
>> _______________________________________________
>> Bf-committers mailing list
>> Bf-committers@blender.org
>> http://lists.blender.org/mailman/listinfo/bf-committers
>>
> _______________________________________________
> Bf-committers mailing list
> Bf-committers@blender.org
> http://lists.blender.org/mailman/listinfo/bf-committers
>
Index: source/blender/makesdna/DNA_windowmanager_types.h
===================================================================
--- source/blender/makesdna/DNA_windowmanager_types.h   (revisão 34012)
+++ source/blender/makesdna/DNA_windowmanager_types.h   (cópia de trabalho)
@@ -44,6 +44,9 @@
 struct wmKeyMap;
 struct wmKeyConfig;
 
+/* XXX HACK */
+struct wmNdofState;
+
 /* forwards */
 struct bContext;
 struct wmLocal;
@@ -173,6 +176,11 @@
        short addmousemove;     /* internal: tag this for extra mousemove 
event, makes cursors/buttons active on UI switching */
        short pad2[2];
 
+        /* XXX HACK */
+        struct wmNdofState *ndofState;
+        //float ndof[7];
+        //int   pad3;
+
        struct wmEvent *eventstate;     /* storage for event system */
        
        struct wmSubWindow *curswin;    /* internal for wm_subwindow.c only */
@@ -298,6 +306,23 @@
 
 } wmOperator;
 
+
+/* XXX HACK */
+/* Current values of ndof device - used in wmWindow*/
+typedef struct wmNdofState  {
+    // translations
+    float tx;
+    float ty;
+    float tz;
+    // rotations
+    float rx;
+    float ry;
+    float rz;
+    // delta
+    float delta;
+} wmNdofState;
+
+
 /* operator type exec(), invoke() modal(), return values */
 #define OPERATOR_RUNNING_MODAL 1
 #define OPERATOR_CANCELLED             2
Index: source/blender/windowmanager/intern/wm_files.c
===================================================================
--- source/blender/windowmanager/intern/wm_files.c      (revisão 34012)
+++ source/blender/windowmanager/intern/wm_files.c      (cópia de trabalho)
@@ -234,6 +234,10 @@
                                                win->eventstate= 
oldwin->eventstate;
                                                oldwin->eventstate= NULL;
                                                
+                                               /* XXX HACK */
+                                               win->ndofState= 
oldwin->ndofState;
+                                               oldwin->ndofState= NULL;
+
                                                /* ensure proper screen 
rescaling */
                                                win->sizex= oldwin->sizex;
                                                win->sizey= oldwin->sizey;
Index: source/blender/windowmanager/intern/wm_window.c
===================================================================
--- source/blender/windowmanager/intern/wm_window.c     (revisão 34012)
+++ source/blender/windowmanager/intern/wm_window.c     (cópia de trabalho)
@@ -67,6 +67,9 @@
 #include "GPU_draw.h"
 #include "GPU_extensions.h"
 
+/* XXX HACK */
+#include "PIL_dynlib.h"
+
 /* the global to talk to ghost */
 GHOST_SystemHandle g_system= NULL;
 
@@ -168,7 +171,10 @@
        }
 
        if(win->eventstate) MEM_freeN(win->eventstate);
-       
+
+       /* XXX HACK */
+       if(win->ndofState) MEM_freeN(win->ndofState);
+
        wm_event_free_all(win);
        wm_subwindows_free(win);
        
@@ -297,6 +303,97 @@
        }
 }
 
+/* XXX HACK */
+/*************** ndof *************************/
+#ifdef _WIN32
+#define PATH_SEP               "\\"
+#else
+#define PATH_SEP               "/"
+#endif
+
+void wm_open_ndof(bContext *C, GHOST_WindowHandle ghostwin)
+{
+        char *inst_path, *plug_path;
+        const char *plug_dir = "plugins";
+        const char *plug_name = "3DxNdofBlender.plug";
+        PILdynlib *ndofLib;
+
+        // build the plugin path
+        plug_path = NULL;
+        inst_path = get_install_dir(); // path to main blender exec/bundle
+        if (inst_path) {
+                // assume the ndof plugin is located in the plug-in dir
+                size_t len = strlen(inst_path) + strlen(plug_dir) + 
strlen(PATH_SEP)*2
+                             + strlen(plug_name) + 1;
+                plug_path = MEM_mallocN(len, "ndofpluginpath");
+                if (plug_path) {
+                        strncpy(plug_path, inst_path, len);
+                        strcat(plug_path, PATH_SEP);
+                        strcat(plug_path, plug_dir);
+                        strcat(plug_path, PATH_SEP);
+                        strcat(plug_path, plug_name);
+                }
+                MEM_freeN(inst_path);
+        }
+
+        ndofLib        = PIL_dynlib_open(plug_path);
+
+        /* On systems where blender is installed in /usr/bin/blender, 
~/.blender/plugins/ is a better place to look */
+       /* XXX HACK Lookup only on install dir because BLI_gethome() not 
avaliable */
+        /*if (ndofLib==NULL) {
+
+                if (plug_path) {
+                        MEM_freeN(plug_path);
+                }
+
+                inst_path = BLI_gethome();
+                if (inst_path) {
+                        size_t len = strlen(inst_path) + strlen(plug_dir) + 
strlen(PATH_SEP)*2
+                                         + strlen(plug_name) + 1;
+
+                        if (!strstr(inst_path, ".blender")) {
+                                len += strlen(".blender") + strlen(PATH_SEP);
+                        }
+
+                        plug_path = MEM_mallocN(len, "ndofpluginpath");
+                        if (plug_path) {
+                                strncpy(plug_path, inst_path, len);
+                                strcat(plug_path, PATH_SEP);
+                                if (!strstr(inst_path, ".blender")) {
+                                        strcat(plug_path, ".blender");
+                                        strcat(plug_path, PATH_SEP);
+                                }
+                                strcat(plug_path, plug_dir);
+                                strcat(plug_path, PATH_SEP);
+                                strcat(plug_path, plug_name);
+                        }
+                }
+
+                ndofLib        = PIL_dynlib_open(plug_path);
+        }*/
+
+
+
+#if 1
+        fprintf(stderr, "plugin path=%s; ndofLib=%p\n", plug_path, 
(void*)ndofLib);
+#endif
+
+        if (plug_path)
+                MEM_freeN(plug_path);
+
+        if (ndofLib) {
+                G.ndofdevice = 0 - GHOST_OpenNDOF(g_system, ghostwin ,
+                               PIL_dynlib_find_symbol(ndofLib, "ndofInit"),
+                               PIL_dynlib_find_symbol(ndofLib, "ndofShutdown"),
+                               PIL_dynlib_find_symbol(ndofLib, "ndofOpen"));
+
+        } else {
+            GHOST_OpenNDOF(g_system, ghostwin, 0, 0, 0);
+            G.ndofdevice = -1;
+        }
+ }
+
+
 /* belongs to below */
 static void wm_window_add_ghostwindow(bContext *C, const char *title, wmWindow 
*win)
 {
@@ -340,7 +437,14 @@
                
                if(win->eventstate==NULL)
                        win->eventstate= MEM_callocN(sizeof(wmEvent), "window 
event state");
-               
+
+               /* XXX HACK */
+               if(win->ndofState==NULL)
+                       win->ndofState= MEM_callocN(sizeof(wmNdofState), "ndof 
device state");
+               // Connecto to ndof device
+               wm_open_ndof(C, ghostwin);
+
+
                /* until screens get drawn, make it nice grey */
                glClearColor(.55, .55, .55, 0.0);
                /* Crash on OSS ATI: 
bugs.launchpad.net/ubuntu/+source/mesa/+bug/656100 */
@@ -404,6 +508,10 @@
                if(win->eventstate==NULL)
                        win->eventstate= MEM_callocN(sizeof(wmEvent), "window 
event state");
 
+               /* XXX HACK */
+               if(win->ndofState==NULL)
+                       win->ndofState= MEM_callocN(sizeof(wmNdofState), "ndof 
device state");
+
                /* add keymap handlers (1 handler for all keys in map!) */
                keymap= WM_keymap_find(wm->defaultconf, "Window", 0, 0);
                WM_event_add_keymap_handler(&win->handlers, keymap);
@@ -759,7 +867,32 @@
                                }
                                break;
                        }
-                               
+
+                       /* XXX HACK */
+                       case GHOST_kEventNDOFMotion:
+                       {
+                           // update ndof device data, dispatch motion event 
and update window
+                           GHOST_TEventNDOFData *sb= data;
+
+                           win->ndofState->tx = sb->tx;
+                           win->ndofState->ty = sb->ty;
+                           win->ndofState->tz = sb->tz;
+                           win->ndofState->rx = sb->rx;
+                           win->ndofState->ry = sb->ry;
+                           win->ndofState->rz = sb->rz;
+                           win->ndofState->delta = sb->delta;
+#if 0
+                           printf(" motion capted %4.1f %4.1f %4.1f %4.1f 
%4.1f %4.1f %4.1f \n",
+                                  win->ndofState->tx, win->ndofState->ty, 
win->ndofState->tz,
+                                  win->ndofState->rx, win->ndofState->ry, 
win->ndofState->rz, win->ndofState->delta);
+#endif
+                           wm_event_add_ghostevent(wm, win, type, time, data);
+                           wm_window_make_drawable(C, win);
+                           WM_event_add_notifier(C, NC_WINDOW, NULL);
+
+                           break;
+                       }
+
                        case GHOST_kEventOpenMainFile:
                        {
                                PointerRNA props_ptr;
@@ -1186,3 +1319,12 @@
        }
 }
 
+void WM_get_ndof(wmWindow* win, float* sbval) {    
+    sbval[0] = win->ndofState->tx;
+    sbval[1] = win->ndofState->ty;
+    sbval[2] = win->ndofState->tz;
+    sbval[3] = win->ndofState->rx;
+    sbval[4] = win->ndofState->ry;
+    sbval[5] = win->ndofState->rz;
+    sbval[6] = win->ndofState->delta;
+}
Index: source/blender/windowmanager/intern/wm_event_system.c
===================================================================
--- source/blender/windowmanager/intern/wm_event_system.c       (revisão 34012)
+++ source/blender/windowmanager/intern/wm_event_system.c       (cópia de 
trabalho)
@@ -2252,6 +2252,41 @@
        event= *evt;
        
        switch (type) {
+
+               /* XXX HACK */
+                /* ndof */
+               case GHOST_kEventNDOFMotion:
+               {
+
+                        View3D *v3d = NULL;
+                        ScrArea *sa  = NULL;
+                        ARegion *arTmp  = NULL;
+                        ARegion *ar  = NULL;
+                        ScrArea *saFound = NULL;
+                        RegionView3D *rv3d = NULL;
+                        Scene *scene = win->screen->scene;
+
+                        for(sa= win->screen->areabase.first; sa; sa= sa->next) 
{
+                                SpaceLink *sl;
+                                for(sl= sa->spacedata.first; sl; sl= sl->next) 
{
+                                        if(sl->spacetype==SPACE_VIEW3D) {
+                                                v3d= (View3D*) sl;
+                                                saFound = sa;
+                                        }
+                                }
+                        }
+
+                        for(arTmp=saFound->regionbase.first; arTmp; arTmp= 
arTmp->next) {
+                                if(arTmp->regiontype == RGN_TYPE_WINDOW) {
+                                        ar = arTmp;
+                                }
+                        }
+                        rv3d = ar->regiondata;
+                        viewmoveNDOF(scene, ar, v3d, 0, win);
+
+                        break;
+                }
+
                /* mouse move */
                case GHOST_kEventCursorMove: {
                        if(win->active) {
Index: source/blender/windowmanager/WM_api.h
===================================================================
--- source/blender/windowmanager/WM_api.h       (revisão 34012)
+++ source/blender/windowmanager/WM_api.h       (cópia de trabalho)
@@ -343,6 +343,8 @@
                        /* progress */
 void           WM_progress_set(struct wmWindow *win, float progress);
 void           WM_progress_clear(struct wmWindow *win);
+/* XXX HACK */
+void            WM_get_ndof(wmWindow* win, float* sbval);
 
 #ifdef WIN32
                        /* Windows System Console */
Index: source/blender/windowmanager/wm_event_types.h
===================================================================
--- source/blender/windowmanager/wm_event_types.h       (revisão 34012)
+++ source/blender/windowmanager/wm_event_types.h       (cópia de trabalho)
@@ -84,6 +84,11 @@
 #define TIMERJOBS              0x0114  /* timer event, internal use */
 #define TIMERAUTOSAVE  0x0115  /* timer event, internal use */
 
+/* XXX HACK */
+/* N-degre of freedom device : 500 */
+#define NDOFMOTION 500
+#define NDOFBUTTON 501
+
 /* standard keyboard */
 #define AKEY           'a'
 #define BKEY           'b'
Index: source/blender/blenloader/intern/readfile.c
===================================================================
--- source/blender/blenloader/intern/readfile.c (revisão 34012)
+++ source/blender/blenloader/intern/readfile.c (cópia de trabalho)
@@ -4515,7 +4515,8 @@
                win->eventstate= NULL;
                win->curswin= NULL;
                win->tweak= NULL;
-
+                /* XXX HACK */
+                win->ndofState= NULL;
                win->queue.first= win->queue.last= NULL;
                win->handlers.first= win->handlers.last= NULL;
                win->modalhandlers.first= win->modalhandlers.last= NULL;
Index: source/blender/editors/space_view3d/view3d_edit.c
===================================================================
--- source/blender/editors/space_view3d/view3d_edit.c   (revisão 34012)
+++ source/blender/editors/space_view3d/view3d_edit.c   (cópia de trabalho)
@@ -2758,7 +2758,8 @@
 int dz_flag = 0;
 float m_dist;
 
-void viewmoveNDOFfly(ARegion *ar, View3D *v3d, int UNUSED(mode))
+/* XXX HACK */
+void viewmoveNDOFfly(ARegion *ar, View3D *v3d, int UNUSED(mode), wmWindow *win)
 {
        RegionView3D *rv3d= ar->regiondata;
        int i;
@@ -2780,7 +2781,8 @@
 
 
        // fetch the current state of the ndof device
-// XXX getndof(dval);
+       /* XXX HACK */
+       WM_get_ndof(win, dval);
 
        if (v3d->ndoffilter)
                filterNDOFvalues(fval);
@@ -2887,7 +2889,8 @@
 // XXX BIF_view3d_previewrender_signal(ar, PR_DBASE|PR_DISPRECT);
 }
 
-void viewmoveNDOF(Scene *scene, ARegion *ar, View3D *v3d, int UNUSED(mode))
+/* XXX HACK */
+void viewmoveNDOF(Scene *scene, ARegion *ar, View3D *v3d, int UNUSED(mode), 
wmWindow *win)
 {
        RegionView3D *rv3d= ar->regiondata;
        float fval[7];
@@ -2958,7 +2961,8 @@
  //   sbadjust *= 60 * frametime;             /* normalize ndof device 
adjustments to 100Hz for framerate independence */
 
        /* fetch the current state of the ndof device & enforce dominant mode 
if selected */
-// XXX    getndof(fval);
+       /* XXX HACK */
+       WM_get_ndof(win, fval);
        if (v3d->ndoffilter)
                filterNDOFvalues(fval);
 
Index: source/blender/editors/include/ED_view3d.h
===================================================================
--- source/blender/editors/include/ED_view3d.h  (revisão 34012)
+++ source/blender/editors/include/ED_view3d.h  (cópia de trabalho)
@@ -47,8 +47,9 @@
 struct Scene;
 struct View3D;
 struct ViewContext;
+/* XXX HACK */
+struct wmWindow;
 
-
 /* for derivedmesh drawing callbacks, for view3d_select, .... */
 typedef struct ViewContext {
        struct Scene *scene;
@@ -172,5 +173,9 @@
 
 unsigned int ED_viewedit_datamask(struct bScreen *screen);
 
+/* XXX HACK */
+void viewmoveNDOF(struct Scene *scene, struct ARegion *ar, struct View3D *v3d, 
int mode, struct wmWindow *win);
+void viewmoveNDOFfly(struct ARegion *ar, struct View3D *v3d, int mode, struct 
wmWindow *win);
+
 #endif /* ED_VIEW3D_H */
 
_______________________________________________
Bf-committers mailing list
Bf-committers@blender.org
http://lists.blender.org/mailman/listinfo/bf-committers

Reply via email to