[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [38782] branches/soc-2011-tomato/source/ blender/editors: Camera tracking integration

Sergey Sharybin g.ulairi at gmail.com
Thu Jul 28 13:05:28 CEST 2011


Revision: 38782
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=38782
Author:   nazgul
Date:     2011-07-28 11:05:28 +0000 (Thu, 28 Jul 2011)
Log Message:
-----------
Camera tracking integration
===========================

- Small code cleanup.
- Added missed notifier for animation play start.
- Fixed bundle colorcode detection (it didn't use track
  offset to determine distance between original track
  position and bundle projection).
- Changed behavior of alt-g grabbing. Now it defines offset.

Modified Paths:
--------------
    branches/soc-2011-tomato/source/blender/editors/space_clip/clip_draw.c
    branches/soc-2011-tomato/source/blender/editors/space_clip/space_clip.c
    branches/soc-2011-tomato/source/blender/editors/transform/transform_conversions.c

Modified: branches/soc-2011-tomato/source/blender/editors/space_clip/clip_draw.c
===================================================================
--- branches/soc-2011-tomato/source/blender/editors/space_clip/clip_draw.c	2011-07-28 11:02:37 UTC (rev 38781)
+++ branches/soc-2011-tomato/source/blender/editors/space_clip/clip_draw.c	2011-07-28 11:05:28 UTC (rev 38782)
@@ -835,8 +835,8 @@
 
 					BKE_tracking_apply_intrinsics(tracking, pos, width, height, pos);
 
-					vec[0]= marker->pos[0]*width;
-					vec[1]= marker->pos[1]*height;
+					vec[0]= (marker->pos[0]+track->offset[0])*width;
+					vec[1]= (marker->pos[1]+track->offset[1])*height;
 					sub_v2_v2(vec, pos);
 
 					if(len_v2(vec)<3) glColor3f(0.0f, 1.0f, 0.0f);

Modified: branches/soc-2011-tomato/source/blender/editors/space_clip/space_clip.c
===================================================================
--- branches/soc-2011-tomato/source/blender/editors/space_clip/space_clip.c	2011-07-28 11:02:37 UTC (rev 38781)
+++ branches/soc-2011-tomato/source/blender/editors/space_clip/space_clip.c	2011-07-28 11:05:28 UTC (rev 38782)
@@ -158,10 +158,6 @@
 
 static void clip_listener(ScrArea *sa, wmNotifier *wmn)
 {
-	SpaceClip *sc= sa->spacedata.first;
-
-	(void)sc;
-
 	/* context changes */
 	switch(wmn->category) {
 		case NC_SCENE:
@@ -202,6 +198,11 @@
 					break;
 			}
 			break;
+		 case NC_SCREEN:
+			if(wmn->data==ND_ANIMPLAY) {
+				ED_area_tag_redraw(sa);
+			}
+			break;
 		case NC_SPACE:
 			if(wmn->data==ND_SPACE_CLIP) {
 				clip_scopes_tag_refresh(sa);

Modified: branches/soc-2011-tomato/source/blender/editors/transform/transform_conversions.c
===================================================================
--- branches/soc-2011-tomato/source/blender/editors/transform/transform_conversions.c	2011-07-28 11:02:37 UTC (rev 38781)
+++ branches/soc-2011-tomato/source/blender/editors/transform/transform_conversions.c	2011-07-28 11:05:28 UTC (rev 38782)
@@ -5225,20 +5225,47 @@
 
 /* *** CLIP EDITOR *** */
 
-static void markerToTransDataInit(TransData *td, TransData2D *td2d, float *loc, float *rel)
+typedef struct TransDataTracking {
+	int area;
+	float *relative, *loc;
+	float soffset[2], srelative[2];
+	float offset[2];
+} TransDataTracking;
+
+static void markerToTransDataInit(TransData *td, TransData2D *td2d,
+			TransDataTracking *tdt, int area, float *loc, float *rel, float *off)
 {
-	td2d->loc[0] = loc[0]; /* hold original location */
-	td2d->loc[1] = loc[1];
+	int anchor = area==TRACK_AREA_POINT && off;
+
+	if(anchor) {
+		td2d->loc[0] = rel[0]; /* hold original location */
+		td2d->loc[1] = rel[1];
+
+		tdt->loc= loc;
+		copy_v2_v2(tdt->offset, rel);
+		td2d->loc2d = tdt->offset; /* current location */
+	} else {
+		td2d->loc[0] = loc[0]; /* hold original location */
+		td2d->loc[1] = loc[1];
+
+		td2d->loc2d = loc; /* current location */
+	}
 	td2d->loc[2] = 0.0f;
 
-	if(rel) {	/* XXX: could it be nicer? */
-		td2d->loc[0]+= rel[0];
-		td2d->loc[1]+= rel[1];
+	tdt->relative= rel;
+	tdt->area= area;
 
-		td->extra= rel;
+	if(rel) {
+		if(!anchor) {
+			td2d->loc[0]+= rel[0];
+			td2d->loc[1]+= rel[1];
+		}
+
+		copy_v2_v2(tdt->srelative, rel);
 	}
 
-	td2d->loc2d = loc; /* current location */
+	if(off)
+		copy_v2_v2(tdt->soffset, off);
 
 	td->flag = 0;
 	td->loc = td2d->loc;
@@ -5257,7 +5284,8 @@
 	unit_m3(td->smtx);
 }
 
-static void trackToTransData(SpaceClip *sc, TransData *td, TransData2D *td2d, MovieTrackingTrack *track)
+static void trackToTransData(SpaceClip *sc, TransData *td, TransData2D *td2d,
+			TransDataTracking *tdt, MovieTrackingTrack *track)
 {
 	MovieTrackingMarker *marker= BKE_tracking_ensure_marker(track, sc->user.framenr);
 
@@ -5265,17 +5293,19 @@
 
 	marker->flag&= ~(MARKER_DISABLED|MARKER_TRACKED);
 
+	markerToTransDataInit(td++, td2d++, tdt++, TRACK_AREA_POINT, track->offset, marker->pos, track->offset);
+
 	if(track->flag&SELECT)
-		markerToTransDataInit(td++, td2d++, marker->pos, NULL);
+		markerToTransDataInit(td++, td2d++, tdt++, TRACK_AREA_POINT, marker->pos, NULL, NULL);
 
 	if(track->pat_flag&SELECT) {
-		markerToTransDataInit(td++, td2d++, track->pat_min, marker->pos);
-		markerToTransDataInit(td++, td2d++, track->pat_max, marker->pos);
+		markerToTransDataInit(td++, td2d++, tdt++, TRACK_AREA_PAT, track->pat_min, marker->pos, NULL);
+		markerToTransDataInit(td++, td2d++, tdt++, TRACK_AREA_PAT, track->pat_max, marker->pos, NULL);
 	}
 
 	if(track->search_flag&SELECT) {
-		markerToTransDataInit(td++, td2d++, track->search_min, marker->pos);
-		markerToTransDataInit(td++, td2d++, track->search_max, marker->pos);
+		markerToTransDataInit(td++, td2d++, tdt++, TRACK_AREA_SEARCH, track->search_min, marker->pos, NULL);
+		markerToTransDataInit(td++, td2d++, tdt++, TRACK_AREA_SEARCH, track->search_max, marker->pos, NULL);
 	}
 }
 
@@ -5287,6 +5317,7 @@
 	MovieClip *clip = ED_space_clip(sc);
 	MovieTrackingTrack *track;
 	MovieTrackingMarker *marker;
+	TransDataTracking *tdt;
 	int framenr = sc->user.framenr;
 
 	if(clip && !BKE_movieclip_has_frame(clip, &sc->user)) {
@@ -5303,6 +5334,8 @@
 			marker= BKE_tracking_get_marker(track, framenr);
 
 			if(marker) {
+				t->total++;	/* offset */
+
 				if(track->flag&SELECT) t->total++;
 				if(track->pat_flag&SELECT) t->total+= 2;
 				if(track->search_flag&SELECT) t->total+= 2;
@@ -5312,8 +5345,12 @@
 		track = track->next;
 	}
 
+	if(t->total==0)
+		return;
+
 	td = t->data = MEM_callocN(t->total*sizeof(TransData), "TransTracking TransData");
 	td2d = t->data2d = MEM_callocN(t->total*sizeof(TransData2D), "TransTracking TransData2D");
+	tdt = t->customData = MEM_callocN(t->total*sizeof(TransDataTracking), "TransTracking TransDataTracking");
 
 	/* create actual data */
 	track = clip->tracking.tracks.first;
@@ -5322,20 +5359,26 @@
 			marker= BKE_tracking_get_marker(track, framenr);
 
 			if(marker) {
-				trackToTransData(sc, td, td2d, track);
+				trackToTransData(sc, td, td2d, tdt, track);
 
+				td++;
+				td2d++;
+				tdt++;
+
 				if((marker->flag&MARKER_DISABLED)==0) {
-					if(track->flag&SELECT) {td++; td2d++;}
-					if(track->pat_flag&SELECT) {td+= 2; td2d+= 2;}
+					if(track->flag&SELECT) {td++; td2d++; tdt+=2;}
+					if(track->pat_flag&SELECT) {td+= 2; td2d+= 2;tdt+=2;}
 				}
 
 				if(track->search_flag&SELECT) {
 					td+= 2;
 					td2d+= 2;
+					tdt+= 2;
 
 					if(marker->flag&MARKER_DISABLED) {
 						td+= 3;
 						td2d+= 3;
+						tdt+= 3;
 					}
 				};
 			}
@@ -5349,18 +5392,29 @@
 {
 	TransData *td;
 	TransData2D *td2d;
+	TransDataTracking *tdt;
 	int a;
 
 	/* flush to 2d vector from internally used 3d vector */
-	for(a=0, td= t->data, td2d= t->data2d; a<t->total; a++, td2d++, td++) {
-		if(t->flag&T_RELATIVE_POSITION && !td->extra)
-			continue;
+	for(a=0, td= t->data, td2d= t->data2d, tdt= t->customData; a<t->total; a++, td2d++, td++, tdt++) {
+		if(t->flag&T_RELATIVE_POSITION) {
+			if(tdt->area==TRACK_AREA_POINT && tdt->relative) {
+				float d[2];
 
-		td2d->loc2d[0] = td2d->loc[0];
-		td2d->loc2d[1] = td2d->loc[1];
+				sub_v2_v2v2(d, td2d->loc, tdt->soffset);
+				sub_v2_v2(d, tdt->srelative);
+				sub_v2_v2v2(td2d->loc2d, tdt->soffset, d);
+				negate_v2_v2(tdt->loc, d);
+			}
+		}
 
-		if(td->extra)
-			sub_v2_v2(td2d->loc2d, td->extra);
+		if(tdt->area!=TRACK_AREA_POINT || tdt->relative==0) {
+			td2d->loc2d[0] = td2d->loc[0];
+			td2d->loc2d[1] = td2d->loc[1];
+
+			if(tdt->relative)
+				sub_v2_v2(td2d->loc2d, tdt->relative);
+		}
 	}
 }
 




More information about the Bf-blender-cvs mailing list