unify include guard defines, __$FILENAME__
[blender-staging.git] / source / blender / blenkernel / BKE_armature.h
1 /*
2  * ***** BEGIN GPL LICENSE BLOCK *****
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License
6  * as published by the Free Software Foundation; either version 2
7  * of the License, or (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software Foundation,
16  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17  *
18  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
19  * All rights reserved.
20  *
21  * The Original Code is: all of this file.
22  *
23  * Contributor(s): none yet.
24  *
25  * ***** END GPL LICENSE BLOCK *****
26  */
27 #ifndef __BKE_ARMATURE_H__
28 #define __BKE_ARMATURE_H__
29
30 /** \file BKE_armature.h
31  *  \ingroup bke
32  *  \since March 2001
33  *  \author nzc
34  */
35
36 struct Bone;
37 struct Main;
38 struct bArmature;
39 struct bPose;
40 struct bPoseChannel;
41 struct bConstraint;
42 struct Scene;
43 struct Object;
44 struct MDeformVert;
45 struct Mesh;
46 struct PoseTree;
47 struct ListBase;
48
49 typedef struct PoseTarget
50 {
51         struct PoseTarget *next, *prev;
52
53         struct bConstraint *con;                /* the constrait of this target */
54         int tip;                                                /* index of tip pchan in PoseTree */
55 } PoseTarget;
56
57 typedef struct PoseTree
58 {
59         struct PoseTree *next, *prev;
60         
61         int     type;                                   /* type of IK that this serves (CONSTRAINT_TYPE_KINEMATIC or ..._SPLINEIK) */
62         int             totchannel;                             /* number of pose channels */
63         
64         struct ListBase targets;                /* list of targets of the tree */
65         struct bPoseChannel     **pchan;        /* array of pose channels */
66         int             *parent;                                /* and their parents */
67         
68         float   (*basis_change)[3][3];  /* basis change result from solver */
69         int             iterations;                             /* iterations from the constraint */
70         int     stretch;                                /* disable stretching */
71 } PoseTree;
72
73 /*      Core armature functionality */
74 #ifdef __cplusplus
75 extern "C" {
76 #endif
77
78 struct bArmature *add_armature(const char *name);
79 struct bArmature *get_armature(struct Object *ob);
80 void free_bonelist (struct ListBase *lb);
81 void free_armature(struct bArmature *arm);
82 void make_local_armature(struct bArmature *arm);
83 struct bArmature *copy_armature(struct bArmature *arm);
84
85 int bone_autoside_name (char name[64], int strip_number, short axis, float head, float tail);
86
87 struct Bone *get_named_bone (struct bArmature *arm, const char *name);
88
89 float distfactor_to_bone(const float vec[3], const float b1[3], const float b2[3], float rad1, float rad2, float rdist);
90
91 void where_is_armature (struct bArmature *arm);
92 void where_is_armature_bone(struct Bone *bone, struct Bone *prevbone);
93 void armature_rebuild_pose(struct Object *ob, struct bArmature *arm);
94 void where_is_pose (struct Scene *scene, struct Object *ob);
95 void where_is_pose_bone(struct Scene *scene, struct Object *ob, struct bPoseChannel *pchan, float ctime, int do_extra);
96 void where_is_pose_bone_tail(struct bPoseChannel *pchan);
97
98 /* get_objectspace_bone_matrix has to be removed still */
99 void get_objectspace_bone_matrix (struct Bone* bone, float M_accumulatedMatrix[][4], int root, int posed);
100 void vec_roll_to_mat3(float *vec, float roll, float mat[][3]);
101 void mat3_to_vec_roll(float mat[][3], float *vec, float *roll);
102
103 int get_selected_defgroups(struct Object *ob, char *defbase_sel, int defbase_len);
104
105 /* Common Conversions Between Co-ordinate Spaces */
106 void armature_mat_world_to_pose(struct Object *ob, float inmat[][4], float outmat[][4]);
107 void armature_loc_world_to_pose(struct Object *ob, float *inloc, float *outloc);
108 void armature_mat_pose_to_bone(struct bPoseChannel *pchan, float inmat[][4], float outmat[][4]);
109 void armature_loc_pose_to_bone(struct bPoseChannel *pchan, float *inloc, float *outloc);
110 void armature_mat_pose_to_delta(float delta_mat[][4], float pose_mat[][4], float arm_mat[][4]);
111
112 void armature_mat_pose_to_bone_ex(struct Object *ob, struct bPoseChannel *pchan, float inmat[][4], float outmat[][4]);
113
114 void pchan_mat3_to_rot(struct bPoseChannel *pchan, float mat[][3], short use_compat);
115 void pchan_apply_mat4(struct bPoseChannel *pchan, float mat[][4], short use_comat);
116 void pchan_to_mat4(struct bPoseChannel *pchan, float chan_mat[4][4]);
117 void pchan_calc_mat(struct bPoseChannel *pchan);
118
119 /* Get the "pchan to pose" transform matrix. These matrices apply the effects of
120  * HINGE/NO_SCALE/NO_LOCAL_LOCATION options over the pchan loc/rot/scale transformations. */
121 void pchan_to_pose_mat(struct bPoseChannel *pchan, float rotscale_mat[][4], float loc_mat[][4]);
122
123 /* Rotation Mode Conversions - Used for PoseChannels + Objects... */
124 void BKE_rotMode_change_values(float quat[4], float eul[3], float axis[3], float *angle, short oldMode, short newMode);
125
126 /* B-Bone support */
127 typedef struct Mat4 {
128         float mat[4][4];
129 } Mat4;
130
131 Mat4 *b_bone_spline_setup(struct bPoseChannel *pchan, int rest);
132
133 /* like EBONE_VISIBLE */
134 #define PBONE_VISIBLE(arm, bone) (((bone)->layer & (arm)->layer) && !((bone)->flag & BONE_HIDDEN_P))
135 #define _BONE_VISIBLE(arm, bone) (((bone)->layer & (arm)->layer) && !((bone)->flag & BONE_HIDDEN_P))
136
137 #ifdef __cplusplus
138 }
139 #endif
140
141 #endif
142