Merging r38951 through r38987 from trunk into soc-2011-tomato
[blender.git] / source / blender / editors / include / ED_transform.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
30 /** \file ED_transform.h
31  *  \ingroup editors
32  */
33
34 #ifndef ED_TRANSFORM_H
35 #define ED_TRANSFORM_H
36
37 /* ******************* Registration Function ********************** */
38
39 struct wmWindowManager;
40 struct wmOperatorType;
41 struct ListBase;
42 struct wmEvent;
43 struct bContext;
44 struct Object;
45 struct uiLayout;
46 struct EnumPropertyItem;
47 struct wmOperatorType;
48 struct wmKeyMap;
49 struct wmKeyConfig;
50
51 void transform_keymap_for_space(struct wmKeyConfig *keyconf, struct wmKeyMap *keymap, int spaceid);
52 void transform_operatortypes(void);
53
54 /* ******************** Macros & Prototypes *********************** */
55
56 /* MODE AND NUMINPUT FLAGS */
57 enum {
58         TFM_INIT = -1,
59         TFM_DUMMY,
60         TFM_TRANSLATION,
61         TFM_ROTATION,
62         TFM_RESIZE,
63         TFM_TOSPHERE,
64         TFM_SHEAR,
65         TFM_WARP,
66         TFM_SHRINKFATTEN,
67         TFM_TILT,
68         TFM_TRACKBALL,
69         TFM_PUSHPULL,
70         TFM_CREASE,
71         TFM_MIRROR,
72         TFM_BONESIZE,
73         TFM_BONE_ENVELOPE,
74         TFM_CURVE_SHRINKFATTEN,
75         TFM_BONE_ROLL,
76         TFM_TIME_TRANSLATE,
77         TFM_TIME_SLIDE,
78         TFM_TIME_SCALE,
79         TFM_TIME_EXTEND,
80         TFM_TIME_DUPLICATE,
81         TFM_BAKE_TIME,
82         TFM_BEVEL,
83         TFM_BWEIGHT,
84         TFM_ALIGN,
85         TFM_EDGE_SLIDE,
86         TFM_SEQ_SLIDE
87 } TfmMode;
88
89 /* TRANSFORM CONTEXTS */
90 #define CTX_NONE                        0
91 #define CTX_TEXTURE                     1
92 #define CTX_EDGE                        2
93 #define CTX_NO_PET                      4
94 #define CTX_TWEAK                       8
95 #define CTX_NO_MIRROR           16
96 #define CTX_AUTOCONFIRM         32
97 #define CTX_BMESH                       64
98 #define CTX_NDOF                        128
99 #define CTX_MOVIECLIP           256
100
101 /* Standalone call to get the transformation center corresponding to the current situation
102  * returns 1 if successful, 0 otherwise (usually means there's no selection)
103  * (if 0 is returns, *vec is unmodified)
104  * */
105 int calculateTransformCenter(struct bContext *C, int centerMode, float *vec);
106
107 struct TransInfo;
108 struct ScrArea;
109 struct Base;
110 struct Scene;
111 struct Object;
112
113 void BIF_setSingleAxisConstraint(float vec[3], char *text);
114 void BIF_setDualAxisConstraint(float vec1[3], float vec2[3], char *text);
115 void BIF_setLocalAxisConstraint(char axis, char *text);
116 void BIF_setLocalLockConstraint(char axis, char *text);
117
118 int BIF_snappingSupported(struct Object *obedit);
119
120 struct TransformOrientation;
121 struct bContext;
122 struct ReportList;
123
124 void BIF_clearTransformOrientation(struct bContext *C);
125 void BIF_removeTransformOrientation(struct bContext *C, struct TransformOrientation *ts);
126 void BIF_removeTransformOrientationIndex(struct bContext *C, int index);
127 void BIF_createTransformOrientation(struct bContext *C, struct ReportList *reports, char *name, int use, int overwrite);
128 int BIF_menuselectTransformOrientation(void);
129 void BIF_selectTransformOrientation(struct bContext *C, struct TransformOrientation *ts);
130 void BIF_selectTransformOrientationValue(struct bContext *C, int orientation);
131
132 void ED_getTransformOrientationMatrix(const struct bContext *C, float orientation_mat[][3], int activeOnly);
133
134 struct EnumPropertyItem *BIF_enumTransformOrientation(struct bContext *C);
135 const char * BIF_menustringTransformOrientation(const struct bContext *C, const char *title); /* the returned value was allocated and needs to be freed after use */
136 int BIF_countTransformOrientation(const struct bContext *C);
137
138 void BIF_TransformSetUndo(char *str);
139
140 void BIF_selectOrientation(void);
141
142 /* to be able to add operator properties to other operators */
143
144 #define P_MIRROR                (1 << 0)
145 #define P_PROPORTIONAL  (1 << 1)
146 #define P_AXIS                  (1 << 2)
147 #define P_SNAP                  (1 << 3)
148 #define P_GEO_SNAP              (P_SNAP|(1 << 4))
149 #define P_ALIGN_SNAP    (P_GEO_SNAP|(1 << 5))
150 #define P_CONSTRAINT    (1 << 6)
151 #define P_OPTIONS               (1 << 7)
152 #define P_CORRECT_UV    (1 << 8)
153
154 void Transform_Properties(struct wmOperatorType *ot, int flags);
155
156 /* view3d manipulators */
157
158 int BIF_do_manipulator(struct bContext *C, struct wmEvent *event, struct wmOperator *op);
159 void BIF_draw_manipulator(const struct bContext *C);
160
161 /* Snapping */
162
163
164 typedef struct DepthPeel
165 {
166         struct DepthPeel *next, *prev;
167
168         float depth;
169         float p[3];
170         float no[3];
171         struct Object *ob;
172         int flag;
173 } DepthPeel;
174
175 struct ListBase;
176
177 typedef enum SnapMode
178 {
179         SNAP_ALL = 0,
180         SNAP_NOT_SELECTED = 1,
181         SNAP_NOT_OBEDIT = 2
182 } SnapMode;
183
184 #define SNAP_MIN_DISTANCE 30
185
186 int peelObjectsTransForm(struct TransInfo *t, struct ListBase *depth_peels, float mval[2]);
187 int peelObjectsContext(struct bContext *C, struct ListBase *depth_peels, float mval[2]);
188 int snapObjectsTransform(struct TransInfo *t, float mval[2], int *dist, float *loc, float *no, SnapMode mode);
189 int snapObjectsContext(struct bContext *C, float mval[2], int *dist, float *loc, float *no, SnapMode mode);
190
191 #endif
192