GPencil: Add operator to create new grease pencil object #108462
|
@ -203,7 +203,6 @@ class Layer : public ::GreasePencilLayer {
|
||||||
* \returns true on success.
|
* \returns true on success.
|
||||||
*/
|
*/
|
||||||
bool insert_frame(int frame_number, const GreasePencilFrame &frame);
|
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
|
* 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.
|
* \returns true on success.
|
||||||
*/
|
*/
|
||||||
bool overwrite_frame(int frame_number, const GreasePencilFrame &frame);
|
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.
|
* Returns the sorted (start) frame numbers of the frames of this layer.
|
||||||
|
|
|
@ -409,24 +409,12 @@ bool Layer::insert_frame(int frame_number, const GreasePencilFrame &frame)
|
||||||
return this->frames_for_write().add(frame_number, 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)
|
bool Layer::overwrite_frame(int frame_number, const GreasePencilFrame &frame)
|
||||||
{
|
{
|
||||||
this->tag_frames_map_changed();
|
this->tag_frames_map_changed();
|
||||||
return this->frames_for_write().add_overwrite(frame_number, frame);
|
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
|
Span<int> Layer::sorted_keys() const
|
||||||
{
|
{
|
||||||
this->runtime->sorted_keys_cache_.ensure([&](Vector<int> &r_data) {
|
this->runtime->sorted_keys_cache_.ensure([&](Vector<int> &r_data) {
|
||||||
|
|
|
@ -250,7 +250,7 @@ void create_blank(Main &bmain, Object &object, const int frame_numer)
|
||||||
grease_pencil.add_empty_drawings(1);
|
grease_pencil.add_empty_drawings(1);
|
||||||
filedescriptor marked this conversation as resolved
|
|||||||
|
|
||||||
GreasePencilFrame frame{0, 0, BEZT_KEYTYPE_KEYFRAME};
|
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)
|
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 *>(
|
GreasePencilDrawing &drawing = *reinterpret_cast<GreasePencilDrawing *>(
|
||||||
grease_pencil.drawings_for_write()[1]);
|
grease_pencil.drawings_for_write()[1]);
|
||||||
std::array stroke_offsets{0, 175};
|
drawing.geometry.wrap() = create_drawing_data(
|
||||||
filedescriptor marked this conversation as resolved
Outdated
Hans Goudey
commented
If you like it better too, you could put these directly in the arguments like so:
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);
```
|
|||||||
std::array materials{material_index};
|
stroke_positions, stroke_radii, stroke_opacities, {0, 175}, {material_index}, {75}, matrix);
|
||||||
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();
|
|
||||||
|
|
||||||
GreasePencilFrame frame_lines{0, 0, BEZT_KEYTYPE_KEYFRAME};
|
GreasePencilFrame frame_lines{0, 0, BEZT_KEYTYPE_KEYFRAME};
|
||||||
GreasePencilFrame frame_color{1, 0, BEZT_KEYTYPE_KEYFRAME};
|
GreasePencilFrame frame_color{1, 0, BEZT_KEYTYPE_KEYFRAME};
|
||||||
layer_lines.insert_frame(frame_numer, std::move(frame_lines));
|
layer_lines.insert_frame(frame_numer, frame_lines);
|
||||||
layer_color.insert_frame(frame_numer, std::move(frame_color));
|
layer_color.insert_frame(frame_numer, frame_color);
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace blender::ed::greasepencil
|
} // namespace blender::ed::greasepencil
|
|
@ -1634,14 +1634,13 @@ static int object_grease_pencil_add_exec(bContext *C, wmOperator *op)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case GP_STROKE: {
|
case GP_STROKE: {
|
||||||
float radius = RNA_float_get(op->ptr, "radius");
|
const float radius = RNA_float_get(op->ptr, "radius");
|
||||||
float scale[3];
|
const float3 scale(radius);
|
||||||
filedescriptor marked this conversation as resolved
Outdated
Hans Goudey
commented
`const float3 scale(radius);`
|
|||||||
copy_v3_fl(scale, radius);
|
|
||||||
|
|
||||||
float mat[4][4];
|
float4x4 mat;
|
||||||
ED_object_new_primitive_matrix(C, object, loc, rot, scale, mat);
|
ED_object_new_primitive_matrix(C, object, loc, rot, scale, mat.ptr());
|
||||||
|
|
||||||
filedescriptor marked this conversation as resolved
Hans Goudey
commented
This should work here:
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;
|
break;
|
||||||
}
|
}
|
||||||
case GP_MONKEY:
|
case GP_MONKEY:
|
||||||
|
|
Loading…
Reference in New Issue
int frame_numer
->const int frame_numer