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);
                        }
                }
        }

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to