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

Reply via email to