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

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2015-02-23 15:05:54 +0300
committerCampbell Barton <ideasman42@gmail.com>2015-02-23 15:05:54 +0300
commit34479d8b63c9ef04ec14d99647f0c46b676b6ca6 (patch)
treef4d5cacdd73000c2917a60ea7b3891294e28c9d4 /source/blender/editors/space_view3d/view3d_snap.c
parent17b847910169d03051959c77992217936f6a8167 (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.c44
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;
}