[Bf-blender-cvs] [8e31e53aa0e] master: Function to return a list of keyframe segments

Christoph Lendenfeld noreply at git.blender.org
Fri Dec 17 23:43:07 CET 2021


Commit: 8e31e53aa0ee9693582ad5b72cfe5732b57c72fd
Author: Christoph Lendenfeld
Date:   Fri Dec 17 22:43:02 2021 +0000
Branches: master
https://developer.blender.org/rB8e31e53aa0ee9693582ad5b72cfe5732b57c72fd

Function to return a list of keyframe segments

Add a function that returns a list of keyframe segments
A segment being a continuous selection of keyframes
Will be used by future operators in the graph editor

Reviewed by: Sybren A. Stüvel
Differential Revision: https://developer.blender.org/D13531
Ref: D13531

===================================================================

M	release/datafiles/locale
M	release/scripts/addons
M	release/scripts/addons_contrib
M	source/blender/editors/animation/keyframes_general.c
M	source/blender/editors/include/ED_keyframes_edit.h
M	source/tools

===================================================================

diff --git a/release/datafiles/locale b/release/datafiles/locale
index 9d270fd007f..620b85f16d0 160000
--- a/release/datafiles/locale
+++ b/release/datafiles/locale
@@ -1 +1 @@
-Subproject commit 9d270fd007f628b23ccbcbd87caa2dc35286b26a
+Subproject commit 620b85f16d03a6aadd7cae56969c9c29b06b992d
diff --git a/release/scripts/addons b/release/scripts/addons
index b3c179b2869..c60fef38175 160000
--- a/release/scripts/addons
+++ b/release/scripts/addons
@@ -1 +1 @@
-Subproject commit b3c179b2869d86c44a4b29e2c638ce2a596a820d
+Subproject commit c60fef38175ad989ee0c45e924cb27e1417c8667
diff --git a/release/scripts/addons_contrib b/release/scripts/addons_contrib
index 16467648282..7936dde9ece 160000
--- a/release/scripts/addons_contrib
+++ b/release/scripts/addons_contrib
@@ -1 +1 @@
-Subproject commit 16467648282500cc229c271f62201ef897f2c2c3
+Subproject commit 7936dde9ece881d531b1a2ee6c45ddb56d30038c
diff --git a/source/blender/editors/animation/keyframes_general.c b/source/blender/editors/animation/keyframes_general.c
index dc5d71b5a1e..4fa5dee99a6 100644
--- a/source/blender/editors/animation/keyframes_general.c
+++ b/source/blender/editors/animation/keyframes_general.c
@@ -345,6 +345,28 @@ static bool find_fcurve_segment(FCurve *fcu,
   return in_segment;
 }
 
+/* Return a list of FCurveSegment with a start index and a length.
+ * A segment is a continuous selection of keyframes.
+ * Keys that have BEZT_FLAG_IGNORE_TAG set are treated as unselected.
+ * The caller is responsible for freeing the memory. */
+ListBase find_fcurve_segments(FCurve *fcu)
+{
+  ListBase segments = {NULL, NULL};
+  int segment_start_idx = 0;
+  int segment_len = 0;
+  int current_index = 0;
+
+  while (find_fcurve_segment(fcu, current_index, &segment_start_idx, &segment_len)) {
+    FCurveSegment *segment;
+    segment = MEM_callocN(sizeof(*segment), "FCurveSegment");
+    segment->start_index = segment_start_idx;
+    segment->length = segment_len;
+    BLI_addtail(&segments, segment);
+    current_index = segment_start_idx + segment_len;
+  }
+  return segments;
+}
+
 /* ---------------- */
 
 /* Check if the keyframe interpolation type is supported */
@@ -440,15 +462,12 @@ bool decimate_fcurve(bAnimListElem *ale, float remove_ratio, float error_sq_max)
     fcu->bezt[i].f2 &= ~BEZT_FLAG_TEMP_TAG;
   }
 
-  /* Only decimate the individual selected curve segments. */
-  int segment_start_idx = 0;
-  int segment_len = 0;
-  int current_index = 0;
-
-  while (find_fcurve_segment(fcu, current_index, &segment_start_idx, &segment_len)) {
-    decimate_fcurve_segment(fcu, segment_start_idx, segment_len, remove_ratio, error_sq_max);
-    current_index = segment_start_idx + segment_len;
+  ListBase segments = find_fcurve_segments(fcu);
+  LISTBASE_FOREACH (FCurveSegment *, segment, &segments) {
+    decimate_fcurve_segment(
+        fcu, segment->start_index, segment->length, remove_ratio, error_sq_max);
   }
+  BLI_freelistN(&segments);
 
   uint old_totvert = fcu->totvert;
   fcu->bezt = NULL;
diff --git a/source/blender/editors/include/ED_keyframes_edit.h b/source/blender/editors/include/ED_keyframes_edit.h
index bafe68bd28d..8a7831db0ea 100644
--- a/source/blender/editors/include/ED_keyframes_edit.h
+++ b/source/blender/editors/include/ED_keyframes_edit.h
@@ -380,6 +380,11 @@ bool delete_fcurve_keys(struct FCurve *fcu);
 void clear_fcurve_keys(struct FCurve *fcu);
 void duplicate_fcurve_keys(struct FCurve *fcu);
 
+typedef struct FCurveSegment {
+  struct FCurveSegment *next, *prev;
+  int start_index, length;
+} FCurveSegment;
+ListBase find_fcurve_segments(struct FCurve *fcu);
 void clean_fcurve(struct bAnimContext *ac,
                   struct bAnimListElem *ale,
                   float thresh,
diff --git a/source/tools b/source/tools
index b22d19e47f4..26bc78162ec 160000
--- a/source/tools
+++ b/source/tools
@@ -1 +1 @@
-Subproject commit b22d19e47f4d0353082f3d9f30ee8d244c5266d5
+Subproject commit 26bc78162ec89f21453ce3ded7b999bc6649f32b



More information about the Bf-blender-cvs mailing list