f1fa8c19199d3cd65ce829d88a7c792ad2b6bbc1
[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
45 /* This is needed to not let VC choke on near and far... old
46  * proprietary MS extensions... */
47 #ifdef WIN32
48 #undef near
49 #undef far
50 #define near clipsta
51 #define far clipend
52 #endif
53
54 #include "DNA_listBase.h"
55 #include "DNA_image_types.h"
56
57 /* ******************************** */
58
59 /* The near/far thing is a Win EXCEPTION. Thus, leave near/far in the
60  * code, and patch for windows. */
61  
62 /* Background Picture in 3D-View */
63 typedef struct BGpic {
64     struct Image *ima;
65         struct ImageUser iuser;
66     float xof, yof, size, zoom, blend;
67     short xim, yim;
68 } BGpic;
69
70 /* ********************************* */
71
72 /* 3D ViewPort Struct */
73 typedef struct View3D {
74         struct SpaceLink *next, *prev;
75         int spacetype;
76         float blockscale;
77         
78         short blockhandler[8];
79
80         float viewmat[4][4];
81         float viewinv[4][4];
82         float persmat[4][4];
83         float persinv[4][4];
84         
85         float winmat1[4][4];  // persp(1) storage, for swap matrices
86         float viewmat1[4][4];
87         
88         float viewquat[4], dist, zfac;  /* zfac is initgrabz() result */
89         int lay_used; /* used while drawing */
90
91         short persp;
92         short view;
93
94         struct Object *camera, *ob_centre;
95         struct BGpic *bgpic;
96         struct View3D *localvd;
97         struct RenderInfo *ri;
98         struct RetopoViewData *retopo_view_data;
99         struct ViewDepths *depths;
100         
101         char ob_centre_bone[32];                /* optional string for armature bone to define center */
102         
103         /**
104          * The drawing mode for the 3d display. Set to OB_WIRE, OB_SOLID,
105          * OB_SHADED or OB_TEXTURE */
106         short drawtype;
107         short localview;
108         int lay, layact;
109         short scenelock, around, camzoom;
110         
111         char pivot_last, pad1; /* pivot_last is for rotating around the last edited element */
112         
113         float lens, grid, gridview, pixsize, near, far;
114         float camdx, camdy;             /* camera view offsets, 1.0 = viewplane moves entire width/height */
115         float ofs[3], cursor[3];
116
117         short gridlines, viewbut;
118         short gridflag;
119         short modeselect, menunr, texnr;
120         
121         /* transform widget info */
122         short twtype, twmode, twflag, twdrawflag;
123         float twmat[4][4];
124         
125         /* user defined clipping planes */
126         float clip[4][4];
127         
128         struct BoundBox *clipbb;
129         
130         /* afterdraw, for xray & transparent */
131         struct ListBase afterdraw;
132         /* drawflags, denoting state */
133         short zbuf, transp, xray;
134
135         short flag, flag2;
136         
137         short gridsubdiv;       /* Number of subdivisions in the grid between each highlighted grid line */
138         
139         short keyflags;         /* flags for display of keyframes */
140         
141         char ndofmode;  /* mode of transform for 6DOF devices -1 not found, 0 normal, 1 fly, 2 ob transform */
142         char ndoffilter;                /*filter for 6DOF devices 0 normal, 1 dominant */
143         
144         void *properties_storage;       /* Nkey panel stores stuff here, not in file */
145         struct bGPdata *gpd;            /* Grease-Pencil Data (annotation layers) */
146
147         /* last view */
148         float lviewquat[4];
149         short lpersp, lview;
150
151         short pad5, pad6;
152 } View3D;
153
154
155 /* View3D->flag (short) */
156 #define V3D_MODE                        (16+32+64+128+256+512)
157 #define V3D_DISPIMAGE           1
158 #define V3D_DISPBGPIC           2
159 #define V3D_HIDE_HELPLINES      4
160 #define V3D_NEEDBACKBUFDRAW     8
161 #define V3D_EDITMODE            16
162 #define V3D_VERTEXPAINT         32
163 #define V3D_FACESELECT          64
164 #define V3D_POSEMODE            128
165 #define V3D_TEXTUREPAINT        256
166 #define V3D_WEIGHTPAINT         512
167 #define V3D_ALIGN                       1024
168 #define V3D_SELECT_OUTLINE      2048
169 #define V3D_ZBUF_SELECT         4096
170 #define V3D_GLOBAL_STATS        8192
171 #define V3D_CLIPPING            16384
172 #define V3D_DRAW_CENTERS        32768
173
174 /* View3d->flag2 (short) */
175 #define V3D_MODE2                       (32)
176 #define V3D_OPP_DIRECTION_NAME  1
177 #define V3D_FLYMODE                             2
178 #define V3D_DEPRECATED                  4 /* V3D_TRANSFORM_SNAP, moved to a scene setting */
179 #define V3D_SOLID_TEX                   8
180 #define V3D_DISPGP                              16
181
182 /* View3D->around */
183 #define V3D_CENTER               0
184 #define V3D_CENTROID     3
185 #define V3D_CURSOR               1
186 #define V3D_LOCAL                2
187 #define V3D_ACTIVE               4
188
189
190 /* View3d->persp */
191 #define V3D_ORTHO                               0
192 #define V3D_PERSP                               1
193 #define V3D_CAMOB                               2
194
195 /* View3d->gridflag */
196 #define V3D_SHOW_FLOOR                  1
197 #define V3D_SHOW_X                              2
198 #define V3D_SHOW_Y                              4
199 #define V3D_SHOW_Z                              8
200
201 /* View3d->twtype (bits, we can combine them) */
202 #define V3D_MANIP_TRANSLATE             1
203 #define V3D_MANIP_ROTATE                2
204 #define V3D_MANIP_SCALE                 4
205
206 /* View3d->twmode */
207 #define V3D_MANIP_GLOBAL                0
208 #define V3D_MANIP_LOCAL                 1
209 #define V3D_MANIP_NORMAL                2
210 #define V3D_MANIP_VIEW                  3
211 #define V3D_MANIP_CUSTOM                4 /* anything of value 4 or higher is custom */
212
213 /* View3d->twflag */
214    /* USE = user setting, DRAW = based on selection */
215 #define V3D_USE_MANIPULATOR             1
216 #define V3D_DRAW_MANIPULATOR    2
217 #define V3D_CALC_MANIPULATOR    4
218
219
220 #endif
221
222