Initial Grease Pencil 3.0 stage #106848
|
@ -452,7 +452,7 @@ void GreasePencil::foreach_visible_drawing(
|
|||
using namespace blender::bke::gpencil;
|
||||
|
||||
blender::Span<GreasePencilDrawingOrReference *> drawings = this->drawings();
|
||||
for (TreeNode &node : this->runtime->root_group().children_in_pre_order()) {
|
||||
for (TreeNode &node : this->root_group().children_in_pre_order()) {
|
||||
if (!node.is_layer()) {
|
||||
continue;
|
||||
}
|
||||
|
@ -476,7 +476,7 @@ blender::bke::gpencil::Layer *GreasePencil::get_active_layer()
|
|||
{
|
||||
using namespace blender::bke::gpencil;
|
||||
/* TOOD. For now get the first layer. */
|
||||
for (TreeNode &node : this->runtime->root_group().children_in_pre_order()) {
|
||||
for (TreeNode &node : this->root_group().children_in_pre_order()) {
|
||||
if (!node.is_layer()) {
|
||||
continue;
|
||||
}
|
||||
|
@ -485,6 +485,12 @@ blender::bke::gpencil::Layer *GreasePencil::get_active_layer()
|
|||
return nullptr;
|
||||
|
||||
}
|
||||
|
||||
blender::bke::gpencil::LayerGroup &GreasePencil::root_group()
|
||||
{
|
||||
BLI_assert(this->runtime != nullptr);
|
||||
return this->runtime->root_group();
|
||||
}
|
||||
|
||||
void GreasePencil::read_drawing_array(BlendDataReader *reader)
|
||||
{
|
||||
BLO_read_pointer_array(reader, (void **)&this->drawing_array);
|
||||
|
@ -617,14 +623,14 @@ void GreasePencil::save_layer_tree_to_storage()
|
|||
{
|
||||
using namespace blender::bke::gpencil;
|
||||
/* We always store the root group, so we have to add one here. */
|
||||
int num_tree_nodes = this->runtime->root_group().total_num_children() + 1;
|
||||
int num_tree_nodes = this->root_group().total_num_children() + 1;
|
||||
this->layer_tree_storage.nodes_num = num_tree_nodes;
|
||||
this->layer_tree_storage.nodes = MEM_cnew_array<GreasePencilLayerTreeNode *>(num_tree_nodes,
|
||||
__func__);
|
||||
|
||||
int i = 0;
|
||||
save_layer_group_to_storage(this->runtime->root_group(), &this->layer_tree_storage.nodes[i++]);
|
||||
for (TreeNode &node : this->runtime->root_group().children_in_pre_order()) {
|
||||
save_layer_group_to_storage(this->root_group(), &this->layer_tree_storage.nodes[i++]);
|
||||
for (TreeNode &node : this->root_group().children_in_pre_order()) {
|
||||
GreasePencilLayerTreeNode **dst = &this->layer_tree_storage.nodes[i];
|
||||
if (node.is_group()) {
|
||||
LayerGroup &group = node.as_group();
|
||||
|
|
|
@ -109,7 +109,7 @@ void legacy_gpencil_to_grease_pencil(GreasePencil &grease_pencil, bGPdata &gpd)
|
|||
|
||||
int i = 0;
|
||||
LISTBASE_FOREACH (bGPDlayer *, gpl, &gpd.layers) {
|
||||
Layer &new_layer = grease_pencil.runtime->root_group().add_layer(Layer(gpl->info));
|
||||
Layer &new_layer = grease_pencil.root_group().add_layer(Layer(gpl->info));
|
||||
LISTBASE_FOREACH (bGPDframe *, gpf, &gpl->frames) {
|
||||
grease_pencil.drawing_array[i] = reinterpret_cast<GreasePencilDrawingOrReference *>(
|
||||
MEM_new<GreasePencilDrawing>(__func__));
|
||||
|
|
|
@ -35,7 +35,7 @@ TEST(gpencil, create_grease_pencil_id)
|
|||
|
||||
GreasePencil *grease_pencil = static_cast<GreasePencil *>(BKE_id_new(ctx.bmain, ID_GP, "GP"));
|
||||
EXPECT_EQ(grease_pencil->drawings().size(), 0);
|
||||
EXPECT_EQ(grease_pencil->runtime->root_group().total_num_children(), 0);
|
||||
EXPECT_EQ(grease_pencil->root_group().total_num_children(), 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`.
|
||||
|
|
|
@ -124,7 +124,7 @@ class ObjectModule {
|
|||
}
|
||||
|
||||
uint layer_offset = layers_.object_offset_get();
|
||||
grease_pencil.runtime->root_group().foreach_layer_pre_order(
|
||||
grease_pencil.root_group().foreach_layer_pre_order(
|
||||
[&](Layer &layer) { layers_.sync(object, layer, do_layer_blending); });
|
||||
|
||||
/* Order rendering using camera Z distance. */
|
||||
|
|
|
@ -20,6 +20,7 @@ class GreasePencilDrawingRuntime;
|
|||
struct StrokePoint;
|
||||
namespace gpencil {
|
||||
class Layer;
|
||||
class LayerGroup;
|
||||
}
|
||||
} // namespace blender::bke
|
||||
using GreasePencilRuntimeHandle = blender::bke::GreasePencilRuntime;
|
||||
|
@ -187,7 +188,6 @@ typedef struct GreasePencil {
|
|||
/* Only used for storage in the .blend file. */
|
||||
GreasePencilLayerTreeStorage layer_tree_storage;
|
||||
#ifdef __cplusplus
|
||||
blender::bke::gpencil::Layer *get_active_layer();
|
||||
void save_layer_tree_to_storage();
|
||||
void load_layer_tree_from_storage();
|
||||
void read_layer_tree_storage(BlendDataReader *reader);
|
||||
|
@ -210,6 +210,10 @@ typedef struct GreasePencil {
|
|||
* Runtime struct pointer.
|
||||
*/
|
||||
GreasePencilRuntimeHandle *runtime;
|
||||
#ifdef __cplusplus
|
||||
blender::bke::gpencil::Layer *get_active_layer();
|
||||
blender::bke::gpencil::LayerGroup &root_group();
|
||||
#endif
|
||||
} GreasePencil;
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
|
Loading…
Reference in New Issue
I believe it's standard to
std::move
from aT &&
Is there a need for overloads for
T &
andT &&
? What's the benefit of that?