[Bf-blender-cvs] [69f2305415a] master: Fix T54992: Lattice modifier on another Lattice object does not take the Influence vertexgroup into account

Philipp Oeser noreply at git.blender.org
Wed May 9 15:04:30 CEST 2018


Commit: 69f2305415a224c277fe4fa9c81f846ba60cbb17
Author: Philipp Oeser
Date:   Tue May 8 11:05:42 2018 +0200
Branches: master
https://developer.blender.org/rB69f2305415a224c277fe4fa9c81f846ba60cbb17

Fix T54992: Lattice modifier on another Lattice object does not take the
Influence vertexgroup into account

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

M	source/blender/blenkernel/intern/lattice.c

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

diff --git a/source/blender/blenkernel/intern/lattice.c b/source/blender/blenkernel/intern/lattice.c
index 4b9748133d7..edca0257d20 100644
--- a/source/blender/blenkernel/intern/lattice.c
+++ b/source/blender/blenkernel/intern/lattice.c
@@ -859,47 +859,40 @@ void lattice_deform_verts(Object *laOb, Object *target, DerivedMesh *dm,
                           float (*vertexCos)[3], int numVerts, const char *vgroup, float fac)
 {
 	LatticeDeformData *lattice_deform_data;
+	MDeformVert *dvert = NULL;
+	int defgrp_index = -1;
 	int a;
-	bool use_vgroups;
 
 	if (laOb->type != OB_LATTICE)
 		return;
 
 	lattice_deform_data = init_latt_deform(laOb, target);
 
-	/* check whether to use vertex groups (only possible if target is a Mesh)
-	 * we want either a Mesh with no derived data, or derived data with
-	 * deformverts
+	/* Check whether to use vertex groups (only possible if target is a Mesh or Lattice).
+	 * We want either a Mesh/Lattice with no derived data, or derived data with deformverts.
 	 */
-	if (target && target->type == OB_MESH) {
-		/* if there's derived data without deformverts, don't use vgroups */
-		if (dm) {
-			use_vgroups = (dm->getVertDataArray(dm, CD_MDEFORMVERT) != NULL);
-		}
-		else {
-			Mesh *me = target->data;
-			use_vgroups = (me->dvert != NULL);
+	if (vgroup && vgroup[0] && target && ELEM(target->type, OB_MESH, OB_LATTICE)) {
+		defgrp_index = defgroup_name_index(target, vgroup);
+
+		if (defgrp_index != -1) {
+			/* if there's derived data without deformverts, don't use vgroups */
+			if (dm) {
+				dvert = dm->getVertDataArray(dm, CD_MDEFORMVERT);
+			}
+			else if (target->type == OB_LATTICE) {
+				dvert = ((Lattice *)target->data)->dvert;
+			}
+			else {
+				dvert = ((Mesh *)target->data)->dvert;
+			}
 		}
 	}
-	else {
-		use_vgroups = false;
-	}
-	
-	if (vgroup && vgroup[0] && use_vgroups) {
-		Mesh *me = target->data;
-		const int defgrp_index = defgroup_name_index(target, vgroup);
-		float weight;
-
-		if (defgrp_index >= 0 && (me->dvert || dm)) {
-			MDeformVert *dvert = me->dvert;
-			
-			for (a = 0; a < numVerts; a++, dvert++) {
-				if (dm) dvert = dm->getVertData(dm, a, CD_MDEFORMVERT);
-
-				weight = defvert_find_weight(dvert, defgrp_index);
-
-				if (weight > 0.0f)
-					calc_latt_deform(lattice_deform_data, vertexCos[a], weight * fac);
+	if (dvert) {
+		MDeformVert *dvert_iter;
+		for (a = 0, dvert_iter = dvert; a < numVerts; a++, dvert_iter++) {
+			const float weight = defvert_find_weight(dvert_iter, defgrp_index);
+			if (weight > 0.0f) {
+				calc_latt_deform(lattice_deform_data, vertexCos[a], weight * fac);
 			}
 		}
 	}



More information about the Bf-blender-cvs mailing list