diff options
Diffstat (limited to 'source/blender/editors/object/object_data_transfer.c')
-rw-r--r-- | source/blender/editors/object/object_data_transfer.c | 42 |
1 files changed, 21 insertions, 21 deletions
diff --git a/source/blender/editors/object/object_data_transfer.c b/source/blender/editors/object/object_data_transfer.c index 1e2b7702dc5..5a0656ee916 100644 --- a/source/blender/editors/object/object_data_transfer.c +++ b/source/blender/editors/object/object_data_transfer.c @@ -76,7 +76,7 @@ static const EnumPropertyItem DT_layer_items[] = { {0, "", 0, "Edge Data", ""}, {DT_TYPE_SHARP_EDGE, "SHARP_EDGE", 0, "Sharp", "Transfer sharp mark"}, {DT_TYPE_SEAM, "SEAM", 0, "UV Seam", "Transfer UV seam mark"}, - {DT_TYPE_CREASE, "CREASE", 0, "Subsurf Crease", "Transfer crease values"}, + {DT_TYPE_CREASE, "CREASE", 0, "Subdivision Crease", "Transfer crease values"}, {DT_TYPE_BWEIGHT_EDGE, "BEVEL_WEIGHT_EDGE", 0, "Bevel Weight", "Transfer bevel weights"}, {DT_TYPE_FREESTYLE_EDGE, "FREESTYLE_EDGE", @@ -254,16 +254,12 @@ static const EnumPropertyItem *dt_layers_select_itemf(bContext *C, if (reverse_transfer) { return dt_layers_select_src_itemf(C, ptr, prop, r_free); } - else { - return dt_layers_select_dst_itemf(C, ptr, prop, r_free); - } - } - else if (reverse_transfer) { return dt_layers_select_dst_itemf(C, ptr, prop, r_free); } - else { - return dt_layers_select_src_itemf(C, ptr, prop, r_free); + if (reverse_transfer) { + return dt_layers_select_dst_itemf(C, ptr, prop, r_free); } + return dt_layers_select_src_itemf(C, ptr, prop, r_free); } /* Note: rna_enum_dt_mix_mode_items enum is from rna_modifier.c */ @@ -381,7 +377,7 @@ static bool data_transfer_exec_is_object_valid(wmOperator *op, me->id.tag &= ~LIB_TAG_DOIT; return true; } - else if (!ID_IS_LINKED(me)) { + if (!ID_IS_LINKED(me) && !ID_IS_OVERRIDE_LIBRARY(me)) { /* Do not apply transfer operation more than once. */ /* XXX This is not nice regarding vgroups, which are half-Object data... :/ */ BKE_reportf( @@ -424,8 +420,8 @@ static int data_transfer_exec(bContext *C, wmOperator *op) const float ray_radius = RNA_float_get(op->ptr, "ray_radius"); const float islands_precision = RNA_float_get(op->ptr, "islands_precision"); - const int layers_src = RNA_enum_get(op->ptr, "layers_select_src"); - const int layers_dst = RNA_enum_get(op->ptr, "layers_select_dst"); + int layers_src = RNA_enum_get(op->ptr, "layers_select_src"); + int layers_dst = RNA_enum_get(op->ptr, "layers_select_dst"); int layers_select_src[DT_MULTILAYER_INDEX_MAX] = {0}; int layers_select_dst[DT_MULTILAYER_INDEX_MAX] = {0}; const int fromto_idx = BKE_object_data_transfer_dttype_to_srcdst_index(data_type); @@ -446,11 +442,15 @@ static int data_transfer_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } - if (reverse_transfer && ID_IS_LINKED(ob_src->data)) { - /* Do not transfer to linked data, not supported. */ + if (reverse_transfer && (ID_IS_LINKED(ob_src->data) || ID_IS_OVERRIDE_LIBRARY(ob_src->data))) { + /* Do not transfer to linked or override data, not supported. */ return OPERATOR_CANCELLED; } + if (reverse_transfer) { + SWAP(int, layers_src, layers_dst); + } + if (fromto_idx != DT_MULTILAYER_INDEX_INVALID) { layers_select_src[fromto_idx] = layers_src; layers_select_dst[fromto_idx] = layers_dst; @@ -512,13 +512,15 @@ static int data_transfer_exec(bContext *C, wmOperator *op) BLI_freelistN(&ctx_objects); - WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, NULL); + if (changed) { + DEG_relations_tag_update(CTX_data_main(C)); + WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, NULL); + } #if 0 /* TODO */ /* Note: issue with that is that if canceled, operator cannot be redone... Nasty in our case. */ return changed ? OPERATOR_FINISHED : OPERATOR_CANCELLED; #else - (void)changed; return OPERATOR_FINISHED; #endif } @@ -530,7 +532,7 @@ static bool data_transfer_poll(bContext *C) { Object *ob = ED_object_active_context(C); ID *data = (ob) ? ob->data : NULL; - return (ob && ob->type == OB_MESH && data); + return (ob != NULL && ob->type == OB_MESH && data != NULL); } /* Used by both OBJECT_OT_data_transfer and OBJECT_OT_datalayout_transfer */ @@ -786,7 +788,7 @@ static int datalayout_transfer_exec(bContext *C, wmOperator *op) const bool use_delete = false; /* Never when used from modifier, for now. */ - if (!ob_src) { + if (!ob_src || ID_IS_LINKED(ob_dst) || ID_IS_OVERRIDE_LIBRARY(ob_dst)) { return OPERATOR_CANCELLED; } @@ -854,12 +856,10 @@ static int datalayout_transfer_exec(bContext *C, wmOperator *op) static int datalayout_transfer_invoke(bContext *C, wmOperator *op, const wmEvent *event) { - if (edit_modifier_invoke_properties(C, op)) { + if (edit_modifier_invoke_properties(C, op, NULL, NULL)) { return datalayout_transfer_exec(C, op); } - else { - return WM_menu_invoke(C, op, event); - } + return WM_menu_invoke(C, op, event); } void OBJECT_OT_datalayout_transfer(wmOperatorType *ot) |