[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [43983] trunk/blender/source/blender/ editors/mesh/editmesh_add.c: Fix for duplicated vertices in UV sphere when it' s creating with large radius.

Sergey Sharybin sergey.vfx at gmail.com
Wed Feb 8 12:05:05 CET 2012


Revision: 43983
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=43983
Author:   nazgul
Date:     2012-02-08 11:04:56 +0000 (Wed, 08 Feb 2012)
Log Message:
-----------
Fix for duplicated vertices in UV sphere when it's creating with large radius.

Issue was caused by not enough threshold limit used for removing doubles.
Switched to adoptive threshold value calculation based on smallest length
of segments in meridians and parallels.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/mesh/editmesh_add.c

Modified: trunk/blender/source/blender/editors/mesh/editmesh_add.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/editmesh_add.c	2012-02-08 09:40:34 UTC (rev 43982)
+++ trunk/blender/source/blender/editors/mesh/editmesh_add.c	2012-02-08 11:04:56 UTC (rev 43983)
@@ -1036,6 +1036,7 @@
 	float phi, phid, vec[3];
 	float q[4], cmat[3][3], nor[3]= {0.0, 0.0, 0.0};
 	short a, b;
+	float len, len2, vec2[3];
 	
 	EM_clear_flag_all(em, SELECT);
 
@@ -1117,8 +1118,20 @@
 			rotateflag(em, 2, v1->co, cmat);
 		}
 
-		removedoublesflag(em, 4, 0, 0.0001);
+		/* length of one segment on meridian */
+		len= 2*dia*sinf(phid / 2.0f);
 
+		/* length of one segment in shortest parallen */
+		vec[0]= dia*sinf(phid);
+		vec[1]= 0.0;
+		vec[2]= dia*cosf(phid);
+
+		mul_v3_m3v3(vec2, cmat, vec);
+		len2= len_v3v3(vec, vec2);
+
+		/* use shortest segment length divided by 3 as merge threshold */
+		removedoublesflag(em, 4, 0, MIN2(len, len2) / 3.0f);
+
 		/* and now do imat */
 		eve= em->verts.first;
 		while(eve) {




More information about the Bf-blender-cvs mailing list