Revision: 43534
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=43534
Author:   campbellbarton
Date:     2012-01-19 17:51:52 +0000 (Thu, 19 Jan 2012)
Log Message:
-----------
argument to mesh_recalcTesselation to skip copying normals from polygons.

Modified Paths:
--------------
    branches/bmesh/blender/source/blender/blenkernel/BKE_mesh.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/mesh.c
    branches/bmesh/blender/source/blender/blenloader/intern/readfile.c
    branches/bmesh/blender/source/blender/bmesh/operators/mesh_conv.c
    branches/bmesh/blender/source/blender/editors/mesh/mesh_data.c
    branches/bmesh/blender/source/blender/editors/object/object_add.c

Modified: branches/bmesh/blender/source/blender/blenkernel/BKE_mesh.h
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/BKE_mesh.h 2012-01-19 
17:30:29 UTC (rev 43533)
+++ branches/bmesh/blender/source/blender/blenkernel/BKE_mesh.h 2012-01-19 
17:51:52 UTC (rev 43534)
@@ -76,9 +76,10 @@
  * if both of the above are 0, it'll use the indices of the mpolys of the MPoly
  * data in pdata, and ignore the origindex layer altogether.
  */
-int mesh_recalcTesselation(struct CustomData *fdata, struct CustomData *ldata, 
-       struct CustomData *pdata, struct MVert *mvert, int totface, 
-       int totloop, int totpoly);
+int mesh_recalcTesselation(struct CustomData *fdata, struct CustomData *ldata, 
struct CustomData *pdata,
+                           struct MVert *mvert,
+                           int totface, int totloop, int totpoly,
+                           const int do_face_normals);
 
 /* for forwards compat only quad->tri polys to mface, skip ngons.
  */

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/DerivedMesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/DerivedMesh.c       
2012-01-19 17:30:29 UTC (rev 43533)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/DerivedMesh.c       
2012-01-19 17:51:52 UTC (rev 43534)
@@ -448,7 +448,10 @@
        /* yes, must be before _and_ after tesselate */
        mesh_update_customdata_pointers(&tmp, TRUE);
 
-       tmp.totface = mesh_recalcTesselation(&tmp.fdata, &tmp.ldata, 
&tmp.pdata, tmp.mvert, tmp.totface, tmp.totloop, tmp.totpoly);
+       tmp.totface = mesh_recalcTesselation(&tmp.fdata, &tmp.ldata, &tmp.pdata,
+                                            tmp.mvert,
+                                            tmp.totface, tmp.totloop, 
tmp.totpoly,
+                                            TRUE);
 
        mesh_update_customdata_pointers(&tmp, TRUE);
 

Modified: 
branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c     
2012-01-19 17:30:29 UTC (rev 43533)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c     
2012-01-19 17:51:52 UTC (rev 43534)
@@ -1582,9 +1582,10 @@
 {
        CDDerivedMesh *cddm = (CDDerivedMesh*)dm;
 
-       dm->numTessFaceData = mesh_recalcTesselation(&dm->faceData, 
&dm->loopData, 
-               &dm->polyData, cddm->mvert, dm->numTessFaceData, 
dm->numLoopData, 
-               dm->numPolyData);
+       dm->numTessFaceData = mesh_recalcTesselation(&dm->faceData, 
&dm->loopData, &dm->polyData,
+                                                    cddm->mvert,
+                                                    dm->numTessFaceData, 
dm->numLoopData, dm->numPolyData,
+                                                    TRUE);
 
        if (!CustomData_get_layer(&dm->faceData, CD_ORIGINDEX)) {
                int *polyIndex = CustomData_get_layer(&dm->faceData, 
CD_POLYINDEX);
@@ -2255,6 +2256,7 @@
        cddm->mvert = CustomData_duplicate_referenced_layer(&dm->vertData, 
CD_MVERT, dm->numVertData);
 #endif
 
+
        if (dm->numTessFaceData == 0) {
                /* No tesselation on this mesh yet, need to calculate one */
                CDDM_recalc_tesselation(dm);
@@ -2265,6 +2267,7 @@
                CustomData_free_layers(&dm->faceData, CD_NORMAL, 
dm->numTessFaceData);
        }
 
+
        face_nors = MEM_mallocN(sizeof(float)*3*dm->numTessFaceData, 
"face_nors");
        
        /* calculate face normals */
@@ -2274,7 +2277,9 @@
                                     only_face_normals);
        
        CustomData_add_layer(&dm->faceData, CD_NORMAL, CD_ASSIGN, 
-               face_nors, dm->numTessFaceData);
+                            face_nors, dm->numTessFaceData);
+
+
 }
 
 /* bmesh note: this matches what we have in trunk */

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/mesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/mesh.c      
2012-01-19 17:30:29 UTC (rev 43533)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/mesh.c      
2012-01-19 17:51:52 UTC (rev 43534)
@@ -1105,12 +1105,16 @@
                        index+= 4;
                }
 
