Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicholas Bishop <nicholasbishop@gmail.com>2012-03-14 10:32:13 +0400
committerNicholas Bishop <nicholasbishop@gmail.com>2012-03-14 10:32:13 +0400
commitb37a355c8e0a79ea447cd0a4fd06dc30724a3374 (patch)
treea5ac218a9d197e14a3909dfdde075d80fd6f0035 /source/blender/blenkernel
parent521e724eddc9bfcc3f4aaeac184ae6974bb922a4 (diff)
Copy hidden flag to vertices when applying multires modifier.
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r--source/blender/blenkernel/BKE_subsurf.h6
-rw-r--r--source/blender/blenkernel/intern/subsurf_ccg.c38
2 files changed, 44 insertions, 0 deletions
diff --git a/source/blender/blenkernel/BKE_subsurf.h b/source/blender/blenkernel/BKE_subsurf.h
index 9c0160025a3..10254545d3e 100644
--- a/source/blender/blenkernel/BKE_subsurf.h
+++ b/source/blender/blenkernel/BKE_subsurf.h
@@ -41,6 +41,7 @@ struct DerivedMesh;
struct IndexNode;
struct ListBase;
struct Mesh;
+struct MPoly;
struct MultiresSubsurf;
struct Object;
struct PBVH;
@@ -71,6 +72,11 @@ int ccg_gridsize(int level);
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 */
diff --git a/source/blender/blenkernel/intern/subsurf_ccg.c b/source/blender/blenkernel/intern/subsurf_ccg.c
index d8fabcbea7a..46c52b76c9e 100644
--- a/source/blender/blenkernel/intern/subsurf_ccg.c
+++ b/source/blender/blenkernel/intern/subsurf_ccg.c
@@ -951,6 +951,44 @@ static void ccgDM_getFinalFace(DerivedMesh *dm, int faceNum, MFace *mf)
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;