Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilipp Oeser <info@graphics-engineer.com>2018-05-08 12:05:42 +0300
committerPhilipp Oeser <info@graphics-engineer.com>2018-05-09 15:41:25 +0300
commit69f2305415a224c277fe4fa9c81f846ba60cbb17 (patch)
tree1d9b399e86c810583b477d918bacf56b2c449d1b /source/blender/blenkernel/intern/lattice.c
parent34c474e695416bd07efae3502101ca549890c7bb (diff)
Fix T54992: Lattice modifier on another Lattice object does not take the
Influence vertexgroup into account
Diffstat (limited to 'source/blender/blenkernel/intern/lattice.c')
-rw-r--r--source/blender/blenkernel/intern/lattice.c55
1 files changed, 24 insertions, 31 deletions
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);
}
}
}