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