fixed spacing in the headers to get rid of some warnings and some other
[blender.git] / source / blender / blenkernel / BKE_armature.h
1 /**
2  * blenlib/BKE_armature.h (mar-2001 nzc)
3  *      
4  * $Id$ 
5  *
6  * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
7  *
8  * This program is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU General Public License
10  * as published by the Free Software Foundation; either version 2
11  * of the License, or (at your option) any later version. The Blender
12  * Foundation also sells licenses for use in proprietary software under
13  * the Blender License.  See http://www.blender.org/BL/ for information
14  * about this.
15  *
16  * This program is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19  * GNU General Public License for more details.
20  *
21  * You should have received a copy of the GNU General Public License
22  * along with this program; if not, write to the Free Software Foundation,
23  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
24  *
25  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
26  * All rights reserved.
27  *
28  * The Original Code is: all of this file.
29  *
30  * Contributor(s): none yet.
31  *
32  * ***** END GPL/BL DUAL LICENSE BLOCK *****
33  */
34 #ifndef BKE_ARMATURE_H
35 #define BKE_ARMATURE_H
36
37 struct Bone;
38 struct Main;
39 struct bArmature;
40 struct bPose;
41 struct Object;
42 struct MDeformVert;
43 struct Mesh;
44 struct PoseChain;
45 struct ListBase;
46
47 typedef struct PoseChain
48 {
49         struct PoseChain *next, *prev;
50         struct Bone     *root;
51         struct Bone     *target;
52         struct bPose *pose;
53         float   goal[3];
54         float   tolerance;
55         int             iterations;
56         float   goalinv[4][4];
57         struct IK_Chain_Extern *solver;
58 } PoseChain;
59
60 /*      Core armature functionality */
61 #ifdef __cplusplus
62 extern "C" {
63 #endif
64 struct bArmature *add_armature(void);
65 void free_boneChildren(struct Bone *bone);
66 void free_bones (struct bArmature *arm);
67 void unlink_armature(struct bArmature *arm);
68 void free_armature(struct bArmature *arm);
69 void make_local_armature(struct bArmature *arm);
70 struct bArmature *copy_armature(struct bArmature *arm);
71 void apply_pose_armature (struct bArmature* arm, struct bPose* pose, int doit);
72 void calc_armature_deform (struct Object *ob, float *co, int index);
73 int verify_boneptr (struct bArmature *arm, struct Bone *tBone);
74 void init_armature_deform(struct Object *parent, struct Object *ob);
75 struct bArmature* get_armature (struct Object* ob);
76 struct Bone *get_named_bone (struct bArmature *arm, const char *name);
77 struct Bone *get_indexed_bone (struct bArmature *arm, int index);
78 void make_displists_by_armature (struct Object *ob);
79 void calc_bone_deform (struct Bone *bone, float weight, float *vec, float *co, float *contrib);
80
81 void where_is_armature_time (struct Object *ob, float ctime);
82 void where_is_armature (struct Object *ob);
83 void where_is_bone1_time (struct Object *ob, struct Bone *bone, float ctime);
84
85 /*      Handy bone matrix functions */
86 void bone_to_mat4(struct Bone *bone, float mat[][4]);
87 void bone_to_mat3(struct Bone *bone, float mat[][3]);
88 void make_boneMatrixvr (float outmatrix[][4],float delta[3], float roll);
89 void make_boneMatrix (float outmatrix[][4], struct Bone *bone);
90 void get_bone_root_pos (struct Bone* bone, float vec[3], int posed);
91 void get_bone_tip_pos (struct Bone* bone, float vec[3], int posed);
92 float get_bone_length (struct Bone *bone);
93 void get_objectspace_bone_matrix (struct Bone* bone, float M_accumulatedMatrix[][4], int root, int posed);
94 void precalc_bone_irestmat (struct Bone *bone);
95 void precalc_armature_posemats (struct bArmature *arm);
96 void precalc_bonelist_irestmats (struct ListBase* bonelist);
97 void apply_bonemat(struct Bone *bone);
98
99 /* void make_armatureParentMatrices (struct bArmature *arm); */
100 void precalc_bone_defmat (struct Bone *bone);
101 void rebuild_bone_parent_matrix (struct Bone *bone);
102
103 /*      Animation functions */
104 void where_is_bone_time (struct Object *ob, struct Bone *bone, float ctime);
105 void where_is_bone (struct Object *ob, struct Bone *bone);
106 struct PoseChain *ik_chain_to_posechain (struct Object *ob, struct Bone *bone);
107 void solve_posechain (PoseChain *chain);
108 void free_posechain (PoseChain *chain);
109
110 /*      Gameblender hacks */
111 void GB_init_armature_deform(struct ListBase *defbase, float premat[][4], float postmat[][4]);
112 void GB_calc_armature_deform (float *co, struct MDeformVert *dvert);
113 void GB_build_mats (float parmat[][4], float obmat[][4], float premat[][4], float postmat[][4]);
114 void GB_validate_defgroups (struct Mesh *mesh, struct ListBase *defbase);
115
116 /*void make_boneParentMatrix (struct Bone* bone, float mat[][4]);*/ 
117
118 #ifdef __cplusplus
119 }
120 #endif
121
122 #endif
123