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

Sergey Sharybin g.ulairi at gmail.com
Fri Jul 22 16:06:32 CEST 2011


Revision: 38606
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=38606
Author:   nazgul
Date:     2011-07-22 14:06:31 +0000 (Fri, 22 Jul 2011)
Log Message:
-----------
Camera tracking integration
===========================

- Damn hidden searches. Again fix in select_all operator.
  This time for inverted selection.
- Do not select "hidden" parts of marker on creation.
- Added modifier key for marker transformation:
  if alt is pressed down -- pattern/search will be moving
  relative to marker center.
- Changed behavior of mouse sliding:
  * To change marker position markers should be slided by it's center.
  * Left-top corners now used to offset pattern/search relative to
   marker center.
  * Hide mouse cursor during sliding.

Modified Paths:
--------------
    branches/soc-2011-tomato/source/blender/editors/space_clip/clip_draw.c
    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/clip_draw.c
===================================================================
--- branches/soc-2011-tomato/source/blender/editors/space_clip/clip_draw.c	2011-07-22 13:56:56 UTC (rev 38605)
+++ branches/soc-2011-tomato/source/blender/editors/space_clip/clip_draw.c	2011-07-22 14:06:31 UTC (rev 38606)
@@ -490,6 +490,7 @@
 	}
 
 	if(sc->flag&SC_SHOW_MARKER_PATTERN) {
+		float tdx2= 0, tdy2= 0;
 		/* use smaller slider for pattern area */
 		dx= 10.0f/width/sc->zoom;
 		dy= 10.0f/height/sc->zoom;
@@ -499,15 +500,33 @@
 			else glColor3fv(col);
 		}
 
+		tdx=MIN2(dx, (track->pat_max[0]-track->pat_min[0])/5);
+		tdy=MIN2(dy, (track->pat_max[1]-track->pat_min[1])/5);
+
+		if(outline) {
+			tdx+= 1.0f/sc->zoom/width;
+			tdy+= 1.0f/sc->zoom/height;
+
+			tdx2+= 1.0f/sc->zoom/width;
+			tdy2+= 1.0f/sc->zoom/height;
+		}
+
+		x= track->pat_min[0];
+		y= track->pat_max[1];
+
+		glBegin(GL_QUADS);
+			glVertex3f(x+tdx2, y-tdy2, 0);
+			glVertex3f(x-tdx, y-tdy2, 0);
+			glVertex3f(x-tdx, y+tdy, 0);
+			glVertex3f(x+tdx2, y+tdy, 0);
+		glEnd();
+
 		x= track->pat_max[0];
 		y= track->pat_min[1];
 
-		tdx=MIN2(dx, track->pat_max[0]-track->pat_min[0]);
-		tdy=MIN2(dy, track->pat_max[1]-track->pat_min[1]);
-
 		if(outline) {
-			tdx+= 2.0f/sc->zoom/width;
-			tdy+= 2.0f/sc->zoom/height;
+			tdx+= 1.0f/sc->zoom/width;
+			tdy+= 1.0f/sc->zoom/height;
 		}
 
 		glBegin(GL_TRIANGLES);

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-07-22 13:56:56 UTC (rev 38605)
+++ branches/soc-2011-tomato/source/blender/editors/space_clip/tracking_ops.c	2011-07-22 14:06:31 UTC (rev 38606)
@@ -127,13 +127,17 @@
 {
 	MovieClip *clip= ED_space_clip(sc);
 	MovieTrackingTrack *track;
-	int width, height;
+	int width, height, select= 0;
 
 	ED_space_clip_size(sc, &width, &height);
 
 	track= BKE_tracking_add_track(&clip->tracking, x, y, sc->user.framenr, width, height);
 
-	BKE_movieclip_select_track(clip, track, TRACK_AREA_ALL, 0);
+	select= TRACK_AREA_POINT;
+	if(sc->flag&SC_SHOW_MARKER_PATTERN) select|= TRACK_AREA_PAT;
+	if(sc->flag&SC_SHOW_MARKER_SEARCH) select|= TRACK_AREA_SEARCH;
+
+	BKE_movieclip_select_track(clip, track, select, 0);
 	BKE_movieclip_set_selection(clip, MCLIP_SEL_TRACK, track);
 }
 
@@ -702,10 +706,8 @@
 						break;
 					case SEL_INVERT:
 						track->flag^= SELECT;
-						if(sc->flag&SC_SHOW_MARKER_PATTERN && (track->pat_flag&SELECT))
-							track->pat_flag^= SELECT;
-						if(sc->flag&SC_SHOW_MARKER_SEARCH && (track->search_flag&SELECT))
-							track->search_flag^= SELECT;
+						if(sc->flag&SC_SHOW_MARKER_PATTERN) track->pat_flag^= SELECT;
+						if(sc->flag&SC_SHOW_MARKER_SEARCH) track->search_flag^= SELECT;
 						break;
 				}
 			}
