[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [40467] trunk/blender/source/blender: Fix #28226: Selection highlighting is wrong when Solidify Modifier is used

Sergey Sharybin g.ulairi at gmail.com
Thu Sep 22 18:57:17 CEST 2011


Revision: 40467
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=40467
Author:   nazgul
Date:     2011-09-22 16:57:16 +0000 (Thu, 22 Sep 2011)
Log Message:
-----------
Fix #28226: Selection highlighting is wrong when Solidify Modifier is used

Set origindices for edges/faces created for rim to ORIGINDEX_NONE.
Also discovered error in recent editmode VBO fix -- it used to crash
when comparing faces with ORIGINDEX_NONE original index.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/cdderivedmesh.c
    trunk/blender/source/blender/modifiers/intern/MOD_solidify.c

Modified: trunk/blender/source/blender/blenkernel/intern/cdderivedmesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/cdderivedmesh.c	2011-09-22 16:30:33 UTC (rev 40466)
+++ trunk/blender/source/blender/blenkernel/intern/cdderivedmesh.c	2011-09-22 16:57:16 UTC (rev 40467)
@@ -981,9 +981,13 @@
 					if(!flush && compareDrawOptions) {
 						int next_orig= (index==NULL) ? next_actualFace : index[next_actualFace];
 
-						/* also compare draw options and flush buffer if they're different
-						   need for face selection highlight in edit mode */
-						flush|= compareDrawOptions(userData, orig, next_orig) == 0;
+						if(orig==ORIGINDEX_NONE || next_orig==ORIGINDEX_NONE) {
+							flush= 1;
+						} else {
+							/* also compare draw options and flush buffer if they're different
+							   need for face selection highlight in edit mode */
+							flush|= compareDrawOptions(userData, orig, next_orig) == 0;
+						}
 					}
 
 					if(flush) {

Modified: trunk/blender/source/blender/modifiers/intern/MOD_solidify.c
===================================================================
--- trunk/blender/source/blender/modifiers/intern/MOD_solidify.c	2011-09-22 16:30:33 UTC (rev 40466)
+++ trunk/blender/source/blender/modifiers/intern/MOD_solidify.c	2011-09-22 16:57:16 UTC (rev 40467)
@@ -524,7 +524,7 @@
 	}
 
 	if(smd->flag & MOD_SOLIDIFY_RIM) {
-
+		int *origindex;
 		
 		/* bugger, need to re-calculate the normals for the new edge faces.
 		 * This could be done in many ways, but probably the quickest way is to calculate the average normals for side faces only.
@@ -551,18 +551,22 @@
 				{0, 3, 3, 0}};
 
 		/* add faces & edges */
+		origindex= result->getEdgeDataArray(result, CD_ORIGINDEX);
 		ed= medge + (numEdges * 2);
 		for(i=0; i<newEdges; i++, ed++) {
 			ed->v1= new_vert_arr[i];
 			ed->v2= new_vert_arr[i] + numVerts;
 			ed->flag |= ME_EDGEDRAW;
 
+			origindex[numEdges * 2 + i]= ORIGINDEX_NONE;
+
 			if(crease_rim)
 				ed->crease= crease_rim;
 		}
 
 		/* faces */
 		mf= mface + (numFaces * 2);
+		origindex= result->getFaceDataArray(result, CD_ORIGINDEX);
 		for(i=0; i<newFaces; i++, mf++) {
 			int eidx= new_edge_arr[i];
 			int fidx= edge_users[eidx];
@@ -623,6 +627,7 @@
 			add_v3_v3(edge_vert_nos[ed->v1], nor);
 			add_v3_v3(edge_vert_nos[ed->v2], nor);
 #endif
+			origindex[numFaces * 2 + i]= ORIGINDEX_NONE;
 		}
 		
 #ifdef SOLIDIFY_SIDE_NORMALS




More information about the Bf-blender-cvs mailing list