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);
                        }
                }
 

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to