BGE: Add level mode to property actuator
[blender.git] / source / blender / makesdna / DNA_view3d_types.h
1 /*
2  * ***** BEGIN GPL LICENSE BLOCK *****
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License
6  * as published by the Free Software Foundation; either version 2
7  * of the License, or (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software Foundation,
16  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17  *
18  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
19  * All rights reserved.
20  *
21  * The Original Code is: all of this file.
22  *
23  * Contributor(s): none yet.
24  *
25  * ***** END GPL LICENSE BLOCK *****
26  */
27
28 /** \file DNA_view3d_types.h
29  *  \ingroup DNA
30  */
31
32 #ifndef __DNA_VIEW3D_TYPES_H__
33 #define __DNA_VIEW3D_TYPES_H__
34
35 struct ViewDepths;
36 struct Object;
37 struct Image;
38 struct Tex;
39 struct SpaceLink;
40 struct Base;
41 struct BoundBox;
42 struct MovieClip;
43 struct MovieClipUser;
44 struct RenderInfo;
45 struct RenderEngine;
46 struct bGPdata;
47 struct SmoothView3DStore;
48 struct wmTimer;
49 struct Material;
50
51 /* This is needed to not let VC choke on near and far... old
52  * proprietary MS extensions... */
53 #ifdef WIN32
54 #undef near
55 #undef far
56 #define near clipsta
57 #define far clipend
58 #endif
59
60 #include "DNA_defs.h"
61 #include "DNA_listBase.h"
62 #include "DNA_image_types.h"
63 #include "DNA_movieclip_types.h"
64
65 /* ******************************** */
66
67 /* The near/far thing is a Win EXCEPTION. Thus, leave near/far in the
68  * code, and patch for windows. */
69  
70 /* Background Picture in 3D-View */
71 typedef struct BGpic {
72         struct BGpic *next, *prev;
73
74         struct Image *ima;
75         struct ImageUser iuser;
76         struct MovieClip *clip;
77         struct MovieClipUser cuser;
78         float xof, yof, size, blend;
79         short view;
80         short flag;
81         short source, pad;
82 } BGpic;
83
84 /* ********************************* */
85
86 typedef struct RegionView3D {
87         
88         float winmat[4][4];                     /* GL_PROJECTION matrix */
89         float viewmat[4][4];            /* GL_MODELVIEW matrix */
90         float viewinv[4][4];            /* inverse of viewmat */
91         float persmat[4][4];            /* viewmat*winmat */
92         float persinv[4][4];            /* inverse of persmat */
93
94         /* viewmat/persmat multiplied with object matrix, while drawing and selection */
95         float viewmatob[4][4];
96         float persmatob[4][4];
97
98
99         /* user defined clipping planes */
100         float clip[6][4];
101         float clip_local[6][4]; /* clip in object space, means we can test for clipping in editmode without first going into worldspace */
102         struct BoundBox *clipbb;
103
104         struct RegionView3D *localvd; /* allocated backup of its self while in localview */
105         struct RenderInfo *ri;
106         struct RenderEngine *render_engine;
107         struct ViewDepths *depths;
108         void *gpuoffscreen;
109
110         /* animated smooth view */
111         struct SmoothView3DStore *sms;
112         struct wmTimer *smooth_timer;
113
114
115         /* transform widget matrix */
116         float twmat[4][4];
117
118         float viewquat[4];                      /* view rotation, must be kept normalized */
119         float dist;                                     /* distance from 'ofs' along -viewinv[2] vector, where result is negative as is 'ofs' */
120         float camdx, camdy;                     /* camera view offsets, 1.0 = viewplane moves entire width/height */
121         float pixsize;                          /* runtime only */
122         float ofs[3];                           /* view center & orbit pivot, negative of worldspace location,
123                                                                  * also matches -viewinv[3][0:3] in ortho mode.*/
124         float camzoom;                          /* viewport zoom on the camera frame, see BKE_screen_view3d_zoom_to_fac */
125         char is_persp;                          /* check if persp/ortho view, since 'persp' cant be used for this since
126                                                                  * it can have cameras assigned as well. (only set in view3d_winmatrix_set) */
127         char persp;
128         char view;
129         char viewlock;
130         char viewlock_quad;                     /* options for quadview (store while out of quad view) */
131         char pad[3];
132         float ofs_lock[2];                      /* normalized offset for locked view: (-1, -1) bottom left, (1, 1) upper right */
133
134         short twdrawflag;
135         short rflag;
136
137
138         /* last view (use when switching out of camera view) */
139         float lviewquat[4];
140         short lpersp, lview; /* lpersp can never be set to 'RV3D_CAMOB' */
141
142         float gridview;
143         float tw_idot[3];  /* manipulator runtime: (1 - dot) product with view vector (used to check view alignment) */
144
145
146         /* active rotation from NDOF or elsewhere */
147         float rot_angle;
148         float rot_axis[3];
149
150 } RegionView3D;
151
152 /* 3D ViewPort Struct */
153 typedef struct View3D {
154         struct SpaceLink *next, *prev;
155         ListBase regionbase;            /* storage of regions for inactive spaces */
156         int spacetype;
157         float blockscale;
158         short blockhandler[8];
159
160         float viewquat[4]  DNA_DEPRECATED;
161         float dist         DNA_DEPRECATED;
162
163         float bundle_size;                      /* size of bundles in reconstructed data */
164         char bundle_drawtype;           /* display style for bundle */
165         char pad[3];
166
167         unsigned int lay_prev; /* for active layer toggle */
168         unsigned int lay_used; /* used while drawing */
169         
170         short persp  DNA_DEPRECATED;
171         short view   DNA_DEPRECATED;
172         
173         struct Object *camera, *ob_centre;
174         rctf render_border;
175
176         struct ListBase bgpicbase;
177         struct BGpic *bgpic  DNA_DEPRECATED; /* deprecated, use bgpicbase, only kept for do_versions(...) */
178
179         struct View3D *localvd; /* allocated backup of its self while in localview */
180         
181         char ob_centre_bone[64];                /* optional string for armature bone to define center, MAXBONENAME */
182         
183         unsigned int lay;
184         int layact;
185         
186         /**
187          * The drawing mode for the 3d display. Set to OB_BOUNDBOX, OB_WIRE, OB_SOLID,
188          * OB_TEXTURE, OB_MATERIAL or OB_RENDER */
189         short drawtype;
190         short ob_centre_cursor;         /* optional bool for 3d cursor to define center */
191         short scenelock, around;
192         short flag, flag2;
193         
194         float lens, grid;
195         float near, far;
196         float ofs[3]  DNA_DEPRECATED;                   /* XXX deprecated */
197         float cursor[3];
198
199         short matcap_icon;                      /* icon id */
200
201         short gridlines;
202         short gridsubdiv;       /* Number of subdivisions in the grid between each highlighted grid line */
203         char gridflag;
204
205         /* transform widget info */
206         char twtype, twmode, twflag, pad2[2];
207         
208         /* afterdraw, for xray & transparent */
209         struct ListBase afterdraw_transp;
210         struct ListBase afterdraw_xray;
211         struct ListBase afterdraw_xraytransp;
212         
213         /* drawflags, denoting state */
214         char zbuf, transp, xray;
215         char pad3[5];
216
217         void *properties_storage;               /* Nkey panel stores stuff here (runtime only!) */
218         struct Material *defmaterial;   /* used by matcap now */
219
220         /* XXX deprecated? */
221         struct bGPdata *gpd  DNA_DEPRECATED;            /* Grease-Pencil Data (annotation layers) */
222
223 } View3D;
224
225
226 /* View3D->flag (short) */
227 /*#define V3D_DISPIMAGE         1*/ /*UNUSED*/
228 #define V3D_DISPBGPICS          2
229 #define V3D_HIDE_HELPLINES      4
230 #define V3D_INVALID_BACKBUF     8
231 #define V3D_INVALID_BACKBUF     8
232
233 #define V3D_ALIGN                       1024
234 #define V3D_SELECT_OUTLINE      2048
235 #define V3D_ZBUF_SELECT         4096
236 #define V3D_GLOBAL_STATS        8192
237 #define V3D_DRAW_CENTERS        32768
238
239 /* RegionView3d->persp */
240 #define RV3D_ORTHO                              0
241 #define RV3D_PERSP                              1
242 #define RV3D_CAMOB                              2
243
244 /* RegionView3d->rflag */
245 #define RV3D_CLIPPING                           4
246 #define RV3D_NAVIGATING                         8
247 #define RV3D_GPULIGHT_UPDATE            16
248 #define RV3D_IS_GAME_ENGINE                     32  /* runtime flag, used to check if LoD's should be used */
249
250 /* RegionView3d->viewlock */
251 #define RV3D_LOCKED                     (1 << 0)
252 #define RV3D_BOXVIEW            (1 << 1)
253 #define RV3D_BOXCLIP            (1 << 2)
254 /* RegionView3d->viewlock_quad */
255 #define RV3D_VIEWLOCK_INIT      (1 << 7)
256
257 /* RegionView3d->view */
258 #define RV3D_VIEW_USER                   0
259 #define RV3D_VIEW_FRONT                  1
260 #define RV3D_VIEW_BACK                   2
261 #define RV3D_VIEW_LEFT                   3
262 #define RV3D_VIEW_RIGHT                  4
263 #define RV3D_VIEW_TOP                    5
264 #define RV3D_VIEW_BOTTOM                 6
265 #define RV3D_VIEW_PERSPORTHO     7
266 #define RV3D_VIEW_CAMERA                 8
267
268 #define RV3D_VIEW_IS_AXIS(view) \
269         ((view >= RV3D_VIEW_FRONT) && (view <= RV3D_VIEW_BOTTOM))
270
271 /* View3d->flag2 (short) */
272 #define V3D_RENDER_OVERRIDE             4
273 #define V3D_SOLID_TEX                   8
274 #define V3D_SHOW_GPENCIL                16
275 #define V3D_LOCK_CAMERA                 32
276 #define V3D_RENDER_SHADOW               64              /* This is a runtime only flag that's used to tell draw_mesh_object() that we're doing a shadow pass instead of a regular draw */
277 #define V3D_SHOW_RECONSTRUCTION 128
278 #define V3D_SHOW_CAMERAPATH             256
279 #define V3D_SHOW_BUNDLENAME             512
280 #define V3D_BACKFACE_CULLING    1024
281 #define V3D_RENDER_BORDER               2048
282 #define V3D_SOLID_MATCAP                4096    /* user flag */
283 #define V3D_SHOW_SOLID_MATCAP   8192    /* runtime flag */
284 #define V3D_OCCLUDE_WIRE                16384
285 #define V3D_SHADELESS_TEX               32768
286
287
288 /* View3D->around */
289 #define V3D_CENTER               0
290 #define V3D_CENTROID     3
291 #define V3D_CURSOR               1
292 #define V3D_LOCAL                2
293 #define V3D_ACTIVE               4
294
295 /*View3D types (only used in tools, not actually saved)*/
296 #define V3D_VIEW_STEPLEFT                1
297 #define V3D_VIEW_STEPRIGHT               2
298 #define V3D_VIEW_STEPDOWN                3
299 #define V3D_VIEW_STEPUP          4
300 #define V3D_VIEW_PANLEFT                 5
301 #define V3D_VIEW_PANRIGHT                6
302 #define V3D_VIEW_PANDOWN                 7
303 #define V3D_VIEW_PANUP                   8
304
305 /* View3d->gridflag */
306 #define V3D_SHOW_FLOOR                  1
307 #define V3D_SHOW_X                              2
308 #define V3D_SHOW_Y                              4
309 #define V3D_SHOW_Z                              8
310
311 /* View3d->twtype (bits, we can combine them) */
312 #define V3D_MANIP_TRANSLATE             1
313 #define V3D_MANIP_ROTATE                2
314 #define V3D_MANIP_SCALE                 4
315
316 /* View3d->twmode */
317 #define V3D_MANIP_GLOBAL                0
318 #define V3D_MANIP_LOCAL                 1
319 #define V3D_MANIP_NORMAL                2
320 #define V3D_MANIP_VIEW                  3
321 #define V3D_MANIP_GIMBAL                4
322 #define V3D_MANIP_CUSTOM                5 /* anything of value 5 or higher is custom */
323
324 /* View3d->twflag */
325    /* USE = user setting, DRAW = based on selection */
326 #define V3D_USE_MANIPULATOR             1
327 #define V3D_DRAW_MANIPULATOR    2
328 /* #define V3D_CALC_MANIPULATOR 4 */ /*UNUSED*/
329
330 /* BGPic->flag */
331 /* may want to use 1 for select ? */
332 enum {
333         V3D_BGPIC_EXPANDED      = (1 << 1),
334         V3D_BGPIC_CAMERACLIP    = (1 << 2),
335         V3D_BGPIC_DISABLED      = (1 << 3),
336         V3D_BGPIC_FOREGROUND    = (1 << 4),
337
338         /* Camera framing options */
339         V3D_BGPIC_CAMERA_ASPECT = (1 << 5),  /* don't stretch to fit the camera view  */
340         V3D_BGPIC_CAMERA_CROP   = (1 << 6)   /* crop out the image */
341 };
342
343 #define V3D_BGPIC_EXPANDED (V3D_BGPIC_EXPANDED | V3D_BGPIC_CAMERACLIP)
344
345 /* BGPic->source */
346 /* may want to use 1 for select ?*/
347 #define V3D_BGPIC_IMAGE         0
348 #define V3D_BGPIC_MOVIE         1
349
350 #define RV3D_CAMZOOM_MIN -30
351 #define RV3D_CAMZOOM_MAX 600
352
353 #endif
354
355