Revision: 22610
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=22610
Author:   joeedh
Date:     2009-08-18 22:05:08 +0200 (Tue, 18 Aug 2009)

Log Message:
-----------
rearranged some code a bit

Modified Paths:
--------------
    branches/bmesh/blender/source/blender/blenkernel/BKE_customdata.h
    branches/bmesh/blender/source/blender/blenkernel/intern/DerivedMesh.c
    branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c
    branches/bmesh/blender/source/blender/blenkernel/intern/customdata.c
    branches/bmesh/blender/source/blender/blenkernel/intern/editderivedbmesh.c
    branches/bmesh/blender/source/blender/blenkernel/intern/modifiers_bmesh.c
    branches/bmesh/blender/source/blender/blenkernel/intern/subsurf_ccg.c
    branches/bmesh/blender/source/blender/bmesh/bmesh.h
    branches/bmesh/blender/source/blender/bmesh/bmesh_operator_api.h
    branches/bmesh/blender/source/blender/bmesh/docs/bmesh_design.mwiki
    branches/bmesh/blender/source/blender/editors/mesh/bmesh_select.c
    branches/bmesh/blender/source/blender/editors/mesh/editmesh_mods.c
    branches/bmesh/blender/source/blender/editors/space_view3d/view3d_snap.c

Modified: branches/bmesh/blender/source/blender/blenkernel/BKE_customdata.h
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/BKE_customdata.h   
2009-08-18 19:58:27 UTC (rev 22609)
+++ branches/bmesh/blender/source/blender/blenkernel/BKE_customdata.h   
2009-08-18 20:05:08 UTC (rev 22610)
@@ -162,12 +162,13 @@
 void CustomData_copy_data(const struct CustomData *source,
                           struct CustomData *dest, int source_index,
                           int dest_index, int count);
