Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(704)

Unified Diff: source/blender/editors/space_view3d/view3d_snap.c

Issue 5285047: Camera tracking integration Base URL: https://svn.blender.org/svnroot/bf-blender/trunk/blender/
Patch Set: Updated to tomato rev41255 Created 12 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Please Sign in to add in-line comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: source/blender/editors/space_view3d/view3d_snap.c
===================================================================
--- source/blender/editors/space_view3d/view3d_snap.c (revision 41254)
+++ source/blender/editors/space_view3d/view3d_snap.c (working copy)
@@ -55,6 +55,7 @@
#include "BKE_lattice.h"
#include "BKE_main.h"
#include "BKE_object.h"
+#include "BKE_tracking.h"
#include "WM_api.h"
#include "WM_types.h"
@@ -753,6 +754,37 @@
/* **************************************************** */
+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);
@@ -817,6 +849,15 @@
else {
CTX_DATA_BEGIN(C, Object*, ob, selected_objects) {
VECCOPY(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++;

Powered by Google App Engine
RSS Feeds Recent Issues | This issue
This is Rietveld f62528b