Revision: 43163
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=43163
Author:   campbellbarton
Date:     2012-01-05 12:40:09 +0000 (Thu, 05 Jan 2012)
Log Message:
-----------
added a function to ensure derived mesh has tessface's, in preparation for 
removal of tessface recalculation after each modifier runs.

Modified Paths:
--------------
    branches/bmesh/blender/source/blender/blenkernel/BKE_DerivedMesh.h
    branches/bmesh/blender/source/blender/blenkernel/intern/DerivedMesh.c
    branches/bmesh/blender/source/blender/modifiers/intern/MOD_boolean.c
    branches/bmesh/blender/source/blender/modifiers/intern/MOD_decimate.c
    branches/bmesh/blender/source/blender/modifiers/intern/MOD_explode.c
    
branches/bmesh/blender/source/blender/modifiers/intern/MOD_particleinstance.c
    branches/bmesh/blender/source/blender/modifiers/intern/MOD_remesh.c
    branches/bmesh/blender/source/blender/modifiers/intern/MOD_solidify.c

Modified: branches/bmesh/blender/source/blender/blenkernel/BKE_DerivedMesh.h
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/BKE_DerivedMesh.h  
2012-01-05 11:23:24 UTC (rev 43162)
+++ branches/bmesh/blender/source/blender/blenkernel/BKE_DerivedMesh.h  
2012-01-05 12:40:09 UTC (rev 43163)
@@ -517,6 +517,8 @@
 /*sets up mpolys for a DM based on face iterators in source*/
 void DM_DupPolys(DerivedMesh *source, DerivedMesh *target);
 
