GPv3: simplify adding multiple layers with empty drawings
This is often required when generating grease pencil procedurally, e.g. in #124279.
This commit is contained in:
@@ -2403,6 +2403,23 @@ bool GreasePencil::remove_frames(blender::bke::greasepencil::Layer &layer,
|
||||
return false;
|
||||
}
|
||||
|
||||
void GreasePencil::add_layers_with_empty_drawings_for_eval(const int num)
|
||||
{
|
||||
using namespace blender;
|
||||
using namespace blender::bke::greasepencil;
|
||||
const int old_drawings_num = this->drawing_array_num;
|
||||
this->add_empty_drawings(num);
|
||||
for (const int i : IndexRange(num)) {
|
||||
const int drawing_i = old_drawings_num + i;
|
||||
Drawing &drawing = reinterpret_cast<GreasePencilDrawing *>(this->drawing(drawing_i))->wrap();
|
||||
Layer &layer = this->add_layer(std::to_string(i));
|
||||
GreasePencilFrame *frame = layer.add_frame(this->runtime->eval_frame);
|
||||
BLI_assert(frame);
|
||||
frame->drawing_index = drawing_i;
|
||||
drawing.add_user();
|
||||
}
|
||||
}
|
||||
|
||||
void GreasePencil::remove_drawings_with_no_users()
|
||||
{
|
||||
using namespace blender;
|
||||
|
||||
@@ -606,6 +606,12 @@ typedef struct GreasePencil {
|
||||
*/
|
||||
bool remove_frames(blender::bke::greasepencil::Layer &layer, blender::Span<int> frame_numbers);
|
||||
|
||||
/**
|
||||
* Adds multiple layers each with its own empty drawing. This can be more efficient than adding
|
||||
* every layer and drawing one by one.
|
||||
*/
|
||||
void add_layers_with_empty_drawings_for_eval(int num);
|
||||
|
||||
/**
|
||||
* Low-level resizing of drawings array. Only allocates new entries in the array, no drawings are
|
||||
* created in case of size increase. In case of size decrease, the removed drawings are deleted.
|
||||
|
||||
Reference in New Issue
Block a user