[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