+void DM_ensure_tessface(DerivedMesh *dm);
+
 /* interpolates vertex data from the vertices indexed by src_indices in the
  * source mesh using the given weights and stores the result in the vertex
  * indexed by dest_index in the dest mesh

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/DerivedMesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/DerivedMesh.c       
2012-01-05 11:23:24 UTC (rev 43162)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/DerivedMesh.c       
2012-01-05 12:40:09 UTC (rev 43163)
@@ -352,6 +352,26 @@
        }
 }
 
+/* note: until all modifiers can take MPoly's as input,
+ * use this at the start of modifiers  */
+void DM_ensure_tessface(DerivedMesh *dm)
+{
+       const int numTessFaces = dm->getNumTessFaces(dm);
+       const int numPolys =     dm->getNumPolys(dm);
+
+       if ( (numTessFaces == 0) && (numPolys != 0)) {
+               dm->recalcTesselation(dm);
+
+               if (dm->getNumTessFaces(dm)) {
+                       printf("warning %s: could not create tessfaces from %d 
polygons, dm->type=%d\n",
+                              __func__, numPolys, dm->type);
+               }
+               else {
+                       printf("info %s: polys -> ngons calculated\n", 
__func__);
+               }
+       }
+}
+
 void DM_to_mesh(DerivedMesh *dm, Mesh *me, Object *ob)
 {
        /* dm might depend on me, so we need to do everything with a local copy 
*/

Modified: branches/bmesh/blender/source/blender/modifiers/intern/MOD_boolean.c
===================================================================
--- branches/bmesh/blender/source/blender/modifiers/intern/MOD_boolean.c        
2012-01-05 11:23:24 UTC (rev 43162)
+++ branches/bmesh/blender/source/blender/modifiers/intern/MOD_boolean.c        
2012-01-05 12:40:09 UTC (rev 43163)
@@ -137,6 +137,10 @@
                result = get_quick_derivedMesh(derivedData, dm, bmd->operation);
 
                if(result == NULL) {
+
+                       DM_ensure_tessface(dm);          /* BMESH - UNTIL 
MODIFIER IS UPDATED FOR MPoly */
+                       DM_ensure_tessface(derivedData); /* BMESH - UNTIL 
MODIFIER IS UPDATED FOR MPoly */
+
                        result = NewBooleanDerivedMesh(dm, bmd->object, 
derivedData, ob,
                                        1 + bmd->operation);
                }

Modified: branches/bmesh/blender/source/blender/modifiers/intern/MOD_decimate.c
===================================================================
--- branches/bmesh/blender/source/blender/modifiers/intern/MOD_decimate.c       
2012-01-05 11:23:24 UTC (rev 43162)
+++ branches/bmesh/blender/source/blender/modifiers/intern/MOD_decimate.c       
2012-01-05 12:40:09 UTC (rev 43163)
@@ -81,6 +81,8 @@
        int totvert, totface;
        int a, numTris;
 
+       DM_ensure_tessface(dm); /* BMESH - UNTIL MODIFIER IS UPDATED FOR MPoly 
*/
+
        mvert = dm->getVertArray(dm);
        mface = dm->getTessFaceArray(dm);
        totvert = dm->getNumVerts(dm);

Modified: branches/bmesh/blender/source/blender/modifiers/intern/MOD_explode.c
===================================================================
--- branches/bmesh/blender/source/blender/modifiers/intern/MOD_explode.c        
2012-01-05 11:23:24 UTC (rev 43162)
+++ branches/bmesh/blender/source/blender/modifiers/intern/MOD_explode.c        
2012-01-05 12:40:09 UTC (rev 43163)
@@ -983,6 +983,8 @@
        ExplodeModifierData *emd= (ExplodeModifierData*) md;
        ParticleSystemModifierData *psmd=findPrecedingParticlesystem(ob,md);
 
+       DM_ensure_tessface(dm); /* BMESH - UNTIL MODIFIER IS UPDATED FOR MPoly 
*/
+
        if(psmd){
                ParticleSystem * psys=psmd->psys;
 

Modified: 
branches/bmesh/blender/source/blender/modifiers/intern/MOD_particleinstance.c
===================================================================
--- 
branches/bmesh/blender/source/blender/modifiers/intern/MOD_particleinstance.c   
    2012-01-05 11:23:24 UTC (rev 43162)
+++ 
branches/bmesh/blender/source/blender/modifiers/intern/MOD_particleinstance.c   
    2012-01-05 12:40:09 UTC (rev 43163)
@@ -122,6 +122,8 @@
        float max_co=0.0, min_co=0.0, temp_co[3], cross[3];
        float *size=NULL;
 
+       DM_ensure_tessface(dm); /* BMESH - UNTIL MODIFIER IS UPDATED FOR MPoly 
*/
+
        trackneg=((ob->trackflag>2)?1:0);
 
        if(pimd->ob==ob){

Modified: branches/bmesh/blender/source/blender/modifiers/intern/MOD_remesh.c
===================================================================
--- branches/bmesh/blender/source/blender/modifiers/intern/MOD_remesh.c 
2012-01-05 11:23:24 UTC (rev 43162)
+++ branches/bmesh/blender/source/blender/modifiers/intern/MOD_remesh.c 
2012-01-05 12:40:09 UTC (rev 43163)
@@ -151,6 +151,8 @@
        DualConFlags flags = 0;
        DualConMode mode = 0;
 
+       DM_ensure_tessface(dm); /* BMESH - UNTIL MODIFIER IS UPDATED FOR MPoly 
*/
+
        rmd = (RemeshModifierData*)md;
 
        init_dualcon_mesh(&input, dm);

Modified: branches/bmesh/blender/source/blender/modifiers/intern/MOD_solidify.c
===================================================================
--- branches/bmesh/blender/source/blender/modifiers/intern/MOD_solidify.c       
2012-01-05 11:23:24 UTC (rev 43162)
+++ branches/bmesh/blender/source/blender/modifiers/intern/MOD_solidify.c       
2012-01-05 12:40:09 UTC (rev 43163)
@@ -725,6 +725,7 @@
        
        /* must recalculate normals with vgroups since they can displace 
unevenly [#26888] */
        if(dvert) {
+               /* BMESH_TODO, we only need to get vertex normals here, this is 
way overkill */
                CDDM_calc_normals(result);
        }
        else {

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

Reply via email to