Revision: 17311 http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=17311 Author: jaguarandi Date: 2008-11-04 00:17:36 +0100 (Tue, 04 Nov 2008)
Log Message: ----------- Added Lattice vgroup support to shrinkwrap and simple deform modifier. Modified Paths: -------------- trunk/blender/source/blender/blenkernel/BKE_lattice.h trunk/blender/source/blender/blenkernel/BKE_shrinkwrap.h trunk/blender/source/blender/blenkernel/intern/deform.c trunk/blender/source/blender/blenkernel/intern/lattice.c trunk/blender/source/blender/blenkernel/intern/modifier.c trunk/blender/source/blender/blenkernel/intern/shrinkwrap.c trunk/blender/source/blender/blenkernel/intern/simple_deform.c Modified: trunk/blender/source/blender/blenkernel/BKE_lattice.h =================================================================== --- trunk/blender/source/blender/blenkernel/BKE_lattice.h 2008-11-03 22:27:55 UTC (rev 17310) +++ trunk/blender/source/blender/blenkernel/BKE_lattice.h 2008-11-03 23:17:36 UTC (rev 17311) @@ -35,6 +35,7 @@ struct Object; struct DerivedMesh; struct BPoint; +struct MDeform; extern struct Lattice *editLatt; @@ -67,5 +68,7 @@ void lattice_applyVertexCos(struct Object *ob, float (*vertexCos)[3]); void lattice_calc_modifiers(struct Object *ob); +struct MDeform* lattice_get_deform_verts(struct Object *lattice); + #endif Modified: trunk/blender/source/blender/blenkernel/BKE_shrinkwrap.h =================================================================== --- trunk/blender/source/blender/blenkernel/BKE_shrinkwrap.h 2008-11-03 22:27:55 UTC (rev 17310) +++ trunk/blender/source/blender/blenkernel/BKE_shrinkwrap.h 2008-11-03 23:17:36 UTC (rev 17311) @@ -96,6 +96,7 @@ struct Object; struct DerivedMesh; struct ShrinkwrapModifierData; +struct MDeform; struct BVHTree; @@ -109,6 +110,9 @@ float (*vertexCos)[3]; //vertexs being shrinkwraped int numVerts; + struct MDeform* dvert; //Pointer to mdeform array + int vgroup; //Vertex group num + struct DerivedMesh *target; //mesh we are shrinking to SpaceTransform local2target; //transform to move bettwem local and target space Modified: trunk/blender/source/blender/blenkernel/intern/deform.c =================================================================== --- trunk/blender/source/blender/blenkernel/intern/deform.c 2008-11-03 22:27:55 UTC (rev 17310) +++ trunk/blender/source/blender/blenkernel/intern/deform.c 2008-11-03 23:17:36 UTC (rev 17311) @@ -239,12 +239,9 @@ float vertexgroup_get_vertex_weight(const struct MDeformVert *dvert, int index, int group_num) { - if(group_num == -1) + if(group_num == -1 || dvert == NULL) return 1.0; - if(dvert == 0) - return 0.0; - return deformvert_get_weight(dvert+index, group_num); } Modified: trunk/blender/source/blender/blenkernel/intern/lattice.c =================================================================== --- trunk/blender/source/blender/blenkernel/intern/lattice.c 2008-11-03 22:27:55 UTC (rev 17310) +++ trunk/blender/source/blender/blenkernel/intern/lattice.c 2008-11-03 23:17:36 UTC (rev 17311) @@ -928,3 +928,15 @@ BLI_addtail(&ob->disp, dl); } } + +struct MDeform* lattice_get_deform_verts(struct Object *oblatt) +{ + if(oblatt->type == OB_LATTICE) + { + Lattice *lt = (oblatt==G.obedit)?editLatt:(Lattice*)oblatt->data; + return lt->dvert; + } + + return NULL; +} + Modified: trunk/blender/source/blender/blenkernel/intern/modifier.c =================================================================== --- trunk/blender/source/blender/blenkernel/intern/modifier.c 2008-11-03 22:27:55 UTC (rev 17310) +++ trunk/blender/source/blender/blenkernel/intern/modifier.c 2008-11-03 23:17:36 UTC (rev 17311) @@ -7804,9 +7804,10 @@ { if(derivedData) dm = CDDM_copy(derivedData); else if(ob->type==OB_MESH) dm = CDDM_from_mesh(ob->data, ob); + else if(ob->type==OB_LATTICE) dm = NULL; else return; - if(dataMask & CD_MVERT) + if(dm != NULL && (dataMask & CD_MVERT)) { CDDM_apply_vert_coords(dm, vertexCos); CDDM_calc_normals(dm); @@ -7828,9 +7829,10 @@ { if(derivedData) dm = CDDM_copy(derivedData); else if(ob->type==OB_MESH) dm = CDDM_from_editmesh(editData, ob->data); + else if(ob->type==OB_LATTICE) dm = NULL; else return; - if(dataMask & CD_MVERT) + if(dm != NULL && (dataMask & CD_MVERT)) { CDDM_apply_vert_coords(dm, vertexCos); CDDM_calc_normals(dm); @@ -7916,9 +7918,10 @@ { if(derivedData) dm = CDDM_copy(derivedData); else if(ob->type==OB_MESH) dm = CDDM_from_mesh(ob->data, ob); + else if(ob->type==OB_LATTICE) dm = NULL; else return; - if(dataMask & CD_MVERT) + if(dm != NULL && (dataMask & CD_MVERT)) { CDDM_apply_vert_coords(dm, vertexCos); CDDM_calc_normals(dm); @@ -7942,9 +7945,10 @@ { if(derivedData) dm = CDDM_copy(derivedData); else if(ob->type==OB_MESH) dm = CDDM_from_editmesh(editData, ob->data); + else if(ob->type==OB_LATTICE) dm = NULL; else return; - if(dataMask & CD_MVERT) + if(dm != NULL && (dataMask & CD_MVERT)) { CDDM_apply_vert_coords(dm, vertexCos); CDDM_calc_normals(dm); Modified: trunk/blender/source/blender/blenkernel/intern/shrinkwrap.c =================================================================== --- trunk/blender/source/blender/blenkernel/intern/shrinkwrap.c 2008-11-03 22:27:55 UTC (rev 17310) +++ trunk/blender/source/blender/blenkernel/intern/shrinkwrap.c 2008-11-03 23:17:36 UTC (rev 17311) @@ -41,6 +41,7 @@ #include "BKE_shrinkwrap.h" #include "BKE_DerivedMesh.h" +#include "BKE_lattice.h" #include "BKE_utildefines.h" #include "BKE_deform.h" #include "BKE_cdderivedmesh.h" @@ -161,6 +162,18 @@ calc.numVerts = numVerts; calc.vertexCos = vertexCos; + //DeformVertex + calc.vgroup = get_named_vertexgroup_num(calc.ob, calc.smd->vgroup_name); + if(calc.original) + { + calc.dvert = calc.original->getVertDataArray(calc.original, CD_MDEFORMVERT); + } + else if(calc.ob->type == OB_LATTICE) + { + calc.dvert = lattice_get_deform_verts(calc.ob); + } + + if(smd->target) { //TODO currently we need a copy in case object_get_derived_final returns an emDM that does not defines getVertArray or getFace array @@ -207,8 +220,6 @@ void shrinkwrap_calc_nearest_vertex(ShrinkwrapCalcData *calc) { int i; - const int vgroup = get_named_vertexgroup_num(calc->ob, calc->smd->vgroup_name); - MDeformVert *const dvert = calc->original ? calc->original->getVertDataArray(calc->original, CD_MDEFORMVERT) : NULL; BVHTreeFromMesh treeData = NULL_BVHTreeFromMesh; BVHTreeNearest nearest = NULL_BVHTreeNearest; @@ -230,7 +241,7 @@ { float *co = calc->vertexCos[i]; float tmp_co[3]; - float weight = vertexgroup_get_vertex_weight(dvert, i, vgroup); + float weight = vertexgroup_get_vertex_weight(calc->dvert, i, calc->vgroup); if(weight == 0.0f) continue; VECCOPY(tmp_co, co); @@ -342,11 +353,6 @@ MVert *vert = NULL; //Needed in case of vertex normal DerivedMesh* ss_mesh = NULL; - //Vertex group data - const int vgroup = get_named_vertexgroup_num(calc->ob, calc->smd->vgroup_name); - const MDeformVert *dvert = calc->original ? calc->original->getVertDataArray(calc->original, CD_MDEFORMVERT) : NULL; - - //Raycast and tree stuff BVHTreeRayHit hit; BVHTreeFromMesh treeData = NULL_BVHTreeFromMesh; //target @@ -441,7 +447,7 @@ float *co = calc->vertexCos[i]; float tmp_co[3], tmp_no[3]; float lim = 10000.0f; //TODO: we should use FLT_MAX here, but sweepsphere code isnt prepared for that - float weight = vertexgroup_get_vertex_weight(dvert, i, vgroup); + float weight = vertexgroup_get_vertex_weight(calc->dvert, i, calc->vgroup); if(weight == 0.0f) continue; @@ -520,9 +526,6 @@ { int i; - const int vgroup = get_named_vertexgroup_num(calc->ob, calc->smd->vgroup_name); - const MDeformVert *const dvert = calc->original ? calc->original->getVertDataArray(calc->original, CD_MDEFORMVERT) : NULL; - BVHTreeFromMesh treeData = NULL_BVHTreeFromMesh; BVHTreeNearest nearest = NULL_BVHTreeNearest; @@ -547,7 +550,7 @@ { float *co = calc->vertexCos[i]; float tmp_co[3]; - float weight = vertexgroup_get_vertex_weight(dvert, i, vgroup); + float weight = vertexgroup_get_vertex_weight(calc->dvert, i, calc->vgroup); if(weight == 0.0f) continue; //Convert the vertex to tree coordinates Modified: trunk/blender/source/blender/blenkernel/intern/simple_deform.c =================================================================== --- trunk/blender/source/blender/blenkernel/intern/simple_deform.c 2008-11-03 22:27:55 UTC (rev 17310) +++ trunk/blender/source/blender/blenkernel/intern/simple_deform.c 2008-11-03 23:17:36 UTC (rev 17311) @@ -32,6 +32,7 @@ #include "BKE_simple_deform.h" #include "BKE_DerivedMesh.h" +#include "BKE_lattice.h" #include "BKE_deform.h" #include "BKE_utildefines.h" #include "BLI_arithb.h" @@ -204,9 +205,16 @@ if(dm) - dvert = dm->getVertDataArray(dm, CD_MDEFORMVERT); + { + dvert = dm->getVertDataArray(dm, CD_MDEFORMVERT); + } + else if(ob->type == OB_LATTICE) + { + dvert = lattice_get_deform_verts(ob); + } + switch(smd->mode) { case MOD_SIMPLEDEFORM_MODE_TWIST: simpleDeform_callback = simpleDeform_twist; break; _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs