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

Sergey Sharybin g.ulairi at gmail.com
Thu Aug 18 19:47:13 CEST 2011


Revision: 39531
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=39531
Author:   nazgul
Date:     2011-08-18 17:47:13 +0000 (Thu, 18 Aug 2011)
Log Message:
-----------
Camera tracking integration
===========================

Change behavior of alternate transformation/marker sliding:

- Update all markers from track position when sliding marker by
  it's left-top corner of pattern.
  This prevents confusing when adding offset to already tracker marker.
- The same change was done to translation tool.
- To switch to "offset" mode of translation tool now you should use
  G-key (hit it during translation). Alt key wasn't so good idea
  because it's quite common hotkey in linux to move windows.

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

Modified: branches/soc-2011-tomato/source/blender/editors/space_clip/tracking_ops.c
===================================================================
--- branches/soc-2011-tomato/source/blender/editors/space_clip/tracking_ops.c	2011-08-18 17:25:54 UTC (rev 39530)
+++ branches/soc-2011-tomato/source/blender/editors/space_clip/tracking_ops.c	2011-08-18 17:47:13 UTC (rev 39531)
@@ -297,6 +297,7 @@
 	int width, height;
 	float *min, *max, *pos, *offset;
 	float smin[2], smax[2], spos[2], soff[2];
+	float (*smarkers)[2];
 
 	int lock, accurate;
 } SlideMarkerData;
@@ -323,10 +324,16 @@
 			data->min= track->pat_min;
 			data->max= track->pat_max;
 		} else {
+			int a;
+
 			data->pos= marker->pos;
 			data->offset= track->offset;
-			copy_v2_v2(data->spos, marker->pos);
+
 			copy_v2_v2(data->soff, track->offset);
+
+			data->smarkers= MEM_callocN(sizeof(*data->smarkers)*track->markersnr, "slide marekrs");
+			for(a= 0; a<track->markersnr; a++)
+				copy_v2_v2(data->smarkers[a], track->markers[a].pos);
 		}
 	} else if(area==TRACK_AREA_SEARCH) {
 		data->min= track->search_min;
@@ -500,10 +507,23 @@
 		if(data->action==SLIDE_ACTION_SIZE) {
 			copy_v2_v2(data->min, data->smin);
 			copy_v2_v2(data->max, data->smax);
+		} else {
+			int a;
+
+			for(a= 0; a<data->track->markersnr; a++)
+				copy_v2_v2(data->track->markers[a].pos, data->smarkers[a]);
+
+			copy_v2_v2(data->offset, data->soff);
 		}
 	}
 }
 
+static void free_slide_data(SlideMarkerData *data)
+{
+	if(data->smarkers) MEM_freeN(data->smarkers);
+	MEM_freeN(data);
+}
+
 static int slide_marker_modal(bContext *C, wmOperator *op, wmEvent *event)
 {
 	SpaceClip *sc= CTX_wm_space_clip(C);
@@ -568,9 +588,11 @@
 						add_v2_v2v2(data->min, data->smin, d);
 						add_v2_v2v2(data->max, data->smax, d);
 					} else {
-						add_v2_v2v2(data->pos, data->spos, d);
-						add_v2_v2v2(data->pos, data->spos, d);
+						int a;
 
+						for(a= 0; a<data->track->markersnr; a++)
+							add_v2_v2v2(data->track->markers[a].pos, data->smarkers[a], d);
+
 						sub_v2_v2v2(data->offset, data->soff, d);
 					}
 
@@ -585,7 +607,7 @@
 
 		case LEFTMOUSE:
 			if(event->val==KM_RELEASE) {
-				MEM_freeN(op->customdata);
+				free_slide_data(op->customdata);
 
 				show_cursor(C);
 
@@ -597,7 +619,7 @@
 		case ESCKEY:
 			cancel_mouse_slide(op->customdata);
 
-			MEM_freeN(op->customdata);
+			free_slide_data(op->customdata);
 
 			show_cursor(C);
 

Modified: branches/soc-2011-tomato/source/blender/editors/transform/transform.c
===================================================================
--- branches/soc-2011-tomato/source/blender/editors/transform/transform.c	2011-08-18 17:25:54 UTC (rev 39530)
+++ branches/soc-2011-tomato/source/blender/editors/transform/transform.c	2011-08-18 17:47:13 UTC (rev 39531)
@@ -625,6 +625,14 @@
 					initSnapping(t, NULL); // need to reinit after mode change
 					t->redraw |= TREDRAW_HARD;
 				}
