Revision: 22762
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=22762
Author:   joeedh
Date:     2009-08-25 12:21:10 +0200 (Tue, 25 Aug 2009)

Log Message:
-----------
subsurf works now! YES! take *that* subsurf_ccg.cscons/scons.py 
BF_QUICK=bf_python,bf_blenkernel,bf_blenlib,bf_blenloader,bf_editors_mesh,bf_bmesh,bf_editors_space_view3d,bf_editors_transform,bf_makesdna,bf_makesrna,bf_dna,bf_rn,bf_bmesh,bf_editors_object,editors_uvedit,editors_space_image,editors_screen,editors_space_screen,editors_space_api,bf_windowmanager,bf_wm
 still an issue with some modifier combinations though, and I think there's 
some memory corruption going on, need to valgrind it.

Modified Paths:
--------------
    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/modifiers_bmesh.c
    branches/bmesh/blender/source/blender/blenkernel/intern/subsurf_ccg.c
    branches/bmesh/blender/source/blender/bmesh/intern/bmesh_walkers.c
    branches/bmesh/blender/source/blender/editors/mesh/bmesh_tools.c
    branches/bmesh/blender/source/blender/editors/mesh/editmesh_tools.c
    branches/bmesh/blender/source/blender/makesdna/DNA_customdata_types.h

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/DerivedMesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/DerivedMesh.c       
2009-08-25 10:20:06 UTC (rev 22761)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/DerivedMesh.c       
2009-08-25 10:21:10 UTC (rev 22762)
@@ -310,6 +310,11 @@
                for (i=0; i<opdata->totlayer; i++) {
                        void *e1, *e2;
 
+                       if (opdata->layers[i].type == lasttype)
+                               j++;
+                       else
+                               j = 0;
+
                        if (opdata->layers[i].type == CD_MPOLY)
                                continue;
                        
@@ -321,11 +326,6 @@
 
                        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;                      
        
                }
 
@@ -342,6 +342,11 @@
                                if (oldata->layers[i].type == CD_MLOOP)
                                        continue;
                                
+                               if (oldata->layers[i].type == lasttype)
+                                       j++;
+                               else
+                                       j = 0;
+
                                e1 = liter->getLoopCDData(liter, 
oldata->layers[i].type, j);
                                e2 = CustomData_get_n(ldata, 
oldata->layers[i].type, l, j);
                                
@@ -349,12 +354,6 @@
                                        continue;
 
                                
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;              
                
                        }
                }

Modified: 
branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c     
2009-08-25 10:20:06 UTC (rev 22761)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c     
2009-08-25 10:21:10 UTC (rev 22762)
@@ -1417,6 +1417,7 @@
        CustomData_add_layer(&dm->faceData, CD_MFACE, CD_ASSIGN, cddm->mface, 
numFaces);
        
        DM_DupPolys(source, dm);
+       //CDDM_tessfaces_to_faces(dm);
 
        cddm->mloop = CustomData_get_layer(&dm->loopData, CD_MLOOP);
        cddm->mpoly = CustomData_get_layer(&dm->polyData, CD_MPOLY);
@@ -1662,6 +1663,10 @@
        EdgeHash *eh = BLI_edgehash_new();
        int i, l, totloop, *index1, *index2;
        
+       /*ensure we have all the edges we need*/
+       CDDM_calc_edges(dm);
+
+       /*build edge hash*/
        me = cddm->medge;
        for (i=0; i<cddm->dm.numEdgeData; i++, me++) {
                BLI_edgehash_insert(eh, me->v1, me->v2, SET_INT_IN_POINTER(i));
@@ -1687,7 +1692,7 @@
        CustomData_add_layer(&cddm->dm.loopData, CD_MLOOP, CD_ASSIGN, 
cddm->mloop, totloop);
        CustomData_add_layer(&cddm->dm.polyData, CD_MPOLY, CD_ASSIGN, 
cddm->mpoly, cddm->dm.numPolyData);
        CustomData_merge(&cddm->dm.faceData, &cddm->dm.polyData, 
-               CD_MASK_DERIVEDMESH, CD_DUPLICATE, cddm->dm.numFaceData);
+               CD_MASK_ORIGINDEX, CD_DUPLICATE, cddm->dm.numFaceData);
 
        index1 = CustomData_get_layer(&cddm->dm.faceData, CD_ORIGINDEX);
        index2 = CustomData_get_layer(&cddm->dm.polyData, CD_ORIGINDEX);

Modified: 
branches/bmesh/blender/source/blender/blenkernel/intern/modifiers_bmesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/modifiers_bmesh.c   
2009-08-25 10:20:06 UTC (rev 22761)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/modifiers_bmesh.c   
2009-08-25 10:21:10 UTC (rev 22762)
@@ -198,12 +198,13 @@
                        break;
                
                f = BM_Make_Ngon(bm, verts[0], verts[1], edges, dfiter->len, 0);
