[Bf-blender-cvs] [e4e1900012] master: Fix (IRC reported) DataTransfer modifier affecting base mesh in some cases.

Bastien Montagne noreply at git.blender.org
Fri Jan 27 19:29:48 CET 2017


Commit: e4e19000129569d9b1a33effd9f25c4847203949
Author: Bastien Montagne
Date:   Fri Jan 27 19:27:07 2017 +0100
Branches: master
https://developer.blender.org/rBe4e19000129569d9b1a33effd9f25c4847203949

Fix (IRC reported) DataTransfer modifier affecting base mesh in some cases.

Checking only whether mverts is same as base mesh one is not enough in
all cases, some modifiers (deform ones) can only generate new mvert
data, while keeping others from original mesh.

Now checking both mvert or medge, hopefully this will be enough to catch
all problematic cases this time.

Thanks @gaia for finding that problem. :)

===================================================================

M	source/blender/modifiers/intern/MOD_datatransfer.c

===================================================================

diff --git a/source/blender/modifiers/intern/MOD_datatransfer.c b/source/blender/modifiers/intern/MOD_datatransfer.c
index 53742ef203..1e69ba87f9 100644
--- a/source/blender/modifiers/intern/MOD_datatransfer.c
+++ b/source/blender/modifiers/intern/MOD_datatransfer.c
@@ -179,7 +179,6 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *der
 
 	/* Only used to check wehther we are operating on org data or not... */
 	Mesh *me = ob->data;
-	MVert *mvert;
 
 	const bool invert_vgroup = (dtmd->flags & MOD_DATATRANSFER_INVERT_VGROUP) != 0;
 
@@ -192,8 +191,9 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *der
 		BLI_SPACE_TRANSFORM_SETUP(space_transform, ob, dtmd->ob_source);
 	}
 
-	mvert = dm->getVertArray(dm);
-	if ((me->mvert == mvert) && (dtmd->data_types & DT_TYPES_AFFECT_MESH)) {
+	MVert *mvert = dm->getVertArray(dm);
+	MEdge *medge = dm->getEdgeArray(dm);
+	if (((me->mvert == mvert) || (me->medge == medge)) && (dtmd->data_types & DT_TYPES_AFFECT_MESH)) {
 		/* We need to duplicate data here, otherwise setting custom normals, edges' shaprness, etc., could
 		 * modify org mesh, see T43671. */
 		dm = CDDM_copy(dm);




More information about the Bf-blender-cvs mailing list