[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