+               /* BMESH_TODO - why is this converting from MFaces to MPoly's 
then tesselating?
+                * should just make mpolys */
+
                make_edges(me, 0);      // all edges
                convert_mfaces_to_mpolys(me);
 
-               me->totface = mesh_recalcTesselation(
-                       &me->fdata, &me->ldata, &me->pdata,
-                       me->mvert, me->totface, me->totloop, me->totpoly);
+               me->totface = mesh_recalcTesselation(&me->fdata, &me->ldata, 
&me->pdata,
+                                                    me->mvert,
+                                                    me->totface, me->totloop, 
me->totpoly,
+                                                    TRUE);
 
                mesh_update_customdata_pointers(me, TRUE);
        }
@@ -2212,10 +2216,13 @@
   this function recreates a tesselation.
   returns number of tesselation faces.
  */
-int mesh_recalcTesselation(CustomData *fdata, 
+int mesh_recalcTesselation(CustomData *fdata,
                            CustomData *ldata, CustomData *pdata,
                            MVert *mvert, int totface, int UNUSED(totloop),
-                           int totpoly)
+                           int totpoly,
+                           /* when teseelating to recalcilate normals after
+                            * we can skip copying here */
+                           const int do_face_nor_cpy)
 {
 
        /* use this to avoid locking pthread for _every_ polygon
@@ -2350,13 +2357,15 @@
 
        CustomData_from_bmeshpoly(fdata, pdata, ldata, totface);
 
-       /* If polys have a normals layer, copying that to faces can help
-        * avoid the need to recalculate normals later */
-       if (CustomData_has_layer(pdata, CD_NORMAL)) {
-               float *pnors = CustomData_get_layer(pdata, CD_NORMAL);
-               float *fnors = CustomData_add_layer(fdata, CD_NORMAL, 
CD_CALLOC, NULL, totface);
-               for (i=0; i<totface; i++, fnors++) {
-                       copy_v3_v3(fnors, &pnors[polyIndex[i]]);
+       if (do_face_nor_cpy) {
+               /* If polys have a normals layer, copying that to faces can help
+                * avoid the need to recalculate normals later */
+               if (CustomData_has_layer(pdata, CD_NORMAL)) {
+                       float *pnors = CustomData_get_layer(pdata, CD_NORMAL);
+                       float *fnors = CustomData_add_layer(fdata, CD_NORMAL, 
CD_CALLOC, NULL, totface);
+                       for (i=0; i<totface; i++, fnors++) {
+                               copy_v3_v3(fnors, &pnors[polyIndex[i]]);
+                       }
                }
        }
 

Modified: branches/bmesh/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- branches/bmesh/blender/source/blender/blenloader/intern/readfile.c  
2012-01-19 17:30:29 UTC (rev 43533)
+++ branches/bmesh/blender/source/blender/blenloader/intern/readfile.c  
2012-01-19 17:51:52 UTC (rev 43534)
@@ -3704,9 +3704,10 @@
                         *    waiting until edit mode has been entered/exited, 
making it easier
                         *    to recognize problems that would otherwise only 
show up after edits).
                         */
-                       me->totface = mesh_recalcTesselation(
-                               &me->fdata, &me->ldata, &me->pdata,
-                               me->mvert, me->totface, me->totloop, 
me->totpoly);
+                       me->totface = mesh_recalcTesselation(&me->fdata, 
&me->ldata, &me->pdata,
+                                                            me->mvert,
+                                                            me->totface, 
me->totloop, me->totpoly,
+                                                            TRUE);
 
                        mesh_update_customdata_pointers(me, TRUE);
 

Modified: branches/bmesh/blender/source/blender/bmesh/operators/mesh_conv.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/operators/mesh_conv.c   
2012-01-19 17:30:29 UTC (rev 43533)
+++ branches/bmesh/blender/source/blender/bmesh/operators/mesh_conv.c   
2012-01-19 17:51:52 UTC (rev 43534)
@@ -614,9 +614,11 @@
        }
 
        if (dotess) {
-               me->totface= mesh_recalcTesselation(&me->fdata, &me->ldata, 
&me->pdata,
-                                                   me->mvert,
-                                                   me->totface, me->totloop, 
me->totpoly);
+               me->totface = mesh_recalcTesselation(&me->fdata, &me->ldata, 
&me->pdata,
+                                                    me->mvert,
+                                                    me->totface, me->totloop, 
me->totpoly,
+                                                    /* possibly can set to 
FALSE here, but defaults to true */
+                                                    TRUE);
        }
 
        mesh_update_customdata_pointers(me, dotess);

Modified: branches/bmesh/blender/source/blender/editors/mesh/mesh_data.c
===================================================================
--- branches/bmesh/blender/source/blender/editors/mesh/mesh_data.c      
2012-01-19 17:30:29 UTC (rev 43533)
+++ branches/bmesh/blender/source/blender/editors/mesh/mesh_data.c      
2012-01-19 17:51:52 UTC (rev 43534)
@@ -758,14 +758,11 @@
        if(calc_edges || (mesh->totpoly && mesh->totedge == 0))
                BKE_mesh_calc_edges(mesh, calc_edges);
 
-       mesh->totface = mesh_recalcTesselation(
-               &mesh->fdata,
-               &mesh->ldata,
-               &mesh->pdata,
-               mesh->mvert,
-               mesh->totface,
-               mesh->totloop,
-               mesh->totpoly);
+       mesh->totface = mesh_recalcTesselation(&mesh->fdata, &mesh->ldata, 
&mesh->pdata,
+                                              mesh->mvert,
+                                              mesh->totface, mesh->totloop, 
mesh->totpoly,
+                                              /* calc normals right after, 
dont copy from polys here */
+                                              FALSE);
 
        mesh_update_customdata_pointers(mesh, TRUE);
 

Modified: branches/bmesh/blender/source/blender/editors/object/object_add.c
===================================================================
--- branches/bmesh/blender/source/blender/editors/object/object_add.c   
2012-01-19 17:30:29 UTC (rev 43533)
+++ branches/bmesh/blender/source/blender/editors/object/object_add.c   
2012-01-19 17:51:52 UTC (rev 43534)
@@ -1371,9 +1371,7 @@
 
                        DM_to_mesh(dm, newob->data, newob);
 
-                       /* re-tesselation doesn't happen automatic, calling 
like this is  */
-                       me= newob->data;
-                       me->totface = mesh_recalcTesselation(&me->fdata, 
&me->ldata, &me->pdata, me->mvert, me->totface, me->totloop, me->totpoly);
+                       /* re-tesselation is called by DM_to_mesh */
 
                        dm->release(dm);
                        object_free_modifiers(newob);   /* after derivedmesh 
calls! */

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

Reply via email to