diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2012-02-26 12:14:14 +0400 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2012-02-26 12:14:14 +0400 |
commit | 8285fef0e88e1816bf57b6e14cb659584344c99d (patch) | |
tree | d7885cd5856631282ec9cd25a0024850bbbf0a00 | |
parent | d82c768cc7df3f671d6066730e829c26e2fe6f3c (diff) |
Fixed for selected bundles drawing in 3D viewport:
- If track was hidded in clip editor it wasn't highlighted in 3d viewport
even if it's selected.
- If two tracks has got the same bundle coordinate and one of them is
selected it might not be highlighted in 3d viewport because of
draw order.
-rw-r--r-- | source/blender/blenkernel/BKE_tracking.h | 15 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/tracking.c | 20 | ||||
-rw-r--r-- | source/blender/editors/space_clip/clip_draw.c | 2 | ||||
-rw-r--r-- | source/blender/editors/space_clip/tracking_ops.c | 5 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/drawobject.c | 17 |
5 files changed, 38 insertions, 21 deletions
diff --git a/source/blender/blenkernel/BKE_tracking.h b/source/blender/blenkernel/BKE_tracking.h index 1be858ecf80..689376afa55 100644 --- a/source/blender/blenkernel/BKE_tracking.h +++ b/source/blender/blenkernel/BKE_tracking.h @@ -163,11 +163,18 @@ struct MovieTrackingObject *BKE_tracking_named_object(struct MovieTracking *trac void BKE_tracking_select_track(struct ListBase *tracksbase, struct MovieTrackingTrack *track, int area, int extend); void BKE_tracking_deselect_track(struct MovieTrackingTrack *track, int area); -#define TRACK_SELECTED(track) ((((track)->flag&TRACK_HIDDEN)==0) && ((track)->flag&SELECT || (track)->pat_flag&SELECT || (track)->search_flag&SELECT)) -#define TRACK_AREA_SELECTED(track, area) ((((track)->flag&TRACK_HIDDEN)==0) && ((area)==TRACK_AREA_POINT?(track)->flag&SELECT : ((area)==TRACK_AREA_PAT?(track)->pat_flag&SELECT:(track)->search_flag&SELECT))) -#define TRACK_VIEW_SELECTED(sc, track) ((TRACK_AREA_SELECTED(track, TRACK_AREA_POINT) || (((sc)->flag&SC_SHOW_MARKER_PATTERN && TRACK_AREA_SELECTED(track, TRACK_AREA_PAT))) || (((sc)->flag&SC_SHOW_MARKER_SEARCH && TRACK_AREA_SELECTED(track, TRACK_AREA_SEARCH))))) +#define TRACK_SELECTED(track) ((track)->flag&SELECT || (track)->pat_flag&SELECT || (track)->search_flag&SELECT) -#define MARKER_VISIBLE(sc, marker) (((marker)->flag&MARKER_DISABLED)==0 || ((sc)->flag&SC_HIDE_DISABLED)==0) +#define TRACK_AREA_SELECTED(track, area) ((area)==TRACK_AREA_POINT ? (track)->flag&SELECT : \ + ((area)==TRACK_AREA_PAT ? (track)->pat_flag&SELECT : \ + (track)->search_flag&SELECT)) + +#define TRACK_VIEW_SELECTED(sc, track) ((((track)->flag & TRACK_HIDDEN)==0) && \ + ( TRACK_AREA_SELECTED(track, TRACK_AREA_POINT) || \ + (((sc)->flag & SC_SHOW_MARKER_PATTERN) && TRACK_AREA_SELECTED(track, TRACK_AREA_PAT)) || \ + (((sc)->flag & SC_SHOW_MARKER_SEARCH) && TRACK_AREA_SELECTED(track, TRACK_AREA_SEARCH)))) + +#define MARKER_VISIBLE(sc, marker) (((marker)->flag & MARKER_DISABLED)==0 || ((sc)->flag & SC_HIDE_DISABLED)==0) #define TRACK_CLEAR_UPTO 0 #define TRACK_CLEAR_REMAINED 1 diff --git a/source/blender/blenkernel/intern/tracking.c b/source/blender/blenkernel/intern/tracking.c index 373e1e4b9f4..138abb73b49 100644 --- a/source/blender/blenkernel/intern/tracking.c +++ b/source/blender/blenkernel/intern/tracking.c @@ -626,7 +626,7 @@ void BKE_tracking_clipboard_copy_tracks(MovieTracking *tracking, MovieTrackingOb MovieTrackingTrack *track = tracksbase->first; while (track) { - if (TRACK_SELECTED(track)) { + if (TRACK_SELECTED(track) && (track->flag & TRACK_HIDDEN) == 0) { MovieTrackingTrack *new_track = duplicate_track(track); BLI_addtail(&tracking_clipboard.tracks, new_track); @@ -896,7 +896,7 @@ MovieTrackingContext *BKE_tracking_context_new(MovieClip *clip, MovieClipUser *u /* count */ track= tracksbase->first; while(track) { - if(TRACK_SELECTED(track) && (track->flag&TRACK_LOCKED)==0) { + if(TRACK_SELECTED(track) && (track->flag & (TRACK_LOCKED | TRACK_HIDDEN))==0) { MovieTrackingMarker *marker= BKE_tracking_get_marker(track, user->framenr); if((marker->flag&MARKER_DISABLED)==0) @@ -917,7 +917,7 @@ MovieTrackingContext *BKE_tracking_context_new(MovieClip *clip, MovieClipUser *u /* create tracking data */ track= tracksbase->first; while(track) { - if(TRACK_SELECTED(track) && (track->flag&TRACK_LOCKED)==0) { + if(TRACK_SELECTED(track) && (track->flag & (TRACK_HIDDEN | TRACK_LOCKED))==0) { MovieTrackingMarker *marker= BKE_tracking_get_marker(track, user->framenr); if((marker->flag&MARKER_DISABLED)==0) { @@ -2883,12 +2883,14 @@ void BKE_tracking_select_track(ListBase *tracksbase, MovieTrackingTrack *track, MovieTrackingTrack *cur= tracksbase->first; while(cur) { - if(cur==track) { - BKE_tracking_track_flag(cur, TRACK_AREA_ALL, SELECT, 1); - BKE_tracking_track_flag(cur, area, SELECT, 0); - } - else { - BKE_tracking_track_flag(cur, TRACK_AREA_ALL, SELECT, 1); + if ((cur->flag & TRACK_HIDDEN) == 0) { + if(cur==track) { + BKE_tracking_track_flag(cur, TRACK_AREA_ALL, SELECT, 1); + BKE_tracking_track_flag(cur, area, SELECT, 0); + } + else { + BKE_tracking_track_flag(cur, TRACK_AREA_ALL, SELECT, 1); + } } cur= cur->next; diff --git a/source/blender/editors/space_clip/clip_draw.c b/source/blender/editors/space_clip/clip_draw.c index 6dda09a1451..42c127df016 100644 --- a/source/blender/editors/space_clip/clip_draw.c +++ b/source/blender/editors/space_clip/clip_draw.c @@ -586,7 +586,7 @@ static void draw_marker_areas(SpaceClip *sc, MovieTrackingTrack *track, MovieTra } /* pyramid */ - if(sel && TRACK_SELECTED(track) && (track->tracker==TRACKER_KLT) && (marker->flag&MARKER_DISABLED)==0) { + if(sel && TRACK_VIEW_SELECTED(sc, track) && (track->tracker==TRACKER_KLT) && (marker->flag&MARKER_DISABLED)==0) { if(track->flag&TRACK_LOCKED) { if(act) UI_ThemeColor(TH_ACT_MARKER); else if(track->pat_flag&SELECT) UI_ThemeColorShade(TH_LOCK_MARKER, 64); diff --git a/source/blender/editors/space_clip/tracking_ops.c b/source/blender/editors/space_clip/tracking_ops.c index fc48516b378..18a5d8689c8 100644 --- a/source/blender/editors/space_clip/tracking_ops.c +++ b/source/blender/editors/space_clip/tracking_ops.c @@ -1240,7 +1240,8 @@ static void clear_invisible_track_selection(SpaceClip *sc, MovieClip *clip) MovieTrackingTrack *track = tracksbase->first; while(track) { - BKE_tracking_track_flag(track, hidden, SELECT, 1); + if ((track->flag & TRACK_HIDDEN) == 0) + BKE_tracking_track_flag(track, hidden, SELECT, 1); track = track->next; } @@ -1258,7 +1259,7 @@ static void track_init_markers(SpaceClip *sc, MovieClip *clip, int *frames_limit track= tracksbase->first; while(track) { - if(TRACK_SELECTED(track)) { + if(TRACK_VIEW_SELECTED(sc, track)) { if((track->flag&TRACK_HIDDEN)==0 && (track->flag&TRACK_LOCKED)==0) { BKE_tracking_ensure_marker(track, framenr); diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index 88e145245a4..2d716d522f2 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -1521,7 +1521,8 @@ static void draw_bundle_sphere(void) } static void draw_viewport_object_reconstruction(Scene *scene, Base *base, View3D *v3d, - MovieClip *clip, MovieTrackingObject *tracking_object, int flag, int *global_track_index) + MovieClip *clip, MovieTrackingObject *tracking_object, int flag, + int *global_track_index, int draw_selected) { MovieTracking *tracking= &clip->tracking; MovieTrackingTrack *track; @@ -1558,6 +1559,9 @@ static void draw_viewport_object_reconstruction(Scene *scene, Base *base, View3D for (track= tracksbase->first; track; track= track->next) { int selected= TRACK_SELECTED(track); + if ((draw_selected && !selected) || (draw_selected && !selected)) + continue; + if ((track->flag&TRACK_HAS_BUNDLE)==0) continue; @@ -1671,7 +1675,8 @@ static void draw_viewport_object_reconstruction(Scene *scene, Base *base, View3D *global_track_index= tracknr; } -static void draw_viewport_reconstruction(Scene *scene, Base *base, View3D *v3d, MovieClip *clip, int flag) +static void draw_viewport_reconstruction(Scene *scene, Base *base, View3D *v3d, MovieClip *clip, + int flag, int draw_selected) { MovieTracking *tracking= &clip->tracking; MovieTrackingObject *tracking_object; @@ -1694,7 +1699,7 @@ static void draw_viewport_reconstruction(Scene *scene, Base *base, View3D *v3d, tracking_object= tracking->objects.first; while (tracking_object) { draw_viewport_object_reconstruction(scene, base, v3d, clip, tracking_object, - flag, &global_track_index); + flag, &global_track_index, draw_selected); tracking_object= tracking_object->next; } @@ -1724,8 +1729,10 @@ static void drawcamera(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base MovieClip *clip= object_get_movieclip(scene, base->object, 0); /* draw data for movie clip set as active for scene */ - if (clip) - draw_viewport_reconstruction(scene, base, v3d, clip, flag); + if (clip) { + draw_viewport_reconstruction(scene, base, v3d, clip, flag, FALSE); + draw_viewport_reconstruction(scene, base, v3d, clip, flag, TRUE); + } #ifdef VIEW3D_CAMERA_BORDER_HACK if (is_view && !(G.f & G_PICKSEL)) { |