Blender modifications for Cycles integration.
[blender.git] / source / blender / makesdna / DNA_view3d_types.h
1 /*
2  * $Id$ 
3  *
4  * ***** BEGIN GPL LICENSE BLOCK *****
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software Foundation,
18  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19  *
20  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
21  * All rights reserved.
22  *
23  * The Original Code is: all of this file.
24  *
25  * Contributor(s): none yet.
26  *
27  * ***** END GPL LICENSE BLOCK *****
28  */
29 #ifndef DNA_VIEW3D_TYPES_H
30 #define DNA_VIEW3D_TYPES_H
31
32 /** \file DNA_view3d_types.h
33  *  \ingroup DNA
34  */
35
36 struct ViewDepths;
37 struct Object;
38 struct Image;
39 struct Tex;
40 struct SpaceLink;
41 struct Base;
42 struct BoundBox;
43 struct RenderInfo;
44 struct RenderEngine;
45 struct bGPdata;
46 struct SmoothViewStore;
47 struct wmTimer;
48
49 /* This is needed to not let VC choke on near and far... old
50  * proprietary MS extensions... */
51 #ifdef WIN32
52 #undef near
53 #undef far
54 #define near clipsta
55 #define far clipend
56 #endif
57
58 #include "DNA_listBase.h"
59 #include "DNA_image_types.h"
60
61 /* ******************************** */
62
63 /* The near/far thing is a Win EXCEPTION. Thus, leave near/far in the
64  * code, and patch for windows. */
65  
66 /* Background Picture in 3D-View */
67 typedef struct BGpic {
68         struct BGpic *next, *prev;
69
70         struct Image *ima;
71         struct ImageUser iuser;
72         float xof, yof, size, blend;
73         short view;
74         short flag;
75         float pad2;
76 } BGpic;
77
78 /* ********************************* */
79
80 typedef struct RegionView3D {
81         
82         float winmat[4][4];                     /* GL_PROJECTION matrix */
83         float viewmat[4][4];            /* GL_MODELVIEW matrix */
84         float viewinv[4][4];            /* inverse of viewmat */
85         float persmat[4][4];            /* viewmat*winmat */
86         float persinv[4][4];            /* inverse of persmat */
87
88         /* viewmat/persmat multiplied with object matrix, while drawing and selection */
89         float viewmatob[4][4];
90         float persmatob[4][4];
91
92         /* transform widget matrix */
93         float twmat[4][4];
94
95         float viewquat[4];                      /* view rotation, must be kept normalized */
96         float dist;                                     /* distance from 'ofs' along -viewinv[2] vector, where result is negative as is 'ofs' */
97         float zfac;                                     /* initgrabz() result */
98         float camdx, camdy;                     /* camera view offsets, 1.0 = viewplane moves entire width/height */
99         float pixsize;                          /* runtime only */
100         float ofs[3];                           /* view center & orbit pivot, negative of worldspace location */
101         short camzoom;
102         short twdrawflag;
103         int pad;
104         
105         short rflag, viewlock;
106         short persp;
107         short view;
108         
109         /* user defined clipping planes */
110         float clip[6][4];
111         float clip_local[6][4]; /* clip in object space, means we can test for clipping in editmode without first going into worldspace */
112         struct BoundBox *clipbb;        
113         
114         struct bGPdata *gpd;            /* Grease-Pencil Data (annotation layers) */
115         
116         struct RegionView3D *localvd; /* allocated backup of its self while in localview */
117         struct RenderInfo *ri;
118         struct RenderEngine *render_engine;
119         struct ViewDepths *depths;
120         
121         /* animated smooth view */
122         struct SmoothViewStore *sms;
123         struct wmTimer *smooth_timer;
124         
125         /* last view */
126         float lviewquat[4];
127         short lpersp, lview; /* lpersp can never be set to 'RV3D_CAMOB' */
128         float gridview;
129         
130         float twangle[3];
131
132         float padf;
133
134 } RegionView3D;
135
136 /* 3D ViewPort Struct */
137 typedef struct View3D {
138         struct SpaceLink *next, *prev;
139         ListBase regionbase;            /* storage of regions for inactive spaces */
140         int spacetype;
141         float blockscale;
142         short blockhandler[8];
143         
144         float viewquat[4], dist, pad1;  /* XXX depricated */
145         
146         unsigned int lay_used; /* used while drawing */
147         
148         short persp;    /* XXX depricated */
149         short view;     /* XXX depricated */
150         
151         struct Object *camera, *ob_centre;
152
153         struct ListBase bgpicbase;
154         struct BGpic *bgpic; /* deprecated, use bgpicbase, only kept for do_versions(...) */
155
156         struct View3D *localvd; /* allocated backup of its self while in localview */
157         
158         char ob_centre_bone[32];                /* optional string for armature bone to define center */
159         
160         unsigned int lay;
161         int layact;
162         
163         /**
164          * The drawing mode for the 3d display. Set to OB_WIRE, OB_SOLID,
165          * OB_SHADED or OB_TEXTURE */
166         short drawtype;
167         short ob_centre_cursor;         /* optional bool for 3d cursor to define center */
168         short scenelock, around, pad3;
169         short flag, flag2;
170         
171         short pivot_last; /* pivot_last is for rotating around the last edited element */
172         
173         float lens, grid;
174         float gridview; /* XXX deprecated, now in RegionView3D */
175         float near, far;
176         float ofs[3];                   /* XXX deprecated */
177         float cursor[3];
178
179         short gridlines, pad4;
180         short gridflag;
181         short gridsubdiv;       /* Number of subdivisions in the grid between each highlighted grid line */
182         short modeselect;
183         short keyflags;         /* flags for display of keyframes */
184         
185         /* transform widget info */
186         short twtype, twmode, twflag;
187         short twdrawflag; /* XXX deprecated */
188         
189         /* afterdraw, for xray & transparent */
190         struct ListBase afterdraw_transp;
191         struct ListBase afterdraw_xray;
192         struct ListBase afterdraw_xraytransp;
193         
194         /* drawflags, denoting state */
195         short zbuf, transp, xray;
196
197         char ndofmode;                  /* mode of transform for 6DOF devices -1 not found, 0 normal, 1 fly, 2 ob transform */
198         char ndoffilter;                /* filter for 6DOF devices 0 normal, 1 dominant */
199         
200         void *properties_storage;       /* Nkey panel stores stuff here, not in file */
201         
202         /* XXX depricated? */
203         struct bGPdata *gpd;            /* Grease-Pencil Data (annotation layers) */
204
205 } View3D;
206
207
208 /* View3D->flag (short) */
209 /*#define V3D_DISPIMAGE         1*/ /*UNUSED*/
210 #define V3D_DISPBGPICS          2
211 #define V3D_HIDE_HELPLINES      4
212 #define V3D_INVALID_BACKBUF     8
213
214 #define V3D_ALIGN                       1024
215 #define V3D_SELECT_OUTLINE      2048
216 #define V3D_ZBUF_SELECT         4096
217 #define V3D_GLOBAL_STATS        8192
218 #define V3D_DRAW_CENTERS        32768
219
220 /* RegionView3d->persp */
221 #define RV3D_ORTHO                              0
222 #define RV3D_PERSP                              1
223 #define RV3D_CAMOB                              2
224
225 /* RegionView3d->rflag */
226 #define RV3D_CLIPPING                           4
227 #define RV3D_NAVIGATING                         8
228 #define RV3D_GPULIGHT_UPDATE            16
229
230 /* RegionView3d->viewlock */
231 #define RV3D_LOCKED                     1
232 #define RV3D_BOXVIEW            2
233 #define RV3D_BOXCLIP            4
234
235 /* RegionView3d->view */
236 #define RV3D_VIEW_FRONT          1
237 #define RV3D_VIEW_BACK                   2
238 #define RV3D_VIEW_LEFT                   3
239 #define RV3D_VIEW_RIGHT          4
240 #define RV3D_VIEW_TOP                    5
241 #define RV3D_VIEW_BOTTOM                 6
242 #define RV3D_VIEW_PERSPORTHO     7
243 #define RV3D_VIEW_CAMERA                 8
244
245 /* View3d->flag2 (short) */
246 #define V3D_RENDER_OVERRIDE             4
247 #define V3D_SOLID_TEX                   8
248 #define V3D_DISPGP                              16
249
250 /* View3D->around */
251 #define V3D_CENTER               0
252 #define V3D_CENTROID     3
253 #define V3D_CURSOR               1
254 #define V3D_LOCAL                2
255 #define V3D_ACTIVE               4
256
257 /*View3D types (only used in tools, not actually saved)*/
258 #define V3D_VIEW_STEPLEFT                1
259 #define V3D_VIEW_STEPRIGHT               2
260 #define V3D_VIEW_STEPDOWN                3
261 #define V3D_VIEW_STEPUP          4
262 #define V3D_VIEW_PANLEFT                 5
263 #define V3D_VIEW_PANRIGHT                6
264 #define V3D_VIEW_PANDOWN                 7
265 #define V3D_VIEW_PANUP                   8
266
267 /* View3d->gridflag */
268 #define V3D_SHOW_FLOOR                  1
269 #define V3D_SHOW_X                              2
270 #define V3D_SHOW_Y                              4
271 #define V3D_SHOW_Z                              8
272
273 /* View3d->twtype (bits, we can combine them) */
274 #define V3D_MANIP_TRANSLATE             1
275 #define V3D_MANIP_ROTATE                2
276 #define V3D_MANIP_SCALE                 4
277
278 /* View3d->twmode */
279 #define V3D_MANIP_GLOBAL                0
280 #define V3D_MANIP_LOCAL                 1
281 #define V3D_MANIP_NORMAL                2
282 #define V3D_MANIP_VIEW                  3
283 #define V3D_MANIP_GIMBAL                4
284 #define V3D_MANIP_CUSTOM                5 /* anything of value 5 or higher is custom */
285
286 /* View3d->twflag */
287    /* USE = user setting, DRAW = based on selection */
288 #define V3D_USE_MANIPULATOR             1
289 #define V3D_DRAW_MANIPULATOR    2
290 /* #define V3D_CALC_MANIPULATOR 4 */ /*UNUSED*/
291
292 /* BGPic->flag */
293 /* may want to use 1 for select ?*/
294 #define V3D_BGPIC_EXPANDED              2
295
296 #define RV3D_CAMZOOM_MIN -30
297 #define RV3D_CAMZOOM_MAX 600
298
299 #endif
300
301