Welcome to mirror list, hosted at ThFree Co, Russian Federation.

BIF_editarmature.h « include « blender « source - git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: ce275563a873a6eb46713e9f7b0b47ba259d32a1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
/**
 * $Id$
 *
 * ***** BEGIN GPL LICENSE BLOCK *****
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software Foundation,
 * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 *
 * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
 * All rights reserved.
 *
 * The Original Code is: all of this file.
 *
 * Contributor(s): none yet.
 *
 * ***** END GPL LICENSE BLOCK *****
 */
#ifndef BIF_EDITARMATURE_H
#define BIF_EDITARMATURE_H

struct Object;
struct Base;
struct Bone;
struct bArmature;
struct ListBase;

typedef struct EditBone
{
	struct EditBone *next, *prev;
	struct EditBone *parent;/*	Editbones have a one-way link  (i.e. children refer
									to parents.  This is converted to a two-way link for
									normal bones when leaving editmode.	*/
	void	*temp;			/*	Used to store temporary data */

	char	name[32];
	float	roll;			/*	Roll along axis.  We'll ultimately use the axis/angle method
								for determining the transformation matrix of the bone.  The axis
								is tail-head while roll provides the angle. Refer to Graphics
								Gems 1 p. 466 (section IX.6) if it's not already in here somewhere*/

	float	head[3];			/*	Orientation and length is implicit during editing */
	float	tail[3];	
							/*	All joints are considered to have zero rotation with respect to
							their parents.	Therefore any rotations specified during the
							animation are automatically relative to the bones' rest positions*/
	int		flag;

	int		parNr;		/* Used for retrieving values from the menu system */
	
	float dist, weight;
	float xwidth, length, zwidth;	/* put them in order! transform uses this as scale */
	float ease1, ease2;
	float rad_head, rad_tail;
	short layer, segments;
	
	float oldlength;				/* for envelope scaling */

} EditBone;

float	rollBoneToVector(EditBone *bone, float new_up_axis[3]);

void	make_boneList(struct ListBase *list, struct ListBase *bones, EditBone *parent);
void	editbones_to_armature (struct ListBase *list, struct Object *ob);

void	adduplicate_armature(void);
void	addvert_armature(void);
void	add_primitiveArmature(int type);
void	apply_rot_armature (struct Object *ob, float mat[3][3]);
void 	docenter_armature (struct Object *ob, int centermode);

void	clear_armature(struct Object *ob, char mode);

void	delete_armature(void);
void	deselectall_armature(int toggle, int doundo);
void	deselectall_posearmature (struct Object *ob, int test, int doundo);
int		draw_armature(struct Base *base, int dt, int flag);

void	extrude_armature(int forked);
void	subdivide_armature(int numcuts);
void	fill_bones_armature(void);
void	merge_armature(void);

void	free_editArmature(void);

int		join_armature(void);
void 	separate_armature(void);
void	apply_armature_pose2bones(void);
void	load_editArmature(void);

void	make_bone_parent(void);
void    clear_bone_parent(void);
struct Bone	*get_indexed_bone (struct Object *ob, int index);

void	make_editArmature(void);
void	make_trans_bones (char mode);
void	remake_editArmature(void);
void	editbones_to_armature(struct ListBase *list, struct Object *ob);

int		do_pose_selectbuffer(struct Base *base, unsigned int *buffer, short hits);

void generateSkeleton(void);

void	mouse_armature(void);
void	selectconnected_armature(void);
void	selectconnected_posearmature(void);
void	armature_select_hierarchy(short direction, short add_to_sel);

void	setflag_armature(short mode);
void    unique_editbone_name (struct ListBase *ebones, char *name);

void	auto_align_armature(short mode);
void	switch_direction_armature(void);

void	create_vgroups_from_armature(struct Object *ob, struct Object *par);
void 	add_verts_to_dgroups(struct Object *ob, struct Object *par, int heat, int mirror);

void	hide_selected_pose_bones(void);
void	hide_unselected_pose_bones(void);
void	show_all_pose_bones(void);

int		bone_looper(struct Object *ob, struct Bone *bone, void *data,
				int (*bone_func)(struct Object *, struct Bone *, void *));

void	undo_push_armature(char *name);
void	armature_bone_rename(struct bArmature *arm, char *oldname, char *newname);
void	armature_flip_names(void);
void 	armature_autoside_names(short axis);
EditBone *armature_bone_get_mirrored(EditBone *ebo);
void	transform_armature_mirror_update(void);

void	hide_selected_armature_bones(void);
void	hide_unselected_armature_bones(void);
void	show_all_armature_bones(void);

void	align_selected_bones(void);

#define	BONESEL_ROOT	0x10000000
#define	BONESEL_TIP		0x20000000
#define	BONESEL_BONE	0x40000000
#define BONESEL_ANY		(BONESEL_TIP|BONESEL_ROOT|BONESEL_BONE)

#define BONESEL_NOSEL	0x80000000	/* Indicates a negative number */

/* from autoarmature */
void BIF_retargetArmature();
void BIF_adjustRetarget();
void BIF_freeRetarget();

struct ReebArc;
float calcVariance(struct ReebArc *arc, int start, int end, float v0[3], float n[3]);
float calcDistance(struct ReebArc *arc, int start, int end, float head[3], float tail[3]);

/* useful macros */
#define EBONE_VISIBLE(arm, ebone) ((arm->layer & ebone->layer) && !(ebone->flag & BONE_HIDDEN_A))
#define EBONE_EDITABLE(ebone) ((ebone->flag & BONE_SELECTED) && !(ebone->flag & BONE_EDITMODE_LOCKED)) 

/* used in bone_select_hierachy() */
#define BONE_SELECT_PARENT	0
#define BONE_SELECT_CHILD	1

#endif