[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