Initial revision
[blender.git] / source / blender / makesdna / DNA_armature_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  */
32
33
34 #ifndef DNA_ARMATURE_TYPES_H
35 #define DNA_ARMATURE_TYPES_H
36
37 #include "DNA_listBase.h"
38 #include "DNA_ID.h"
39
40 typedef struct Bone {
41         struct Bone             *next, *prev;   /*      Next/prev elements within this list     */
42         struct Bone             *parent;                /*      Parent (ik parent if appropriate flag is set            */
43         ListBase                childbase;              /*      Children        */
44         char                    name[32];               /* Name of the bone - must be unique within the armature */
45
46         float                   roll;                           
47         float                   head[3];                /*      Orientation & length are implicit now */
48         float                   tail[3];                /*      head/tail represents rest state */
49         int                             flag;
50
51         /*      Transformation data used for posing:
52                 The same information stored by other
53                 blenderObjects
54         */
55
56         float dist, weight;
57         float loc[3], dloc[3];
58         float size[3], dsize[3];
59         float quat[4], dquat[4];
60         float obmat[4][4];
61         float parmat[4][4];
62         float defmat[4][4];
63         float irestmat[4][4];   /*      Cached inverse of rest matrix (objectspace)*/
64         float posemat[4][4];    /*      Cached pose matrix (objectspace)*/
65 }Bone;
66
67 typedef struct bArmature {
68         ID                      id;
69         ListBase        bonebase;
70         ListBase        chainbase;
71         int                     flag;
72         int                     res1;                           
73         int                     res2;
74         int                     res3;                   
75 }bArmature;
76
77 enum {
78                 ARM_RESTPOSBIT  =       0,
79                 ARM_UNUSED1BIT,                                 /* Free for use */
80                 ARM_DRAWAXESBIT,
81                 ARM_DRAWNAMESBIT,
82                 ARM_POSEBIT,
83                 ARM_EDITBIT
84 };
85
86 enum {
87                 ARM_RESTPOS             =       0x00000001,
88                 ARM_UNUSED1             =       0x00000002,     /*      Free for use */
89                 ARM_DRAWAXES    =       0x00000004,
90                 ARM_DRAWNAMES   =       0x00000008,
91                 ARM_POSEMODE    =       0x00000010,
92                 ARM_EDITMODE    =       0x00000020
93 };
94
95 enum {
96                 BONE_SELECTED   =       0x00000001,
97                 BONE_ROOTSEL    =       0x00000002,
98                 BONE_TIPSEL             =       0x00000004,
99
100                 BONE_HILIGHTED  =       0x00000008,
101                 BONE_IK_TOPARENT=       0x00000010,
102                 BONE_QUATROT    =       0x00000020,
103                 BONE_HIDDEN             =       0x00000040,
104
105                 BONE_DONE               =       0x00000080,     /* For detecting cyclic dependancies */
106
107                 BONE_ISEMPTY    =       0x00000100,
108                 BONE_ISMUSCLE   =       0x00000200
109 };
110
111 enum {
112                 BONE_SELECTEDBIT        =       0,
113                 BONE_HEADSELBIT,
114                 BONE_TAILSELBIT,
115                 BONE_HILIGHTEDBIT,
116                 BONE_IK_TOPARENTBIT,
117                 BONE_QUATROTBIT,
118                 BONE_HIDDENBIT,
119                 BONE_ISEMPTYBIT,
120                 BONE_ISMUSCLEBIT
121 };
122
123
124 #endif