Merge branch 'master' into blende2.8
[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 GPUViewport;
48
49 #include "DNA_defs.h"
50 #include "DNA_listBase.h"
51 #include "DNA_image_types.h"
52 #include "DNA_object_types.h"
53 #include "DNA_movieclip_types.h"
54 #include "DNA_gpu_types.h"
55
56 /* ******************************** */
57
58 /* The near/far thing is a Win EXCEPTION, caused by indirect includes from <windows.h>.
59  * Thus, leave near/far in the code, and undef for windows. */
60 #ifdef _WIN32
61 #  undef near
62 #  undef far
63 #endif
64
65 typedef struct RegionView3D {
66
67         float winmat[4][4];                     /* GL_PROJECTION matrix */
68         float viewmat[4][4];            /* GL_MODELVIEW matrix */
69         float viewinv[4][4];            /* inverse of viewmat */
70         float persmat[4][4];            /* viewmat*winmat */
71         float persinv[4][4];            /* inverse of persmat */
72         float viewcamtexcofac[4];       /* offset/scale for camera glsl texcoords */
73
74         /* viewmat/persmat multiplied with object matrix, while drawing and selection */
75         float viewmatob[4][4];
76         float persmatob[4][4];
77
78         /* user defined clipping planes */
79         float clip[6][4];
80         float clip_local[6][4]; /* clip in object space, means we can test for clipping in editmode without first going into worldspace */
81         struct BoundBox *clipbb;
82
83         struct RegionView3D *localvd; /* allocated backup of its self while in localview */
84         struct RenderEngine *render_engine;
85         struct ViewDepths *depths;
86         void *gpuoffscreen;
87
88         /* animated smooth view */
89         struct SmoothView3DStore *sms;
90         struct wmTimer *smooth_timer;
91
92
93         /* transform gizmo matrix */
94         float twmat[4][4];
95         /* min/max dot product on twmat xyz axis. */
96         float tw_axis_min[3], tw_axis_max[3];
97         float tw_axis_matrix[3][3];
98
99         float gridview DNA_DEPRECATED;
100
101         float viewquat[4];                      /* view rotation, must be kept normalized */
102         float dist;                                     /* distance from 'ofs' along -viewinv[2] vector, where result is negative as is 'ofs' */
103         float camdx, camdy;                     /* camera view offsets, 1.0 = viewplane moves entire width/height */
104         float pixsize;                          /* runtime only */
105         float ofs[3];                           /* view center & orbit pivot, negative of worldspace location,
106                                                                  * also matches -viewinv[3][0:3] in ortho mode.*/
107         float camzoom;                          /* viewport zoom on the camera frame, see BKE_screen_view3d_zoom_to_fac */
108         char is_persp;                          /* check if persp/ortho view, since 'persp' cant be used for this since
109                                                                  * it can have cameras assigned as well. (only set in view3d_winmatrix_set) */
110         char persp;
111         char view;
112         char viewlock;
113         char viewlock_quad;                     /* options for quadview (store while out of quad view) */
114         char pad[3];
115         float ofs_lock[2];                      /* normalized offset for locked view: (-1, -1) bottom left, (1, 1) upper right */
116
117         short twdrawflag; /* XXX can easily get rid of this (Julian) */
118         short rflag;
119
120
121         /* last view (use when switching out of camera view) */
122         float lviewquat[4];
123         short lpersp, lview; /* lpersp can never be set to 'RV3D_CAMOB' */
124
125         /* active rotation from NDOF or elsewhere */
126         float rot_angle;
127         float rot_axis[3];
128 } RegionView3D;
129
130 typedef struct View3DCursor {
131         float location[3];
132         float rotation[4];
133         char _pad[4];
134 } View3DCursor;
135
136 /* 3D Viewport Shading settings */
137 typedef struct View3DShading {
138         char type;        /* Shading type (VIEW3D_SHADE_SOLID, ..) */
139         char prev_type;   /* Runtime, for toggle between rendered viewport. */
140         char prev_type_wire;
141
142         char color_type;
143         short flag;
144
145         char light;
146         char background_type;
147         char cavity_type;
148         char pad[7];
149
150         char studio_light[256]; /* FILE_MAXFILE */
151         char lookdev_light[256]; /* FILE_MAXFILE */
152         char matcap[256]; /* FILE_MAXFILE */
153
154         float shadow_intensity;
155         float single_color[3];
156
157         float studiolight_rot_z;
158         float studiolight_background;
159
160         float object_outline_color[3];
161         float xray_alpha;
162         float xray_alpha_wire;
163
164         float cavity_valley_factor;
165         float cavity_ridge_factor;
166
167         float background_color[3];
168
169         float curvature_ridge_factor;
170         float curvature_valley_factor;
171
172 } View3DShading;
173
174 /* 3D Viewport Overlay settings */
175 typedef struct View3DOverlay {
176         int flag;
177
178         /* Edit mode settings */
179         int edit_flag;
180         float normals_length;
181         float backwire_opacity;
182
183         /* Paint mode settings */
184         int paint_flag;
185
186         /* Weight paint mode settings */
187         int wpaint_flag;
188         char _pad2[4];
189
190         /* Alpha for texture, weight, vertex paint overlay */
191         float texture_paint_mode_opacity;
192         float vertex_paint_mode_opacity;
193         float weight_paint_mode_opacity;
194
195         /* Armature edit/pose mode settings */
196         int arm_flag;
197         float xray_alpha_bone;
198
199         /* Other settings */
200         float wireframe_threshold;
201
202         /* grease pencil settings */
203         float gpencil_paper_opacity;
204         float gpencil_grid_opacity;
205         float gpencil_fade_layer;
206
207 } View3DOverlay;
208
209 /* 3D ViewPort Struct */
210 typedef struct View3D {
211         struct SpaceLink *next, *prev;
212         ListBase regionbase;            /* storage of regions for inactive spaces */
213         char spacetype;
214         char link_flag;
215         char _pad0[6];
216         /* End 'SpaceLink' header. */
217
218         float viewquat[4]  DNA_DEPRECATED;
219         float dist         DNA_DEPRECATED;
220
221         float bundle_size;                      /* size of bundles in reconstructed data */
222         char bundle_drawtype;           /* display style for bundle */
223         char pad[3];
224
225         unsigned int lay_prev DNA_DEPRECATED; /* for active layer toggle */
226         unsigned int lay_used DNA_DEPRECATED; /* used while drawing */
227
228         int object_type_exclude_viewport;
229         int object_type_exclude_select;
230
231         short persp  DNA_DEPRECATED;
232         short view   DNA_DEPRECATED;
233
234         struct Object *camera, *ob_centre;
235         rctf render_border;
236
237         struct View3D *localvd; /* allocated backup of its self while in localview */
238
239         char ob_centre_bone[64];                /* optional string for armature bone to define center, MAXBONENAME */
240
241         unsigned short local_view_uuid;
242         short _pad6;
243         int layact DNA_DEPRECATED;
244
245         short ob_centre_cursor;         /* optional bool for 3d cursor to define center */
246         short scenelock;
247         short gp_flag;
248         short flag;
249         int flag2;
250
251         float lens, grid;
252         float near, far;
253         float ofs[3]  DNA_DEPRECATED;                   /* XXX deprecated */
254
255         char _pad[4];
256
257         short matcap_icon;                      /* icon id */
258
259         short gridlines;
260         short gridsubdiv;       /* Number of subdivisions in the grid between each highlighted grid line */
261         char gridflag;
262
263         /* transform gizmo info */
264         char _pad5[2], gizmo_flag;
265
266         short _pad2;
267
268         /* drawflags, denoting state */
269         char _pad3;
270         char transp, xray;
271
272         char multiview_eye;                             /* multiview current eye - for internal use */
273
274         /* actually only used to define the opacity of the grease pencil vertex in edit mode */
275         float vertex_opacity;
276
277         /* note, 'fx_settings.dof' is currently _not_ allocated,
278          * instead set (temporarily) from camera */
279         struct GPUFXSettings fx_settings;
280
281         void *properties_storage;               /* Nkey panel stores stuff here (runtime only!) */
282
283         /* XXX deprecated? */
284         struct bGPdata *gpd  DNA_DEPRECATED;            /* Grease-Pencil Data (annotation layers) */
285
286         /* Stereoscopy settings */
287         short stereo3d_flag;
288         char stereo3d_camera;
289         char pad4;
290         float stereo3d_convergence_factor;
291         float stereo3d_volume_alpha;
292         float stereo3d_convergence_alpha;
293
294         /* Display settings */
295         short drawtype DNA_DEPRECATED;
296         short pad5[3];
297
298         View3DShading shading;
299         View3DOverlay overlay;
300 } View3D;
301
302
303 /* View3D->stereo_flag (short) */
304 #define V3D_S3D_DISPCAMERAS             (1 << 0)
305 #define V3D_S3D_DISPPLANE               (1 << 1)
306 #define V3D_S3D_DISPVOLUME              (1 << 2)
307
308 /* View3D->flag (short) */
309 /*#define V3D_FLAG_DEPRECATED_1 (1 << 0) */ /*UNUSED */
310 /*#define V3D_FLAG_DEPRECATED_2 (1 << 1) */ /* UNUSED */
311 #define V3D_HIDE_HELPLINES  (1 << 2)
312 #define V3D_INVALID_BACKBUF (1 << 3)
313
314 /* #define V3D_FLAG_DEPRECATED_10 (1 << 10) */ /* UNUSED */
315 #define V3D_SELECT_OUTLINE  (1 << 11)
316 #define V3D_ZBUF_SELECT     (1 << 12)   /* XXX: DNA deprecated */
317 #define V3D_GLOBAL_STATS    (1 << 13)
318 #define V3D_DRAW_CENTERS    (1 << 15)
319
320 /* RegionView3d->persp */
321 #define RV3D_ORTHO                              0
322 #define RV3D_PERSP                              1
323 #define RV3D_CAMOB                              2
324
325 /* RegionView3d->rflag */
326 #define RV3D_CLIPPING               (1 << 2)
327 #define RV3D_NAVIGATING             (1 << 3)
328 #define RV3D_GPULIGHT_UPDATE        (1 << 4)
329 /*#define RV3D_IS_GAME_ENGINE       (1 << 5) *//* UNUSED */
330 /**
331  * Disable zbuffer offset, skip calls to #ED_view3d_polygon_offset.
332  * Use when precise surface depth is needed and picking bias isn't, see T45434).
333  */
334 #define RV3D_ZOFFSET_DISABLED           64
335
336 /* RegionView3d->viewlock */
337 #define RV3D_LOCKED                     (1 << 0)
338 #define RV3D_BOXVIEW            (1 << 1)
339 #define RV3D_BOXCLIP            (1 << 2)
340 /* RegionView3d->viewlock_quad */
341 #define RV3D_VIEWLOCK_INIT      (1 << 7)
342
343 /* RegionView3d->view */
344 #define RV3D_VIEW_USER                   0
345 #define RV3D_VIEW_FRONT                  1
346 #define RV3D_VIEW_BACK                   2
347 #define RV3D_VIEW_LEFT                   3
348 #define RV3D_VIEW_RIGHT                  4
349 #define RV3D_VIEW_TOP                    5
350 #define RV3D_VIEW_BOTTOM                 6
351 #define RV3D_VIEW_CAMERA                 8
352
353 #define RV3D_VIEW_IS_AXIS(view) \
354         (((view) >= RV3D_VIEW_FRONT) && ((view) <= RV3D_VIEW_BOTTOM))
355
356 /* View3d->flag2 (int) */
357 #define V3D_RENDER_OVERRIDE             (1 << 2)
358 #define V3D_SOLID_TEX                   (1 << 3)
359 #define V3D_SHOW_ANNOTATION     (1 << 4)
360 #define V3D_LOCK_CAMERA                 (1 << 5)
361 #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 */
362 #define V3D_SHOW_RECONSTRUCTION (1 << 7)
363 #define V3D_SHOW_CAMERAPATH             (1 << 8)
364 #define V3D_SHOW_BUNDLENAME             (1 << 9)
365 #define V3D_BACKFACE_CULLING    (1 << 10)
366 #define V3D_RENDER_BORDER               (1 << 11)
367 #define V3D_SOLID_MATCAP                (1 << 12)       /* user flag */
368 #define V3D_SHOW_SOLID_MATCAP   (1 << 13)       /* runtime flag */
369 #define V3D_OCCLUDE_WIRE                (1 << 14)   /* XXX: DNA deprecated */
370 #define V3D_SHOW_MODE_SHADE_OVERRIDE (1 << 15) /* XXX: DNA deprecated */
371
372 /* View3d->gp_flag (short) */
373 #define V3D_GP_SHOW_PAPER            (1 << 0) /* Activate paper to cover all viewport */
374 #define V3D_GP_SHOW_GRID             (1 << 1) /* Activate paper grid */
375 #define V3D_GP_SHOW_EDIT_LINES       (1 << 2)
376 #define V3D_GP_SHOW_MULTIEDIT_LINES  (1 << 3)
377 #define V3D_GP_SHOW_ONION_SKIN       (1 << 4) /* main switch at view level */
378 #define V3D_GP_FADE_NOACTIVE_LAYERS  (1 << 5) /* fade layers not active */
379
380 /* View3DShading->light */
381 enum {
382         V3D_LIGHTING_FLAT   = 0,
383         V3D_LIGHTING_STUDIO = 1,
384         V3D_LIGHTING_MATCAP = 2,
385 };
386
387 /* View3DShading->flag */
388 enum {
389         V3D_SHADING_OBJECT_OUTLINE      = (1 << 0),
390         V3D_SHADING_XRAY                = (1 << 1),
391         V3D_SHADING_SHADOW              = (1 << 2),
392         V3D_SHADING_SCENE_LIGHTS        = (1 << 3),
393         V3D_SHADING_SPECULAR_HIGHLIGHT  = (1 << 4),
394         V3D_SHADING_CAVITY              = (1 << 5),
395         V3D_SHADING_MATCAP_FLIP_X       = (1 << 6),
396         V3D_SHADING_SCENE_WORLD         = (1 << 7),
397         V3D_SHADING_XRAY_BONE           = (1 << 8),
398         V3D_SHADING_WORLD_ORIENTATION   = (1 << 9),
399 };
400
401 /* View3DShading->color_type */
402 enum {
403         V3D_SHADING_MATERIAL_COLOR = 0,
404         V3D_SHADING_RANDOM_COLOR   = 1,
405         V3D_SHADING_SINGLE_COLOR   = 2,
406         V3D_SHADING_TEXTURE_COLOR  = 3,
407 };
408
409 /* View3DShading->background_type */
410 enum {
411         V3D_SHADING_BACKGROUND_THEME    = 0,
412         V3D_SHADING_BACKGROUND_WORLD    = 1,
413         V3D_SHADING_BACKGROUND_VIEWPORT = 2,
414 };
415
416 /* View3DShading->cavity_type */
417 enum {
418         V3D_SHADING_CAVITY_SSAO = 0,
419         V3D_SHADING_CAVITY_CURVATURE = 1,
420         V3D_SHADING_CAVITY_BOTH = 2,
421 };
422
423 /* View3DOverlay->flag */
424 enum {
425         V3D_OVERLAY_FACE_ORIENTATION  = (1 << 0),
426         V3D_OVERLAY_HIDE_CURSOR       = (1 << 1),
427         V3D_OVERLAY_BONE_SELECT       = (1 << 2),
428         V3D_OVERLAY_LOOK_DEV          = (1 << 3),
429         V3D_OVERLAY_WIREFRAMES        = (1 << 4),
430         V3D_OVERLAY_HIDE_TEXT         = (1 << 5),
431         V3D_OVERLAY_HIDE_MOTION_PATHS = (1 << 6),
432         V3D_OVERLAY_ONION_SKINS       = (1 << 7),
433         V3D_OVERLAY_HIDE_BONES        = (1 << 8),
434         V3D_OVERLAY_HIDE_OBJECT_XTRAS = (1 << 9),
435         V3D_OVERLAY_HIDE_OBJECT_ORIGINS = (1 << 10),
436 };
437
438 /* View3DOverlay->edit_flag */
439 enum {
440         V3D_OVERLAY_EDIT_VERT_NORMALS = (1 << 0),
441         V3D_OVERLAY_EDIT_LOOP_NORMALS = (1 << 1),
442         V3D_OVERLAY_EDIT_FACE_NORMALS = (1 << 2),
443
444         V3D_OVERLAY_EDIT_OCCLUDE_WIRE = (1 << 3),
445
446         V3D_OVERLAY_EDIT_WEIGHT       = (1 << 4),
447
448         V3D_OVERLAY_EDIT_EDGES        = (1 << 5),
449         V3D_OVERLAY_EDIT_FACES        = (1 << 6),
450         V3D_OVERLAY_EDIT_FACE_DOT     = (1 << 7),
451
452         V3D_OVERLAY_EDIT_SEAMS        = (1 << 8),
453         V3D_OVERLAY_EDIT_SHARP        = (1 << 9),
454         V3D_OVERLAY_EDIT_CREASES      = (1 << 10),
455         V3D_OVERLAY_EDIT_BWEIGHTS     = (1 << 11),
456
457         V3D_OVERLAY_EDIT_FREESTYLE_EDGE = (1 << 12),
458         V3D_OVERLAY_EDIT_FREESTYLE_FACE = (1 << 13),
459
460         V3D_OVERLAY_EDIT_STATVIS      = (1 << 14),
461         V3D_OVERLAY_EDIT_EDGE_LEN     = (1 << 15),
462         V3D_OVERLAY_EDIT_EDGE_ANG     = (1 << 16),
463         V3D_OVERLAY_EDIT_FACE_ANG     = (1 << 17),
464         V3D_OVERLAY_EDIT_FACE_AREA    = (1 << 18),
465         V3D_OVERLAY_EDIT_INDICES      = (1 << 19),
466
467         V3D_OVERLAY_EDIT_CU_HANDLES   = (1 << 20),
468         V3D_OVERLAY_EDIT_CU_NORMALS   = (1 << 21),
469 };
470
471 /* View3DOverlay->arm_flag */
472 enum {
473         V3D_OVERLAY_ARM_TRANSP_BONES  = (1 << 0),
474 };
475
476 /* View3DOverlay->paint_flag */
477 enum {
478         V3D_OVERLAY_PAINT_WIRE        = (1 << 0),
479 };
480
481 /* View3DOverlay->wpaint_flag */
482 enum {
483         V3D_OVERLAY_WPAINT_CONTOURS   = (1 << 0),
484 };
485
486 /* View3D->around */
487 enum {
488         /* center of the bounding box */
489         V3D_AROUND_CENTER_BOUNDS        = 0,
490         /* center from the sum of all points divided by the total */
491         V3D_AROUND_CENTER_MEDIAN    = 3,
492         /* pivot around the 2D/3D cursor */
493         V3D_AROUND_CURSOR                       = 1,
494         /* pivot around each items own origin */
495         V3D_AROUND_LOCAL_ORIGINS        = 2,
496         /* pivot around the active items origin */
497         V3D_AROUND_ACTIVE                       = 4,
498 };
499
500 /*View3D types (only used in tools, not actually saved)*/
501 #define V3D_VIEW_STEPLEFT                1
502 #define V3D_VIEW_STEPRIGHT               2
503 #define V3D_VIEW_STEPDOWN                3
504 #define V3D_VIEW_STEPUP          4
505 #define V3D_VIEW_PANLEFT                 5
506 #define V3D_VIEW_PANRIGHT                6
507 #define V3D_VIEW_PANDOWN                 7
508 #define V3D_VIEW_PANUP                   8
509
510 /* View3d->gridflag */
511 #define V3D_SHOW_FLOOR          (1 << 0)
512 #define V3D_SHOW_X              (1 << 1)
513 #define V3D_SHOW_Y              (1 << 2)
514 #define V3D_SHOW_Z              (1 << 3)
515
516 /* Scene.orientation_type */
517 #define V3D_MANIP_GLOBAL                0
518 #define V3D_MANIP_LOCAL                 1
519 #define V3D_MANIP_NORMAL                2
520 #define V3D_MANIP_VIEW                  3
521 #define V3D_MANIP_GIMBAL                4
522 #define V3D_MANIP_CURSOR                5
523 #define V3D_MANIP_CUSTOM_MATRIX (V3D_MANIP_CUSTOM - 1)  /* Runtime only, never saved to DNA. */
524 #define V3D_MANIP_CUSTOM                1024
525
526 /* View3d.mpr_flag (also) */
527 enum {
528         /** All gizmos. */
529         V3D_GIZMO_HIDE                = (1 << 0),
530         V3D_GIZMO_HIDE_NAVIGATE       = (1 << 1),
531         V3D_GIZMO_HIDE_CONTEXT        = (1 << 2),
532         V3D_GIZMO_HIDE_TOOL           = (1 << 3),
533 };
534
535 #define RV3D_CAMZOOM_MIN -30
536 #define RV3D_CAMZOOM_MAX 600
537
538 /* #BKE_screen_view3d_zoom_to_fac() values above */
539 #define RV3D_CAMZOOM_MIN_FACTOR  0.1657359312880714853f
540 #define RV3D_CAMZOOM_MAX_FACTOR 44.9852813742385702928f
541
542 #endif