From 18c9f7ef72a41210208e5fa914e22bdb848e465f Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 11 Aug 2020 21:46:06 +1000 Subject: Fix T79517: Data Transfer modifier fails in edit-mode --- source/blender/modifiers/intern/MOD_datatransfer.c | 48 +++++++++++----------- source/blender/modifiers/intern/MOD_normal_edit.c | 2 + source/blender/modifiers/intern/MOD_uvproject.c | 2 + source/blender/modifiers/intern/MOD_uvwarp.c | 2 + .../blender/modifiers/intern/MOD_weighted_normal.c | 3 ++ source/blender/modifiers/intern/MOD_weightvgedit.c | 2 + source/blender/modifiers/intern/MOD_weightvgmix.c | 2 + .../modifiers/intern/MOD_weightvgproximity.c | 2 + 8 files changed, 40 insertions(+), 23 deletions(-) (limited to 'source/blender/modifiers') diff --git a/source/blender/modifiers/intern/MOD_datatransfer.c b/source/blender/modifiers/intern/MOD_datatransfer.c index 031b82fa89e..c8f49694a2f 100644 --- a/source/blender/modifiers/intern/MOD_datatransfer.c +++ b/source/blender/modifiers/intern/MOD_datatransfer.c @@ -204,29 +204,31 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * BKE_reports_init(&reports, RPT_STORE); /* Note: no islands precision for now here. */ - BKE_object_data_transfer_ex(ctx->depsgraph, - scene, - ob_source, - ctx->object, - result, - dtmd->data_types, - false, - dtmd->vmap_mode, - dtmd->emap_mode, - dtmd->lmap_mode, - dtmd->pmap_mode, - space_transform, - false, - max_dist, - dtmd->map_ray_radius, - 0.0f, - dtmd->layers_select_src, - dtmd->layers_select_dst, - dtmd->mix_mode, - dtmd->mix_factor, - dtmd->defgrp_name, - invert_vgroup, - &reports); + if (BKE_object_data_transfer_ex(ctx->depsgraph, + scene, + ob_source, + ctx->object, + result, + dtmd->data_types, + false, + dtmd->vmap_mode, + dtmd->emap_mode, + dtmd->lmap_mode, + dtmd->pmap_mode, + space_transform, + false, + max_dist, + dtmd->map_ray_radius, + 0.0f, + dtmd->layers_select_src, + dtmd->layers_select_dst, + dtmd->mix_mode, + dtmd->mix_factor, + dtmd->defgrp_name, + invert_vgroup, + &reports)) { + result->runtime.is_original = false; + } if (BKE_reports_contain(&reports, RPT_ERROR)) { const char *report_str = BKE_reports_string(&reports, RPT_ERROR); diff --git a/source/blender/modifiers/intern/MOD_normal_edit.c b/source/blender/modifiers/intern/MOD_normal_edit.c index 7039b24cfc6..ded7ec132cc 100644 --- a/source/blender/modifiers/intern/MOD_normal_edit.c +++ b/source/blender/modifiers/intern/MOD_normal_edit.c @@ -637,6 +637,8 @@ static Mesh *normalEditModifier_do(NormalEditModifierData *enmd, CustomData_free_layers(pdata, CD_NORMAL, num_polys); MEM_SAFE_FREE(loopnors); + result->runtime.is_original = false; + return result; } diff --git a/source/blender/modifiers/intern/MOD_uvproject.c b/source/blender/modifiers/intern/MOD_uvproject.c index 6f261f9f67a..361c778bb95 100644 --- a/source/blender/modifiers/intern/MOD_uvproject.c +++ b/source/blender/modifiers/intern/MOD_uvproject.c @@ -308,6 +308,8 @@ static Mesh *uvprojectModifier_do(UVProjectModifierData *umd, } } + mesh->runtime.is_original = false; + /* Mark tessellated CD layers as dirty. */ mesh->runtime.cd_dirty_vert |= CD_MASK_TESSLOOPNORMAL; diff --git a/source/blender/modifiers/intern/MOD_uvwarp.c b/source/blender/modifiers/intern/MOD_uvwarp.c index 4aca3c28ed8..1c7c3f6baf1 100644 --- a/source/blender/modifiers/intern/MOD_uvwarp.c +++ b/source/blender/modifiers/intern/MOD_uvwarp.c @@ -233,6 +233,8 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * /* XXX TODO is this still needed? */ // me_eval->dirty |= DM_DIRTY_TESS_CDLAYERS; + mesh->runtime.is_original = false; + return mesh; } diff --git a/source/blender/modifiers/intern/MOD_weighted_normal.c b/source/blender/modifiers/intern/MOD_weighted_normal.c index f174b6d5aa4..744bab02c56 100644 --- a/source/blender/modifiers/intern/MOD_weighted_normal.c +++ b/source/blender/modifiers/intern/MOD_weighted_normal.c @@ -677,6 +677,9 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * /* Currently Modifier stack assumes there is no poly normal data passed around... */ CustomData_free_layers(pdata, CD_NORMAL, numPolys); + + result->runtime.is_original = false; + return result; } diff --git a/source/blender/modifiers/intern/MOD_weightvgedit.c b/source/blender/modifiers/intern/MOD_weightvgedit.c index 8039856172a..e15320afc28 100644 --- a/source/blender/modifiers/intern/MOD_weightvgedit.c +++ b/source/blender/modifiers/intern/MOD_weightvgedit.c @@ -312,6 +312,8 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * MEM_freeN(new_w); MEM_freeN(dw); + mesh->runtime.is_original = false; + /* Return the vgroup-modified mesh. */ return mesh; } diff --git a/source/blender/modifiers/intern/MOD_weightvgmix.c b/source/blender/modifiers/intern/MOD_weightvgmix.c index d1c618df68b..cdd0e2c00de 100644 --- a/source/blender/modifiers/intern/MOD_weightvgmix.c +++ b/source/blender/modifiers/intern/MOD_weightvgmix.c @@ -456,6 +456,8 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * MEM_freeN(dw2); MEM_SAFE_FREE(indices); + mesh->runtime.is_original = false; + /* Return the vgroup-modified mesh. */ return mesh; } diff --git a/source/blender/modifiers/intern/MOD_weightvgproximity.c b/source/blender/modifiers/intern/MOD_weightvgproximity.c index 0668a7a086f..b23eb997f61 100644 --- a/source/blender/modifiers/intern/MOD_weightvgproximity.c +++ b/source/blender/modifiers/intern/MOD_weightvgproximity.c @@ -637,6 +637,8 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * TIMEIT_END(perf); #endif + mesh->runtime.is_original = false; + /* Return the vgroup-modified mesh. */ return mesh; } -- cgit v1.2.3