diff --git a/source/blender/blenkernel/BKE_grease_pencil.hh b/source/blender/blenkernel/BKE_grease_pencil.hh index 4f23f247b33..37a3420affe 100644 --- a/source/blender/blenkernel/BKE_grease_pencil.hh +++ b/source/blender/blenkernel/BKE_grease_pencil.hh @@ -729,7 +729,9 @@ namespace convert { void legacy_gpencil_frame_to_grease_pencil_drawing(const bGPDframe &gpf, const ListBase &vertex_group_names, GreasePencilDrawing &r_drawing); -void legacy_gpencil_to_grease_pencil(Main &main, GreasePencil &grease_pencil, bGPdata &gpd); +void legacy_gpencil_to_grease_pencil(Main &bmain, GreasePencil &grease_pencil, bGPdata &gpd); + +void legacy_gpencil_object(Main &bmain, Object &object); } // namespace convert } // namespace greasepencil diff --git a/source/blender/blenkernel/intern/grease_pencil_convert_legacy.cc b/source/blender/blenkernel/intern/grease_pencil_convert_legacy.cc index 8220396c796..548407130cd 100644 --- a/source/blender/blenkernel/intern/grease_pencil_convert_legacy.cc +++ b/source/blender/blenkernel/intern/grease_pencil_convert_legacy.cc @@ -10,7 +10,9 @@ #include "BKE_curves.hh" #include "BKE_deform.hh" #include "BKE_grease_pencil.hh" +#include "BKE_lib_id.hh" #include "BKE_material.h" +#include "BKE_object.hh" #include "BLI_color.hh" #include "BLI_listbase.h" @@ -334,4 +336,24 @@ void legacy_gpencil_to_grease_pencil(Main &bmain, GreasePencil &grease_pencil, b BKE_id_materials_copy(&bmain, &gpd.id, &grease_pencil.id); } +void legacy_gpencil_object(Main &bmain, Object &object) +{ + bGPdata *gpd = static_cast(object.data); + + GreasePencil *new_grease_pencil = static_cast( + BKE_id_new(&bmain, ID_GP, gpd->id.name + 2)); + object.data = new_grease_pencil; + object.type = OB_GREASE_PENCIL; + + /* NOTE: Could also use #BKE_id_free_us, to also free the legacy GP if not used anymore? */ + id_us_min(&gpd->id); + /* No need to increase usercount of `new_grease_pencil`, since ID creation already set it + * to 1. */ + + legacy_gpencil_to_grease_pencil(bmain, *new_grease_pencil, *gpd); + + BKE_object_free_derived_caches(&object); + BKE_object_free_modifiers(&object, 0); +} + } // namespace blender::bke::greasepencil::convert diff --git a/source/blender/editors/object/object_add.cc b/source/blender/editors/object/object_add.cc index e7ee36c974f..39755905cd1 100644 --- a/source/blender/editors/object/object_add.cc +++ b/source/blender/editors/object/object_add.cc @@ -3222,8 +3222,6 @@ static int object_convert_exec(bContext *C, wmOperator *op) { ob->flag |= OB_DONE; - bGPdata *gpd = static_cast(ob->data); - if (keep_original) { BLI_assert_unreachable(); } @@ -3231,21 +3229,7 @@ static int object_convert_exec(bContext *C, wmOperator *op) newob = ob; } - GreasePencil *new_grease_pencil = static_cast( - BKE_id_new(bmain, ID_GP, gpd->id.name + 2)); - newob->data = new_grease_pencil; - newob->type = OB_GREASE_PENCIL; - - /* NOTE: Could also use #BKE_id_free_us, to also free the legacy GP if not used anymore? */ - id_us_min(&gpd->id); - /* No need to increase usercount of `new_grease_pencil`, since ID creation already set it - * to 1. */ - - bke::greasepencil::convert::legacy_gpencil_to_grease_pencil( - *bmain, *new_grease_pencil, *gpd); - - BKE_object_free_derived_caches(newob); - BKE_object_free_modifiers(newob, 0); + bke::greasepencil::convert::legacy_gpencil_object(*bmain, *newob); } else if (target == OB_CURVES) { ob->flag |= OB_DONE;