forked from bartvdbraak/blender
Moved and renamed ED_pose_channel_in_IK_chain() ->
BKE_pose_channel_in_IK_chain() This was needed for depsgraph work, and it's cleaner for RNA to have fewer dependencies on editors
This commit is contained in:
parent
42524915b5
commit
cca746c8e6
@ -203,6 +203,9 @@ void BKE_pose_ikparam_init(struct bPose *pose);
|
|||||||
/* initialize a bItasc structure with default value */
|
/* initialize a bItasc structure with default value */
|
||||||
void BKE_pose_itasc_init(struct bItasc *itasc);
|
void BKE_pose_itasc_init(struct bItasc *itasc);
|
||||||
|
|
||||||
|
/* Checks if a bone is part of an IK chain or not */
|
||||||
|
bool BKE_pose_channel_in_IK_chain(struct Object *ob, struct bPoseChannel *pchan);
|
||||||
|
|
||||||
/* clears BONE_UNKEYED flags for frame changing */
|
/* clears BONE_UNKEYED flags for frame changing */
|
||||||
// XXX to be deprecated for a more general solution in animsys...
|
// XXX to be deprecated for a more general solution in animsys...
|
||||||
void framechange_poses_clear_unkeyed(void);
|
void framechange_poses_clear_unkeyed(void);
|
||||||
|
@ -594,6 +594,38 @@ void BKE_pose_ikparam_init(bPose *pose)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* only for real IK, not for auto-IK */
|
||||||
|
static bool pose_channel_in_IK_chain(Object *ob, bPoseChannel *pchan, int level)
|
||||||
|
{
|
||||||
|
bConstraint *con;
|
||||||
|
Bone *bone;
|
||||||
|
|
||||||
|
/* No need to check if constraint is active (has influence),
|
||||||
|
* since all constraints with CONSTRAINT_IK_AUTO are active */
|
||||||
|
for (con = pchan->constraints.first; con; con = con->next) {
|
||||||
|
if (con->type == CONSTRAINT_TYPE_KINEMATIC) {
|
||||||
|
bKinematicConstraint *data = con->data;
|
||||||
|
if ((data->rootbone == 0) || (data->rootbone > level)) {
|
||||||
|
if ((data->flag & CONSTRAINT_IK_AUTO) == 0)
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (bone = pchan->bone->childbase.first; bone; bone = bone->next) {
|
||||||
|
pchan = BKE_pose_channel_find_name(ob->pose, bone->name);
|
||||||
|
if (pchan && pose_channel_in_IK_chain(ob, pchan, level + 1))
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool BKE_pose_channel_in_IK_chain(Object *ob, bPoseChannel *pchan)
|
||||||
|
{
|
||||||
|
return pose_channel_in_IK_chain(ob, pchan, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void BKE_pose_channels_hash_make(bPose *pose)
|
void BKE_pose_channels_hash_make(bPose *pose)
|
||||||
{
|
{
|
||||||
if (!pose->chanhash) {
|
if (!pose->chanhash) {
|
||||||
|
@ -148,36 +148,6 @@ static short pose_has_protected_selected(Object *ob, short warn)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* only for real IK, not for auto-IK */
|
|
||||||
static int pose_channel_in_IK_chain(Object *ob, bPoseChannel *pchan, int level)
|
|
||||||
{
|
|
||||||
bConstraint *con;
|
|
||||||
Bone *bone;
|
|
||||||
|
|
||||||
/* No need to check if constraint is active (has influence),
|
|
||||||
* since all constraints with CONSTRAINT_IK_AUTO are active */
|
|
||||||
for (con = pchan->constraints.first; con; con = con->next) {
|
|
||||||
if (con->type == CONSTRAINT_TYPE_KINEMATIC) {
|
|
||||||
bKinematicConstraint *data = con->data;
|
|
||||||
if (data->rootbone == 0 || data->rootbone > level) {
|
|
||||||
if ((data->flag & CONSTRAINT_IK_AUTO) == 0)
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for (bone = pchan->bone->childbase.first; bone; bone = bone->next) {
|
|
||||||
pchan = BKE_pose_channel_find_name(ob->pose, bone->name);
|
|
||||||
if (pchan && pose_channel_in_IK_chain(ob, pchan, level + 1))
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int ED_pose_channel_in_IK_chain(Object *ob, bPoseChannel *pchan)
|
|
||||||
{
|
|
||||||
return pose_channel_in_IK_chain(ob, pchan, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ********************************************** */
|
/* ********************************************** */
|
||||||
/* Motion Paths */
|
/* Motion Paths */
|
||||||
|
|
||||||
|
@ -167,7 +167,6 @@ void ED_armature_ebone_selectflag_disable(EditBone *ebone, int flag);
|
|||||||
/* poseobject.c */
|
/* poseobject.c */
|
||||||
void ED_armature_exit_posemode(struct bContext *C, struct Base *base);
|
void ED_armature_exit_posemode(struct bContext *C, struct Base *base);
|
||||||
void ED_armature_enter_posemode(struct bContext *C, struct Base *base);
|
void ED_armature_enter_posemode(struct bContext *C, struct Base *base);
|
||||||
int ED_pose_channel_in_IK_chain(struct Object *ob, struct bPoseChannel *pchan);
|
|
||||||
void ED_pose_deselectall(struct Object *ob, int test);
|
void ED_pose_deselectall(struct Object *ob, int test);
|
||||||
void ED_pose_recalculate_paths(struct Scene *scene, struct Object *ob);
|
void ED_pose_recalculate_paths(struct Scene *scene, struct Object *ob);
|
||||||
struct Object *ED_pose_object_from_context(struct bContext *C);
|
struct Object *ED_pose_object_from_context(struct bContext *C);
|
||||||
|
@ -1538,7 +1538,7 @@ static void draw_pose_dofs(Object *ob)
|
|||||||
if (bone->flag & BONE_SELECTED) {
|
if (bone->flag & BONE_SELECTED) {
|
||||||
if (bone->layer & arm->layer) {
|
if (bone->layer & arm->layer) {
|
||||||
if (pchan->ikflag & (BONE_IK_XLIMIT | BONE_IK_ZLIMIT)) {
|
if (pchan->ikflag & (BONE_IK_XLIMIT | BONE_IK_ZLIMIT)) {
|
||||||
if (ED_pose_channel_in_IK_chain(ob, pchan)) {
|
if (BKE_pose_channel_in_IK_chain(ob, pchan)) {
|
||||||
float corner[4][3], posetrans[3], mat[4][4];
|
float corner[4][3], posetrans[3], mat[4][4];
|
||||||
float phi = 0.0f, theta = 0.0f, scale;
|
float phi = 0.0f, theta = 0.0f, scale;
|
||||||
int a, i;
|
int a, i;
|
||||||
|
@ -261,7 +261,7 @@ static int rna_PoseChannel_has_ik_get(PointerRNA *ptr)
|
|||||||
Object *ob = (Object *)ptr->id.data;
|
Object *ob = (Object *)ptr->id.data;
|
||||||
bPoseChannel *pchan = (bPoseChannel *)ptr->data;
|
bPoseChannel *pchan = (bPoseChannel *)ptr->data;
|
||||||
|
|
||||||
return ED_pose_channel_in_IK_chain(ob, pchan);
|
return BKE_pose_channel_in_IK_chain(ob, pchan);
|
||||||
}
|
}
|
||||||
|
|
||||||
static StructRNA *rna_IKParam_refine(PointerRNA *ptr)
|
static StructRNA *rna_IKParam_refine(PointerRNA *ptr)
|
||||||
|
Loading…
Reference in New Issue
Block a user