Revision: 44870
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=44870
Author:   nicholasbishop
Date:     2012-03-14 06:32:13 +0000 (Wed, 14 Mar 2012)
Log Message:
-----------
Copy hidden flag to vertices when applying multires modifier.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_subsurf.h
    trunk/blender/source/blender/blenkernel/intern/subsurf_ccg.c
    trunk/blender/source/blender/modifiers/intern/MOD_multires.c

Modified: trunk/blender/source/blender/blenkernel/BKE_subsurf.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_subsurf.h       2012-03-14 
06:32:03 UTC (rev 44869)
+++ trunk/blender/source/blender/blenkernel/BKE_subsurf.h       2012-03-14 
06:32:13 UTC (rev 44870)
@@ -41,6 +41,7 @@
 struct IndexNode;
 struct ListBase;
 struct Mesh;
+struct MPoly;
 struct MultiresSubsurf;
 struct Object;
 struct PBVH;
@@ -71,6 +72,11 @@
    of this function to convert to grid coordinates at 'high_level' */
 int ccg_factor(int low_level, int high_level);
 
+void subsurf_copy_grid_hidden(struct DerivedMesh *dm,
+                                                         const struct MPoly 
*mpoly,
+                                                         struct MVert *mvert,
+                                                         const struct MDisps 
*mdisps);
+
 typedef enum MultiresModifiedFlags {
        /* indicates the grids have been sculpted on, so MDisps
           have to be updated */

Modified: trunk/blender/source/blender/blenkernel/intern/subsurf_ccg.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/subsurf_ccg.c        
2012-03-14 06:32:03 UTC (rev 44869)
+++ trunk/blender/source/blender/blenkernel/intern/subsurf_ccg.c        
2012-03-14 06:32:13 UTC (rev 44870)
@@ -951,6 +951,44 @@
        else mf->flag = ME_SMOOTH;
 }
 
+/* Translate GridHidden into the ME_HIDE flag for MVerts. Assumes
+   vertices are in the order output by ccgDM_copyFinalVertArray. */
+void subsurf_copy_grid_hidden(DerivedMesh *dm, const MPoly *mpoly,
+                                                         MVert *mvert, const 
MDisps *mdisps)
+{
+       CCGDerivedMesh *ccgdm = (CCGDerivedMesh*)dm;
+       CCGSubSurf *ss = ccgdm->ss;
+       int level = ccgSubSurf_getSubdivisionLevels(ss);
+       int gridSize = ccgSubSurf_getGridSize(ss);
+       int edgeSize = ccgSubSurf_getEdgeSize(ss);
+       int totface = ccgSubSurf_getNumFaces(ss);
+       int i, j, x, y;
+       
+       for(i = 0; i < totface; i++) {
+               CCGFace *f = ccgdm->faceMap[i].face;
+
+               for(j = 0; j < mpoly[i].totloop; j++) {
+                       const MDisps *md = &mdisps[mpoly[i].loopstart + j];
+                       int hidden_gridsize = ccg_gridsize(md->level);
+                       int factor = ccg_factor(level, md->level);
+                       
+                       if(!md->hidden)
+                               continue;
+                       
+                       for(y = 0; y < gridSize; y++) {
+                               for(x = 0; x < gridSize; x++) {
+                                       int vndx, offset;
+                                       
+                                       vndx = getFaceIndex(ss, f, j, x, y, 
edgeSize, gridSize);
+                                       offset = (y*factor) * hidden_gridsize + 
(x*factor);
+                                       if(BLI_BITMAP_GET(md->hidden, offset))
+                                               mvert[vndx].flag |= ME_HIDE;
+                               }
+                       }
+               }
+       }
+}
+
 static void ccgDM_copyFinalVertArray(DerivedMesh *dm, MVert *mvert)
 {
        CCGDerivedMesh *ccgdm = (CCGDerivedMesh*) dm;

Modified: trunk/blender/source/blender/modifiers/intern/MOD_multires.c
===================================================================
--- trunk/blender/source/blender/modifiers/intern/MOD_multires.c        
2012-03-14 06:32:03 UTC (rev 44869)
+++ trunk/blender/source/blender/modifiers/intern/MOD_multires.c        
2012-03-14 06:32:13 UTC (rev 44870)
@@ -36,12 +36,14 @@
 #include <stddef.h>
 
 #include "DNA_mesh_types.h"
+#include "DNA_object_types.h"
 
 #include "BKE_cdderivedmesh.h"
+#include "BKE_mesh.h"
 #include "BKE_multires.h"
 #include "BKE_modifier.h"
 #include "BKE_paint.h"
-#include "BKE_particle.h"
+#include "BKE_subsurf.h"
 
 #include "MOD_util.h"
 
@@ -88,7 +90,28 @@
                return dm;
 
        if(useRenderParams || !isFinalCalc) {
-               DerivedMesh *cddm= CDDM_copy(result);
+               DerivedMesh *cddm;
+               
+               cddm= CDDM_copy(result);
+
+               /* copy hidden flag to vertices */
+               if(!useRenderParams) {
+                       struct MDisps *mdisps;
+                       mdisps = CustomData_get_layer(&me->ldata, CD_MDISPS);
+                       if(mdisps) {
+                               subsurf_copy_grid_hidden(result, me->mpoly,
+                                                                               
 cddm->getVertArray(cddm),
+                                                                               
 mdisps);
+
+                               
mesh_flush_hidden_from_verts(cddm->getVertArray(cddm),
+                                                                               
         cddm->getLoopArray(cddm),
+                                                                               
         cddm->getEdgeArray(cddm),
+                                                                               
         cddm->getNumEdges(cddm),
+                                                                               
         cddm->getPolyArray(cddm),
+                                                                               
         cddm->getNumPolys(cddm));
+                       }
+               }
+
                result->release(result);
                result= cddm;
        }

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

Reply via email to