GPV3: Modifiers: Add get_drawing_infos_for_write
This API returns a vector with a pointer to each drawing as well as the starting frame for the keyframe that the drawing came from.
This commit is contained in:
@@ -37,6 +37,7 @@
|
||||
namespace blender::modifier::greasepencil {
|
||||
|
||||
using bke::greasepencil::Drawing;
|
||||
using bke::greasepencil::FramesMapKey;
|
||||
using bke::greasepencil::Layer;
|
||||
|
||||
void init_influence_data(GreasePencilModifierInfluenceData *influence_data,
|
||||
@@ -310,12 +311,12 @@ IndexMask get_filtered_stroke_mask(const Object *ob,
|
||||
|
||||
Vector<bke::greasepencil::Drawing *> get_drawings_for_write(GreasePencil &grease_pencil,
|
||||
const IndexMask &layer_mask,
|
||||
int frame)
|
||||
const int frame)
|
||||
{
|
||||
/* Set of unique drawing indices. */
|
||||
Set<int> drawing_indices;
|
||||
for (const int64_t i : layer_mask.index_range()) {
|
||||
Layer *layer = grease_pencil.layers_for_write()[layer_mask[i]];
|
||||
const Layer *layer = grease_pencil.layers()[layer_mask[i]];
|
||||
const int drawing_index = layer->drawing_index_at(frame);
|
||||
if (drawing_index >= 0) {
|
||||
drawing_indices.add(drawing_index);
|
||||
@@ -334,4 +335,29 @@ Vector<bke::greasepencil::Drawing *> get_drawings_for_write(GreasePencil &grease
|
||||
return drawings;
|
||||
}
|
||||
|
||||
Vector<DrawingInfo> get_drawing_infos_for_write(GreasePencil &grease_pencil,
|
||||
const IndexMask &layer_mask,
|
||||
const int frame)
|
||||
{
|
||||
Set<int> drawing_indices;
|
||||
Vector<DrawingInfo> drawing_infos;
|
||||
for (const int64_t i : layer_mask.index_range()) {
|
||||
const Layer *layer = grease_pencil.layers()[layer_mask[i]];
|
||||
const std::optional<FramesMapKey> start_frame = layer->frame_key_at(frame);
|
||||
if (!start_frame) {
|
||||
continue;
|
||||
}
|
||||
const GreasePencilFrame &frame = layer->frames().lookup(*start_frame);
|
||||
if (!drawing_indices.contains(frame.drawing_index)) {
|
||||
drawing_indices.add(frame.drawing_index);
|
||||
GreasePencilDrawingBase *drawing_base = grease_pencil.drawing(frame.drawing_index);
|
||||
if (drawing_base->type == GP_DRAWING) {
|
||||
GreasePencilDrawing *drawing = reinterpret_cast<GreasePencilDrawing *>(drawing_base);
|
||||
drawing_infos.append({&drawing->wrap(), *start_frame});
|
||||
}
|
||||
}
|
||||
}
|
||||
return drawing_infos;
|
||||
}
|
||||
|
||||
} // namespace blender::modifier::greasepencil
|
||||
|
||||
@@ -63,4 +63,14 @@ Vector<bke::greasepencil::Drawing *> get_drawings_for_write(GreasePencil &grease
|
||||
const IndexMask &layer_mask,
|
||||
int frame);
|
||||
|
||||
struct DrawingInfo {
|
||||
bke::greasepencil::Drawing *drawing;
|
||||
/* Frame on which this drawing starts. */
|
||||
int start_frame_number;
|
||||
};
|
||||
|
||||
Vector<DrawingInfo> get_drawing_infos_for_write(GreasePencil &grease_pencil,
|
||||
const IndexMask &layer_mask,
|
||||
int frame);
|
||||
|
||||
} // namespace blender::modifier::greasepencil
|
||||
|
||||
Reference in New Issue
Block a user