diff options
-rw-r--r-- | source/blender/src/transform_conversions.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/source/blender/src/transform_conversions.c b/source/blender/src/transform_conversions.c index 820d79eb809..3dc757f11ca 100644 --- a/source/blender/src/transform_conversions.c +++ b/source/blender/src/transform_conversions.c @@ -765,6 +765,7 @@ static void pose_grab_with_ik(Object *ob) { bArmature *arm; bPoseChannel *pchan, *pchansel= NULL; + Bone *bonec; if(ob==NULL || ob->pose==NULL || (ob->flag & OB_POSEMODE)==0) return; @@ -782,6 +783,14 @@ static void pose_grab_with_ik(Object *ob) } } if(pchan || pchansel==NULL) return; + + /* rule: no IK for solitary (unconnected) bone */ + for(bonec=pchansel->bone->childbase.first; bonec; bonec=bonec->next) { + if(bonec->flag & BONE_CONNECTED) { + break; + } + } + if ((pchansel->bone->flag & BONE_CONNECTED)==0 && (bonec == NULL)) return; /* rule: if selected Bone is not a root bone, it gets a temporal IK */ if(pchansel->parent) { @@ -3240,3 +3249,4 @@ void createTransData(TransInfo *t) G.scene->recalc |= SCE_PRV_CHANGED; /* test for 3d preview */ } + |