[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