960ed6181e541a6810f62631c5dc4307424c8867
[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/BL DUAL 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. The Blender
12  * Foundation also sells licenses for use in proprietary software under
13  * the Blender License.  See http://www.blender.org/BL/ for information
14  * about this.
15  *
16  * This program is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19  * GNU General Public License for more details.
20  *
21  * You should have received a copy of the GNU General Public License
22  * along with this program; if not, write to the Free Software Foundation,
23  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
24  *
25  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
26  * All rights reserved.
27  *
28  * The Original Code is: all of this file.
29  *
30  * Contributor(s): none yet.
31  *
32  * ***** END GPL/BL DUAL LICENSE BLOCK *****
33  */
34 #ifndef DNA_VIEW3D_TYPES_H
35 #define DNA_VIEW3D_TYPES_H
36
37 struct Object;
38 struct Image;
39 struct Tex;
40 struct SpaceLink;
41 struct Base;
42 struct BoundBox;
43
44 /* This is needed to not let VC choke on near and far... old
45  * proprietary MS extensions... */
46 #ifdef WIN32
47 #undef near
48 #undef far
49 #define near clipsta
50 #define far clipend
51 #endif
52
53 #include "DNA_listBase.h"
54
55 /* The near/far thing is a Win EXCEPTION. Thus, leave near/far in the
56  * code, and patch for windows. */
57
58 typedef struct BGpic {
59     struct Image *ima;
60         struct Tex *tex;
61     float xof, yof, size, zoom, blend;
62     short xim, yim;
63         unsigned int *rect;
64 } BGpic;
65
66 typedef struct View3D {
67         struct SpaceLink *next, *prev;
68         int spacetype;
69         float blockscale;
70         struct ScrArea *area;
71         
72         short blockhandler[8];
73
74         float viewmat[4][4];
75         float viewinv[4][4];
76         float persmat[4][4];
77         float persinv[4][4];
78         
79         float winmat1[4][4];  // persp(1) storage, for swap matrices
80         float viewmat1[4][4];
81         
82         float viewquat[4], dist;
83
84         /**
85          * 0 - ortho
86          * 1 - do 3d perspective
87          * 2 - use the camera
88          */
89         short persp;
90         short view;
91
92         struct Object *camera;
93         struct BGpic *bgpic;
94         struct View3D *localvd;
95         
96         /**
97          * The drawing mode for the 3d display. Set to OB_WIRE, OB_SOLID,
98          * OB_SHADED or OB_TEXTURED */
99         short drawtype;
100         short localview;
101         int lay, layact;
102         short scenelock, around, camzoom, flag;
103         
104         float lens, grid, gridview, pixsize, near, far;
105         float camdx, camdy;             /* camera view offsets, 1.0 = viewplane moves entire width/height */
106         float ofs[3], cursor[3];
107
108         short gridlines, viewbut;
109         short gridflag;
110         short modeselect, menunr, texnr;
111         
112         /* transform widget info */
113         short twtype, twmode, twflag, twdrawflag;
114         float twmat[4][4];
115         
116         /* user defined clipping planes */
117         float clip[4][4];
118         struct BoundBox *clipbb;
119         
120         /* afterdraw, for xray & transparent */
121         struct ListBase afterdraw;
122         /* drawflags, denoting state */
123         short zbuf, transp, xray, pad2;
124 } View3D;
125
126 /* View3D->flag (short) */
127 #define V3D_MODE                        (16+32+64+128+256+512)
128 #define V3D_DISPIMAGE           1
129 #define V3D_DISPBGPIC           2
130 #define V3D_SETUPBUTS           4
131 #define V3D_NEEDBACKBUFDRAW     8
132 #define V3D_EDITMODE            16
133 #define V3D_VERTEXPAINT         32
134 #define V3D_FACESELECT          64
135 #define V3D_POSEMODE            128
136 #define V3D_TEXTUREPAINT        256
137 #define V3D_WEIGHTPAINT         512
138 #define V3D_ALIGN                       1024
139 #define V3D_SELECT_OUTLINE      2048
140 #define V3D_ZBUF_SELECT         4096
141 #define V3D_GLOBAL_STATS        8192
142 #define V3D_CLIPPING            16384
143 #define V3D_DRAW_CENTERS        32768
144
145 /* View3D->around */
146 #define V3D_CENTRE               0
147 #define V3D_CENTROID     3
148 #define V3D_CURSOR               1
149 #define V3D_LOCAL                2
150 #define V3D_ACTIVE               4
151
152
153 /* View3d->persp */
154 #define V3D_PERSP_ORTHO          0
155 #define V3D_PERSP_DO_3D_PERSP    1
156 #define V3D_PERSP_USE_THE_CAMERA 2
157
158 /* View3d->gridflag */
159 #define V3D_SHOW_FLOOR                  1
160 #define V3D_SHOW_X                              2
161 #define V3D_SHOW_Y                              4
162 #define V3D_SHOW_Z                              8
163
164 /* View3d->twtype (bits, we can combine them) */
165 #define V3D_MANIP_TRANSLATE             1
166 #define V3D_MANIP_ROTATE                2
167 #define V3D_MANIP_SCALE                 4
168
169 /* View3d->twmode */
170 #define V3D_MANIP_GLOBAL                0
171 #define V3D_MANIP_LOCAL                 1
172 #define V3D_MANIP_NORMAL                2
173 #define V3D_MANIP_VIEW                  3
174
175 /* View3d->twflag */
176    /* USE = user setting, DRAW = based on selection */
177 #define V3D_USE_MANIPULATOR             1
178 #define V3D_DRAW_MANIPULATOR    2
179 #define V3D_CALC_MANIPULATOR    4
180
181
182 #endif
183