[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [32673] trunk/blender/source/blender/ blenkernel/intern/subsurf_ccg.c: Fixed bug #24364, " subsurf modifier causes wire-only meshes to disappear in object mode."

Nicholas Bishop nicholasbishop at gmail.com
Sun Oct 24 04:02:38 CEST 2010


Revision: 32673
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=32673
Author:   nicholasbishop
Date:     2010-10-24 04:02:37 +0200 (Sun, 24 Oct 2010)

Log Message:
-----------
Fixed bug #24364, "subsurf modifier causes wire-only meshes to disappear in object mode."

* Re-added code to draw loose edge

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/subsurf_ccg.c

Modified: trunk/blender/source/blender/blenkernel/intern/subsurf_ccg.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/subsurf_ccg.c	2010-10-24 00:09:23 UTC (rev 32672)
+++ trunk/blender/source/blender/blenkernel/intern/subsurf_ccg.c	2010-10-24 02:02:37 UTC (rev 32673)
@@ -1151,8 +1151,10 @@
 	CCGDerivedMesh *ccgdm = (CCGDerivedMesh*) dm;
 	CCGSubSurf *ss = ccgdm->ss;
 	CCGFaceIterator *fi = ccgSubSurf_getFaceIterator(ss);
+	CCGEdgeIterator *ei = ccgSubSurf_getEdgeIterator(ss);
 	int gridSize = ccgSubSurf_getGridSize(ss);
-	int start, end, step;
+	int edgeSize = ccgSubSurf_getEdgeSize(ss);
+	int step;
 	int useAging;
 
 	ccgSubSurf_getUseAgeCounts(ss, &useAging, NULL, NULL, NULL);
@@ -1165,20 +1167,12 @@
 		glColor3ub(0, 0, 0);
 	}
 
-	if(drawLooseEdges) {
-		start = 0;
-		end = gridSize;
+	if(ccgdm->drawInteriorEdges)
+		step = 1;
+	else
 		step = gridSize - 1;
-	}
-	else if(ccgdm->drawInteriorEdges) {
-		start = 1;
-		end = gridSize - 1;
-		step = 1;
-	}
 
-	if(drawLooseEdges && ccgdm->drawInteriorEdges)
-		step = 1;
-
+	/* draw edges using face grids */
 	for (; !ccgFaceIterator_isStopped(fi); ccgFaceIterator_next(fi)) {
 		CCGFace *f = ccgFaceIterator_getCurrent(fi);
 		int S, x, y, numVerts = ccgSubSurf_getFaceNumVerts(f);
@@ -1186,13 +1180,13 @@
 		for (S=0; S<numVerts; S++) {
 			DMGridData *faceGridData = ccgSubSurf_getFaceGridDataArray(ss, f, S);
 
-			for (y=start; y<end; y+=step) {
+			for (y=0; y<gridSize; y+=step) {
 				glBegin(GL_LINE_STRIP);
 				for (x=0; x<gridSize; x++)
 					glVertex3fv(faceGridData[y*gridSize + x].co);
 				glEnd();
 			}
-			for (x=start; x<end; x+=step) {
+			for (x=0; x<gridSize; x+=step) {
 				glBegin(GL_LINE_STRIP);
 				for (y=0; y<gridSize; y++)
 					glVertex3fv(faceGridData[y*gridSize + x].co);
@@ -1201,6 +1195,24 @@
 		}
 	}
 
+	/* draw edges with no adjacent face */
+	if(!drawLooseEdges) return;
+	for(; !ccgEdgeIterator_isStopped(ei); ccgEdgeIterator_next(ei))  {
+		CCGEdge *e = ccgEdgeIterator_getCurrent(ei);
+
+		if(!ccgSubSurf_getEdgeNumFaces(e)) {
+			DMGridData *edgeData = ccgSubSurf_getEdgeDataArray(ss, e);
+			int i;
+
+			glBegin(GL_LINE_STRIP);
+			for (i=0; i<edgeSize-1; i++) {
+				glVertex3fv(edgeData[i].co);
+				glVertex3fv(edgeData[i+1].co);
+			}
+			glEnd();
+		}
+	}
+
 	ccgFaceIterator_free(fi);
 }
 static void ccgDM_drawLooseEdges(DerivedMesh *dm) {





More information about the Bf-blender-cvs mailing list