+void CustomData_copy_elements(int type, void *source, void *dest, int count);
 void CustomData_em_copy_data(const struct CustomData *source,
                             struct CustomData *dest, void *src_block,
                             void **dest_block);
 void CustomData_bmesh_copy_data(const struct CustomData *source, 
-                                                       struct CustomData 
*dest,void *src_block, 
-                                                       void **dest_block);
+                               struct CustomData *dest, void *src_block, 
+                               void **dest_block);
 
 /* frees data in a CustomData object
  * return 1 on success, 0 on failure

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/DerivedMesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/DerivedMesh.c       
2009-08-18 19:58:27 UTC (rev 22609)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/DerivedMesh.c       
2009-08-18 20:05:08 UTC (rev 22610)
@@ -282,27 +282,75 @@
 {
        DMFaceIter *iter = dm->newFaceIter(dm);
        DMLoopIter *liter;
+       CustomData *oldata, *opdata;
        MPoly *mpoly;
        MLoop *mloop;
-       int i;
+       int l, i, j, lasttype;
 
+       oldata = dm->getLoopDataLayout(dm);
+       opdata = dm->getFaceDataLayout(dm);
+
+       CustomData_copy(oldata, ldata, CD_MASK_DERIVEDMESH, CD_CALLOC, totloop);
+       CustomData_copy(opdata, pdata, CD_MASK_DERIVEDMESH, CD_CALLOC, 
dm->getNumFaces(dm));
+
        mloop = MEM_callocN(sizeof(MLoop)*totloop, "MLoop from 
dm_add_polys_from_iter");
+       CustomData_add_layer(ldata, CD_MLOOP, CD_ASSIGN, mloop, totloop);
        mpoly = MEM_callocN(sizeof(MPoly)*dm->getNumFaces(dm), "MPoly from 
dm_add_polys_from_iter");
-       
-       CustomData_add_layer(ldata, CD_MLOOP, CD_ASSIGN, mloop, totloop);
        CustomData_add_layer(pdata, CD_MPOLY, CD_ASSIGN, mpoly, 
dm->getNumFaces(dm));
 
-       i = 0;
+       l = 0;
        for (; !iter->done; iter->step(iter), mpoly++) {
                mpoly->flag = iter->flags;
-               mpoly->loopstart = i;
+               mpoly->loopstart = l;
                mpoly->totloop = iter->len;
                mpoly->mat_nr = iter->mat_nr;
                
+               j = 0;
+               lasttype = -1;
+               for (i=0; i<opdata->totlayer; i++) {
+                       void *e1, *e2;
+
+                       if (opdata->layers[i].type == CD_MPOLY)
+                               continue;
+                       
+                       e1 = iter->getCDData(iter, opdata->layers[i].type, j);
+                       e2 = CustomData_get_layer_n(pdata, 
opdata->layers[i].type, j);
+
+                       CustomData_copy_elements(opdata->layers[i].type, e1, 
e2, 1);
+                       
+                       if (opdata->layers[i].type == lasttype)
+                               j++;
+                       else
+                               j = 0;
+
+                       lasttype = opdata->layers[i].type;                      
        
+               }
+
                liter = iter->getLoopsIter(iter);
-               for (; !liter->done; liter->step(liter), mloop++, i++) {
+               for (; !liter->done; liter->step(liter), mloop++, l++) {
                        mloop->v = liter->vindex;
                        mloop->e = liter->eindex;
+
+                       j = 0;
+                       lasttype = -1;
+                       for (i=0; i<oldata->totlayer; i++) {
+                               void *e1, *e2;
+
+                               if (oldata->layers[i].type == CD_MLOOP)
+                                       continue;
+                               
+                               e1 = liter->getLoopCDData(liter, 
oldata->layers[i].type, j);
+                               e2 = CustomData_get_layer_n(ldata, 
oldata->layers[i].type, j);
+
+                               
CustomData_copy_elements(oldata->layers[i].type, e1, e2, 1);
+                               
+                               if (oldata->layers[i].type == lasttype)
+                                       j++;
+                               else
+                                       j = 0;
+
+                               lasttype = oldata->layers[i].type;              
                
+                       }
                }
        }
        iter->free(iter);
@@ -312,33 +360,21 @@
 {
        DMFaceIter *iter = source->newFaceIter(source);
        DMLoopIter *liter;
-       MPoly *mpoly;
-       MLoop *mloop;
-       int i;
+       int totloop = 0;
 
-       mloop = MEM_callocN(sizeof(MLoop)*source->numLoopData, "MLoop from 
dm_add_polys_from_iter");
-       mpoly = MEM_callocN(sizeof(MPoly)*source->getNumFaces(source), "MPoly 
from dm_add_polys_from_iter");
-       
-       CustomData_add_layer(&target->loopData, CD_MLOOP, CD_ASSIGN, mloop, 
source->numLoopData);
-       CustomData_add_layer(&target->polyData, CD_MPOLY, CD_ASSIGN, mpoly, 
source->getNumFaces(source));
-       
-       target->numLoopData = source->numLoopData;
-       target->numPolyData = source->numPolyData;
-
-       i = 0;
-       for (; !iter->done; iter->step(iter), mpoly++) {
-               mpoly->flag = iter->flags;
-               mpoly->loopstart = i;
-               mpoly->totloop = iter->len;
-               mpoly->mat_nr = iter->mat_nr;
-               
+       for (; !iter->done; iter->step(iter)) {
                liter = iter->getLoopsIter(iter);
-               for (; !liter->done; liter->step(liter), mloop++, i++) {
-                       mloop->v = liter->vindex;
-                       mloop->e = liter->eindex;
+               for (; !liter->done; liter->step(liter)) {
+                       totloop++;
                }
        }
+
        iter->free(iter);
+
+       dm_add_polys_from_iter(&target->loopData, &target->polyData, source, 
totloop);
+
+       target->numLoopData = totloop;
+       target->numPolyData = source->getNumFaces(source);
 }
 
 void DM_to_mesh(DerivedMesh *dm, Mesh *me)
@@ -1044,7 +1080,7 @@
        }
 }
 
-static void emDM_drawFacesTex(void *dm, int (*setDrawOptions)(MTFace *tface, 
MCol *mcol, int matnr))
+static void emDM_drawFacesTex(void *dm, int (*setDrawOptions)(MTFace *tface, 
int has_vcol, int matnr))
 {
        emDM_drawFacesTex_common(dm, setDrawOptions, NULL, NULL);
 }

Modified: 
branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c     
2009-08-18 19:58:27 UTC (rev 22609)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c     
2009-08-18 20:05:08 UTC (rev 22610)
@@ -1311,7 +1311,7 @@
 
 void *cddm_loopiter_getcddata(void *self, int type, int layer)
 {
-       CDDM_FaceIter *iter = self;
+       CDDM_LoopIter *iter = self;
 
        if (layer == -1) return CustomData_get(&iter->cddm->dm.loopData, 
                                               iter->head.index, type);
@@ -1321,13 +1321,13 @@
 
 void *cddm_loopiter_getvertcddata(void *self, int type, int layer)
 {
-       CDDM_FaceIter *iter = self;
+       CDDM_LoopIter *iter = self;
 
        if (layer == -1) return CustomData_get(&iter->cddm->dm.vertData, 
-                                              
iter->cddm->mloop[iter->head.index].v,
+                                              
iter->cddm->mloop[iter->head.vindex].v,
                                               type);
        else return CustomData_get_n(&iter->cddm->dm.vertData, type, 
-                                    iter->cddm->mloop[iter->head.index].v, 
layer);
+                                    iter->cddm->mloop[iter->head.vindex].v, 
layer);
 }
 
 DMLoopIter *cddmiter_get_loopiter(void *self)
@@ -1406,8 +1406,6 @@
        CustomData_copy_data(&source->vertData, &dm->vertData, 0, 0, numVerts);
        CustomData_copy_data(&source->edgeData, &dm->edgeData, 0, 0, numEdges);
        CustomData_copy_data(&source->faceData, &dm->faceData, 0, 0, numFaces);
-       CustomData_copy_data(&source->loopData, &dm->loopData, 0, 0, numLoops);
-       CustomData_copy_data(&source->polyData, &dm->polyData, 0, 0, numPolys);
 
        /* now add mvert/medge/mface layers */
        cddm->mvert = source->dupVertArray(source);

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/customdata.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/customdata.c        
2009-08-18 19:58:27 UTC (rev 22609)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/customdata.c        
2009-08-18 20:05:08 UTC (rev 22610)
@@ -1465,6 +1465,16 @@
                        data->layers[i].flag |= CD_FLAG_NOCOPY;
 }
 
