diff options
author | Campbell Barton <ideasman42@gmail.com> | 2011-12-31 07:07:14 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2011-12-31 07:07:14 +0400 |
commit | 81f5c9ed9b8193864f1c6160aed9eef9338f0d27 (patch) | |
tree | de71a52d3ed2c5a1fd47a846af5d68e1c571e606 /source/blender/editors/space_view3d/view3d_snap.c | |
parent | 50ca81154e5ead104723ba137942e92cb860ace8 (diff) | |
parent | 792452a7e53aa92361145e415491943bc91d8a6e (diff) |
svn merge ^/trunk/blender -r42991:43009
Diffstat (limited to 'source/blender/editors/space_view3d/view3d_snap.c')
-rw-r--r-- | source/blender/editors/space_view3d/view3d_snap.c | 48 |
1 files changed, 38 insertions, 10 deletions
diff --git a/source/blender/editors/space_view3d/view3d_snap.c b/source/blender/editors/space_view3d/view3d_snap.c index cf61fe92814..1f1a17ce5cd 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_scene.h" #include "BKE_tracking.h" #include "WM_api.h" @@ -815,28 +816,55 @@ 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); + MovieTracking *tracking= &clip->tracking; + MovieTrackingObject *object= tracking->objects.first; int ok= 0; - float min[3], max[3], mat[4][4], pos[3]; + float min[3], max[3], mat[4][4], pos[3], cammat[4][4]; if(!clip) return; + unit_m4(cammat); + + if(!scene->camera) + scene->camera= scene_find_camera(scene); + + if(scene->camera) + copy_m4_m4(cammat, scene->camera->obmat); + 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); + while(object) { + ListBase *tracksbase= BKE_tracking_object_tracks(tracking, object); + MovieTrackingTrack *track= tracksbase->first; + float obmat[4][4]; + + if(object->flag & TRACKING_OBJECT_CAMERA) { + copy_m4_m4(obmat, mat); + } + else { + float imat[4][4]; + + BKE_tracking_get_interpolated_camera(tracking, object, scene->r.cfra, imat); + invert_m4(imat); + + mult_m4_m4m4(obmat, cammat, imat); + } + + while(track) { + if((track->flag&TRACK_HAS_BUNDLE) && TRACK_SELECTED(track)) { + ok= 1; + mul_v3_m4v3(pos, obmat, track->bundle_pos); + DO_MINMAX(pos, min, max); + } + + track= track->next; } - track= track->next; + object= object->next; } if(ok) { |