-               f->head.flag = MEFlags_To_BMFlags(dfiter->flags, BM_FACE);
-               f->mat_nr = dfiter->mat_nr;
 
                if (!f) 
                        continue;
 
+               f->head.flag = MEFlags_To_BMFlags(dfiter->flags, BM_FACE);
+               f->mat_nr = dfiter->mat_nr;
+
                dliter = dfiter->getLoopsIter(dfiter);
                l = BMIter_New(&liter, bm, BM_LOOPS_OF_FACE, f);
                for (j=0; l; l=BMIter_Step(&liter)) {

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/subsurf_ccg.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/subsurf_ccg.c       
2009-08-25 10:20:06 UTC (rev 22761)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/subsurf_ccg.c       
2009-08-25 10:21:10 UTC (rev 22762)
@@ -540,28 +540,6 @@
        }
 
        return wtable->weight_table[faceLen].w;
-#if 0
-       /*ensure we have at least the triangle and quad weights*/
-       if (wtable->len < 4) {
-               wtable->weight_table = 
MEM_callocN(sizeof(FaceVertWeightEntry)*5, "weight table alloc");
-               wtable->len = 5;
-
-               calc_ss_weights(gridFaces, &wtable->weight_table[4].weight, 
&wtable->weight_table[3].weight);
-               wtable->weight_table[4].valid = wtable->weight_table[3].valid = 
1;
-       }
-       
-       if (wtable->len <= faceLen) {
-               void *tmp = 
MEM_callocN(sizeof(FaceVertWeightEntry)*(faceLen+1), "weight table alloc 2");
-               
-               memcpy(tmp, wtable->weight_table, 
sizeof(FaceVertWeightEntry)*wtable->len);
-               MEM_freeN(wtable->weight_table);
-               
-               wtable->weight_table = tmp;
-               wtable->len = faceLen+1;
-       }
-
-       return wtable->weight_table[faceLen].weight;
-#endif
 }
 
 void free_ss_weights(WeightTable *wtable)
@@ -2631,7 +2609,6 @@
        int gridSideEdges;
        int numTex, numCol;
        int gridInternalEdges;
-       int index2;
        float *w = NULL, one = 1.0f;
        WeightTable wtable = {0};
        V_DECLARE(w);
@@ -2655,9 +2632,9 @@
        numTex = CustomData_number_of_layers(&cgdm->dm.loopData, CD_MLOOPUV);
        numCol = CustomData_number_of_layers(&cgdm->dm.loopData, CD_MLOOPCOL);
        
-       if (numTex && CustomData_number_of_layers(&cgdm->dm.faceData, 
CD_MTFACE)==0)
+       if (numTex && CustomData_number_of_layers(&cgdm->dm.faceData, 
CD_MTFACE) != numTex)
                CustomData_from_bmeshpoly(&cgdm->dm.faceData, 
&cgdm->dm.polyData, &cgdm->dm.loopData, CCS_getNumFinalFaces(ss));
-       else if (numCol && CustomData_number_of_layers(&cgdm->dm.faceData, 
CD_MCOL)==0)
+       else if (numCol && CustomData_number_of_layers(&cgdm->dm.faceData, 
CD_MCOL) != numCol)
                CustomData_from_bmeshpoly(&cgdm->dm.faceData, 
&cgdm->dm.polyData, &cgdm->dm.loopData, CCS_getNumFinalFaces(ss));
 
        CustomData_set_layer_flag(&cgdm->dm.faceData, CD_FLAGS, CD_FLAG_NOCOPY);
@@ -2771,7 +2748,7 @@
 
        mcol = DM_get_tessface_data_layer(&cgdm->dm, CD_MCOL);
 
-       index2 = 0;
+       faceNum = 0;
        loopindex = loopindex2 = 0; //current loop index
        for (index = 0; index < totface; index++) {
                CCFace *f = cgdm->faceMap[index].face;
@@ -2787,10 +2764,12 @@
 
                cgdm->faceMap[index].startVert = vertNum;
                cgdm->faceMap[index].startEdge = edgeNum;
-               cgdm->faceMap[index].startFace = index2;
+               cgdm->faceMap[index].startFace = faceNum;
                
-               V_RESET(loopidx);
-               
+               /* set the face base vert */
+               *((int*)CCS_getFaceUserData(ss, f)) = vertNum;
+
+               V_RESET(loopidx);               
                for (s=0; s<numVerts; s++) {
                        V_GROW(loopidx);
                        loopidx[s] = loopindex++;
@@ -2805,7 +2784,8 @@
                }
                
 
-               w2 = w + s*numVerts*g2_wid*g2_wid;
+               /*I think this is for interpolating the center vert?*/
+               w2 = w; // + numVerts*(g2_wid-1)*(g2_wid-1); 
//numVerts*((g2_wid-1)*g2_wid+g2_wid-1);
                DM_interp_vert_data(dm, &cgdm->dm, vertidx, w2,
                                    numVerts, vertNum);
                if (vertOrigIndex)
@@ -2827,6 +2807,7 @@
                        }
                }
 
