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