GPencil: Add operator to create new grease pencil object #108462

Merged
Falk David merged 7 commits from filedescriptor/blender:gp-add-stroke into main 2023-05-31 18:00:32 +02:00
4 changed files with 10 additions and 34 deletions
Showing only changes of commit 1144bc1476 - Show all commits

View File

@ -203,7 +203,6 @@ class Layer : public ::GreasePencilLayer {
* \returns true on success.
*/
bool insert_frame(int frame_number, const GreasePencilFrame &frame);
bool insert_frame(int frame_number, GreasePencilFrame &&frame);
/**
* Inserts the frame into the layer. If there exists a frame at \a frame_number already, it is
@ -211,7 +210,6 @@ class Layer : public ::GreasePencilLayer {
* \returns true on success.
*/
bool overwrite_frame(int frame_number, const GreasePencilFrame &frame);
bool overwrite_frame(int frame_number, GreasePencilFrame &&frame);
/**
* Returns the sorted (start) frame numbers of the frames of this layer.

View File

@ -409,24 +409,12 @@ bool Layer::insert_frame(int frame_number, const GreasePencilFrame &frame)
return this->frames_for_write().add(frame_number, frame);
}
bool Layer::insert_frame(int frame_number, GreasePencilFrame &&frame)
{
this->tag_frames_map_changed();
return this->frames_for_write().add(frame_number, frame);
}
bool Layer::overwrite_frame(int frame_number, const GreasePencilFrame &frame)
{
this->tag_frames_map_changed();
return this->frames_for_write().add_overwrite(frame_number, frame);
}
bool Layer::overwrite_frame(int frame_number, GreasePencilFrame &&frame)
{
this->tag_frames_map_changed();
return this->frames_for_write().add_overwrite(frame_number, std::move(frame));
}
Span<int> Layer::sorted_keys() const
{
this->runtime->sorted_keys_cache_.ensure([&](Vector<int> &r_data) {

View File

@ -250,7 +250,7 @@ void create_blank(Main &bmain, Object &object, const int frame_numer)
grease_pencil.add_empty_drawings(1);
filedescriptor marked this conversation as resolved
Review

int frame_numer -> const int frame_numer

`int frame_numer` -> `const int frame_numer`
GreasePencilFrame frame{0, 0, BEZT_KEYTYPE_KEYFRAME};
new_layer.insert_frame(frame_numer, std::move(frame));
new_layer.insert_frame(frame_numer, frame);
}
void create_stroke(Main &bmain, Object &object, float4x4 matrix, const int frame_numer)
@ -275,22 +275,13 @@ void create_stroke(Main &bmain, Object &object, float4x4 matrix, const int frame
GreasePencilDrawing &drawing = *reinterpret_cast<GreasePencilDrawing *>(
grease_pencil.drawings_for_write()[1]);
std::array stroke_offsets{0, 175};
std::array materials{material_index};
std::array radii_factor{75};
drawing.geometry.wrap() = create_drawing_data(stroke_positions,
stroke_radii,
stroke_opacities,
stroke_offsets,
materials,
radii_factor,
matrix);
drawing.tag_positions_changed();
drawing.geometry.wrap() = create_drawing_data(
filedescriptor marked this conversation as resolved Outdated

If you like it better too, you could put these directly in the arguments like so:

  drawing.geometry.wrap() = create_drawing_data(stroke_positions,
                                                stroke_radii,
                                                stroke_opacities,
                                                {0, 175},
                                                {material_index},
                                                {75},
                                                matrix);
If you like it better too, you could put these directly in the arguments like so: ``` drawing.geometry.wrap() = create_drawing_data(stroke_positions, stroke_radii, stroke_opacities, {0, 175}, {material_index}, {75}, matrix); ```
stroke_positions, stroke_radii, stroke_opacities, {0, 175}, {material_index}, {75}, matrix);
GreasePencilFrame frame_lines{0, 0, BEZT_KEYTYPE_KEYFRAME};
GreasePencilFrame frame_color{1, 0, BEZT_KEYTYPE_KEYFRAME};
layer_lines.insert_frame(frame_numer, std::move(frame_lines));
layer_color.insert_frame(frame_numer, std::move(frame_color));
layer_lines.insert_frame(frame_numer, frame_lines);
layer_color.insert_frame(frame_numer, frame_color);
}
} // namespace blender::ed::greasepencil

View File

@ -1634,14 +1634,13 @@ static int object_grease_pencil_add_exec(bContext *C, wmOperator *op)
break;
}
case GP_STROKE: {
float radius = RNA_float_get(op->ptr, "radius");
float scale[3];
copy_v3_fl(scale, radius);
const float radius = RNA_float_get(op->ptr, "radius");
const float3 scale(radius);
filedescriptor marked this conversation as resolved Outdated

const float3 scale(radius);

`const float3 scale(radius);`
float mat[4][4];
ED_object_new_primitive_matrix(C, object, loc, rot, scale, mat);
float4x4 mat;
ED_object_new_primitive_matrix(C, object, loc, rot, scale, mat.ptr());
filedescriptor marked this conversation as resolved
Review

This should work here:

float4x4 mat;
ED_object_new_primitive_matrix(C, object, loc, rot, scale, mat.ptr());
This should work here: ``` float4x4 mat; ED_object_new_primitive_matrix(C, object, loc, rot, scale, mat.ptr()); ```
greasepencil::create_stroke(*bmain, *object, float4x4(mat), scene->r.cfra);
greasepencil::create_stroke(*bmain, *object, mat, scene->r.cfra);
break;
}
case GP_MONKEY: