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>2011-12-31 07:07:14 +0400
committerCampbell Barton <ideasman42@gmail.com>2011-12-31 07:07:14 +0400
commit81f5c9ed9b8193864f1c6160aed9eef9338f0d27 (patch)
treede71a52d3ed2c5a1fd47a846af5d68e1c571e606 /source/blender/editors/space_view3d/view3d_snap.c
parent50ca81154e5ead104723ba137942e92cb860ace8 (diff)
parent792452a7e53aa92361145e415491943bc91d8a6e (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.c48
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) {