Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2012-06-08 20:42:24 +0400
committerSergey Sharybin <sergey.vfx@gmail.com>2012-06-08 20:42:24 +0400
commit04766ab071e43d041f19c586baa316da1432f614 (patch)
tree714264c7d5f4b46c91cc85c2d0259ecb2107313f /source/blender/blenkernel
parent5e1bbde01d0a77c7b032197cff860305462a9cb2 (diff)
Added sorting by average reprojection error to motion tracking dopesheet.
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r--source/blender/blenkernel/BKE_tracking.h1
-rw-r--r--source/blender/blenkernel/intern/tracking.c28
2 files changed, 29 insertions, 0 deletions
diff --git a/source/blender/blenkernel/BKE_tracking.h b/source/blender/blenkernel/BKE_tracking.h
index 817cb477aba..4d9a5746c87 100644
--- a/source/blender/blenkernel/BKE_tracking.h
+++ b/source/blender/blenkernel/BKE_tracking.h
@@ -202,5 +202,6 @@ void BKE_tracking_dopesheet_update(struct MovieTracking *tracking, int sort_meth
#define TRACK_SORT_NAME 0
#define TRACK_SORT_LONGEST 1
#define TRACK_SORT_TOTAL 2
+#define TRACK_SORT_AVERAGE_ERROR 3
#endif
diff --git a/source/blender/blenkernel/intern/tracking.c b/source/blender/blenkernel/intern/tracking.c
index 4abb461bc81..fb78e89cc30 100644
--- a/source/blender/blenkernel/intern/tracking.c
+++ b/source/blender/blenkernel/intern/tracking.c
@@ -3115,6 +3115,17 @@ static int channels_longest_segment_sort(void *a, void *b)
return 0;
}
+static int channels_average_error_sort(void *a, void *b)
+{
+ MovieTrackingDopesheetChannel *channel_a = a;
+ MovieTrackingDopesheetChannel *channel_b = b;
+
+ if (channel_a->track->error > channel_b->track->error)
+ return 1;
+ else
+ return 0;
+}
+
static int channels_alpha_inverse_sort(void *a, void *b)
{
if (channels_alpha_sort(a, b))
@@ -3139,6 +3150,17 @@ static int channels_longest_segment_inverse_sort(void *a, void *b)
return 1;
}
+static int channels_average_error_inverse_sort(void *a, void *b)
+{
+ MovieTrackingDopesheetChannel *channel_a = a;
+ MovieTrackingDopesheetChannel *channel_b = b;
+
+ if (channel_a->track->error < channel_b->track->error)
+ return 1;
+ else
+ return 0;
+}
+
static void channels_segments_calc(MovieTrackingDopesheetChannel *channel)
{
MovieTrackingTrack *track = channel->track;
@@ -3234,6 +3256,9 @@ static void tracking_dopesheet_sort(MovieTracking *tracking, int sort_method, i
else if (sort_method == TRACK_SORT_TOTAL) {
BLI_sortlist(&dopesheet->channels, channels_total_track_inverse_sort);
}
+ else if (sort_method == TRACK_SORT_AVERAGE_ERROR) {
+ BLI_sortlist(&dopesheet->channels, channels_average_error_inverse_sort);
+ }
}
else {
if (sort_method == TRACK_SORT_NAME) {
@@ -3245,6 +3270,9 @@ static void tracking_dopesheet_sort(MovieTracking *tracking, int sort_method, i
else if (sort_method == TRACK_SORT_TOTAL) {
BLI_sortlist(&dopesheet->channels, channels_total_track_sort);
}
+ else if (sort_method == TRACK_SORT_AVERAGE_ERROR) {
+ BLI_sortlist(&dopesheet->channels, channels_average_error_sort);
+ }
}
dopesheet->sort_method = sort_method;