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