Changeset View
Changeset View
Standalone View
Standalone View
source/blender/blenkernel/intern/action.c
| Show First 20 Lines • Show All 699 Lines • ▼ Show 20 Lines | if (pose->chanhash) { | ||||
| } | } | ||||
| } | } | ||||
| return true; | return true; | ||||
| } | } | ||||
| #endif | #endif | ||||
| bPoseChannel *BKE_pose_channel_active(Object *ob) | bool BKE_pose_is_layer_visible(const bArmature *arm, const bPoseChannel *pchan) | ||||
| { | |||||
| return (pchan->bone->layer & arm->layer); | |||||
| } | |||||
| bPoseChannel *BKE_pose_channel_active(Object *ob, const bool check_arm_layer) | |||||
| { | { | ||||
| bArmature *arm = (ob) ? ob->data : NULL; | bArmature *arm = (ob) ? ob->data : NULL; | ||||
| bPoseChannel *pchan; | bPoseChannel *pchan; | ||||
| if (ELEM(NULL, ob, ob->pose, arm)) { | if (ELEM(NULL, ob, ob->pose, arm)) { | ||||
| return NULL; | return NULL; | ||||
| } | } | ||||
| /* find active */ | /* find active */ | ||||
| for (pchan = ob->pose->chanbase.first; pchan; pchan = pchan->next) { | for (pchan = ob->pose->chanbase.first; pchan; pchan = pchan->next) { | ||||
| if ((pchan->bone) && (pchan->bone == arm->act_bone) && (pchan->bone->layer & arm->layer)) { | if ((pchan->bone) && (pchan->bone == arm->act_bone)) { | ||||
| if (!check_arm_layer || BKE_pose_is_layer_visible(arm, pchan)) { | |||||
| return pchan; | return pchan; | ||||
| } | } | ||||
| } | } | ||||
| } | |||||
| return NULL; | return NULL; | ||||
| } | } | ||||
| bPoseChannel *BKE_pose_channel_active_if_layer_visible(struct Object *ob) | |||||
| { | |||||
| return BKE_pose_channel_active(ob, true); | |||||
| } | |||||
| bPoseChannel *BKE_pose_channel_active_or_first_selected(struct Object *ob) | bPoseChannel *BKE_pose_channel_active_or_first_selected(struct Object *ob) | ||||
| { | { | ||||
| bArmature *arm = (ob) ? ob->data : NULL; | bArmature *arm = (ob) ? ob->data : NULL; | ||||
| if (ELEM(NULL, ob, ob->pose, arm)) { | if (ELEM(NULL, ob, ob->pose, arm)) { | ||||
| return NULL; | return NULL; | ||||
| } | } | ||||
| bPoseChannel *pchan = BKE_pose_channel_active(ob); | bPoseChannel *pchan = BKE_pose_channel_active_if_layer_visible(ob); | ||||
| if (pchan && (pchan->bone->flag & BONE_SELECTED) && PBONE_VISIBLE(arm, pchan->bone)) { | if (pchan && (pchan->bone->flag & BONE_SELECTED) && PBONE_VISIBLE(arm, pchan->bone)) { | ||||
| return pchan; | return pchan; | ||||
| } | } | ||||
| for (pchan = ob->pose->chanbase.first; pchan; pchan = pchan->next) { | for (pchan = ob->pose->chanbase.first; pchan; pchan = pchan->next) { | ||||
| if (pchan->bone != NULL) { | if (pchan->bone != NULL) { | ||||
| if ((pchan->bone->flag & BONE_SELECTED) && PBONE_VISIBLE(arm, pchan->bone)) { | if ((pchan->bone->flag & BONE_SELECTED) && PBONE_VISIBLE(arm, pchan->bone)) { | ||||
| return pchan; | return pchan; | ||||
| ▲ Show 20 Lines • Show All 1,265 Lines • Show Last 20 Lines | |||||