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