40TEST(grease_pencil_merge, merge_simple)
42 using namespace bke::greasepencil;
46 Layer &layer1 = grease_pencil.add_layer(
"Layer1");
47 Layer &layer2 = grease_pencil.add_layer(
"Layer2");
49 grease_pencil.insert_frame(layer1, 0);
51 grease_pencil.insert_frame(layer2, 0);
52 grease_pencil.insert_frame(layer2, 2);
59 grease_pencil, src_layer_indices_by_dst_layer, *merged_grease_pencil);
61 EXPECT_EQ(merged_grease_pencil->layers().size(), 1);
62 EXPECT_EQ(merged_grease_pencil->layer(0).frames().size(), 2);
63 EXPECT_STREQ(merged_grease_pencil->layer(0).name().c_str(),
"Layer1");
68TEST(grease_pencil_merge, merge_in_same_group)
70 using namespace bke::greasepencil;
74 LayerGroup &group1 = grease_pencil.add_layer_group(grease_pencil.root_group(),
"Group1");
75 LayerGroup &group2 = grease_pencil.add_layer_group(group1,
"Group2");
76 LayerGroup &group3 = grease_pencil.add_layer_group(grease_pencil.root_group(),
"Group3");
78 Layer &layer1 = grease_pencil.add_layer(
"Layer1");
79 Layer &layer2 = grease_pencil.add_layer(group1,
"Layer2");
80 Layer &layer3 = grease_pencil.add_layer(group2,
"Layer3");
81 Layer &layer4 = grease_pencil.add_layer(group2,
"Layer4");
82 grease_pencil.add_layer(group3,
"Layer5");
84 grease_pencil.insert_frame(layer1, 0);
86 grease_pencil.insert_frame(layer2, 0);
87 grease_pencil.insert_frame(layer2, 2);
89 grease_pencil.insert_frame(layer3, 0);
90 grease_pencil.insert_frame(layer3, 3);
92 grease_pencil.insert_frame(layer4, 1);
93 grease_pencil.insert_frame(layer4, 3);
101 grease_pencil, src_layer_indices_by_dst_layer, *merged_grease_pencil);
103 EXPECT_EQ(merged_grease_pencil->layers().size(), 4);
106 for (
const int i : merged_grease_pencil->layers().index_range()) {
107 const Layer &layer = merged_grease_pencil->layer(i);
108 EXPECT_STREQ(layer.name().c_str(), expected_layer_names[i].c_str());
111 Array<int> expected_layer3_keyframes({0, 1, 3});
112 for (
const int i : merged_grease_pencil->layer(0).sorted_keys().index_range()) {
113 const int key = merged_grease_pencil->layer(0).sorted_keys()[i];
114 EXPECT_EQ(key, expected_layer3_keyframes[i]);
120TEST(grease_pencil_merge, merge_in_different_group)
122 using namespace bke::greasepencil;
126 LayerGroup &group1 = grease_pencil.add_layer_group(grease_pencil.root_group(),
"Group1");
127 LayerGroup &group2 = grease_pencil.add_layer_group(group1,
"Group2");
128 LayerGroup &group3 = grease_pencil.add_layer_group(grease_pencil.root_group(),
"Group3");
129 LayerGroup &group4 = grease_pencil.add_layer_group(group2,
"Group4");
130 LayerGroup &group5 = grease_pencil.add_layer_group(group4,
"Group5");
131 LayerGroup &group6 = grease_pencil.add_layer_group(group1,
"Group6");
133 Layer &layer1 = grease_pencil.add_layer(
"Layer1");
134 Layer &layer2 = grease_pencil.add_layer(group6,
"Layer2");
135 Layer &layer3 = grease_pencil.add_layer(group5,
"Layer3");
136 Layer &layer4 = grease_pencil.add_layer(group2,
"Layer4");
137 grease_pencil.add_layer(group3,
"Layer5");
139 grease_pencil.insert_frame(layer1, 0);
141 grease_pencil.insert_frame(layer2, 0);
142 grease_pencil.insert_frame(layer2, 2);
144 grease_pencil.insert_frame(layer3, 0);
145 grease_pencil.insert_frame(layer3, 3);
147 grease_pencil.insert_frame(layer4, 1);
148 grease_pencil.insert_frame(layer4, 3);
155 grease_pencil, src_layer_indices_by_dst_layer, *merged_grease_pencil);
157 EXPECT_EQ(merged_grease_pencil->layers().size(), 4);
159 TreeNode *node = merged_grease_pencil->find_node_by_name(
"Layer3");
160 EXPECT_TRUE(node !=
nullptr);
161 EXPECT_TRUE(node->is_layer());
162 EXPECT_TRUE(node->parent_group() && node->parent_group()->name() ==
"Group1");
164 EXPECT_EQ(node->as_layer().frames().size(), 3);
166 Array<int> expected_layer3_keyframes({0, 2, 3});
167 for (
const int i : node->as_layer().sorted_keys().index_range()) {
168 const int key = node->as_layer().sorted_keys()[i];
169 EXPECT_EQ(key, expected_layer3_keyframes[i]);
173 for (
const int i : merged_grease_pencil->layers().index_range()) {
174 const Layer &layer = merged_grease_pencil->layer(i);
175 EXPECT_STREQ(layer.name().c_str(), expected_layer_names[i].c_str());
181TEST(grease_pencil_merge, merge_keyframes)
183 using namespace bke::greasepencil;
187 Layer &layer1 = grease_pencil.add_layer(
"Layer1");
188 Layer &layer2 = grease_pencil.add_layer(
"Layer2");
189 Layer &layer3 = grease_pencil.add_layer(
"Layer3");
190 Layer &layer4 = grease_pencil.add_layer(
"Layer4");
191 grease_pencil.add_layer(
"Layer5");
193 Drawing *drawing = grease_pencil.insert_frame(layer1, 0);
196 drawing = grease_pencil.insert_frame(layer2, 0);
198 drawing = grease_pencil.insert_frame(layer2, 2);
201 drawing = grease_pencil.insert_frame(layer3, 0);
203 drawing = grease_pencil.insert_frame(layer3, 3);
206 drawing = grease_pencil.insert_frame(layer4, 1);
208 drawing = grease_pencil.insert_frame(layer4, 3);
216 grease_pencil, src_layer_indices_by_dst_layer, *merged_grease_pencil);
218 EXPECT_EQ(merged_grease_pencil->layers().size(), 4);
220 Layer &expected_layer_1 = merged_grease_pencil->find_node_by_name(
"Layer1")->as_layer();
221 EXPECT_EQ(merged_grease_pencil->get_drawing_at(expected_layer_1, 0)->strokes().points_num(), 10);
223 Layer &expected_layer_2 = merged_grease_pencil->find_node_by_name(
"Layer2")->as_layer();
224 EXPECT_EQ(merged_grease_pencil->get_drawing_at(expected_layer_2, 0)->strokes().points_num(), 60);
226 Layer &expected_layer_4 = merged_grease_pencil->find_node_by_name(
"Layer4")->as_layer();
227 EXPECT_EQ(merged_grease_pencil->get_drawing_at(expected_layer_4, 3)->strokes().points_num(), 70);
232TEST(grease_pencil_merge, merge_layer_attributes)
235 using namespace bke::greasepencil;
239 grease_pencil.add_layer(
"Layer1");
240 grease_pencil.add_layer(
"Layer2");
241 grease_pencil.add_layer(
"Layer3");
244 SpanAttributeWriter<float> test_attribute =
245 grease_pencil.attributes_for_write().lookup_or_add_for_write_only_span<
float>(
246 "test", AttrDomain::Layer);
247 test_attribute.span.copy_from(test_float_values);
248 test_attribute.finish();
255 grease_pencil, src_layer_indices_by_dst_layer, *merged_grease_pencil);
257 EXPECT_EQ(merged_grease_pencil->layers().size(), 2);
259 VArray<float> merged_values = *merged_grease_pencil->attributes().lookup<
float>(
"test");
261 for (
const int i : merged_grease_pencil->layers().index_range()) {
262 EXPECT_FLOAT_EQ(merged_values[i], expected_float_values[i]);