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