diff options
author | Campbell Barton <ideasman42@gmail.com> | 2011-11-08 06:57:28 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2011-11-08 06:57:28 +0400 |
commit | cb890a49fbd653c71d2fe639265a1a562136113f (patch) | |
tree | 10ddd1f7198c85408f83794fe560caa9512e2a2e /source/blender/editors/space_view3d/view3d_snap.c | |
parent | aea95c78606a99b0fa9c4c29c9e922e4a03f2a69 (diff) | |
parent | f086201518b85f6dd2ae60ae37dc14f1d1406c01 (diff) |
svn merge ^/trunk/blender -r41602:41638 .
Diffstat (limited to 'source/blender/editors/space_view3d/view3d_snap.c')
-rw-r--r-- | source/blender/editors/space_view3d/view3d_snap.c | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/source/blender/editors/space_view3d/view3d_snap.c b/source/blender/editors/space_view3d/view3d_snap.c index ed5c480643c..582ee56961a 100644 --- a/source/blender/editors/space_view3d/view3d_snap.c +++ b/source/blender/editors/space_view3d/view3d_snap.c @@ -57,6 +57,7 @@ #include "BKE_object.h" #include "BKE_tessmesh.h" #include "BKE_DerivedMesh.h" +#include "BKE_tracking.h" #include "WM_api.h" #include "WM_types.h" @@ -804,6 +805,37 @@ void VIEW3D_OT_snap_cursor_to_grid(wmOperatorType *ot) /* **************************************************** */ +static void bundle_midpoint(Scene *scene, Object *ob, float vec[3]) +{ + MovieTrackingTrack *track; + MovieClip *clip= object_get_movieclip(scene, ob, 0); + int ok= 0; + float min[3], max[3], mat[4][4], pos[3]; + + if(!clip) + return; + + BKE_get_tracking_mat(scene, ob, mat); + + INIT_MINMAX(min, max); + + track= clip->tracking.tracks.first; + while(track) { + int selected= (track->flag&SELECT) || (track->pat_flag&SELECT) || (track->search_flag&SELECT); + if((track->flag&TRACK_HAS_BUNDLE) && selected) { + ok= 1; + mul_v3_m4v3(pos, mat, track->bundle_pos); + DO_MINMAX(pos, min, max); + } + + track= track->next; + } + + if(ok) { + interp_v3_v3v3(vec, min, max, 0.5); + } +} + static int snap_curs_to_sel(bContext *C, wmOperator *UNUSED(op)) { Object *obedit= CTX_data_edit_object(C); @@ -868,6 +900,15 @@ static int snap_curs_to_sel(bContext *C, wmOperator *UNUSED(op)) else { CTX_DATA_BEGIN(C, Object*, ob, selected_objects) { copy_v3_v3(vec, ob->obmat[3]); + + /* special case for camera -- snap to bundles */ + if(ob->type==OB_CAMERA) { + /* snap to bundles should happen only when bundles are visible */ + if(v3d->flag2&V3D_SHOW_RECONSTRUCTION) { + bundle_midpoint(scene, ob, vec); + } + } + add_v3_v3(centroid, vec); DO_MINMAX(vec, min, max); count++; |