f29c8272053e6593d708b47a65869e988febd343
[blender.git] / source / blender / makesdna / DNA_camera_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_CAMERA_TYPES_H__
24 #define __DNA_CAMERA_TYPES_H__
25
26 #include "DNA_defs.h"
27 #include "DNA_gpu_types.h"
28 #include "DNA_movieclip_types.h"
29 #include "DNA_image_types.h"
30 #include "DNA_ID.h"
31
32 #ifdef __cplusplus
33 extern "C" {
34 #endif
35
36 struct AnimData;
37 struct Ipo;
38 struct Object;
39
40 /* ------------------------------------------- */
41 /* Stereo Settings */
42 typedef struct CameraStereoSettings {
43         float interocular_distance;
44         float convergence_distance;
45         short convergence_mode;
46         short pivot;
47         short flag;
48         short pad;
49         /* Cut-off angle at which interocular distance start to fade down. */
50         float pole_merge_angle_from;
51         /* Cut-off angle at which interocular distance stops to fade down. */
52         float pole_merge_angle_to;
53 } CameraStereoSettings;
54
55 /* Background Picture */
56 typedef struct CameraBGImage {
57         struct CameraBGImage *next, *prev;
58
59         struct Image *ima;
60         struct ImageUser iuser;
61         struct MovieClip *clip;
62         struct MovieClipUser cuser;
63         float offset[2], scale, rotation;
64         float alpha;
65         short flag;
66         short source;
67 } CameraBGImage;
68
69 typedef struct Camera {
70         ID id;
71         /** Animation data (must be immediately after id for utilities to use it). */
72         struct AnimData *adt;
73
74         /** CAM_PERSP, CAM_ORTHO or CAM_PANO. */
75         char type;
76         /** Draw type extra. */
77         char dtx;
78         short flag;
79         float passepartalpha;
80         float clipsta, clipend;
81         float lens, ortho_scale, drawsize;
82         float sensor_x, sensor_y;
83         float shiftx, shifty;
84
85         /* yafray: dof params */
86         /* qdn: yafray var 'YF_dofdist' now enabled for defocus composite node as well.
87          * The name was not changed so that no other files need to be modified */
88         float YF_dofdist;
89
90         /** Old animation system, deprecated for 2.5. */
91         struct Ipo *ipo  DNA_DEPRECATED;
92
93         struct Object *dof_ob;
94         struct GPUDOFSettings gpu_dof;
95
96         /* CameraBGImage reference images */
97         struct ListBase bg_images;
98
99         char sensor_fit;
100         char pad[7];
101
102         /* runtime only, used for drawing */
103         float drwcorners[2][4][2];
104         float drwtria[2][2];
105         float drwdepth[2];
106         float drwfocusmat[4][4];
107         float drwnormalmat[4][4];
108
109         /* Stereo settings */
110         struct CameraStereoSettings stereo;
111 } Camera;
112
113 /* **************** CAMERA ********************* */
114
115 /* type */
116 enum {
117         CAM_PERSP       = 0,
118         CAM_ORTHO       = 1,
119         CAM_PANO        = 2,
120 };
121
122 /* dtx */
123 enum {
124         CAM_DTX_CENTER          = (1 << 0),
125         CAM_DTX_CENTER_DIAG     = (1 << 1),
126         CAM_DTX_THIRDS          = (1 << 2),
127         CAM_DTX_GOLDEN          = (1 << 3),
128         CAM_DTX_GOLDEN_TRI_A    = (1 << 4),
129         CAM_DTX_GOLDEN_TRI_B    = (1 << 5),
130         CAM_DTX_HARMONY_TRI_A   = (1 << 6),
131         CAM_DTX_HARMONY_TRI_B   = (1 << 7),
132 };
133
134 /* flag */
135 enum {
136         CAM_SHOWLIMITS          = (1 << 0),
137         CAM_SHOWMIST            = (1 << 1),
138         CAM_SHOWPASSEPARTOUT    = (1 << 2),
139         CAM_SHOW_SAFE_MARGINS       = (1 << 3),
140         CAM_SHOWNAME            = (1 << 4),
141         CAM_ANGLETOGGLE         = (1 << 5),
142         CAM_DS_EXPAND           = (1 << 6),
143 #ifdef DNA_DEPRECATED
144         CAM_PANORAMA            = (1 << 7), /* deprecated */
145 #endif
146         CAM_SHOWSENSOR          = (1 << 8),
147         CAM_SHOW_SAFE_CENTER    = (1 << 9),
148         CAM_SHOW_BG_IMAGE       = (1 << 10),
149 };
150
151 /* Sensor fit */
152 enum {
153         CAMERA_SENSOR_FIT_AUTO  = 0,
154         CAMERA_SENSOR_FIT_HOR   = 1,
155         CAMERA_SENSOR_FIT_VERT  = 2,
156 };
157
158 #define DEFAULT_SENSOR_WIDTH    36.0f
159 #define DEFAULT_SENSOR_HEIGHT   24.0f
160
161 /* stereo->convergence_mode */
162 enum {
163         CAM_S3D_OFFAXIS    = 0,
164         CAM_S3D_PARALLEL   = 1,
165         CAM_S3D_TOE        = 2,
166 };
167
168 /* stereo->pivot */
169 enum {
170         CAM_S3D_PIVOT_LEFT      = 0,
171         CAM_S3D_PIVOT_RIGHT     = 1,
172         CAM_S3D_PIVOT_CENTER    = 2,
173 };
174
175 /* stereo->flag */
176 enum {
177         CAM_S3D_SPHERICAL       = (1 << 0),
178         CAM_S3D_POLE_MERGE      = (1 << 1),
179 };
180
181 /* CameraBGImage->flag */
182 /* may want to use 1 for select ? */
183 enum {
184         CAM_BGIMG_FLAG_EXPANDED      = (1 << 1),
185         CAM_BGIMG_FLAG_CAMERACLIP    = (1 << 2),
186         CAM_BGIMG_FLAG_DISABLED      = (1 << 3),
187         CAM_BGIMG_FLAG_FOREGROUND    = (1 << 4),
188
189         /* Camera framing options */
190         CAM_BGIMG_FLAG_CAMERA_ASPECT = (1 << 5),  /* don't stretch to fit the camera view  */
191         CAM_BGIMG_FLAG_CAMERA_CROP   = (1 << 6),  /* crop out the image */
192
193         /* Axis flip options */
194         CAM_BGIMG_FLAG_FLIP_X        = (1 << 7),
195         CAM_BGIMG_FLAG_FLIP_Y        = (1 << 8),
196 };
197
198 #define CAM_BGIMG_FLAG_EXPANDED (CAM_BGIMG_FLAG_EXPANDED | CAM_BGIMG_FLAG_CAMERACLIP)
199
200 /* CameraBGImage->source */
201 /* may want to use 1 for select ?*/
202 enum {
203         CAM_BGIMG_SOURCE_IMAGE          = 0,
204         CAM_BGIMG_SOURCE_MOVIE          = 1,
205 };
206
207 #ifdef __cplusplus
208 }
209 #endif
210
211 #endif