Initial Grease Pencil 3.0 stage #106848
|
@ -1098,12 +1098,13 @@ void GreasePencil::save_layer_tree_to_storage()
|
|||
this->layer_tree_storage.active_layer_index = this->runtime->active_layer_index();
|
||||
}
|
||||
|
||||
|
||||
static void read_layer_node_recursive(blender::bke::greasepencil::LayerGroup ¤t_group,
|
||||
GreasePencilLayerTreeNode **nodes,
|
||||
int index)
|
||||
static int read_layer_node_recursive(blender::bke::greasepencil::LayerGroup ¤t_group,
|
||||
GreasePencilLayerTreeNode **nodes,
|
||||
int node_index)
|
||||
{
|
||||
using namespace blender::bke::greasepencil;
|
||||
GreasePencilLayerTreeNode *node = nodes[index];
|
||||
GreasePencilLayerTreeNode *node = nodes[node_index];
|
||||
int total_nodes_read = 0;
|
||||
switch (node->type) {
|
||||
case GREASE_PENCIL_LAYER_TREE_LEAF: {
|
||||
GreasePencilLayerTreeLeaf *node_leaf = reinterpret_cast<GreasePencilLayerTreeLeaf *>(node);
|
||||
|
@ -1113,18 +1114,22 @@ static void read_layer_node_recursive(blender::bke::greasepencil::LayerGroup &cu
|
|||
node_leaf->layer.frames_storage.values[i]);
|
||||
}
|
||||
current_group.add_layer(std::move(new_layer));
|
||||
total_nodes_read++;
|
||||
break;
|
||||
}
|
||||
case GREASE_PENCIL_LAYER_TREE_GROUP: {
|
||||
GreasePencilLayerTreeGroup *group = reinterpret_cast<GreasePencilLayerTreeGroup *>(node);
|
||||
LayerGroup new_group(group->base.name);
|
||||
for (int i = 0; i < group->children_num; i++) {
|
||||
read_layer_node_recursive(new_group, nodes, index + i + 1);
|
||||
total_nodes_read += read_layer_node_recursive(
|
||||
new_group, nodes, node_index + total_nodes_read + 1);
|
||||
}
|
||||
current_group.add_group(std::move(new_group));
|
||||
total_nodes_read++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return total_nodes_read;
|
||||
}
|
||||
|
||||
void GreasePencil::load_layer_tree_from_storage()
|
||||
|
@ -1137,11 +1142,13 @@ void GreasePencil::load_layer_tree_from_storage()
|
|||
GreasePencilLayerTreeNode *root = reinterpret_cast<GreasePencilLayerTreeNode *>(
|
||||
this->layer_tree_storage.nodes[0]);
|
||||
BLI_assert(root->type == GREASE_PENCIL_LAYER_TREE_GROUP);
|
||||
Hans Goudey
commented
`GreasePencilLayerMask *mask = &masks_storage` -> `GreasePencilLayerMask &mask = masks_storage`
|
||||
int total_nodes_read = 0;
|
||||
for (int i = 0; i < reinterpret_cast<GreasePencilLayerTreeGroup *>(root)->children_num; i++) {
|
||||
read_layer_node_recursive(
|
||||
this->runtime->root_group_for_write(), this->layer_tree_storage.nodes, i + 1);
|
||||
total_nodes_read += read_layer_node_recursive(this->runtime->root_group_for_write(),
|
||||
this->layer_tree_storage.nodes,
|
||||
total_nodes_read + 1);
|
||||
}
|
||||
|
||||
BLI_assert(total_nodes_read + 1 == this->layer_tree_storage.nodes_num);
|
||||
this->runtime->set_active_layer_index(this->layer_tree_storage.active_layer_index);
|
||||
}
|
||||
|
||||
|
|
|
@ -39,6 +39,38 @@ TEST(greasepencil, create_grease_pencil_id)
|
|||
EXPECT_EQ(grease_pencil.root_group().num_children_total(), 0);
|
||||
}
|
||||
|
||||
filedescriptor marked this conversation as resolved
Outdated
Falk David
commented
Add tests for Add tests for `load_layer_tree_from_storage` and `save_layer_tree_to_storage`.
|
||||
TEST(greasepencil, save_layer_tree_to_storage)
|
||||
{
|
||||
GreasePencilIDTestContext ctx;
|
||||
GreasePencil &grease_pencil = *static_cast<GreasePencil *>(BKE_id_new(ctx.bmain, ID_GP, "GP"));
|
||||
|
||||
StringRefNull names[7] = {"Group1", "Layer1", "Layer2", "Group2", "Layer3", "Layer4", "Layer5"};
|
||||
|
||||
LayerGroup group(names[0]);
|
||||
group.add_layer(Layer(names[1]));
|
||||
group.add_layer(Layer(names[2]));
|
||||
|
||||
LayerGroup group2(names[3]);
|
||||
group2.add_layer(Layer(names[4]));
|
||||
group2.add_layer(Layer(names[5]));
|
||||
|
||||
group.add_group(std::move(group2));
|
||||
grease_pencil.root_group_for_write().add_group(std::move(group));
|
||||
grease_pencil.root_group_for_write().add_layer(Layer(names[6]));
|
||||
|
||||
/* Save to storage. */
|
||||
grease_pencil.free_layer_tree_storage();
|
||||
grease_pencil.save_layer_tree_to_storage();
|
||||
MEM_delete(grease_pencil.runtime);
|
||||
|
||||
/* Load from storage. */
|
||||
grease_pencil.runtime = MEM_new<blender::bke::GreasePencilRuntime>(__func__);
|
||||
grease_pencil.load_layer_tree_from_storage();
|
||||
|
||||
grease_pencil.root_group_for_write().foreach_children_with_index_pre_order(
|
||||
[&](uint64_t i, TreeNode &child) { EXPECT_STREQ(child.name, names[i].data()); });
|
||||
}
|
||||
|
||||
TEST(greasepencil, set_active_layer_index)
|
||||
{
|
||||
GreasePencilIDTestContext ctx;
|
||||
|
|
Loading…
Reference in New Issue
Is the
-
meant to be a1)
? I think1.
is a bit more common in code comments than1)