[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [38892] branches/soc-2011-tomato/source/ blender/editors: Camera tracking integration
Sergey Sharybin
g.ulairi at gmail.com
Mon Aug 1 10:29:18 CEST 2011
Revision: 38892
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=38892
Author: nazgul
Date: 2011-08-01 08:29:17 +0000 (Mon, 01 Aug 2011)
Log Message:
-----------
Camera tracking integration
===========================
- If "Zoom To Mouse" is enabled in user preferences then
zooming would happen to mouse position in clip editor.
- Fixed 1px padding from shot boundary rectangle.
- Allow for some operators grab cursor.
- Enlarge marker anchor sliding area and make it prioritized
on pattern/search slide zones,
Modified Paths:
--------------
branches/soc-2011-tomato/source/blender/editors/include/ED_clip.h
branches/soc-2011-tomato/source/blender/editors/space_clip/clip_draw.c
branches/soc-2011-tomato/source/blender/editors/space_clip/clip_editor.c
branches/soc-2011-tomato/source/blender/editors/space_clip/clip_ops.c
branches/soc-2011-tomato/source/blender/editors/space_clip/tracking_ops.c
Modified: branches/soc-2011-tomato/source/blender/editors/include/ED_clip.h
===================================================================
--- branches/soc-2011-tomato/source/blender/editors/include/ED_clip.h 2011-08-01 06:55:05 UTC (rev 38891)
+++ branches/soc-2011-tomato/source/blender/editors/include/ED_clip.h 2011-08-01 08:29:17 UTC (rev 38892)
@@ -39,6 +39,7 @@
struct Main;
struct MovieClip;
struct SpaceClip;
+struct wmEvent;
/* clip_editor.c */
void ED_space_clip_set(struct bContext *C, struct SpaceClip *sc, struct MovieClip *clip);
@@ -54,6 +55,9 @@
void ED_clip_update_frame(const struct Main *mainp, int cfra);
void ED_clip_view_selection(struct SpaceClip *sc, struct ARegion *ar, int fit);
+void ED_clip_point_stable_pos(struct bContext *C, float x, float y, float *xr, float *yr);
+void ED_clip_mouse_pos(struct bContext *C, struct wmEvent *event, float co[2]);
+
/* clip_ops.c */
void ED_operatormacros_clip(void);
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-08-01 06:55:05 UTC (rev 38891)
+++ branches/soc-2011-tomato/source/blender/editors/space_clip/clip_draw.c 2011-08-01 08:29:17 UTC (rev 38892)
@@ -178,10 +178,10 @@
glMultMatrixf(sc->stabmat);
glBegin(GL_LINE_LOOP);
- glVertex2f(-1.f, -1.f);
- glVertex2f(ibuf->x+1.f, -1.f);
- glVertex2f(ibuf->x+1.f, ibuf->y+1.f);
- glVertex2f(-1.f, ibuf->y+1.f);
+ glVertex2f(0.f, 0.f);
+ glVertex2f(ibuf->x, 0.f);
+ glVertex2f(ibuf->x, ibuf->y);
+ glVertex2f(0.f, ibuf->y);
glEnd();
glPopMatrix();
Modified: branches/soc-2011-tomato/source/blender/editors/space_clip/clip_editor.c
===================================================================
--- branches/soc-2011-tomato/source/blender/editors/space_clip/clip_editor.c 2011-08-01 06:55:05 UTC (rev 38891)
+++ branches/soc-2011-tomato/source/blender/editors/space_clip/clip_editor.c 2011-08-01 08:29:17 UTC (rev 38892)
@@ -53,6 +53,8 @@
#include "WM_api.h"
#include "WM_types.h"
+#include "UI_view2d.h"
+
void ED_space_clip_set(bContext *C, SpaceClip *sc, MovieClip *clip)
{
sc->clip= clip;
@@ -234,3 +236,30 @@
sc->zoom= newzoom;
}
}
+
+void ED_clip_point_stable_pos(bContext *C, float x, float y, float *xr, float *yr)
+{
+ ARegion *ar= CTX_wm_region(C);
+ SpaceClip *sc= CTX_wm_space_clip(C);
+ int sx, sy, width, height;
+ float zoomx, zoomy, pos[3]={0.f, 0.f, 0.f}, imat[4][4];
+
+ ED_space_clip_zoom(sc, ar, &zoomx, &zoomy);
+ ED_space_clip_size(sc, &width, &height);
+
+ UI_view2d_to_region_no_clip(&ar->v2d, 0.0f, 0.0f, &sx, &sy);
+
+ pos[0]= (x-sx)/zoomx;
+ pos[1]= (y-sy)/zoomy;
+
+ invert_m4_m4(imat, sc->stabmat);
+ mul_v3_m4v3(pos, imat, pos);
+
+ *xr= pos[0]/width;
+ *yr= pos[1]/height;
+}
+
+void ED_clip_mouse_pos(bContext *C, wmEvent *event, float co[2])
+{
+ ED_clip_point_stable_pos(C, event->mval[0], event->mval[1], &co[0], &co[1]);
+}
Modified: branches/soc-2011-tomato/source/blender/editors/space_clip/clip_ops.c
===================================================================
--- branches/soc-2011-tomato/source/blender/editors/space_clip/clip_ops.c 2011-08-01 06:55:05 UTC (rev 38891)
+++ branches/soc-2011-tomato/source/blender/editors/space_clip/clip_ops.c 2011-08-01 08:29:17 UTC (rev 38892)
@@ -74,8 +74,8 @@
/* check zoom limits */
ED_space_clip_size(sc, &width, &height);
- width *= sc->zoom;
- height *= sc->zoom;
+ width*= sc->zoom;
+ height*= sc->zoom;
if((width < 4) && (height < 4))
sc->zoom= oldzoom;
@@ -542,7 +542,7 @@
ot->poll= space_clip_poll;
/* flags */
- ot->flag= OPTYPE_BLOCKING;
+ ot->flag= OPTYPE_BLOCKING|OPTYPE_GRAB_POINTER;
/* properties */
RNA_def_float(ot->srna, "factor", 0.0f, 0.0f, FLT_MAX,
@@ -563,6 +563,47 @@
return OPERATOR_FINISHED;
}
+static int view_zoom_out_exec(bContext *C, wmOperator *UNUSED(op))
+{
+ SpaceClip *sc= CTX_wm_space_clip(C);
+ ARegion *ar= CTX_wm_region(C);
+
+ sclip_zoom_set_factor(sc, ar, 0.8f);
+
+ ED_region_tag_redraw(CTX_wm_region(C));
+
+ return OPERATOR_FINISHED;
+}
+
+static int view_zoom_inout_invoke(bContext *C, wmOperator *op, wmEvent *event, int out)
+{
+ SpaceClip *sc= CTX_wm_space_clip(C);
+ float co[2], oldzoom= sc->zoom;
+
+ ED_clip_mouse_pos(C, event, co);
+
+ if(out)
+ view_zoom_out_exec(C, op);
+ else
+ view_zoom_in_exec(C, op);
+
+ if(U.uiflag&USER_ZOOM_TO_MOUSEPOS) {
+ int width, height;
+
+ ED_space_clip_size(sc, &width, &height);
+
+ sc->xof+= ((co[0]-0.5)*width-sc->xof)*(sc->zoom-oldzoom)/sc->zoom;
+ sc->yof+= ((co[1]-0.5)*height-sc->yof)*(sc->zoom-oldzoom)/sc->zoom;
+ }
+
+ return OPERATOR_FINISHED;
+}
+
+static int view_zoom_in_invoke(bContext *C, wmOperator *op, wmEvent *event)
+{
+ return view_zoom_inout_invoke(C, op, event, 0);
+}
+
void CLIP_OT_view_zoom_in(wmOperatorType *ot)
{
/* identifiers */
@@ -571,19 +612,13 @@
/* api callbacks */
ot->exec= view_zoom_in_exec;
+ ot->invoke= view_zoom_in_invoke;
ot->poll= space_clip_poll;
}
-static int view_zoom_out_exec(bContext *C, wmOperator *UNUSED(op))
+static int view_zoom_out_invoke(bContext *C, wmOperator *op, wmEvent *event)
{
- SpaceClip *sc= CTX_wm_space_clip(C);
- ARegion *ar= CTX_wm_region(C);
-
- sclip_zoom_set_factor(sc, ar, 0.8f);
-
- ED_region_tag_redraw(CTX_wm_region(C));
-
- return OPERATOR_FINISHED;
+ return view_zoom_inout_invoke(C, op, event, 1);
}
void CLIP_OT_view_zoom_out(wmOperatorType *ot)
@@ -594,6 +629,7 @@
/* api callbacks */
ot->exec= view_zoom_out_exec;
+ ot->invoke= view_zoom_out_invoke;
ot->poll= space_clip_poll;
}
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-01 06:55:05 UTC (rev 38891)
+++ branches/soc-2011-tomato/source/blender/editors/space_clip/tracking_ops.c 2011-08-01 08:29:17 UTC (rev 38892)
@@ -162,38 +162,11 @@
return OPERATOR_FINISHED;
}
-static void point_stable_pos(bContext *C, float x, float y, float *xr, float *yr)
-{
- ARegion *ar= CTX_wm_region(C);
- SpaceClip *sc= CTX_wm_space_clip(C);
- int sx, sy, width, height;
- float zoomx, zoomy, pos[3]={0.f, 0.f, 0.f}, imat[4][4];
-
- ED_space_clip_zoom(sc, ar, &zoomx, &zoomy);
- ED_space_clip_size(sc, &width, &height);
-
- UI_view2d_to_region_no_clip(&ar->v2d, 0.0f, 0.0f, &sx, &sy);
-
- pos[0]= (x-sx)/zoomx;
- pos[1]= (y-sy)/zoomy;
-
- invert_m4_m4(imat, sc->stabmat);
- mul_v3_m4v3(pos, imat, pos);
-
- *xr= pos[0]/width;
- *yr= pos[1]/height;
-}
-
-static void mouse_pos(bContext *C, wmEvent *event, float co[2])
-{
- point_stable_pos(C, event->mval[0], event->mval[1], &co[0], &co[1]);
-}
-
static int add_marker_invoke(bContext *C, wmOperator *op, wmEvent *event)
{
float co[2];
- mouse_pos(C, event, co);
+ ED_clip_mouse_pos(C, event, co);
RNA_float_set_array(op->ptr, "location", co);
@@ -443,8 +416,8 @@
dx= 12.f/width/sc->zoom;
dy= 12.f/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);
+ dx=MIN2(dx, (track->pat_max[0]-track->pat_min[0])/2.f);
+ dy=MIN2(dy, (track->pat_max[1]-track->pat_min[1])/2.f);
return co[0]>=pos[0]-dx && co[0]<=pos[0]+dx && co[1]>=pos[1]-dy && co[1]<=pos[1]+dy;
}
@@ -477,7 +450,7 @@
if(width==0 || height==0)
return NULL;
- mouse_pos(C, event, co);
+ ED_clip_mouse_pos(C, event, co);
track= clip->tracking.tracks.first;
while(track) {
@@ -485,6 +458,10 @@
MovieTrackingMarker *marker= BKE_tracking_get_marker(track, sc->user.framenr);
if((marker->flag&MARKER_DISABLED)==0) {
+ if(!customdata)
+ if(mouse_on_offset(sc, track, marker, co, width, height))
+ customdata= create_slide_marker_data(sc, track, marker, event, TRACK_AREA_POINT, SLIDE_ACTION_POS, width, height);
+
if(sc->flag&SC_SHOW_MARKER_SEARCH) {
if(mouse_on_corner(sc, track, marker, TRACK_AREA_SEARCH, co, 1, width, height))
customdata= create_slide_marker_data(sc, track, marker, event, TRACK_AREA_SEARCH, SLIDE_ACTION_OFFSET, width, height);
@@ -500,10 +477,6 @@
customdata= create_slide_marker_data(sc, track, marker, event, TRACK_AREA_PAT, SLIDE_ACTION_SIZE, width, height);
}
- if(!customdata)
- if(mouse_on_offset(sc, track, marker, co, width, height))
- customdata= create_slide_marker_data(sc, track, marker, event, TRACK_AREA_POINT, SLIDE_ACTION_POS, width, height);
-
if(customdata)
break;
}
@@ -664,7 +637,7 @@
ot->modal= slide_marker_modal;
/* flags */
- ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO|OPTYPE_GRAB_POINTER|OPTYPE_BLOCKING;
/* properties */
RNA_def_float_vector(ot->srna, "offset", 2, NULL, -FLT_MAX, FLT_MAX,
@@ -836,7 +809,7 @@
}
}
- mouse_pos(C, event, co);
+ ED_clip_mouse_pos(C, event, co);
RNA_float_set_array(op->ptr, "location", co);
return select_exec(C, op);
@@ -881,8 +854,8 @@
rect.xmax= RNA_int_get(op->ptr, "xmax");
rect.ymax= RNA_int_get(op->ptr, "ymax");
- point_stable_pos(C, rect.xmin, rect.ymin, &rectf.xmin, &rectf.ymin);
- point_stable_pos(C, rect.xmax, rect.ymax, &rectf.xmax, &rectf.ymax);
+ ED_clip_point_stable_pos(C, rect.xmin, rect.ymin, &rectf.xmin, &rectf.ymin);
+ ED_clip_point_stable_pos(C, rect.xmax, rect.ymax, &rectf.xmax, &rectf.ymax);
mode= RNA_int_get(op->ptr, "gesture_mode");
@@ -969,7 +942,7 @@
ellipse[0]= width*zoomx/radius;
ellipse[1]= height*zoomy/radius;
- point_stable_pos(C, x, y, &offset[0], &offset[1]);
+ ED_clip_point_stable_pos(C, x, y, &offset[0], &offset[1]);
/* do selection */
track= clip->tracking.tracks.first;
@@ -1579,7 +1552,7 @@
void CLIP_OT_clear_reconstruction(wmOperatorType *ot)
{
/* identifiers */
- ot->name= "Clear Reconstruciton";
+ ot->name= "Clear Reconstruction";
ot->description= "Clear all reconstruciton data";
ot->idname= "CLIP_OT_clear_reconstruction";
More information about the Bf-blender-cvs
mailing list