@@ -1630,8 +1632,11 @@
 }
 /********************** slide marker opertaotr *********************/
 
+#define SLIDE_ACTION_POS	0
+#define SLIDE_ACTION_SIZE	1
+
 typedef struct {
-	int area;
+	int area, action;
 	MovieTrackingTrack *track;
 	MovieTrackingMarker *marker;
 
@@ -1644,13 +1649,14 @@
 } SlideMarkerData;
 
 static SlideMarkerData *create_slide_marker_data(SpaceClip *sc, MovieTrackingTrack *track,
-			MovieTrackingMarker *marker, wmEvent *event, int area, int width, int height)
+			MovieTrackingMarker *marker, wmEvent *event, int area, int act, int width, int height)
 {
 	SlideMarkerData *data= MEM_callocN(sizeof(SlideMarkerData), "slide marker data");
 
 	marker= BKE_tracking_ensure_marker(track, sc->user.framenr);
 
 	data->area= area;
+	data->action= act;
 	data->track= track;
 	data->marker= marker;
 
@@ -1682,7 +1688,8 @@
 }
 
 /* corner = 0: right-bottom corner,
-   corner = 1: left-top corner */
+   corner = 1: left-top inside corner
+   corner = 2: left top outside corder*/
 static int mouse_on_corner(SpaceClip *sc, MovieTrackingTrack *track, float size, float co[2], int corner,
 			float *pos, float *min, float *max, int width, int height)
 {
@@ -1703,16 +1710,52 @@
 		crn[1]= pos[1]+min[1];
 
 		inside= nco[0]>=crn[0]-dx && nco[0]<=crn[0] && nco[1]>=crn[1] && nco[1]<=crn[1]+dy;
+	} else if(corner==1) {
+		crn[0]= pos[0]+min[0];
+		crn[1]= pos[1]+max[1];
+
+		inside= nco[0]>=crn[0] && nco[0]<=crn[0]+dx && nco[1]>=crn[1]-dy && nco[1]<=crn[1];
 	} else {
 		crn[0]= pos[0]+min[0];
 		crn[1]= pos[1]+max[1];
 
-		inside= nco[0]>=crn[0] && nco[0]<=crn[0]+dx && nco[1]>=crn[1]-dy && nco[1]<=crn[1];
+		inside= nco[0]>=crn[0]-dx && nco[0]<=crn[0] && nco[1]>=crn[1] && nco[1]<=crn[1]+dy;
 	}
 
 	return inside;
 }
 
