diff options
Diffstat (limited to 'source/blender/editors/object')
-rw-r--r-- | source/blender/editors/object/object_add.c | 29 | ||||
-rw-r--r-- | source/blender/editors/object/object_vgroup.c | 40 |
2 files changed, 36 insertions, 33 deletions
diff --git a/source/blender/editors/object/object_add.c b/source/blender/editors/object/object_add.c index 34400462d38..2e34284f46e 100644 --- a/source/blender/editors/object/object_add.c +++ b/source/blender/editors/object/object_add.c @@ -766,8 +766,6 @@ static int lightprobe_add_exec(bContext *C, wmOperator *op) BKE_lightprobe_type_set(probe, type); - DEG_relations_tag_update(CTX_data_main(C)); - return OPERATOR_FINISHED; } @@ -884,8 +882,6 @@ static int effector_add_exec(bContext *C, wmOperator *op) ob->pd = BKE_partdeflect_new(type); - DEG_relations_tag_update(CTX_data_main(C)); - return OPERATOR_FINISHED; } @@ -1015,8 +1011,10 @@ static int object_metaball_add_exec(bContext *C, wmOperator *op) if (newob && !enter_editmode) { ED_object_editmode_exit_ex(bmain, scene, obedit, EM_FREEDATA); } - - WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, obedit); + else { + /* Only needed in edit-mode (#ED_object_add_type normally handles this). */ + WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, obedit); + } return OPERATOR_FINISHED; } @@ -1067,8 +1065,6 @@ static int object_add_text_exec(bContext *C, wmOperator *op) obedit = ED_object_add_type(C, OB_FONT, NULL, loc, rot, enter_editmode, local_view_bits); BKE_object_obdata_size_init(obedit, RNA_float_get(op->ptr, "radius")); - WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, obedit); - return OPERATOR_FINISHED; } @@ -1138,8 +1134,6 @@ static int object_armature_add_exec(bContext *C, wmOperator *op) ED_object_editmode_exit_ex(bmain, scene, obedit, EM_FREEDATA); } - WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, obedit); - return OPERATOR_FINISHED; } @@ -1670,7 +1664,6 @@ static int collection_instance_add_exec(bContext *C, wmOperator *op) return OPERATOR_CANCELLED; } - Scene *scene = CTX_data_scene(C); ViewLayer *view_layer = CTX_data_view_layer(C); /* Avoid dependency cycles. */ @@ -1686,12 +1679,6 @@ static int collection_instance_add_exec(bContext *C, wmOperator *op) ob->transflag |= OB_DUPLICOLLECTION; id_us_plus(&collection->id); - /* works without this except if you try render right after, see: 22027 */ - DEG_relations_tag_update(bmain); - DEG_id_tag_update(&scene->id, ID_RECALC_SELECT); - WM_event_add_notifier(C, NC_SCENE | ND_OB_ACTIVE, scene); - WM_event_add_notifier(C, NC_SCENE | ND_LAYER_CONTENT, scene); - return OPERATOR_FINISHED; } @@ -1784,17 +1771,9 @@ static int object_data_instance_add_exec(bContext *C, wmOperator *op) return OPERATOR_CANCELLED; } - Scene *scene = CTX_data_scene(C); - ED_object_add_type_with_obdata( C, object_type, id->name + 2, loc, rot, false, local_view_bits, id); - /* Works without this except if you try render right after, see: T22027. */ - DEG_relations_tag_update(bmain); - DEG_id_tag_update(&scene->id, ID_RECALC_SELECT); - WM_event_add_notifier(C, NC_SCENE | ND_OB_ACTIVE, scene); - WM_event_add_notifier(C, NC_SCENE | ND_LAYER_CONTENT, scene); - return OPERATOR_FINISHED; } diff --git a/source/blender/editors/object/object_vgroup.c b/source/blender/editors/object/object_vgroup.c index 7a42c9d5d8b..f0ab082cd9c 100644 --- a/source/blender/editors/object/object_vgroup.c +++ b/source/blender/editors/object/object_vgroup.c @@ -28,6 +28,7 @@ #include "MEM_guardedalloc.h" #include "DNA_curve_types.h" +#include "DNA_gpencil_types.h" #include "DNA_lattice_types.h" #include "DNA_mesh_types.h" #include "DNA_meshdata_types.h" @@ -39,6 +40,7 @@ #include "BLI_alloca.h" #include "BLI_array.h" #include "BLI_blenlib.h" +#include "BLI_listbase.h" #include "BLI_math.h" #include "BLI_utildefines.h" #include "BLI_utildefines_stack.h" @@ -4083,16 +4085,38 @@ static int vgroup_do_remap(Object *ob, const char *name_array, wmOperator *op) } else { int dvert_tot = 0; + /* Grease pencil stores vertex groups separately for each stroke, + * so remap each stroke's weights separately. */ + if (ob->type == OB_GPENCIL) { + bGPdata *gpd = ob->data; + LISTBASE_FOREACH (bGPDlayer *, gpl, &gpd->layers) { + LISTBASE_FOREACH (bGPDframe *, gpf, &gpl->frames) { + LISTBASE_FOREACH (bGPDstroke *, gps, &gpf->strokes) { + dvert = gps->dvert; + dvert_tot = gps->totpoints; + if (dvert) { + while (dvert_tot--) { + if (dvert->totweight) { + BKE_defvert_remap(dvert, sort_map, defbase_tot); + } + dvert++; + } + } + } + } + } + } + else { + BKE_object_defgroup_array_get(ob->data, &dvert, &dvert_tot); - BKE_object_defgroup_array_get(ob->data, &dvert, &dvert_tot); - - /* Create as necessary. */ - if (dvert) { - while (dvert_tot--) { - if (dvert->totweight) { - BKE_defvert_remap(dvert, sort_map, defbase_tot); + /* Create as necessary. */ + if (dvert) { + while (dvert_tot--) { + if (dvert->totweight) { + BKE_defvert_remap(dvert, sort_map, defbase_tot); + } + dvert++; } - dvert++; } } } |