Separate operators (mesh/curve/armature/gpencil): take user preferences
into account for duplicating actions Previously actions remained linked after duplication, now this is based on the User Preferences (PreferencesEdit.use_duplicate_action). note: default is ON here, so this changes default behavior of separate operators. First intuition was to respect _all_ preferences here (e.g. also duplicating materials if chosen in the User Preferences) but after consideration this is probably not what the User would expect from such 'modeling' opertions (e.g. separate by loose parts resulting in possibly many duplicate materials) Fixes T71038 Maniphest Tasks: T71038 Differential Revision: https://developer.blender.org/D6120
This commit is contained in:
@@ -667,8 +667,9 @@ static int separate_armature_exec(bContext *C, wmOperator *op)
|
||||
|
||||
/* 2) duplicate base */
|
||||
|
||||
/* only duplicate linked armature */
|
||||
Base *base_new = ED_object_add_duplicate(bmain, scene, view_layer, base_old, USER_DUP_ARM);
|
||||
/* Only duplicate linked armature but take into account user preferences for duplicating actions. */
|
||||
short dupflag = USER_DUP_ARM | (U.dupflag & USER_DUP_ACT);
|
||||
Base *base_new = ED_object_add_duplicate(bmain, scene, view_layer, base_old, dupflag);
|
||||
Object *ob_new = base_new->object;
|
||||
|
||||
DEG_relations_tag_update(bmain);
|
||||
|
||||
@@ -1405,12 +1405,15 @@ static int separate_exec(bContext *C, wmOperator *op)
|
||||
}
|
||||
|
||||
/* 2. Duplicate the object and data. */
|
||||
|
||||
/* Take into account user preferences for duplicating actions. */
|
||||
short dupflag = (U.dupflag & USER_DUP_ACT);
|
||||
|
||||
newbase = ED_object_add_duplicate(bmain,
|
||||
scene,
|
||||
view_layer,
|
||||
oldbase,
|
||||
/* 0 = fully linked. */
|
||||
0);
|
||||
dupflag);
|
||||
DEG_relations_tag_update(bmain);
|
||||
|
||||
newob = newbase->object;
|
||||
|
||||
@@ -4092,8 +4092,11 @@ static int gp_stroke_separate_exec(bContext *C, wmOperator *op)
|
||||
|
||||
const bool is_multiedit = (bool)GPENCIL_MULTIEDIT_SESSIONS_ON(gpd_src);
|
||||
|
||||
/* create a new object */
|
||||
base_new = ED_object_add_duplicate(bmain, scene, view_layer, base_old, 0);
|
||||
/* Create a new object. */
|
||||
/* Take into account user preferences for duplicating actions. */
|
||||
short dupflag = (U.dupflag & USER_DUP_ACT);
|
||||
|
||||
base_new = ED_object_add_duplicate(bmain, scene, view_layer, base_old, dupflag);
|
||||
ob_dst = base_new->object;
|
||||
ob_dst->mode = OB_MODE_OBJECT;
|
||||
/* create new grease pencil datablock */
|
||||
|
||||
@@ -3929,7 +3929,9 @@ static Base *mesh_separate_tagged(
|
||||
CustomData_bmesh_init_pool(&bm_new->ldata, bm_mesh_allocsize_default.totloop, BM_LOOP);
|
||||
CustomData_bmesh_init_pool(&bm_new->pdata, bm_mesh_allocsize_default.totface, BM_FACE);
|
||||
|
||||
base_new = ED_object_add_duplicate(bmain, scene, view_layer, base_old, USER_DUP_MESH);
|
||||
/* Take into account user preferences for duplicating actions. */
|
||||
short dupflag = USER_DUP_MESH | (U.dupflag & USER_DUP_ACT);
|
||||
base_new = ED_object_add_duplicate(bmain, scene, view_layer, base_old, dupflag);
|
||||
|
||||
/* normally would call directly after but in this case delay recalc */
|
||||
/* DAG_relations_tag_update(bmain); */
|
||||
@@ -3999,7 +4001,9 @@ static Base *mesh_separate_arrays(Main *bmain,
|
||||
CustomData_bmesh_init_pool(&bm_new->ldata, faces_len * 3, BM_LOOP);
|
||||
CustomData_bmesh_init_pool(&bm_new->pdata, faces_len, BM_FACE);
|
||||
|
||||
base_new = ED_object_add_duplicate(bmain, scene, view_layer, base_old, USER_DUP_MESH);
|
||||
/* Take into account user preferences for duplicating actions. */
|
||||
short dupflag = USER_DUP_MESH | (U.dupflag & USER_DUP_ACT);
|
||||
base_new = ED_object_add_duplicate(bmain, scene, view_layer, base_old, dupflag);
|
||||
|
||||
/* normally would call directly after but in this case delay recalc */
|
||||
/* DAG_relations_tag_update(bmain); */
|
||||
|
||||
Reference in New Issue
Block a user