+static int mouse_on_center(SpaceClip *sc, MovieTrackingTrack *track, float size,
+                           float co[2], float *pos, int width, int height)
+{
+	float nco[2], dx, dy;
+
+	nco[0]= co[0]/width;
+	nco[1]= co[1]/height;
+
+	dx= size/width/sc->zoom;
+	dy= size/height/sc->zoom;
+
+	dx=MIN2(dx, (track->pat_max[0]-track->pat_min[0])/3);
+	dy=MIN2(dy, (track->pat_max[1]-track->pat_min[1])/3);
+
+	return nco[0]>=pos[0]-dx && nco[0]<=pos[0]+dx && nco[1]>=pos[1]-dy && nco[1]<=pos[1]+dy;
+}
+
+static void hide_cursor(bContext *C)
+{
+	wmWindow *win= CTX_wm_window(C);
+
+	WM_cursor_set(win, CURSOR_NONE);
+}
+
+static void show_cursor(bContext *C)
+{
+	wmWindow *win= CTX_wm_window(C);
+
+	WM_cursor_set(win, CURSOR_STD);
+}
+
 static int slide_marker_invoke(bContext *C, wmOperator *op, wmEvent *event)
 {
 	SpaceClip *sc= CTX_wm_space_clip(C);
@@ -1734,19 +1777,25 @@
 			MovieTrackingMarker *marker= BKE_tracking_get_marker(track, sc->user.framenr);
 
 			if(marker && (marker->flag&MARKER_DISABLED)==0) {
-				if(sc->flag&SC_SHOW_MARKER_SEARCH) {
+				if(mouse_on_center(sc, track, 15.0f, co, marker->pos, width, height))
+					op->customdata= create_slide_marker_data(sc, track, marker, event, TRACK_AREA_POINT, SLIDE_ACTION_POS, width, height);
+
+				if(!op->customdata && sc->flag&SC_SHOW_MARKER_SEARCH) {
 					if(mouse_on_corner(sc, track, 15.0f, co, 1, marker->pos, track->search_min, track->search_max, width, height))
-						op->customdata= create_slide_marker_data(sc, track, marker, event, TRACK_AREA_POINT, width, height);
+						op->customdata= create_slide_marker_data(sc, track, marker, event, TRACK_AREA_SEARCH, SLIDE_ACTION_POS, width, height);
+					else if(mouse_on_corner(sc, track, 15.0f, co, 0, marker->pos, track->search_min, track->search_max, width, height))
+						op->customdata= create_slide_marker_data(sc, track, marker, event, TRACK_AREA_SEARCH, SLIDE_ACTION_SIZE, width, height);
+				}
 
-					if(mouse_on_corner(sc, track, 15.0f, co, 0, marker->pos, track->search_min, track->search_max, width, height))
-						op->customdata= create_slide_marker_data(sc, track, marker, event, TRACK_AREA_SEARCH, width, height);
+				if(!op->customdata && sc->flag&SC_SHOW_MARKER_PATTERN) {
+					if(mouse_on_corner(sc, track, 10.0f, co, 2, marker->pos, track->pat_min, track->pat_max, width, height))
+						op->customdata= create_slide_marker_data(sc, track, marker, event, TRACK_AREA_PAT, SLIDE_ACTION_POS, width, height);
+					else if(mouse_on_corner(sc, track, 10.0f, co, 0, marker->pos, track->pat_min, track->pat_max, width, height))
+						op->customdata= create_slide_marker_data(sc, track, marker, event, TRACK_AREA_PAT, SLIDE_ACTION_SIZE, width, height);
 				}
 
-				if(sc->flag&SC_SHOW_MARKER_PATTERN)
-					if(mouse_on_corner(sc, track, 10.0f, co, 0, marker->pos, track->pat_min, track->pat_max, width, height))
-						op->customdata= create_slide_marker_data(sc, track, marker, event, TRACK_AREA_PAT, width, height);
-
 				if(op->customdata) {
+					hide_cursor(C);
 					WM_event_add_modal_handler(C, op);
 
 					return OPERATOR_RUNNING_MODAL;
@@ -1798,22 +1847,33 @@
 
 				data->marker->flag&= ~MARKER_TRACKED;
 			} else {
-				data->min[0]= data->smin[0]-dx;
-				data->max[0]= data->smax[0]+dx;
+				if(data->action==SLIDE_ACTION_SIZE) {
+					data->min[0]= data->smin[0]-dx;
+					data->max[0]= data->smax[0]+dx;
 
-				data->min[1]= data->smin[1]+dy;
-				data->max[1]= data->smax[1]-dy;
+					data->min[1]= data->smin[1]+dy;
+					data->max[1]= data->smax[1]-dy;
 
-				if(data->lock) {
-					float h= (data->max[0]-data->min[0])*data->width/data->height;
+					if(data->lock) {
+						float h= (data->max[0]-data->min[0])*data->width/data->height;
 
-					data->min[1]= data->spos[1]-h/2;
-					data->max[1]= data->spos[1]+h/2;
-				}
+						data->min[1]= data->spos[1]-h/2;
+						data->max[1]= data->spos[1]+h/2;
+					}
 
 
-				if(data->area==TRACK_AREA_SEARCH) BKE_tracking_clamp_track(data->track, CLAMP_SEARCH_DIM);
-				else BKE_tracking_clamp_track(data->track, CLAMP_PAT_DIM);
+					if(data->area==TRACK_AREA_SEARCH) BKE_tracking_clamp_track(data->track, CLAMP_SEARCH_DIM);
+					else BKE_tracking_clamp_track(data->track, CLAMP_PAT_DIM);
+				} else {
+					data->min[0]= data->smin[0]+dx;
+					data->max[0]= data->smax[0]+dx;
+
+					data->min[1]= data->smin[1]+dy;
+					data->max[1]= data->smax[1]+dy;
+
+					if(data->area==TRACK_AREA_SEARCH) BKE_tracking_clamp_track(data->track, CLAMP_SEARCH_POS);
+					else BKE_tracking_clamp_track(data->track, CLAMP_PAT_POS);
+				}
 			}
 
 			WM_event_add_notifier(C, NC_MOVIECLIP|NA_EDITED, NULL);
@@ -1824,6 +1884,8 @@
 			if(event->val==KM_RELEASE) {
 				MEM_freeN(op->customdata);
 
+				show_cursor(C);
+
 				return OPERATOR_FINISHED;
 			}
 
@@ -1842,6 +1904,10 @@
 				data->max[1]= data->smax[1];
 			}
 
+			MEM_freeN(op->customdata);
+
+			show_cursor(C);
+
 			WM_event_add_notifier(C, NC_MOVIECLIP|NA_EDITED, NULL);
 
 			return OPERATOR_CANCELLED;

Modified: branches/soc-2011-tomato/source/blender/editors/transform/transform.c
===================================================================
--- branches/soc-2011-tomato/source/blender/editors/transform/transform.c	2011-07-22 13:56:56 UTC (rev 38605)
+++ branches/soc-2011-tomato/source/blender/editors/transform/transform.c	2011-07-22 14:06:31 UTC (rev 38606)
@@ -806,6 +806,15 @@
 			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
@@ -1098,6 +1107,14 @@
 				t->redraw |= TREDRAW_HARD;
 			}
 			break;
+		case LEFTALTKEY:
+			if(t->options&CTX_MOVIECLIP) {
+				restoreTransObjects(t);
+

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list