+void CustomData_copy_elements(int type, void *source, void *dest, int count)
+{
+       const LayerTypeInfo *typeInfo = layerType_getInfo(type);
+
+       if (typeInfo->copy)
+               typeInfo->copy(source, dest, count);
+       else
+               memcpy(dest, source, typeInfo->size*count);
+}
+
 void CustomData_copy_data(const CustomData *source, CustomData *dest,
                           int source_index, int dest_index, int count)
 {

Modified: 
branches/bmesh/blender/source/blender/blenkernel/intern/editderivedbmesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/editderivedbmesh.c  
2009-08-18 19:58:27 UTC (rev 22609)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/editderivedbmesh.c  
2009-08-18 20:05:08 UTC (rev 22610)
@@ -275,6 +275,9 @@
        /*private variables, for number of verts/edges/faces
          within the above hash/table members*/
        int tv, te, tf;
+
+       /*customdata layout of the tesselated faces*/
+       CustomData tessface_layout;
 } EditDerivedBMesh;
 
 static void bmdm_recalc_lookups(EditDerivedBMesh *bmdm)
@@ -1312,6 +1315,8 @@
        iter->head.flags = BMFlags_To_MEFlags(iter->f);
        iter->head.index++;
 
+       iter->head.len = iter->f->len;
+
        iter->nextf = BMIter_Step(&iter->iter);
 
        if (!iter->nextf) iter->head.done = 1;
@@ -1330,16 +1335,16 @@
 {
        bmDM_loopIter *iter = self;
 
-       iter->l = iter->nextl;
+       iter->l = BMIter_Step(&iter->iter);
+       if (!iter->l) {
+               iter->head.done = 1;
+               return;
+       }
 
        bmvert_to_mvert(iter->l->v, &iter->head.v);
        iter->head.index++;
        iter->head.vindex = BMINDEX_GET(iter->l->v);
        iter->head.eindex = BMINDEX_GET(iter->l->e);
-
-       iter->nextl = BMIter_Step(&iter->iter);
-
-       if (!iter->nextl) iter->head.done = 1;
 }
 
 void *bmDM_getLoopCDData(void *self, int type, int layer)
@@ -1378,15 +1383,15 @@
 
        iter->bm = fiter->bm;
        iter->f = fiter->f;
-       iter->nextl = BMIter_New(&iter->iter, iter->bm, BM_LOOPS_OF_FACE, 
iter->f);
+       iter->l = BMIter_New(&iter->iter, iter->bm, BM_LOOPS_OF_FACE, iter->f);
 
        iter->head.step = bmDM_loopIterStep;
        iter->head.getLoopCDData = bmDM_getLoopCDData;
        iter->head.getVertCDData = bmDM_getVertCDData;
 
-       bmvert_to_mvert(iter->nextl->v, &iter->head.v);
-       iter->head.vindex = BMINDEX_GET(iter->nextl->v);
-       iter->head.eindex = BMINDEX_GET(iter->nextl->e);
+       bmvert_to_mvert(iter->l->v, &iter->head.v);
+       iter->head.vindex = BMINDEX_GET(iter->l->v);
+       iter->head.eindex = BMINDEX_GET(iter->l->e);
 
        return (DMLoopIter*) iter;
 }
@@ -1450,19 +1455,76 @@
        }
 }
 
+CustomData *bmDm_getVertDataLayout(DerivedMesh *dm)
+{
+       EditDerivedBMesh *bmdm = (EditDerivedBMesh*)dm;
+
+       return &bmdm->tc->bm->vdata;
+}
+
+CustomData *bmDm_getEdgeDataLayout(DerivedMesh *dm)
+{
+       EditDerivedBMesh *bmdm = (EditDerivedBMesh*)dm;
+
+       return &bmdm->tc->bm->edata;
+}
+
+CustomData *bmDm_getTessFaceDataLayout(DerivedMesh *dm)
+{

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to