[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [47789] trunk/blender: Make dopesheet settings per-tracking data

Sergey Sharybin sergey.vfx at gmail.com
Tue Jun 12 19:10:33 CEST 2012


Revision: 47789
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=47789
Author:   nazgul
Date:     2012-06-12 17:10:24 +0000 (Tue, 12 Jun 2012)
Log Message:
-----------
Make dopesheet settings per-tracking data

It was a bit confusing to synchronize settings used in pre-calculated
dopesheet channels which was storing in tracking data with settings
used for display which is in space data.

This was initially done by converting one flags to other and checking
if space's settings matches pre-calculated one, but that had several
issues if two different dopesheet are using different settings:

- Channels would be re-calculated on every redraw for each of spaces
- Dopesheet operators could fail due to the could be using  channels
  calculated for other space.

That was also quite nasty code checking if requested settings matches
pre-calculated one.

Modified Paths:
--------------
    trunk/blender/release/scripts/startup/bl_ui/space_clip.py
    trunk/blender/source/blender/blenkernel/BKE_tracking.h
    trunk/blender/source/blender/blenkernel/intern/tracking.c
    trunk/blender/source/blender/editors/space_clip/space_clip.c
    trunk/blender/source/blender/makesdna/DNA_space_types.h
    trunk/blender/source/blender/makesdna/DNA_tracking_types.h
    trunk/blender/source/blender/makesrna/intern/rna_space.c
    trunk/blender/source/blender/makesrna/intern/rna_tracking.c

Modified: trunk/blender/release/scripts/startup/bl_ui/space_clip.py
===================================================================
--- trunk/blender/release/scripts/startup/bl_ui/space_clip.py	2012-06-12 16:57:11 UTC (rev 47788)
+++ trunk/blender/release/scripts/startup/bl_ui/space_clip.py	2012-06-12 17:10:24 UTC (rev 47789)
@@ -82,11 +82,12 @@
                     row.prop(sc, "show_filters", icon='DISCLOSURE_TRI_RIGHT',
                              text="Filters")
             elif sc.view == 'DOPESHEET':
+                dopesheet = tracking.dopesheet
                 layout.prop(sc, "view", text="", expand=True)
 
                 layout.label(text="Sort by:")
-                layout.prop(sc, "dopesheet_sort_method", text="")
-                layout.prop(sc, "invert_dopesheet_sort", text="Invert")
+                layout.prop(dopesheet, "sort_method", text="")
+                layout.prop(dopesheet, "use_invert_sort", text="Invert")
         else:
             layout.prop(sc, "view", text="", expand=True)
 

Modified: trunk/blender/source/blender/blenkernel/BKE_tracking.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_tracking.h	2012-06-12 16:57:11 UTC (rev 47788)
+++ trunk/blender/source/blender/blenkernel/BKE_tracking.h	2012-06-12 17:10:24 UTC (rev 47789)
@@ -171,7 +171,7 @@
 
 /* Dopesheet */
 void BKE_tracking_dopesheet_tag_update(struct MovieTracking *tracking);
-void BKE_tracking_dopesheet_update(struct MovieTracking *tracking, int sort_method, int inverse);
+void BKE_tracking_dopesheet_update(struct MovieTracking *tracking);
 
 #define TRACK_SELECTED(track)               ((track)->flag & SELECT || (track)->pat_flag & SELECT || (track)->search_flag & SELECT)
 
@@ -202,10 +202,4 @@
 
 #define TRACK_AREA_ALL      (TRACK_AREA_POINT | TRACK_AREA_PAT | TRACK_AREA_SEARCH)
 
-#define TRACK_SORT_NONE     -1
-#define TRACK_SORT_NAME     0
-#define TRACK_SORT_LONGEST  1
-#define TRACK_SORT_TOTAL    2
-#define TRACK_SORT_AVERAGE_ERROR    3
-
 #endif

Modified: trunk/blender/source/blender/blenkernel/intern/tracking.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/tracking.c	2012-06-12 16:57:11 UTC (rev 47788)
+++ trunk/blender/source/blender/blenkernel/intern/tracking.c	2012-06-12 17:10:24 UTC (rev 47789)
@@ -3545,40 +3545,34 @@
 {
 	MovieTrackingDopesheet *dopesheet = &tracking->dopesheet;
 
-	if (dopesheet->sort_method == sort_method && dopesheet->sort_inverse == inverse)
-		return;
-
 	if (inverse) {
-		if (sort_method == TRACK_SORT_NAME) {
+		if (sort_method == TRACKING_DOPE_SORT_NAME) {
 			BLI_sortlist(&dopesheet->channels, channels_alpha_inverse_sort);
 		}
-		else if (sort_method == TRACK_SORT_LONGEST) {
+		else if (sort_method == TRACKING_DOPE_SORT_LONGEST) {
 			BLI_sortlist(&dopesheet->channels, channels_longest_segment_inverse_sort);
 		}
-		else if (sort_method == TRACK_SORT_TOTAL) {
+		else if (sort_method == TRACKING_DOPE_SORT_TOTAL) {
 			BLI_sortlist(&dopesheet->channels, channels_total_track_inverse_sort);
 		}
-		else if (sort_method == TRACK_SORT_AVERAGE_ERROR) {
+		else if (sort_method == TRACKING_DOPE_SORT_AVERAGE_ERROR) {
 			BLI_sortlist(&dopesheet->channels, channels_average_error_inverse_sort);
 		}
 	}
 	else {
-		if (sort_method == TRACK_SORT_NAME) {
+		if (sort_method == TRACKING_DOPE_SORT_NAME) {
 			BLI_sortlist(&dopesheet->channels, channels_alpha_sort);
 		}
-		else if (sort_method == TRACK_SORT_LONGEST) {
+		else if (sort_method == TRACKING_DOPE_SORT_LONGEST) {
 			BLI_sortlist(&dopesheet->channels, channels_longest_segment_sort);
 		}
-		else if (sort_method == TRACK_SORT_TOTAL) {
+		else if (sort_method == TRACKING_DOPE_SORT_TOTAL) {
 			BLI_sortlist(&dopesheet->channels, channels_total_track_sort);
 		}
-		else if (sort_method == TRACK_SORT_AVERAGE_ERROR) {
+		else if (sort_method == TRACKING_DOPE_SORT_AVERAGE_ERROR) {
 			BLI_sortlist(&dopesheet->channels, channels_average_error_sort);
 		}
 	}
-
-	dopesheet->sort_method = sort_method;
-	dopesheet->sort_inverse = inverse;
 }
 
 void BKE_tracking_dopesheet_tag_update(MovieTracking *tracking)
@@ -3588,17 +3582,17 @@
 	dopesheet->ok = FALSE;
 }
 
-void BKE_tracking_dopesheet_update(MovieTracking *tracking, int sort_method, int inverse)
+void BKE_tracking_dopesheet_update(MovieTracking *tracking)
 {
 	MovieTrackingObject *object = BKE_tracking_active_object(tracking);
 	MovieTrackingDopesheet *dopesheet = &tracking->dopesheet;
 	MovieTrackingTrack *track;
 	ListBase *tracksbase = BKE_tracking_object_tracks(tracking, object);
+	short sort_method = dopesheet->sort_method;
+	short inverse = dopesheet->flag & TRACKING_DOPE_SORT_INVERSE;
 
-	if (dopesheet->ok) {
-		tracking_dopesheet_sort(tracking, sort_method, inverse);
+	if (dopesheet->ok)
 		return;
-	}
 
 	tracking_dopesheet_free(dopesheet);
 
@@ -3616,8 +3610,6 @@
 		}
 	}
 
-	dopesheet->sort_method = TRACK_SORT_NONE;
-
 	tracking_dopesheet_sort(tracking, sort_method, inverse);
 
 	dopesheet->ok = TRUE;

Modified: trunk/blender/source/blender/editors/space_clip/space_clip.c
===================================================================
--- trunk/blender/source/blender/editors/space_clip/space_clip.c	2012-06-12 16:57:11 UTC (rev 47788)
+++ trunk/blender/source/blender/editors/space_clip/space_clip.c	2012-06-12 17:10:24 UTC (rev 47789)
@@ -1233,7 +1233,7 @@
 	short unit = 0;
 
 	if (clip)
-		BKE_tracking_dopesheet_update(&clip->tracking, sc->dope_sort, sc->dope_flag & SC_DOPE_SORT_INVERSE);
+		BKE_tracking_dopesheet_update(&clip->tracking);
 
 	/* clear and setup matrix */
 	UI_ThemeClearColor(TH_BACK);
@@ -1294,7 +1294,7 @@
 	View2DScrollers *scrollers;
 
 	if (clip)
-		BKE_tracking_dopesheet_update(&clip->tracking, sc->dope_sort, sc->dope_flag & SC_DOPE_SORT_INVERSE);
+		BKE_tracking_dopesheet_update(&clip->tracking);
 
 	/* clear and setup matrix */
 	UI_ThemeClearColor(TH_BACK);

Modified: trunk/blender/source/blender/makesdna/DNA_space_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_space_types.h	2012-06-12 16:57:11 UTC (rev 47788)
+++ trunk/blender/source/blender/makesdna/DNA_space_types.h	2012-06-12 17:10:24 UTC (rev 47789)
@@ -1006,12 +1006,8 @@
 
 	void *draw_context;
 
-	/* dopesheet */
-	short dope_sort;        /* sort order in dopesheet view */
-	short dope_flag;        /* dopsheet view flags */
+	int around, pad4;             /* pivot point for transforms */
 
-	int around;             /* pivot point for transforms */
-
 	/* **** mask editing **** */
 	struct Mask *mask;
 	/* draw options */
@@ -1058,19 +1054,6 @@
 	SC_VIEW_DOPESHEET,
 } eSpaceClip_View;
 
-/* SpaceClip->dope_sort */
-typedef enum eSpaceClip_Dopesheet_Sort {
-	SC_DOPE_SORT_NAME = 0,
-	SC_DOPE_SORT_LONGEST,
-	SC_DOPE_SORT_TOTAL,
-	SC_DOPE_SORT_AVERAGE_ERROR,
-} eSpaceClip_Dopesheet_Sort;
-
-/* SpaceClip->dope_flag */
-typedef enum eSpaceClip_Dopesheet_Flag {
-	SC_DOPE_SORT_INVERSE    = (1 << 0),
-} eSpaceClip_Dopesheet_Flag;
-
 /* SpaceClip->gpencil_src */
 typedef enum eSpaceClip_GPencil_Source {
 	SC_GPENCIL_SRC_CLIP = 0,

Modified: trunk/blender/source/blender/makesdna/DNA_tracking_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_tracking_types.h	2012-06-12 16:57:11 UTC (rev 47788)
+++ trunk/blender/source/blender/makesdna/DNA_tracking_types.h	2012-06-12 17:10:24 UTC (rev 47789)
@@ -238,13 +238,16 @@
 } MovieTrackingDopesheetChannel;
 
 typedef struct MovieTrackingDopesheet {
-	int ok, pad;                /* flag if dopesheet information is still relevant */
+	int ok;                     /* flag if dopesheet information is still relevant */
 
+	short sort_method;          /* method to be used to sort tracks */
+	short flag;                 /* dopesheet building flag such as inverted order of sort */
+
+	/* runtime stuff */
 	ListBase channels;
 	int tot_channel;
 
-	short sort_method;          /* method to be used to sort tracks */
-	short sort_inverse;         /* order of tracks is inverted */
+	int pad;
 } MovieTrackingDopesheet;
 
 typedef struct MovieTracking {
@@ -347,4 +350,13 @@
 #define TRACKING_CLEAN_DELETE_TRACK     1
 #define TRACKING_CLEAN_DELETE_SEGMENT   2
 
+/* MovieTrackingDopesheet->sort_method */
+#define TRACKING_DOPE_SORT_NAME          0
+#define TRACKING_DOPE_SORT_LONGEST       1
+#define TRACKING_DOPE_SORT_TOTAL         2
+#define TRACKING_DOPE_SORT_AVERAGE_ERROR 3
+
+/* MovieTrackingDopesheet->flag */
+#define TRACKING_DOPE_SORT_INVERSE    (1 << 0)
+
 #endif

Modified: trunk/blender/source/blender/makesrna/intern/rna_space.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_space.c	2012-06-12 16:57:11 UTC (rev 47788)
+++ trunk/blender/source/blender/makesrna/intern/rna_space.c	2012-06-12 17:10:24 UTC (rev 47789)
@@ -2985,14 +2985,6 @@
 		{0, NULL, 0, NULL, NULL}
 	};
 
-	static EnumPropertyItem dope_sort_items[] = {
-		{SC_DOPE_SORT_NAME, "NAME", 0, "Name", "Sort channels by their names"},
-		{SC_DOPE_SORT_LONGEST, "LONGEST", 0, "Longest", "Sort channels by longest tracked segment"},
-		{SC_DOPE_SORT_TOTAL, "TOTAL", 0, "Total", "Sort channels by overall amount of tracked segments"},
-		{SC_DOPE_SORT_AVERAGE_ERROR, "AVERAGE_ERROR", 0, "Average Error", "Sort channels by average reprojection error of tracks after solve"},
-		{0, NULL, 0, NULL, NULL}
-	};
-
 	static EnumPropertyItem gpencil_source_items[] = {
 		{SC_GPENCIL_SRC_CLIP, "CLIP", 0, "Clip", "Show grease pencil datablock which belongs to movie clip"},
 		{SC_GPENCIL_SRC_TRACK, "TRACK", 0, "Track", "Show grease pencil datablock which belongs to active track"},
@@ -3221,21 +3213,6 @@
 	RNA_def_property_enum_items(prop, pivot_items);
 	RNA_def_property_ui_text(prop, "Pivot Point", "Pivot center for rotation/scaling");
 	RNA_def_property_update(prop, NC_SPACE | ND_SPACE_CLIP, NULL);
-
-	/* ** dopesheet ** */
-
-	/* dopesheet sort */
-	prop = RNA_def_property(srna, "dopesheet_sort_method", PROP_ENUM, PROP_NONE);
-	RNA_def_property_enum_sdna(prop, NULL, "dope_sort");
-	RNA_def_property_enum_items(prop, dope_sort_items);
-	RNA_def_property_ui_text(prop, "Dopesheet Sort Field", "Method to be used to sort channels in dopesheet view");
-	RNA_def_property_update(prop, NC_SPACE | ND_SPACE_CLIP, NULL);
-
-	/* invert_dopesheet_sort */

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list