Merge branch 'master' into blender2.8

This commit is contained in:
Philipp Oeser
2018-05-09 15:08:13 +02:00

View File

@@ -853,45 +853,40 @@ void lattice_deform_verts(Object *laOb, Object *target, Mesh *mesh,
float (*vertexCos)[3], int numVerts, const char *vgroup, float fac) float (*vertexCos)[3], int numVerts, const char *vgroup, float fac)
{ {
LatticeDeformData *lattice_deform_data; LatticeDeformData *lattice_deform_data;
MDeformVert *dvert = NULL;
int defgrp_index = -1;
int a; int a;
bool use_vgroups;
if (laOb->type != OB_LATTICE) if (laOb->type != OB_LATTICE)
return; return;
lattice_deform_data = init_latt_deform(laOb, target); lattice_deform_data = init_latt_deform(laOb, target);
/* check whether to use vertex groups (only possible if target is a Mesh) /* Check whether to use vertex groups (only possible if target is a Mesh or Lattice).
* we want either a Mesh with no derived data, or derived data with * We want either a Mesh/Lattice with no derived data, or derived data with deformverts.
* deformverts
*/ */
if (target && target->type == OB_MESH) { if (vgroup && vgroup[0] && target && ELEM(target->type, OB_MESH, OB_LATTICE)) {
/* if there's derived data without deformverts, don't use vgroups */ defgrp_index = defgroup_name_index(target, vgroup);
if (mesh) {
use_vgroups = (mesh->dvert != NULL); if (defgrp_index != -1) {
} /* if there's derived data without deformverts, don't use vgroups */
else { if (mesh) {
Mesh *me = target->data; dvert = CustomData_get_layer(&mesh->vdata, CD_MDEFORMVERT);
use_vgroups = (me->dvert != NULL); }
else if (target->type == OB_LATTICE) {
dvert = ((Lattice *)target->data)->dvert;
}
else {
dvert = ((Mesh *)target->data)->dvert;
}
} }
} }
else { if (dvert) {
use_vgroups = false; 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 (vgroup && vgroup[0] && use_vgroups) { if (weight > 0.0f) {
Mesh *me = target->data; calc_latt_deform(lattice_deform_data, vertexCos[a], weight * fac);
const int defgrp_index = defgroup_name_index(target, vgroup);
float weight;
if (defgrp_index >= 0 && (me->dvert || mesh)) {
MDeformVert *dvert = mesh ? mesh->dvert : me->dvert;
for (a = 0; a < numVerts; a++, dvert++) {
weight = defvert_find_weight(dvert, defgrp_index);
if (weight > 0.0f)
calc_latt_deform(lattice_deform_data, vertexCos[a], weight * fac);
} }
} }
} }