[Bf-blender-cvs] [c19b6642887] gpencil-new-data-proposal: Add functionality to iterate over frames in a specific layer
Falk David
noreply at git.blender.org
Tue May 10 12:25:33 CEST 2022
Commit: c19b66428878a8adc89e2c8484b6b9743e32bbbc
Author: Falk David
Date: Fri May 6 11:57:47 2022 +0200
Branches: gpencil-new-data-proposal
https://developer.blender.org/rBc19b66428878a8adc89e2c8484b6b9743e32bbbc
Add functionality to iterate over frames in a specific layer
===================================================================
M source/blender/blenkernel/intern/gpencil_new_proposal.hh
M source/blender/blenkernel/intern/gpencil_new_proposal_test.cc
===================================================================
diff --git a/source/blender/blenkernel/intern/gpencil_new_proposal.hh b/source/blender/blenkernel/intern/gpencil_new_proposal.hh
index 680975ea671..27f3a0ae191 100644
--- a/source/blender/blenkernel/intern/gpencil_new_proposal.hh
+++ b/source/blender/blenkernel/intern/gpencil_new_proposal.hh
@@ -87,7 +87,7 @@ typedef struct GPFrame {
typedef struct GPData {
/**
- * The array of grease pencil frames. This is kept in cronological order (tiebreaks for two
+ * The array of grease pencil frames. This is kept in chronological order (tiebreaks for two
* frames on different layers are resloved by the order of the layers).
*/
GPFrame *frames_array;
diff --git a/source/blender/blenkernel/intern/gpencil_new_proposal_test.cc b/source/blender/blenkernel/intern/gpencil_new_proposal_test.cc
index ce4f26378f4..37001ec1141 100644
--- a/source/blender/blenkernel/intern/gpencil_new_proposal_test.cc
+++ b/source/blender/blenkernel/intern/gpencil_new_proposal_test.cc
@@ -7,6 +7,8 @@
#include <algorithm>
#include "BKE_curves.hh"
+
+#include "BLI_index_mask_ops.hh"
#include "BLI_math_vec_types.hh"
#include "gpencil_new_proposal.hh"
@@ -156,6 +158,22 @@ class GPData : public ::GPData {
return {(GPFrame *)this->frames_array, this->frames_size};
}
+ IndexMask frames_on_layer(int layer_index) const
+ {
+ Vector<int64_t> indices;
+ return index_mask_ops::find_indices_based_on_predicate(
+ IndexMask(this->frames_size), 1024, indices, [&](const int index) {
+ return this->frames()[index].layer_index == layer_index;
+ });
+ }
+
+ IndexMask frames_on_layer(GPLayer &gpl) const
+ {
+ int layer_index = this->layers().first_index_try(gpl);
+ BLI_assert(layer_index != -1);
+ return frames_on_layer(layer_index);
+ }
+
Span<GPLayer> layers() const
{
return {(const GPLayer *)this->layers_array, this->layers_size};
@@ -405,4 +423,34 @@ TEST(gpencil_proposal, CheckFramesSorted2)
}
}
+TEST(gpencil_proposal, IterateOverFramesOnLayer)
+{
+ GPData my_data;
+ GPLayer my_layer1("TestLayer1");
+ GPLayer my_layer2("TestLayer2");
+
+ const int frame_numbers_layer1[5] = {10, 5, 6, 1, 3};
+ const int frame_numbers_layer2[5] = {8, 5, 7, 1, 4};
+
+ const int frame_numbers_sorted1[5] = {1, 3, 5, 6, 10};
+ const int frame_numbers_sorted2[5] = {1, 4, 5, 7, 8};
+
+ my_data.add_layer(my_layer1);
+ my_data.add_layer(my_layer2);
+ for (int i : IndexRange(5)) {
+ my_data.create_new_frame_on_layer(my_layer1, frame_numbers_layer1[i]);
+ my_data.create_new_frame_on_layer(my_layer2, frame_numbers_layer2[i]);
+ }
+
+ IndexMask indices_frames_layer1 = my_data.frames_on_layer(my_layer1);
+ for (const int i : indices_frames_layer1.index_range()) {
+ EXPECT_EQ(my_data.frames()[indices_frames_layer1[i]].start, frame_numbers_sorted1[i]);
+ }
+
+ IndexMask indices_frames_layer2 = my_data.frames_on_layer(my_layer2);
+ for (const int i : indices_frames_layer2.index_range()) {
+ EXPECT_EQ(my_data.frames()[indices_frames_layer2[i]].start, frame_numbers_sorted2[i]);
+ }
+}
+
} // namespace blender::bke::gpencil::tests
\ No newline at end of file
More information about the Bf-blender-cvs
mailing list