+				else if(t->mode == TFM_TRANSLATION) {
+					if(t->options&CTX_MOVIECLIP) {
+						restoreTransObjects(t);
+
+						t->flag^= T_ALT_TRANSFORM;
+						t->redraw |= TREDRAW_HARD;
+					}
+				}
 				break;
 			case TFM_MODAL_ROTATE:
 				/* only switch when... */
@@ -806,15 +814,6 @@
 			t->redraw |= TREDRAW_HARD;
 			break;
 
-		case LEFTALTKEY:
-			if(t->options&CTX_MOVIECLIP) {
-				restoreTransObjects(t);
-
-				t->flag|= T_RELATIVE_POSITION;
-				t->redraw |= TREDRAW_HARD;
-			}
-			break;
-
 		case SPACEKEY:
 			if ((t->spacetype==SPACE_VIEW3D) && event->alt) {
 #if 0 // TRANSFORM_FIX_ME
@@ -1067,14 +1066,6 @@
 				t->redraw |= TREDRAW_HARD;
 			}
 			break;
-		case LEFTALTKEY:
-			if(t->options&CTX_MOVIECLIP) {
-				restoreTransObjects(t);
-
-				t->flag&= ~T_RELATIVE_POSITION;
-				t->redraw |= TREDRAW_HARD;
-			}
-			break;
 //		case LEFTMOUSE:
 //		case RIGHTMOUSE:
 //			if(WM_modal_tweak_exit(event, t->event_type))

Modified: branches/soc-2011-tomato/source/blender/editors/transform/transform.h
===================================================================
--- branches/soc-2011-tomato/source/blender/editors/transform/transform.h	2011-08-18 17:25:54 UTC (rev 39530)
+++ branches/soc-2011-tomato/source/blender/editors/transform/transform.h	2011-08-18 17:47:13 UTC (rev 39531)
@@ -384,8 +384,8 @@
 
 #define T_RELEASE_CONFIRM	(1 << 23)
 
-	/* relative position changes. used to add offset to tracking markers */
-#define T_RELATIVE_POSITION	(1 << 24)
+	/* alternative transformation. used to add offset to tracking markers */
+#define T_ALT_TRANSFORM		(1 << 24)
 
 /* TransInfo->modifiers */
 #define	MOD_CONSTRAINT_SELECT	0x01

Modified: branches/soc-2011-tomato/source/blender/editors/transform/transform_conversions.c
===================================================================
--- branches/soc-2011-tomato/source/blender/editors/transform/transform_conversions.c	2011-08-18 17:25:54 UTC (rev 39530)
+++ branches/soc-2011-tomato/source/blender/editors/transform/transform_conversions.c	2011-08-18 17:47:13 UTC (rev 39531)
@@ -5230,10 +5230,14 @@
 	float *relative, *loc;
 	float soffset[2], srelative[2];
 	float offset[2];
