added "fake user" button (basically a shortcut for pressing Shift+F4 and F)
[blender.git] / source / blender / include / blendef.h
1 /* $Id$ 
2  *
3  * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
4  *
5  * This program is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU General Public License
7  * as published by the Free Software Foundation; either version 2
8  * of the License, or (at your option) any later version. The Blender
9  * Foundation also sells licenses for use in proprietary software under
10  * the Blender License.  See http://www.blender.org/BL/ for information
11  * about this.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software Foundation,
20  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
21  *
22  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
23  * All rights reserved.
24  *
25  * The Original Code is: all of this file.
26  *
27  * Contributor(s): none yet.
28  *
29  * ***** END GPL/BL DUAL LICENSE BLOCK *****
30  */
31 #ifndef BLENDEF_H
32 #define BLENDEF_H
33
34 #ifdef WIN32
35 #else
36 #ifndef __BeOS
37 #define O_BINARY        0
38 #endif
39 #endif
40
41 #ifndef MAXFLOAT
42 #define MAXFLOAT  ((float)3.40282347e+38)
43 #endif
44
45 #include <float.h>      /* deze moet een keer naar de blender.h */
46
47
48
49
50 /* **************** ALGEMEEN ********************* */
51
52 #define VECCOPY(v1,v2)          {*(v1)= *(v2); *(v1+1)= *(v2+1); *(v1+2)= *(v2+2);}
53 #define QUATCOPY(v1,v2)         {*(v1)= *(v2); *(v1+1)= *(v2+1); *(v1+2)= *(v2+2); *(v1+3)= *(v2+3);}
54
55 #define INPR(v1, v2)            ( (v1)[0]*(v2)[0] + (v1)[1]*(v2)[1] + (v1)[2]*(v2)[2] )
56 #define CLAMP(a, b, c)          if((a)<(b)) (a)=(b); else if((a)>(c)) (a)=(c)
57 #define CLAMPIS(a, b, c)        ((a)<(b) ? (b) : (a)>(c) ? (c) : (a))
58 #define CLAMPTEST(a, b, c)      if((b)<(c)) {CLAMP(a, b, c);} else {CLAMP(a, c, b);}
59
60 #define IS_EQ(a,b) ((fabs((double)(a)-(b)) >= (double) FLT_EPSILON) ? 0 : 1)
61
62 #define INIT_MINMAX(min, max) (min)[0]= (min)[1]= (min)[2]= 1.0e30; (max)[0]= (max)[1]= (max)[2]= -1.0e30;
63 #define DO_MINMAX(vec, min, max) if( (min)[0]>(vec)[0] ) (min)[0]= (vec)[0]; \
64                                                           if( (min)[1]>(vec)[1] ) (min)[1]= (vec)[1]; \
65                                                           if( (min)[2]>(vec)[2] ) (min)[2]= (vec)[2]; \
66                                                           if( (max)[0]<(vec)[0] ) (max)[0]= (vec)[0]; \
67                                                           if( (max)[1]<(vec)[1] ) (max)[1]= (vec)[1]; \
68                                                           if( (max)[2]<(vec)[2] ) (max)[2]= (vec)[2]; \
69
70 #define DO_MINMAX2(vec, min, max) if( (min)[0]>(vec)[0] ) (min)[0]= (vec)[0]; \
71                                                           if( (min)[1]>(vec)[1] ) (min)[1]= (vec)[1]; \
72                                                           if( (max)[0]<(vec)[0] ) (max)[0]= (vec)[0]; \
73                                                           if( (max)[1]<(vec)[1] ) (max)[1]= (vec)[1];
74
75 #define MINSIZE(val, size)      ( ((val)>=0.0) ? (((val)<(size)) ? (size): (val)) : ( ((val)>(-size)) ? (-size) : (val)))
76
77 #define BTST(a,b)       ( ( (a) & 1<<(b) )!=0 )
78 #define BCLR(a,b)       ( (a) & ~(1<<(b)) )
79 #define BSET(a,b)       ( (a) | 1<<(b) )
80 /* bit-row */
81 #define BROW(min, max)  (((max)>=31? 0xFFFFFFFF: (1<<(max+1))-1) - ((min)? ((1<<(min))-1):0) )
82
83 // return values
84
85 #define RET_OK 0
86 #define RET_ERROR 1
87 #define RET_CANCEL 2
88 #define RET_YES (1 == 1)
89 #define RET_NO (1 == 0)
90
91 #define LONGCOPY(a, b, c)       {int lcpc=c, *lcpa=(int *)a, *lcpb=(int *)b; while(lcpc-->0) *(lcpa++)= *(lcpb++);}
92
93 #if defined(__sgi) || defined(__sparc) || defined(__sparc__) || defined (__PPC__) || defined (__ppc__) || defined (__BIG_ENDIAN__)
94 /* big endian */
95 #define MAKE_ID2(c, d)          ( (c)<<8 | (d) )
96 #define MOST_SIG_BYTE                           0
97 #define BBIG_ENDIAN
98 #else
99 /* little endian  */
100 #define MAKE_ID2(c, d)          ( (d)<<8 | (c) )
101 #define MOST_SIG_BYTE                           1
102 #define BLITTLE_ENDIAN
103 #endif
104
105 #define SELECT                  1
106 #define ACTIVE                  2
107 #define NOT_YET                 0
108
109
110 #define TESTBASE(base)  ( ((base)->flag & SELECT) && ((base)->lay & G.vd->lay) )
111 #define TESTBASELIB(base)       ( ((base)->flag & SELECT) && ((base)->lay & G.vd->lay) && ((base)->object->id.lib==0))
112 #define FIRSTBASE               G.scene->base.first
113 #define LASTBASE                G.scene->base.last
114 #define BASACT                  (G.scene->basact)
115 #define OBACT                   (BASACT? BASACT->object: 0)
116 #define ID_NEW(a)               if( (a) && (a)->id.newid ) (a)= (void *)(a)->id.newid
117 #define ID_NEW_US(a)    if( (a)->id.newid) {(a)= (void *)(a)->id.newid; (a)->id.us++;}
118 #define ID_NEW_US2(a)   if( ((ID *)a)->newid) {(a)= ((ID *)a)->newid; ((ID *)a)->us++;}
119 #define CFRA                    (G.scene->r.cfra)
120 #define F_CFRA                  ((float)(G.scene->r.cfra))
121 #define SFRA                    (G.scene->r.sfra)
122 #define EFRA                    (G.scene->r.efra)
123
124 #define ISPOIN(a, b, c)                 ( (a->b) && (a->c) )
125 #define ISPOIN3(a, b, c, d)             ( (a->b) && (a->c) && (a->d) )
126 #define ISPOIN4(a, b, c, d, e)  ( (a->b) && (a->c) && (a->d) && (a->e) )
127
128
129 #define KNOTSU(nu)          ( (nu)->orderu+ (nu)->pntsu+ (nu->orderu-1)*((nu)->flagu & 1) )
130 #define KNOTSV(nu)          ( (nu)->orderv+ (nu)->pntsv+ (nu->orderv-1)*((nu)->flagv & 1) )
131
132 /* psfont */
133 #define FNT_PDRAW 1
134 #define FNT_HAEBERLI 2
135
136
137 /* isect en scanfill */
138 #define COMPLIMIT       0.0003
139
140
141 /* **************** MAX ********************* */
142
143
144 #define MAXLAMP         256
145 /* max lengte material array, 16 vanwege bitjes in matfrom */
146 #define MAXPICKBUF      2000
147 #define MAXSEQ          32
148 /*  in Image struct */
149 #define MAXMIPMAP       10
150 /* in buttons.c */
151 #define MAX_EFFECT      20
152
153 /* getbutton */
154
155 /* do_global_buttons(event) */
156
157 #define B_ACTLOCAL              24      /* __NLA */
158 #define B_ACTALONE              25      /* __NLA */
159 #define B_ARMLOCAL              26      /* __NLA */
160 #define B_ARMALONE              27      /* __NLA */
161
162 #define B_WORLDLOCAL    28
163 #define B_WORLDALONE    29
164 #define B_LATTLOCAL             30
165 #define B_MBALLLOCAL    31
166 #define B_CAMERALOCAL   32
167 #define B_OBLOCAL               33
168 #define B_IPOLOCAL              34
169 #define B_LAMPLOCAL             35
170 #define B_MATLOCAL              36
171 #define B_TEXLOCAL              37
172 #define B_MESHLOCAL             38
173 #define B_CURVELOCAL    39
174
175 #define B_LATTALONE             40
176 #define B_MBALLALONE    41
177 #define B_CAMERAALONE   42
178 #define B_OBALONE               43
179 #define B_IPOALONE              44
180 #define B_LAMPALONE             45
181 #define B_MATALONE              46
182 #define B_TEXALONE              47
183 #define B_MESHALONE             48
184 #define B_CURVEALONE    49
185 /* EVENT < 50: alone's en locals */
186
187 #define B_KEEPDATA                      60
188
189 #define B_SHOWSPLASH            70
190 #define B_RESETAUTOSAVE         71
191 #define B_SOUNDTOGGLE           72
192 #define B_MIPMAPCHANGED         73
193 #define B_CONSTRAINTBROWSE      74      /* __NLA */
194 #define B_ACTIONDELETE          75      /* __NLA */
195 #define B_ACTIONBROWSE          76      /* __NLA */
196 #define B_IMAGEDELETE           77
197 #define B_LTEXBROWSE            78
198 #define B_MESHBROWSE            79
199 #define B_EXTEXBROWSE           80
200 #define B_LOADTEMP                      81
201 #define B_MATDELETE                     82
202 #define B_TEXDELETE                     83
203 #define B_IPODELETE                     84
204 #define B_WORLDDELETE           85
205 #define B_WTEXBROWSE            86
206 #define B_WORLDBROWSE           87
207 #define B_IPOBROWSE                     88
208 #define B_NEWFRAME                      89
209 #define B_LAMPBROWSE            90
210 #define B_MATBROWSE                     91
211 #define B_TEXBROWSE                     92
212 #define B_EDITBROWSE            93
213 #define B_AUTOTEXNAME           94
214 #define B_AUTOMATNAME           95
215 #define B_MATLOCK                       96
216 #define B_IDNAME                        97
217 #define B_NEWSPACE                      98
218 #define B_FULL                          99
219 #define B_REDR                          100
220
221
222 /* VIEW3D: 100 */
223 #define B_HOME                  101
224 #define B_LAY                   102
225 /* pasop: codes 102-132 in gebuik voor layers */
226 #define B_AUTOKEY               139
227 #define B_SCENELOCK             140
228 #define B_LOCALVIEW             141
229 #define B_U_CAPSLOCK    142
230 #define B_EDITMODE              143
231 #define B_VPAINT                144
232 #define B_FACESEL               145
233 #define B_VIEWBUT               146
234 #define B_PERSP                 147
235 #define B_PROPTOOL              148
236 #define B_VIEWRENDER    149
237 #define B_VIEWTRANS             150
238 #define B_VIEWZOOM              151
239 #define B_STARTGAME             152
240 #define B_POSEMODE              153
241 #define B_TEXTUREPAINT  154
242 #define B_WPAINT                155
243
244 /* IPO: 200 */
245 #define B_IPOHOME               201
246 #define B_IPOBORDER             202
247 #define B_IPOCOPY               203
248 #define B_IPOPASTE              204
249 #define B_IPOCONT               205
250 #define B_IPOEXTRAP             206
251 #define B_IPOCYCLIC             207
252 #define B_IPOMAIN               208
253 #define B_IPOSHOWKEY    209
254 #define B_IPOCYCLICX    210
255         /* warn: also used for oops and seq */
256 #define B_VIEW2DZOOM    211
257 #define B_IPOPIN                212
258
259 /* OOPS: 250 */
260 #define B_OOPSHOME              251
261 #define B_OOPSBORDER    252
262 #define B_NEWOOPS               253
263
264 /* INFO: 300 */
265 /* pas op: ook in filesel.c en editobject.c */
266 #define B_INFOSCR               301
267 #define B_INFODELSCR    302
268 #define B_INFOSCE               304
269 #define B_INFODELSCE    305
270 #define B_FILEMENU              306
271 #define B_PACKFILE              307
272
273 /* IMAGE: 350 */
274 #define B_SIMAGEHOME            351
275 #define B_SIMABROWSE            352
276 #define B_SIMAGELOAD            353
277 #define B_SIMAGEDRAW            354
278 #define B_BE_SQUARE                     355
279 #define B_SIMAGEDRAW1           356
280 #define B_TWINANIM                      357
281 #define B_SIMAGEREPLACE         358
282 #define B_CLIP_UV                       359
283 #define B_SIMAGELOAD1           360
284 #define B_SIMAGEREPLACE1        361
285 #define B_SIMAGEPAINTTOOL       362
286 #define B_SIMAPACKIMA           363
287 #define B_SIMAGESAVE            364
288
289 /* BUTS: 400 */
290 #define B_BUTSHOME              401
291 #define B_BUTSPREVIEW   402
292 #define B_MATCOPY               403
293 #define B_MATPASTE              404
294 #define B_MESHTYPE              405
295
296 /* IMASEL: 450 */
297 /* in de imasel.h */
298
299 /* TEXT: 500 */
300 #define B_TEXTBROWSE    501
301 #define B_TEXTALONE             502
302 #define B_TEXTLOCAL             503
303 #define B_TEXTDELETE    504
304 #define B_TEXTFONT              505
305 #define B_TEXTSTORE             506
306 #define B_TEXTLINENUM   507
307
308 /* FILE: 550 */
309 #define B_SORTFILELIST  551
310 #define B_RELOADDIR             552
311
312 /* SEQUENCE: 600 */
313 #define B_SEQHOME               601
314 #define B_SEQCLEAR              602
315
316 /* SOUND: 650 */
317 #define B_SOUNDBROWSE   651
318 #define B_SOUNDBROWSE2  652
319 #define B_SOUNDHOME             653
320 #define B_PACKSOUND     654
321
322 /* ACTION: 701 - 800 */
323 #define B_ACTHOME               701
324 #define B_ACTCOPY               702
325 #define B_ACTPASTE              703
326 #define B_ACTPASTEFLIP  704
327 #define B_ACTCYCLIC             705
328 #define B_ACTCONT               706
329 #define B_ACTMAIN               707
330 #define B_ACTPIN                708
331 #define B_ACTBAKE               709
332
333 #define B_NOTHING               -1
334 #define B_NOP                   -1
335
336 /* NLA: 801-900 */
337 #define B_NLAHOME               801
338
339 /* editbutflag */
340 #define B_CLOCKWISE             1
341 #define B_KEEPORIG              2
342 #define B_BEAUTY                4
343 #define B_SMOOTH                8
344
345
346 /* ***************** DISPLIST ***************** */
347
348 #define DL_POLY                 0
349 #define DL_SEGM                 1
350 #define DL_SURF                 2
351 #define DL_TRIA                 3
352 #define DL_INDEX3               4
353 #define DL_INDEX4               5
354 #define DL_VERTCOL              6
355 #define DL_VERTS                7
356 #define DL_NORS                 8
357
358 #define DL_SURFINDEX(cyclu, cyclv, sizeu, sizev)            \
359                                                             \
360     if( (cyclv)==0 && a==(sizev)-1) break;                  \
361     if(cyclu) {                                             \
362         p1= sizeu*a;                                        \
363         p2= p1+ sizeu-1;                                    \
364         p3= p1+ sizeu;                                      \
365         p4= p2+ sizeu;                                      \
366         b= 0;                                               \
367     }                                                       \
368     else {                                                  \
369         p2= sizeu*a;                                        \
370         p1= p2+1;                                           \
371         p4= p2+ sizeu;                                      \
372         p3= p1+ sizeu;                                      \
373         b= 1;                                               \
374     }                                                       \
375     if( (cyclv) && a==sizev-1) {                            \
376         p3-= sizeu*sizev;                                   \
377         p4-= sizeu*sizev;                                   \
378     }
379
380 /* DISPLAYMODE */
381 #define R_DISPLAYVIEW   0
382 #define R_DISPLAYWIN    1
383 #define R_DISPLAYAUTO   2
384
385
386
387 #if defined(__sgi) || defined(__sparc) || defined(__sparc__) || defined (__PPC__) || defined (__ppc__) || defined (__BIG_ENDIAN__)
388 #define RCOMP   3
389 #define GCOMP   2
390 #define BCOMP   1
391 #define ACOMP   0
392
393 #else
394
395 #define RCOMP   0
396 #define GCOMP   1
397 #define BCOMP   2
398 #define ACOMP   3
399 #endif
400
401 #ifdef GS
402 #undef GS
403 #endif
404 #define GS(a)   (*((short *)(a)))
405
406 #endif
407