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