[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [34736] trunk/blender/source/blender: fix [#25968] Crash on changing merge distance in array modifier with edgesplit modifier in chain
Campbell Barton
ideasman42 at gmail.com
Wed Feb 9 05:45:57 CET 2011
Revision: 34736
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=34736
Author: campbellbarton
Date: 2011-02-09 04:45:53 +0000 (Wed, 09 Feb 2011)
Log Message:
-----------
fix [#25968] Crash on changing merge distance in array modifier with edgesplit modifier in chain
Modified Paths:
--------------
trunk/blender/source/blender/blenkernel/intern/mesh.c
trunk/blender/source/blender/modifiers/intern/MOD_array.c
Modified: trunk/blender/source/blender/blenkernel/intern/mesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/mesh.c 2011-02-09 03:49:59 UTC (rev 34735)
+++ trunk/blender/source/blender/blenkernel/intern/mesh.c 2011-02-09 04:45:53 UTC (rev 34736)
@@ -456,6 +456,32 @@
nr--;
}
+ /* check corrupt cases, bowtie geometry, cant handle these because edge data wont exist so just return 0 */
+ if(nr==3) {
+ if(
+ /* real edges */
+ mface->v1==mface->v2 ||
+ mface->v2==mface->v3 ||
+ mface->v3==mface->v1
+ ) {
+ return 0;
+ }
+ }
+ else if(nr==4) {
+ if(
+ /* real edges */
+ mface->v1==mface->v2 ||
+ mface->v2==mface->v3 ||
+ mface->v3==mface->v4 ||
+ mface->v4==mface->v1 ||
+ /* across the face */
+ mface->v1==mface->v3 ||
+ mface->v2==mface->v4
+ ) {
+ return 0;
+ }
+ }
+
/* prevent a zero at wrong index location */
if(nr==3) {
if(mface->v3==0) {
Modified: trunk/blender/source/blender/modifiers/intern/MOD_array.c
===================================================================
--- trunk/blender/source/blender/modifiers/intern/MOD_array.c 2011-02-09 03:49:59 UTC (rev 34735)
+++ trunk/blender/source/blender/modifiers/intern/MOD_array.c 2011-02-09 04:45:53 UTC (rev 34736)
@@ -546,12 +546,10 @@
if (inMF.v4)
mf2->v4 = calc_mapping(indexMap, inMF.v4, j);
- test_index_face_maxvert(mf2, &result->faceData, numFaces, inMF.v4?4:3, numVerts);
numFaces++;
/* if the face has fewer than 3 vertices, don't create it */
- if(mf2->v3 == 0 || (mf2->v1 && (mf2->v1 == mf2->v3 || mf2->v1 ==
- mf2->v4))) {
+ if(test_index_face_maxvert(mf2, &result->faceData, numFaces-1, inMF.v4?4:3, numVerts) < 3) {
numFaces--;
DM_free_face_data(result, numFaces, 1);
}
More information about the Bf-blender-cvs
mailing list