diff options
author | Cody Winchester <CodyWinch> | 2020-02-06 13:18:41 +0300 |
---|---|---|
committer | Bastien Montagne <b.mont29@gmail.com> | 2020-02-06 13:29:59 +0300 |
commit | efa2ffaa2d2763391bf3a67fd6fc99bd1bfd2bc4 (patch) | |
tree | 4d3d477f6ce48d84a993865b2be60eee3c439150 /source/blender | |
parent | 2c5379b405d8baf6220e390b81a0d48409aeef75 (diff) |
Lattice Modifier add invert vgroup option
Adds the invert vertex group option to the Lattice modifier.
Adds a short flag and modifies the existing char padding for the correct amount.
Adds a .invert_vgroup to the LatticeDeformUserdata.
Passes the flag into the lattice_deform_verts function where the weights around found and used.
For the other calls of lattice_deform_verts function they pass in NULL for the flag in the same way they pass NULL for the vgroup name.
Reviewed By: mont29
Differential Revision: https://developer.blender.org/D6747
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/blenkernel/BKE_lattice.h | 1 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/lattice.c | 10 | ||||
-rw-r--r-- | source/blender/makesdna/DNA_modifier_types.h | 8 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_modifier.c | 5 | ||||
-rw-r--r-- | source/blender/modifiers/intern/MOD_lattice.c | 2 |
5 files changed, 21 insertions, 5 deletions
diff --git a/source/blender/blenkernel/BKE_lattice.h b/source/blender/blenkernel/BKE_lattice.h index a3befa6f3bb..6a55ffe7b9f 100644 --- a/source/blender/blenkernel/BKE_lattice.h +++ b/source/blender/blenkernel/BKE_lattice.h @@ -75,6 +75,7 @@ void lattice_deform_verts(struct Object *laOb, struct Mesh *mesh, float (*vert_coords)[3], int numVerts, + short flag, const char *vgroup, float influence); void armature_deform_verts(struct Object *armOb, diff --git a/source/blender/blenkernel/intern/lattice.c b/source/blender/blenkernel/intern/lattice.c index 72b531c446a..17b705c55c2 100644 --- a/source/blender/blenkernel/intern/lattice.c +++ b/source/blender/blenkernel/intern/lattice.c @@ -213,7 +213,7 @@ void BKE_lattice_resize(Lattice *lt, int uNew, int vNew, int wNew, Object *ltOb) copy_m4_m4(mat, ltOb->obmat); unit_m4(ltOb->obmat); - lattice_deform_verts(ltOb, NULL, NULL, vert_coords, uNew * vNew * wNew, NULL, 1.0f); + lattice_deform_verts(ltOb, NULL, NULL, vert_coords, uNew * vNew * wNew, 0, NULL, 1.0f); copy_m4_m4(ltOb->obmat, mat); lt->typeu = typeu; @@ -883,6 +883,7 @@ typedef struct LatticeDeformUserdata { MDeformVert *dvert; int defgrp_index; float fac; + bool invert_vgroup; } LatticeDeformUserdata; static void lattice_deform_vert_task(void *__restrict userdata, @@ -892,7 +893,8 @@ static void lattice_deform_vert_task(void *__restrict userdata, const LatticeDeformUserdata *data = userdata; if (data->dvert != NULL) { - const float weight = defvert_find_weight(data->dvert + index, data->defgrp_index); + const float weight = data->invert_vgroup? 1.0f - defvert_find_weight(data->dvert + index, data->defgrp_index) : + defvert_find_weight(data->dvert + index, data->defgrp_index); if (weight > 0.0f) { calc_latt_deform(data->lattice_deform_data, data->vert_coords[index], weight * data->fac); } @@ -907,6 +909,7 @@ void lattice_deform_verts(Object *laOb, Mesh *mesh, float (*vert_coords)[3], int numVerts, + short flag, const char *vgroup, float fac) { @@ -946,6 +949,7 @@ void lattice_deform_verts(Object *laOb, .dvert = dvert, .defgrp_index = defgrp_index, .fac = fac, + .invert_vgroup = (flag & MOD_LATTICE_INVERT_VGROUP) != 0, }; TaskParallelSettings settings; @@ -962,7 +966,7 @@ bool object_deform_mball(Object *ob, ListBase *dispbase) DispList *dl; for (dl = dispbase->first; dl; dl = dl->next) { - lattice_deform_verts(ob->parent, ob, NULL, (float(*)[3])dl->verts, dl->nr, NULL, 1.0f); + lattice_deform_verts(ob->parent, ob, NULL, (float(*)[3])dl->verts, dl->nr, 0, NULL, 1.0f); } return true; diff --git a/source/blender/makesdna/DNA_modifier_types.h b/source/blender/makesdna/DNA_modifier_types.h index 39efe838bab..631a995c743 100644 --- a/source/blender/makesdna/DNA_modifier_types.h +++ b/source/blender/makesdna/DNA_modifier_types.h @@ -182,9 +182,15 @@ typedef struct LatticeModifierData { /** Optional vertexgroup name, MAX_VGROUP_NAME. */ char name[64]; float strength; - char _pad[4]; + short flag; + char _pad[2]; } LatticeModifierData; +/*Lattice modifier flags */ +enum { + MOD_LATTICE_INVERT_VGROUP = (1 << 0), +}; + typedef struct CurveModifierData { ModifierData modifier; diff --git a/source/blender/makesrna/intern/rna_modifier.c b/source/blender/makesrna/intern/rna_modifier.c index 6f2f12ebf98..aebee811428 100644 --- a/source/blender/makesrna/intern/rna_modifier.c +++ b/source/blender/makesrna/intern/rna_modifier.c @@ -1936,6 +1936,11 @@ static void rna_def_modifier_lattice(BlenderRNA *brna) RNA_def_property_string_funcs(prop, NULL, NULL, "rna_LatticeModifier_name_set"); RNA_def_property_update(prop, 0, "rna_Modifier_update"); + prop = RNA_def_property(srna, "invert_vertex_group", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_LATTICE_INVERT_VGROUP); + RNA_def_property_ui_text(prop, "Invert", "Invert vertex group influence"); + RNA_def_property_update(prop, 0, "rna_Modifier_update"); + prop = RNA_def_property(srna, "strength", PROP_FLOAT, PROP_NONE); RNA_def_property_range(prop, -FLT_MAX, FLT_MAX); RNA_def_property_ui_range(prop, 0, 1, 10, 2); diff --git a/source/blender/modifiers/intern/MOD_lattice.c b/source/blender/modifiers/intern/MOD_lattice.c index a73e96da975..3128183060a 100644 --- a/source/blender/modifiers/intern/MOD_lattice.c +++ b/source/blender/modifiers/intern/MOD_lattice.c @@ -102,7 +102,7 @@ static void deformVerts(ModifierData *md, MOD_previous_vcos_store(md, vertexCos); /* if next modifier needs original vertices */ lattice_deform_verts( - lmd->object, ctx->object, mesh_src, vertexCos, numVerts, lmd->name, lmd->strength); + lmd->object, ctx->object, mesh_src, vertexCos, numVerts, lmd->flag, lmd->name, lmd->strength); if (!ELEM(mesh_src, NULL, mesh)) { BKE_id_free(NULL, mesh_src); |