[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [44867] trunk/blender/source/blender: Add MDisps.hidden bitmap.

Nicholas Bishop nicholasbishop at gmail.com
Wed Mar 14 07:31:39 CET 2012


Revision: 44867
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=44867
Author:   nicholasbishop
Date:     2012-03-14 06:31:38 +0000 (Wed, 14 Mar 2012)
Log Message:
-----------
Add MDisps.hidden bitmap.

Updates SDNA, customdata functions, and file read/write. Also adds
accessor functions to BKE paint.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_paint.h
    trunk/blender/source/blender/blenkernel/intern/customdata.c
    trunk/blender/source/blender/blenkernel/intern/paint.c
    trunk/blender/source/blender/blenloader/intern/readfile.c
    trunk/blender/source/blender/blenloader/intern/writefile.c
    trunk/blender/source/blender/makesdna/DNA_meshdata_types.h

Modified: trunk/blender/source/blender/blenkernel/BKE_paint.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_paint.h	2012-03-14 06:31:24 UTC (rev 44866)
+++ trunk/blender/source/blender/blenkernel/BKE_paint.h	2012-03-14 06:31:38 UTC (rev 44867)
@@ -33,6 +33,7 @@
  */
 
 struct Brush;
+struct MDisps;
 struct MFace;
 struct MultireModifierData;
 struct MVert;
@@ -61,6 +62,11 @@
 int paint_facesel_test(struct Object *ob);
 int paint_vertsel_test(struct Object *ob);
 
+/* partial visibility */
+int paint_is_face_hidden(const struct MFace *f, const struct MVert *mvert);
+int paint_is_grid_face_hidden(const unsigned int *grid_hidden,
+							  int gridsize, int x, int y);
+
 /* Session data (mode-specific) */
 
 typedef struct SculptSession {

Modified: trunk/blender/source/blender/blenkernel/intern/customdata.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/customdata.c	2012-03-14 06:31:24 UTC (rev 44866)
+++ trunk/blender/source/blender/blenkernel/intern/customdata.c	2012-03-14 06:31:38 UTC (rev 44867)
@@ -484,6 +484,7 @@
 	for(i = 0; i < count; ++i) {
 		if(s[i].disps) {
 			d[i].disps = MEM_dupallocN(s[i].disps);
+			d[i].hidden = MEM_dupallocN(s[i].hidden);
 			d[i].totdisp = s[i].totdisp;
 			d[i].level = s[i].level;
 		}
@@ -504,7 +505,10 @@
 	for(i = 0; i < count; ++i) {
 		if(d[i].disps)
 			MEM_freeN(d[i].disps);
+		if(d[i].hidden)
+			MEM_freeN(d[i].hidden);
 		d[i].disps = NULL;
+		d[i].hidden = NULL;
 		d[i].totdisp = 0;
 		d[i].level = 0;
 	}

Modified: trunk/blender/source/blender/blenkernel/intern/paint.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/paint.c	2012-03-14 06:31:24 UTC (rev 44866)
+++ trunk/blender/source/blender/blenkernel/intern/paint.c	2012-03-14 06:31:38 UTC (rev 44867)
@@ -33,15 +33,17 @@
 
 #include "DNA_object_types.h"
 #include "DNA_mesh_types.h"
+#include "DNA_meshdata_types.h"
 #include "DNA_scene_types.h"
 #include "DNA_brush_types.h"
 
+#include "BLI_bitmap.h"
 #include "BLI_utildefines.h"
 
-
 #include "BKE_brush.h"
 #include "BKE_library.h"
 #include "BKE_paint.h"
+#include "BKE_subsurf.h"
 
 #include <stdlib.h>
 #include <string.h>
@@ -147,3 +149,26 @@
 	tar->brush= src->brush;
 	id_us_plus((ID *)tar->brush);
 }
+
+/* returns non-zero if any of the face's vertices
+   are hidden, zero otherwise */
+int paint_is_face_hidden(const MFace *f, const MVert *mvert)
+{
+	return ((mvert[f->v1].flag & ME_HIDE) ||
+			(mvert[f->v2].flag & ME_HIDE) ||
+			(mvert[f->v3].flag & ME_HIDE) ||
+			(f->v4 && (mvert[f->v4].flag & ME_HIDE)));
+}
+
+/* returns non-zero if any of the corners of the grid
+   face whose inner corner is at (x,y) are hidden,
+   zero otherwise */
+int paint_is_grid_face_hidden(const unsigned int *grid_hidden,
+							  int gridsize, int x, int y)
+{
+	/* skip face if any of its corners are hidden */
+	return (BLI_BITMAP_GET(grid_hidden, y * gridsize + x) ||
+			BLI_BITMAP_GET(grid_hidden, y * gridsize + x+1) ||
+			BLI_BITMAP_GET(grid_hidden, (y+1) * gridsize + x+1) ||
+			BLI_BITMAP_GET(grid_hidden, (y+1) * gridsize + x));
+}

Modified: trunk/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/readfile.c	2012-03-14 06:31:24 UTC (rev 44866)
+++ trunk/blender/source/blender/blenloader/intern/readfile.c	2012-03-14 06:31:38 UTC (rev 44867)
@@ -3750,6 +3750,7 @@
 
 		for(i = 0; i < count; ++i) {
 			mdisps[i].disps = newdataadr(fd, mdisps[i].disps);
+			mdisps[i].hidden = newdataadr(fd, mdisps[i].hidden);
 
 			if (mdisps[i].totdisp && !mdisps[i].level) {
 				/* this calculation is only correct for loop mdisps;

Modified: trunk/blender/source/blender/blenloader/intern/writefile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/writefile.c	2012-03-14 06:31:24 UTC (rev 44866)
+++ trunk/blender/source/blender/blenloader/intern/writefile.c	2012-03-14 06:31:38 UTC (rev 44867)
@@ -135,6 +135,7 @@
 #include "DNA_movieclip_types.h"
 
 #include "MEM_guardedalloc.h" // MEM_freeN
+#include "BLI_bitmap.h"
 #include "BLI_blenlib.h"
 #include "BLI_linklist.h"
 #include "BLI_bpath.h"
@@ -1638,11 +1639,15 @@
 		int i;
 		
 		writestruct(wd, DATA, "MDisps", count, mdlist);
-		if(!external) {
-			for(i = 0; i < count; ++i) {
-				if(mdlist[i].disps)
-					writedata(wd, DATA, sizeof(float)*3*mdlist[i].totdisp, mdlist[i].disps);
+		for(i = 0; i < count; ++i) {
+			MDisps *md = &mdlist[i];
+			if(md->disps) {
+				if(!external)
+					writedata(wd, DATA, sizeof(float)*3*md->totdisp, md->disps);
 			}
+			
+			if(md->hidden)
+				writedata(wd, DATA, BLI_BITMAP_SIZE(md->totdisp), md->hidden);
 		}
 	}
 }

Modified: trunk/blender/source/blender/makesdna/DNA_meshdata_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_meshdata_types.h	2012-03-14 06:31:24 UTC (rev 44866)
+++ trunk/blender/source/blender/makesdna/DNA_meshdata_types.h	2012-03-14 06:31:38 UTC (rev 44867)
@@ -166,6 +166,12 @@
 	int totdisp;
 	int level;
 	float (*disps)[3];
+	
+	/* Used for hiding parts of a multires mesh. Essentially the multires
+	   equivalent of MVert.flag's ME_HIDE bit.
+	
+	   This is a bitmap, keep in sync with type used in BLI_bitmap.h */
+	unsigned int *hidden;
 } MDisps;
 
 /** Multires structs kept for compatibility with old files **/




More information about the Bf-blender-cvs mailing list