+               /*interpolate per-vert data*/
                for(s = 0; s < numVerts; s++) {
                        for(y = 1; y < gridFaces; y++) {
                                for(x = 1; x < gridFaces; x++) {
@@ -2842,8 +2823,9 @@
                        }
                }
 
-               /* set the face base vert */
-               *((int*)CCS_getFaceUserData(ss, f)) = vertNum;
+               for(i = 0; i < numFinalEdges; ++i)
+                       *(int *)DM_get_edge_data(&cgdm->dm, edgeNum + i,
+                                                CD_ORIGINDEX) = ORIGINDEX_NONE;
                for (s=0; s<numVerts; s++) {
                        /*interpolate per-face data*/
                        for (y=0; y<gridFaces; y++) {
@@ -2867,16 +2849,16 @@
                                        CustomData_interp(&dm->loopData, 
&cgdm->dm.loopData, 
                                                          loopidx, w2, NULL, 
numVerts, loopindex2);
                                        loopindex2++;
-                                                                               
                                                                        
+
                                        /*copy over poly data, e.g. mtexpoly*/
-                                       CustomData_interp(&dm->polyData, 
&cgdm->dm.polyData, &origIndex, &one, NULL, 1, index2);
+                                       CustomData_copy_data(&dm->polyData, 
&cgdm->dm.polyData, origIndex, faceNum, 1);
+                                       //CustomData_interp(&dm->polyData, 
&cgdm->dm.polyData, &origIndex, &one, NULL, 1, faceNum);
 
                                        /*generate tesselated face data used 
for drawing*/
                                        
ccg_loops_to_corners(&cgdm->dm.faceData, &cgdm->dm.loopData, 
-                                               &cgdm->dm.polyData, 
loopindex2-4, index2, index2, numTex, numCol);
+                                               &cgdm->dm.polyData, 
loopindex2-4, faceNum, faceNum, numTex, numCol);
                                        
                                        faceNum++;
-                                       index2++;
                                }
                        }
                }
@@ -2944,6 +2926,12 @@
                ++vertOrigIndex;
                ++vertNum;
        }
+
+       cgdm->dm.numVertData = vertNum;
+       cgdm->dm.numEdgeData = edgeNum;
+       cgdm->dm.numFaceData = faceNum;
+       cgdm->dm.numLoopData = loopindex2;
+       cgdm->dm.numPolyData = faceNum;
 #if 0
        for(index = 0; index < totface; ++index) {
                CCFace *f = cgdm->faceMap[index].face;
@@ -3182,7 +3170,7 @@
                
                return result;
        } else {
-               int useIncremental = (smd->flags & 
eSubsurfModifierFlag_Incremental);
+               int useIncremental = 1; //(smd->flags & 
eSubsurfModifierFlag_Incremental);
                int useAging = smd->flags & eSubsurfModifierFlag_DebugIncr;
                CSubSurf *ss;
                

Modified: branches/bmesh/blender/source/blender/bmesh/intern/bmesh_walkers.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/intern/bmesh_walkers.c  
2009-08-25 10:20:06 UTC (rev 22761)
+++ branches/bmesh/blender/source/blender/bmesh/intern/bmesh_walkers.c  
2009-08-25 10:21:10 UTC (rev 22762)
@@ -659,6 +659,10 @@
                        if (rlen != 1 && i == stopi) break;
 
                        l = BM_OtherFaceLoop(l->e, l->f, v);
+
+                       if (!l)
+                               break;
+
                        l2 = bmesh_radial_nextloop(l);
                        
                        if (l2 == l) {

Modified: branches/bmesh/blender/source/blender/editors/mesh/bmesh_tools.c
===================================================================
--- branches/bmesh/blender/source/blender/editors/mesh/bmesh_tools.c    
2009-08-25 10:20:06 UTC (rev 22761)
+++ branches/bmesh/blender/source/blender/editors/mesh/bmesh_tools.c    
2009-08-25 10:21:10 UTC (rev 22762)
@@ -1965,3 +1965,78 @@
 
        //RNA_def_int(ot->srna, "repeat", 1, 1, 100, "Number of times to smooth 
the mesh", "", 1, INT_MAX);
 }
+
+/********************** Smooth/Solid Operators *************************/
+
+void mesh_set_smooth_faces(BMEditMesh *em, short smooth)
+{
+       BMIter iter;
+       BMFace *efa;
+
+       if(em==NULL) return;
+       
+       BM_ITER(efa, &iter, em->bm, BM_FACES_OF_MESH, NULL) {
+               if (BM_TestHFlag(efa, BM_SELECT)) {
+                       if (smooth)
+                               BM_SetHFlag(efa, BM_SMOOTH);
+                       else
+                               BM_ClearHFlag(efa, BM_SMOOTH);
+               }
+       }
+}
+
+static int mesh_faces_shade_smooth_exec(bContext *C, wmOperator *op)
+{
+       Scene *scene= CTX_data_scene(C);

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to