Path: [ #2789 ] Add a "copy size" constraint
[blender-staging.git] / source / blender / makesdna / DNA_constraint_types.h
1 /**
2  * $Id$
3  *
4  * ***** BEGIN GPL/BL DUAL 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. The Blender
10  * Foundation also sells licenses for use in proprietary software under
11  * the Blender License.  See http://www.blender.org/BL/ for information
12  * about this.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program; if not, write to the Free Software Foundation,
21  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
22  *
23  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
24  * All rights reserved.
25  *
26  * The Original Code is: all of this file.
27  *
28  * Contributor(s): none yet.
29  *
30  * ***** END GPL/BL DUAL LICENSE BLOCK *****
31  * Constraint DNA data
32  */
33
34 #ifndef DNA_CONSTRAINT_TYPES_H
35 #define DNA_CONSTRAINT_TYPES_H
36
37 #include "DNA_ID.h"
38 #include "DNA_ipo_types.h"
39 #include "DNA_object_types.h"
40
41 struct Action;
42
43 /* channels reside in Object or Action (ListBase) constraintChannels */
44 typedef struct bConstraintChannel{
45         struct bConstraintChannel *next, *prev;
46         Ipo                     *ipo;
47         short           flag;
48         char            name[30];
49 } bConstraintChannel;
50
51 typedef struct bConstraint{
52         struct bConstraint *next, *prev;
53         void            *data;          /*      Constraint data (a valid constraint type) */
54         short           type;           /*      Constraint type */
55         short           flag;           /*      Flag */
56         short           reserved1;      
57         char            name[30];       /*      Constraint name */
58
59         float           enforce;
60 } bConstraint;
61
62 /* Single-target subobject constraints */
63 typedef struct bKinematicConstraint{
64         Object          *tar;
65         float           tolerance;              /* Acceptable distance from target */
66         short           iterations;             /* Maximum number of iterations to try */
67         short           flag;                   /* Like CONSTRAINT_IK_TIP */
68         int                     rootbone, pad;  /* index to rootbone, if zero go all the way to mother bone */
69         char            subtarget[32];  /* String to specify sub-object target */
70
71         float           weight;                 /* Weight of goal in IK tree */
72         float           orientweight;   /* Amount of rotation a target applies on chain */
73         float           grabtarget[3];  /* for target-less IK */
74         float           pad2;
75 } bKinematicConstraint;
76
77 typedef struct bTrackToConstraint{
78         Object          *tar;
79         int                     reserved1; /* I'll be using reserved1 and reserved2 as Track and Up flags, not sure if that's what they were intented for anyway. Not sure either if it would create backward incompatibility if I were to rename them. - theeth*/
80         int                     reserved2;
81         char            subtarget[32];
82 } bTrackToConstraint;
83
84 typedef struct bRotateLikeConstraint{
85         Object          *tar;
86         int                     flag;
87         int                     reserved1;
88         char            subtarget[32];
89 } bRotateLikeConstraint;
90
91 typedef struct bLocateLikeConstraint{
92         Object          *tar;
93         int                     flag;
94         int                     reserved1;
95         char            subtarget[32];
96 } bLocateLikeConstraint;
97
98 typedef struct bMinMaxConstraint{
99         Object          *tar;
100         int                     minmaxflag;
101         float                   offset;
102         short                   sticky;
103         short                   stuck;
104         float                   cache[3];
105         char            subtarget[32];
106 } bMinMaxConstraint;
107
108 typedef struct bSizeLikeConstraint{
109         Object          *tar;
110         int                     flag;
111         int                     reserved1;
112         char            subtarget[32];
113 } bSizeLikeConstraint;
114
115 typedef struct bActionConstraint{
116         Object          *tar;
117         short           type;
118         short           local;
119         short           start;
120         short           end;
121         float           min;
122         float           max;
123         struct bAction  *act;
124         char            subtarget[32];
125 } bActionConstraint;
126
127 /* Locked Axis Tracking constraint */
128 typedef struct bLockTrackConstraint{
129         Object          *tar;
130         int                     trackflag;
131         int                     lockflag;
132         char            subtarget[32];
133 } bLockTrackConstraint;
134
135 /* Follow Path constraints */
136 typedef struct bFollowPathConstraint{
137         Object          *tar;   /* Must be path object */
138         float           offset; /* Offset in time on the path (in frame) */
139         int                     followflag;
140         int                     trackflag;
141         int                     upflag;
142 } bFollowPathConstraint;
143
144 /* Distance Limiting constraints */
145 typedef struct bDistanceLimitConstraint{
146         Object  *tar;
147         char            subtarget[32];
148         float           pad1;
149         float           pad2;
150         float           distance;
151         float           offset[3];
152 } bDistanceLimitConstraint;     
153
154
155 /* Zero-target constraints */
156 typedef struct bRotationConstraint{
157         float xmin, xmax;
158         float ymin, ymax;
159         float zmin, zmax;
160 } bRotationConstraint;
161
162 /* Stretch to constraint */
163 typedef struct bStretchToConstraint{
164         Object          *tar;
165         int                     volmode; 
166         int         plane;
167         float           orglength;
168         float           bulge;
169         char            subtarget[32];
170 } bStretchToConstraint;
171
172
173 /* bConstraint.type */
174 #define CONSTRAINT_TYPE_NULL            0
175 #define CONSTRAINT_TYPE_CHILDOF         1       /* Unimplemented */
176 #define CONSTRAINT_TYPE_TRACKTO         2       
177 #define CONSTRAINT_TYPE_KINEMATIC       3       
178 #define CONSTRAINT_TYPE_FOLLOWPATH      4
179 #define CONSTRAINT_TYPE_ROTLIMIT        5       /* Unimplemented */
180 #define CONSTRAINT_TYPE_LOCLIMIT        6       /* Unimplemented */
181 #define CONSTRAINT_TYPE_SIZELIMIT       7       /* Unimplemented */
182 #define CONSTRAINT_TYPE_ROTLIKE         8       
183 #define CONSTRAINT_TYPE_LOCLIKE         9       
184 #define CONSTRAINT_TYPE_SIZELIKE        10
185 #define CONSTRAINT_TYPE_PYTHON          11      /* Unimplemented */
186 #define CONSTRAINT_TYPE_ACTION          12
187 #define CONSTRAINT_TYPE_LOCKTRACK       13      /* New Tracking constraint that locks an axis in place - theeth */
188 #define CONSTRAINT_TYPE_DISTANCELIMIT   14 
189 #define CONSTRAINT_TYPE_STRETCHTO       15  /* claiming this to be mine :) is in tuhopuu bjornmose */ 
190 #define CONSTRAINT_TYPE_MINMAX      16  /* floor constraint */
191
192
193 /* bConstraint.flag */
194                 /* expand for UI */
195 #define CONSTRAINT_EXPAND               0x01
196                 /* pre-check for illegal object name or bone name */
197 #define CONSTRAINT_DISABLE              0x04
198                 /* flags 0x2 and 0x8 were used in past, skip this */
199                 /* to indicate which Ipo should be shown, maybe for 3d access later too */
200 #define CONSTRAINT_ACTIVE               0x10
201                 /* only for Pose, evaluates constraints in posechannel local space */
202 #define CONSTRAINT_LOCAL                0x20
203
204
205 /* bConstraintChannel.flag */
206 #define CONSTRAINT_CHANNEL_SELECT       0x01
207
208 /* bR\12otateLikeConstraint.flag */
209 #define ROTLIKE_X               0x01
210 #define ROTLIKE_Y               0x02
211 #define ROTLIKE_Z               0x04
212
213 /* bLocateLikeConstraint.flag */
214 #define LOCLIKE_X               0x01
215 #define LOCLIKE_Y               0x02
216 #define LOCLIKE_Z               0x04
217 #define LOCSPACE                0x08
218  
219 /* bSizeLikeConstraint.flag */
220 #define SIZELIKE_X              0x01
221 #define SIZELIKE_Y              0x02
222 #define SIZELIKE_Z              0x04
223 #define SIZESPACE               0x08
224
225 /* Axis flags */
226 #define LOCK_X          0x00
227 #define LOCK_Y          0x01
228 #define LOCK_Z          0x02
229
230 #define UP_X            0x00
231 #define UP_Y            0x01
232 #define UP_Z            0x02
233
234 #define TRACK_X         0x00
235 #define TRACK_Y         0x01
236 #define TRACK_Z         0x02
237 #define TRACK_nX        0x03
238 #define TRACK_nY        0x04
239 #define TRACK_nZ        0x05
240
241 #define VOLUME_XZ       0x00
242 #define VOLUME_X        0x01
243 #define VOLUME_Z        0x02
244 #define NO_VOLUME       0x03
245
246 #define PLANE_X         0x00
247 #define PLANE_Y         0x01
248 #define PLANE_Z         0x02
249
250 /* bKinematicConstraint->flag */
251 #define CONSTRAINT_IK_TIP               1
252 #define CONSTRAINT_IK_ROT               2
253 #define CONSTRAINT_IK_AUTO              4
254 #define CONSTRAINT_IK_TEMP              8
255
256 #endif
257