Initial revision
[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 (__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_SHOWSPLASH            70
188 #define B_RESETAUTOSAVE         71
189 #define B_SOUNDTOGGLE           72
190 #define B_MIPMAPCHANGED         73
191 #define B_CONSTRAINTBROWSE      74      /* __NLA */
192 #define B_ACTIONDELETE          75      /* __NLA */
193 #define B_ACTIONBROWSE          76      /* __NLA */
194 #define B_IMAGEDELETE           77
195 #define B_LTEXBROWSE            78
196 #define B_MESHBROWSE            79
197 #define B_EXTEXBROWSE           80
198 #define B_LOADTEMP                      81
199 #define B_MATDELETE                     82
200 #define B_TEXDELETE                     83
201 #define B_IPODELETE                     84
202 #define B_WORLDDELETE           85
203 #define B_WTEXBROWSE            86
204 #define B_WORLDBROWSE           87
205 #define B_IPOBROWSE                     88
206 #define B_NEWFRAME                      89
207 #define B_LAMPBROWSE            90
208 #define B_MATBROWSE                     91
209 #define B_TEXBROWSE                     92
210 #define B_EDITBROWSE            93
211 #define B_AUTOTEXNAME           94
212 #define B_AUTOMATNAME           95
213 #define B_MATLOCK                       96
214 #define B_IDNAME                        97
215 #define B_NEWSPACE                      98
216 #define B_FULL                          99
217 #define B_REDR                          100
218
219
220 /* VIEW3D: 100 */
221 #define B_HOME                  101
222 #define B_LAY                   102
223 /* pasop: codes 102-132 in gebuik voor layers */
224 #define B_AUTOKEY               139
225 #define B_SCENELOCK             140
226 #define B_LOCALVIEW             141
227 #define B_U_CAPSLOCK    142
228 #define B_EDITMODE              143
229 #define B_VPAINT                144
230 #define B_FACESEL               145
231 #define B_VIEWBUT               146
232 #define B_PERSP                 147
233 #define B_PROPTOOL              148
234 #define B_VIEWRENDER    149
235 #define B_VIEWTRANS             150
236 #define B_VIEWZOOM              151
237 #define B_STARTGAME             152
238 #define B_POSEMODE              153
239 #define B_TEXTUREPAINT  154
240 #define B_WPAINT                155
241
242 /* IPO: 200 */
243 #define B_IPOHOME               201
244 #define B_IPOBORDER             202
245 #define B_IPOCOPY               203
246 #define B_IPOPASTE              204
247 #define B_IPOCONT               205
248 #define B_IPOEXTRAP             206
249 #define B_IPOCYCLIC             207
250 #define B_IPOMAIN               208
251 #define B_IPOSHOWKEY    209
252 #define B_IPOCYCLICX    210
253         /* warn: also used for oops and seq */
254 #define B_VIEW2DZOOM    211
255 #define B_IPOPIN                212
256
257 /* OOPS: 250 */
258 #define B_OOPSHOME              251
259 #define B_OOPSBORDER    252
260 #define B_NEWOOPS               253
261
262 /* INFO: 300 */
263 /* pas op: ook in filesel.c en editobject.c */
264 #define B_INFOSCR               301
265 #define B_INFODELSCR    302
266 #define B_INFOSCE               304
267 #define B_INFODELSCE    305
268 #define B_FILEMENU              306
269 #define B_PACKFILE              307
270
271 /* IMAGE: 350 */
272 #define B_SIMAGEHOME            351
273 #define B_SIMABROWSE            352
274 #define B_SIMAGELOAD            353
275 #define B_SIMAGEDRAW            354
276 #define B_BE_SQUARE                     355
277 #define B_SIMAGEDRAW1           356
278 #define B_TWINANIM                      357
279 #define B_SIMAGEREPLACE         358
280 #define B_CLIP_UV                       359
281 #define B_SIMAGELOAD1           360
282 #define B_SIMAGEREPLACE1        361
283 #define B_SIMAGEPAINTTOOL       362
284 #define B_SIMAPACKIMA           363
285 #define B_SIMAGESAVE            364
286
287 /* BUTS: 400 */
288 #define B_BUTSHOME              401
289 #define B_BUTSPREVIEW   402
290 #define B_MATCOPY               403
291 #define B_MATPASTE              404
292 #define B_MESHTYPE              405
293
294 /* IMASEL: 450 */
295 /* in de imasel.h */
296
297 /* TEXT: 500 */
298 #define B_TEXTBROWSE    501
299 #define B_TEXTALONE             502
300 #define B_TEXTLOCAL             503
301 #define B_TEXTDELETE    504
302 #define B_TEXTFONT              505
303 #define B_TEXTSTORE             506
304
305 /* FILE: 550 */
306 #define B_SORTFILELIST  551
307 #define B_RELOADDIR             552
308
309 /* SEQUENCE: 600 */
310 #define B_SEQHOME               601
311 #define B_SEQCLEAR              602
312
313 /* SOUND: 650 */
314 #define B_SOUNDBROWSE   651
315 #define B_SOUNDBROWSE2  652
316 #define B_SOUNDHOME             653
317 #define B_PACKSOUND     654
318
319 /* ACTION: 701 - 800 */
320 #define B_ACTHOME               701
321 #define B_ACTCOPY               702
322 #define B_ACTPASTE              703
323 #define B_ACTPASTEFLIP  704
324 #define B_ACTCYCLIC             705
325 #define B_ACTCONT               706
326 #define B_ACTMAIN               707
327 #define B_ACTPIN                708
328 #define B_ACTBAKE               709
329
330 #define B_NOTHING               -1
331 #define B_NOP                   -1
332
333 /* NLA: 801-900 */
334 #define B_NLAHOME               801
335
336 /* editbutflag */
337 #define B_CLOCKWISE             1
338 #define B_KEEPORIG              2
339 #define B_BEAUTY                4
340 #define B_SMOOTH                8
341
342
343 /* ***************** DISPLIST ***************** */
344
345 #define DL_POLY                 0
346 #define DL_SEGM                 1
347 #define DL_SURF                 2
348 #define DL_TRIA                 3
349 #define DL_INDEX3               4
350 #define DL_INDEX4               5
351 #define DL_VERTCOL              6
352 #define DL_VERTS                7
353 #define DL_NORS                 8
354
355 #define DL_SURFINDEX(cyclu, cyclv, sizeu, sizev)            \
356                                                             \
357     if( (cyclv)==0 && a==(sizev)-1) break;                  \
358     if(cyclu) {                                             \
359         p1= sizeu*a;                                        \
360         p2= p1+ sizeu-1;                                    \
361         p3= p1+ sizeu;                                      \
362         p4= p2+ sizeu;                                      \
363         b= 0;                                               \
364     }                                                       \
365     else {                                                  \
366         p2= sizeu*a;                                        \
367         p1= p2+1;                                           \
368         p4= p2+ sizeu;                                      \
369         p3= p1+ sizeu;                                      \
370         b= 1;                                               \
371     }                                                       \
372     if( (cyclv) && a==sizev-1) {                            \
373         p3-= sizeu*sizev;                                   \
374         p4-= sizeu*sizev;                                   \
375     }
376
377 /* DISPLAYMODE */
378 #define R_DISPLAYVIEW   0
379 #define R_DISPLAYWIN    1
380 #define R_DISPLAYAUTO   2
381
382
383
384 #if defined(__sgi) || defined(__sparc) || defined (__PPC__) || defined (__ppc__) || defined (__BIG_ENDIAN__)
385 #define RCOMP   3
386 #define GCOMP   2
387 #define BCOMP   1
388 #define ACOMP   0
389
390 #else
391
392 #define RCOMP   0
393 #define GCOMP   1
394 #define BCOMP   2
395 #define ACOMP   3
396 #endif
397
398 #ifdef GS
399 #undef GS
400 #endif
401 #define GS(a)   (*((short *)(a)))
402
403 #endif