+
+	float (*smarkers)[2];
+	int markersnr;
+	MovieTrackingMarker *markers;
 } TransDataTracking;
 
 static void markerToTransDataInit(TransData *td, TransData2D *td2d,
-			TransDataTracking *tdt, int area, float *loc, float *rel, float *off)
+			TransDataTracking *tdt, MovieTrackingTrack *track, int area, float *loc, float *rel, float *off)
 {
 	int anchor = area==TRACK_AREA_POINT && off;
 
@@ -5242,8 +5246,7 @@
 		td2d->loc[1] = rel[1];
 
 		tdt->loc= loc;
-		copy_v2_v2(tdt->offset, rel);
-		td2d->loc2d = tdt->offset; /* current location */
+		td2d->loc2d = loc; /* current location */
 	} else {
 		td2d->loc[0] = loc[0]; /* hold original location */
 		td2d->loc[1] = loc[1];
@@ -5255,6 +5258,9 @@
 	tdt->relative= rel;
 	tdt->area= area;
 
+	tdt->markersnr= track->markersnr;
+	tdt->markers= track->markers;
+
 	if(rel) {
 		if(!anchor) {
 			td2d->loc[0]+= rel[0];
@@ -5293,22 +5299,32 @@
 
 	marker->flag&= ~(MARKER_DISABLED|MARKER_TRACKED);
 
-	markerToTransDataInit(td++, td2d++, tdt++, TRACK_AREA_POINT, track->offset, marker->pos, track->offset);
+	markerToTransDataInit(td++, td2d++, tdt++, track, TRACK_AREA_POINT, track->offset, marker->pos, track->offset);
 
 	if(track->flag&SELECT)
-		markerToTransDataInit(td++, td2d++, tdt++, TRACK_AREA_POINT, marker->pos, NULL, NULL);
+		markerToTransDataInit(td++, td2d++, tdt++, track, TRACK_AREA_POINT, marker->pos, NULL, NULL);
 
 	if(track->pat_flag&SELECT) {
-		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);
+		markerToTransDataInit(td++, td2d++, tdt++, track, TRACK_AREA_PAT, track->pat_min, marker->pos, NULL);
+		markerToTransDataInit(td++, td2d++, tdt++, track, TRACK_AREA_PAT, track->pat_max, marker->pos, NULL);
 	}
 
 	if(track->search_flag&SELECT) {
-		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);
+		markerToTransDataInit(td++, td2d++, tdt++, track, TRACK_AREA_SEARCH, track->search_min, marker->pos, NULL);
+		markerToTransDataInit(td++, td2d++, tdt++, track, TRACK_AREA_SEARCH, track->search_max, marker->pos, NULL);
 	}
 }
 
+static void transDataTrackingFree(TransInfo *t)
+{
+	TransDataTracking *tdt= t->customData;
+
+	if(tdt) {
+		if(tdt->smarkers) MEM_freeN(tdt->smarkers);
+		MEM_freeN(tdt);
+	}
+}
+
 static void createTransTrackingData(bContext *C, TransInfo *t)
 {
 	TransData *td;
@@ -5352,6 +5368,8 @@
 	td2d = t->data2d = MEM_callocN(t->total*sizeof(TransData2D), "TransTracking TransData2D");
 	tdt = t->customData = MEM_callocN(t->total*sizeof(TransDataTracking), "TransTracking TransDataTracking");
 
+	t->customFree= transDataTrackingFree;
+
 	/* create actual data */
 	track = clip->tracking.tracks.first;
 	while(track) {
@@ -5360,6 +5378,7 @@
 
 			trackToTransData(sc, td, td2d, tdt, track);
 
+			/* offset */
 			td++;
 			td2d++;
 			tdt++;
@@ -5395,14 +5414,25 @@
 
 	/* flush to 2d vector from internally used 3d vector */
 	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(t->flag&T_ALT_TRANSFORM) {
 			if(tdt->area==TRACK_AREA_POINT && tdt->relative) {
-				float d[2];
+				float d[2], d2[2];
 
+				if(!tdt->smarkers) {
+					tdt->smarkers= MEM_callocN(sizeof(*tdt->smarkers)*tdt->markersnr, "flushTransTracking markers");
+					for(a= 0; a<tdt->markersnr; a++)
+						copy_v2_v2(tdt->smarkers[a], tdt->markers[a].pos);
+				}
+
 				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);
+
+				sub_v2_v2v2(d2, td2d->loc, tdt->srelative);
+
+				for(a= 0; a<tdt->markersnr; a++)
+					add_v2_v2v2(tdt->markers[a].pos, tdt->smarkers[a], d2);
+
+				negate_v2_v2(td2d->loc2d, d);
 			}
 		}
 




More information about the Bf-blender-cvs mailing list