GPv3: Fix: Crash when drawing without a layer #109330
|
@ -42,6 +42,7 @@ struct PaintOperationExecutor {
|
|||
using namespace blender::bke;
|
||||
Depsgraph *depsgraph = CTX_data_depsgraph_pointer(&C);
|
||||
ARegion *region = CTX_wm_region(&C);
|
||||
Scene *scene = CTX_data_scene(&C);
|
||||
Object *obact = CTX_data_active_object(&C);
|
||||
Object *ob_eval = DEG_get_evaluated_object(depsgraph, obact);
|
||||
|
||||
|
@ -52,6 +53,12 @@ struct PaintOperationExecutor {
|
|||
*/
|
||||
GreasePencil &grease_pencil = *static_cast<GreasePencil *>(ob_eval->data);
|
||||
|
||||
if (!grease_pencil.has_active_layer()) {
|
||||
bke::greasepencil::Layer &new_layer = grease_pencil.add_layer("GP_Layer");
|
||||
grease_pencil.set_active_layer(&new_layer);
|
||||
grease_pencil.insert_blank_frame(new_layer, scene->r.cfra, 0, BEZT_KEYTYPE_KEYFRAME);
|
||||
}
|
||||
|
||||
float4 plane{0.0f, -1.0f, 0.0f, 0.0f};
|
||||
casey-bianco-davis marked this conversation as resolved
Outdated
|
||||
float3 proj_pos;
|
||||
ED_view3d_win_to_3d_on_plane(region, plane, extension_sample.mouse_position, false, proj_pos);
|
||||
|
@ -85,7 +92,12 @@ void PaintOperation::on_stroke_done(const bContext &C)
|
|||
|
||||
GreasePencil &grease_pencil_orig = *static_cast<GreasePencil *>(obact->data);
|
||||
GreasePencil &grease_pencil_eval = *static_cast<GreasePencil *>(ob_eval->data);
|
||||
BLI_assert(grease_pencil_orig.has_active_layer());
|
||||
if (!grease_pencil_orig.has_active_layer()) {
|
||||
bke::greasepencil::Layer &new_layer = grease_pencil_orig.add_layer("GP_Layer");
|
||||
grease_pencil_orig.set_active_layer(&new_layer);
|
||||
grease_pencil_orig.insert_blank_frame(new_layer, scene->r.cfra, 0, BEZT_KEYTYPE_KEYFRAME);
|
||||
}
|
||||
BLI_assert(grease_pencil_orig.has_active_layer() && grease_pencil_eval.has_active_layer());
|
||||
const bke::greasepencil::Layer &active_layer_orig = *grease_pencil_orig.get_active_layer();
|
||||
int index_orig = active_layer_orig.drawing_index_at(scene->r.cfra);
|
||||
|
||||
|
|
Loading…
Reference in New Issue
This is not right. The
frame
should point to the newly added empty drawing.GreasePencilFrame frame{this->drawings().index_range().last(), 0, BEZT_KEYTYPE_KEYFRAME};