Some Clip Editor interface clean-ups:
authorSergey Sharybin <sergey.vfx@gmail.com>
Tue, 12 Jun 2012 17:11:00 +0000 (17:11 +0000)
committerSergey Sharybin <sergey.vfx@gmail.com>
Tue, 12 Jun 2012 17:11:00 +0000 (17:11 +0000)
- Display track's reprojection error in dopesheet
- Make sure track is selected when clicking on dopesheet channel
- Attempt to make headers a bit cleaner without long labels which
  doesn't actually make sense.

release/scripts/startup/bl_ui/space_clip.py
source/blender/blenkernel/intern/tracking.c
source/blender/editors/space_clip/clip_dopesheet_draw.c
source/blender/editors/space_clip/clip_dopesheet_ops.c
source/blender/makesdna/DNA_tracking_types.h

index 5c98cafb732b964c9b15d4126232fd28b966b97e..8d55d678c5d06bbbd4ecc1356c0af333aba3b484 100644 (file)
@@ -62,7 +62,7 @@ class CLIP_HT_header(Header):
                 r = active_object.reconstruction
 
                 if r.is_valid and sc.view == 'CLIP':
-                    layout.label(text="Average solve error: %.4f" %
+                    layout.label(text="Solve error: %.4f" %
                                  (r.average_error))
             elif sc.view == 'GRAPH':
                 layout.prop(sc, "view", text="", expand=True)
@@ -89,9 +89,9 @@ class CLIP_HT_header(Header):
                 row.prop(dopesheet, "show_only_selected", text="")
                 row.prop(dopesheet, "show_hidden", text="")
 
-                layout.label(text="Sort by:")
-                layout.prop(dopesheet, "sort_method", text="")
-                layout.prop(dopesheet, "use_invert_sort", text="Invert")
+                row = layout.row(align=True)
+                row.prop(dopesheet, "sort_method", text="")
+                row.prop(dopesheet, "use_invert_sort", text="Invert", toggle=True)
         else:
             layout.prop(sc, "view", text="", expand=True)
 
index f1b251f54ddf4a8311aff233ce4a87139cc1f14d..57983062e3f24abf3ecee894ed5239ead8234c2f 100644 (file)
@@ -3587,7 +3587,9 @@ void BKE_tracking_dopesheet_update(MovieTracking *tracking)
        MovieTrackingObject *object = BKE_tracking_active_object(tracking);
        MovieTrackingDopesheet *dopesheet = &tracking->dopesheet;
        MovieTrackingTrack *track;
+       MovieTrackingReconstruction *reconstruction;
        ListBase *tracksbase = BKE_tracking_object_tracks(tracking, object);
+
        short sort_method = dopesheet->sort_method;
        short inverse = dopesheet->flag & TRACKING_DOPE_SORT_INVERSE;
        short sel_only = dopesheet->flag & TRACKING_DOPE_SELECTED_ONLY;
@@ -3598,6 +3600,8 @@ void BKE_tracking_dopesheet_update(MovieTracking *tracking)
 
        tracking_dopesheet_free(dopesheet);
 
+       reconstruction = BKE_tracking_object_reconstruction(tracking, object);
+
        for (track = tracksbase->first; track; track = track->next) {
                MovieTrackingDopesheetChannel *channel;
 
@@ -3610,6 +3614,13 @@ void BKE_tracking_dopesheet_update(MovieTracking *tracking)
                channel = MEM_callocN(sizeof(MovieTrackingDopesheetChannel), "tracking dopesheet channel");
                channel->track = track;
 
+               if (reconstruction->flag & TRACKING_RECONSTRUCTED) {
+                       BLI_snprintf(channel->name, sizeof(channel->name), "%s (%.4f)", track->name, track->error);
+               }
+               else {
+                       BLI_strncpy(channel->name, track->name, sizeof(channel->name));
+               }
+
                channels_segments_calc(channel);
 
                BLI_addtail(&dopesheet->channels, channel);
index 2ce0e13b8bd47e9b4c5c1e353964c0426c930a03..361a3a7d9068bd145726b256f0310ced2ba69c8b 100644 (file)
@@ -313,10 +313,10 @@ void clip_draw_dopesheet_channels(const bContext *C, ARegion *ar)
                        else
                                UI_ThemeColor(TH_TEXT);
 
-                       font_height = BLF_height(fontid, track->name);
+                       font_height = BLF_height(fontid, channel->name);
                        BLF_position(fontid, v2d->cur.xmin + CHANNEL_PAD,
                                     y - font_height / 2.0f, 0.0f);
-                       BLF_draw(fontid, track->name, strlen(track->name));
+                       BLF_draw(fontid, channel->name, strlen(channel->name));
                }
 
                /* adjust y-position for next one */
index 914e82472bbc023377134a86d3ce482d4d3a17ba..744c7ba46fdb6687c90826969f7bf72946dd246d 100644 (file)
@@ -76,8 +76,10 @@ static int dopesheet_select_channel_exec(bContext *C, wmOperator *op)
        SpaceClip *sc = CTX_wm_space_clip(C);
        MovieClip *clip = ED_space_clip(sc);
        MovieTracking *tracking = &clip->tracking;
+       MovieTrackingObject *object = BKE_tracking_active_object(tracking);
        MovieTrackingDopesheet *dopesheet = &tracking->dopesheet;
        MovieTrackingDopesheetChannel *channel;
+       ListBase *tracksbase = BKE_tracking_object_tracks(tracking, object);
        float location[2];
        int extend = RNA_boolean_get(op->ptr, "extend");
        int current_channel_index = 0, channel_index;
@@ -96,6 +98,7 @@ static int dopesheet_select_channel_exec(bContext *C, wmOperator *op)
 
                        if (track->flag & TRACK_DOPE_SEL) {
                                tracking->act_track = track;
+                               BKE_tracking_select_track(tracksbase, track, TRACK_AREA_ALL, TRUE);
                        }
                }
                else if (!extend)
index 4eb1626f1cb73c08d1c61f22e9271de617eb2a8d..e1e7408fe14861c074d29740981b5964269280f4 100644 (file)
@@ -232,6 +232,8 @@ typedef struct MovieTrackingDopesheetChannel {
        MovieTrackingTrack *track;  /* motion track for which channel is created */
        int pad;
 
+       char name[64];          /* name of channel */
+
        int tot_segment;        /* total number of segments */
        int *segments;          /* tracked segments */
        int max_segment, total_frames;  /* longest segment length and total number of tracked frames */