diff options
author | Campbell Barton <ideasman42@gmail.com> | 2015-02-23 15:05:54 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2015-02-23 15:05:54 +0300 |
commit | 34479d8b63c9ef04ec14d99647f0c46b676b6ca6 (patch) | |
tree | f4d5cacdd73000c2917a60ea7b3891294e28c9d4 /source/blender/editors/space_view3d/view3d_snap.c | |
parent | 17b847910169d03051959c77992217936f6a8167 (diff) |
Snap to Active: missing armature/pose/mball/curve
de-duplicate active center calc between transform & snap-to-selected.
Diffstat (limited to 'source/blender/editors/space_view3d/view3d_snap.c')
-rw-r--r-- | source/blender/editors/space_view3d/view3d_snap.c | 44 |
1 files changed, 22 insertions, 22 deletions
diff --git a/source/blender/editors/space_view3d/view3d_snap.c b/source/blender/editors/space_view3d/view3d_snap.c index 266f28deb6c..c865d5ce577 100644 --- a/source/blender/editors/space_view3d/view3d_snap.c +++ b/source/blender/editors/space_view3d/view3d_snap.c @@ -33,11 +33,13 @@ #include "DNA_armature_types.h" #include "DNA_curve_types.h" #include "DNA_object_types.h" +#include "DNA_meta_types.h" #include "BLI_blenlib.h" #include "BLI_utildefines.h" #include "BLI_math.h" +#include "BKE_action.h" #include "BKE_armature.h" #include "BKE_context.h" #include "BKE_depsgraph.h" @@ -53,9 +55,11 @@ #include "RNA_access.h" #include "RNA_define.h" +#include "ED_object.h" #include "ED_transverts.h" #include "ED_keyframing.h" #include "ED_screen.h" +#include "ED_curve.h" #include "view3d_intern.h" @@ -600,40 +604,36 @@ void VIEW3D_OT_snap_cursor_to_selected(wmOperatorType *ot) /* ********************************************** */ +/* this could be exported to be a generic function + * see: calculateCenterActive */ + static bool snap_calc_active_center(bContext *C, float r_center[3]) { Object *obedit = CTX_data_edit_object(C); - Object *obact = CTX_data_active_object(C); if (obedit) { - if (obedit->type == OB_MESH) { - BMEditMesh *em = BKE_editmesh_from_object(obedit); - /* check active */ - BMEditSelection ese; - - if (BM_select_history_active_get(em->bm, &ese)) { - BM_editselection_center(&ese, r_center); - return true; - } - + if (ED_object_editmode_calc_active_center(obedit, false, r_center)) { mul_m4_v3(obedit->obmat, r_center); } - else if (obedit->type == OB_LATTICE) { - BPoint *actbp = BKE_lattice_active_point_get(obedit->data); + } + else { + Object *ob = CTX_data_active_object(C); - if (actbp) { - copy_v3_v3(r_center, actbp->vec); - mul_m4_v3(obedit->obmat, r_center); + if (ob) { + if (ob->mode & OB_MODE_POSE) { + bPoseChannel *pchan = BKE_pose_channel_active(ob); + if (pchan) { + copy_v3_v3(r_center, pchan->pose_head); + mul_m4_v3(ob->obmat, r_center); + return true; + } + } + else { + copy_v3_v3(r_center, ob->obmat[3]); return true; } } } - else { - if (obact) { - copy_v3_v3(r_center, obact->obmat[3]); - return true; - } - } return false; } |