fa87233919663eca16d6fd8ab977d4a2670cb911
[blender-staging.git] / source / blender / editors / transform / transform_ndofinput.c
1 /**
2  * $Id: 
3  *
4  * ***** BEGIN GPL LICENSE BLOCK *****
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software Foundation,
18  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19  *
20  * The Original Code is: all of this file.
21  *
22  * Contributor(s): Martin Poirier
23  *
24  * ***** END GPL LICENSE BLOCK *****
25  */
26  
27  #include <math.h>                      /* fabs */
28 #include <stdio.h>                      /* for sprintf          */
29
30 #include "BKE_global.h"         /* for G                        */
31 #include "BKE_utildefines.h"    /* ABS */
32
33 #include "DNA_view3d_types.h" /* for G.vd (view3d) */
34 #include "DNA_windowmanager_types.h" /* for G.vd (view3d) */
35
36 #include "WM_types.h"
37
38 #include "transform.h"
39
40 #if 0
41 static int updateNDofMotion(NDofInput *n); // return 0 when motion is null
42 #endif
43 static void resetNDofInput(NDofInput *n);
44
45 void initNDofInput(NDofInput *n)
46 {
47     int i;
48
49         n->flag = 0;
50         n->axis = 0;
51         
52         resetNDofInput(n);
53         
54         for(i = 0; i < 3; i++)
55         {
56                 n->factor[i] = 1.0f;
57         }
58 }
59
60 static void resetNDofInput(NDofInput *n)
61 {       
62         int i;
63         for(i = 0; i < 6; i++)
64         {
65                 n->fval[i] = 0.0f;
66         }
67 }
68
69  
70 int handleNDofInput(NDofInput *n, wmEvent *event)
71 {
72         int retval = 0;
73         // TRANSFORM_FIX_ME
74 #if 0
75         switch(event)
76         {
77                 case NDOFMOTION:
78                         if (updateNDofMotion(n) == 0)
79                         {
80                                 retval = NDOF_NOMOVE;
81                         }
82                         else
83                         {
84                                 retval = NDOF_REFRESH;
85                         }
86                         break;
87                 case NDOFBUTTON:
88                         if (val == 1) 
89                         {
90                                 retval = NDOF_CONFIRM;
91                         }
92                         else if (val == 2) 
93                         {
94                                 retval = NDOF_CANCEL;
95                                 resetNDofInput(n);
96                                 n->flag &= ~NDOF_INIT;
97                         }
98                         break;
99         }
100 #endif  
101         return retval;
102 }
103
104 int hasNDofInput(NDofInput *n)
105 {
106         return (n->flag & NDOF_INIT) == NDOF_INIT;
107 }
108
109 void applyNDofInput(NDofInput *n, float *vec)
110 {
111         if (hasNDofInput(n))
112         {
113                 int i, j;
114                 
115                 for (i = 0, j = 0; i < 6; i++)
116                 {
117                         if (n->axis & (1 << i))
118                         {
119                                 vec[j] = n->fval[i] * n->factor[j];
120                                 j++;
121                         }
122                 }
123         }
124 }
125
126 // TRANSFORM_FIX_ME
127 #if 0
128
129 static int updateNDofMotion(NDofInput *n)
130 {
131     float fval[7];
132     int i;
133     int retval = 0;
134
135         getndof(fval);
136
137         if (G.vd->ndoffilter)
138                 filterNDOFvalues(fval);
139
140         for(i = 0; i < 6; i++)
141         {
142                 if (!retval && fval[i] != 0.0f)
143                 {
144                         retval = 1;
145                 }
146                 
147                 n->fval[i] += fval[i] / 1024.0f;
148         }
149         
150         n->flag |= NDOF_INIT;
151         
152         return retval;
153 }
154 #endif
155
156
157
158