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