[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [25397] trunk/blender/source/blender: utility functions for getting the corner angles of a quad or tri: angle_quad_v3 & angle_tri_v3

Campbell Barton ideasman42 at gmail.com
Tue Dec 15 10:39:46 CET 2009


Revision: 25397
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=25397
Author:   campbellbarton
Date:     2009-12-15 10:39:46 +0100 (Tue, 15 Dec 2009)

Log Message:
-----------
utility functions for getting the corner angles of a quad or tri: angle_quad_v3 & angle_tri_v3

Modified Paths:
--------------
    trunk/blender/source/blender/blenlib/BLI_math_vector.h
    trunk/blender/source/blender/blenlib/intern/math_vector.c
    trunk/blender/source/blender/editors/mesh/editmesh_lib.c

Modified: trunk/blender/source/blender/blenlib/BLI_math_vector.h
===================================================================
--- trunk/blender/source/blender/blenlib/BLI_math_vector.h	2009-12-15 03:25:26 UTC (rev 25396)
+++ trunk/blender/source/blender/blenlib/BLI_math_vector.h	2009-12-15 09:39:46 UTC (rev 25397)
@@ -131,6 +131,8 @@
 float angle_v3v3(float a[2], float b[2]);
 float angle_v3v3v3(float a[2], float b[2], float c[2]);
 float angle_normalized_v3v3(float a[3], float b[3]);
+void angle_tri_v3(float angles[3], const float v1[3], const float v2[3], const float v3[3]);
+void angle_quad_v3(float angles[4], const float v1[3], const float v2[3], const float v3[3], const float v4[3]);
 
 /********************************* Geometry **********************************/
 

Modified: trunk/blender/source/blender/blenlib/intern/math_vector.c
===================================================================
--- trunk/blender/source/blender/blenlib/intern/math_vector.c	2009-12-15 03:25:26 UTC (rev 25396)
+++ trunk/blender/source/blender/blenlib/intern/math_vector.c	2009-12-15 09:39:46 UTC (rev 25397)
@@ -205,6 +205,44 @@
 		return 2.0f*(float)saasin(len_v2v2(v2, v1)/2.0f);
 }
 
+void angle_tri_v3(float angles[3], const float v1[3], const float v2[3], const float v3[3])
+{
+	float ed1[3], ed2[3], ed3[3];
+
+	sub_v3_v3v3(ed1, v3, v1);
+	sub_v3_v3v3(ed2, v1, v2);
+	sub_v3_v3v3(ed3, v2, v3);
+
+	normalize_v3(ed1);
+	normalize_v3(ed2);
+	normalize_v3(ed3);
+
+	angles[0]= M_PI - angle_normalized_v3v3(ed1, ed2);
+	angles[1]= M_PI - angle_normalized_v3v3(ed2, ed3);
+	// face_angles[2] = M_PI - angle_normalized_v3v3(ed3, ed1);
+	angles[2]= M_PI - (angles[0] + angles[1]);
+}
+
+void angle_quad_v3(float angles[4], const float v1[3], const float v2[3], const float v3[3], const float v4[3])
+{
+	float ed1[3], ed2[3], ed3[3], ed4[3];
+
+	sub_v3_v3v3(ed1, v4, v1);
+	sub_v3_v3v3(ed2, v1, v2);
+	sub_v3_v3v3(ed3, v2, v3);
+	sub_v3_v3v3(ed4, v3, v4);
+
+	normalize_v3(ed1);
+	normalize_v3(ed2);
+	normalize_v3(ed3);
+	normalize_v3(ed4);
+
+	angles[0]= M_PI - angle_normalized_v3v3(ed1, ed2);
+	angles[1]= M_PI - angle_normalized_v3v3(ed2, ed3);
+	angles[2]= M_PI - angle_normalized_v3v3(ed3, ed4);
+	angles[3]= M_PI - angle_normalized_v3v3(ed4, ed1);
+}
+
 /********************************* Geometry **********************************/
 
 /* Project v1 on v2 */

Modified: trunk/blender/source/blender/editors/mesh/editmesh_lib.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/editmesh_lib.c	2009-12-15 03:25:26 UTC (rev 25396)
+++ trunk/blender/source/blender/editors/mesh/editmesh_lib.c	2009-12-15 09:39:46 UTC (rev 25397)
@@ -2388,45 +2388,6 @@
 	EM_free_index_arrays();
 }
 
-#define FLT_EPSILON 0.00001
-
-static void em_face_angles(EditFace *efa, float *face_angles)
-{
-	float vec1[3], vec2[3], vec3[3], vec4[3];
-
-	/* note, could cache normalized edges? */
-	if(efa->v4) {
-		sub_v3_v3v3(vec1, efa->v4->co, efa->v1->co);
-		sub_v3_v3v3(vec2, efa->v1->co, efa->v2->co);
-		sub_v3_v3v3(vec3, efa->v2->co, efa->v3->co);
-		sub_v3_v3v3(vec4, efa->v3->co, efa->v4->co);
-
-		normalize_v3(vec1);
-		normalize_v3(vec2);
-		normalize_v3(vec3);
-		normalize_v3(vec4);
-
-		face_angles[0]= M_PI - angle_normalized_v3v3(vec1, vec2);
-		face_angles[1]= M_PI - angle_normalized_v3v3(vec2, vec3);
-		face_angles[2]= M_PI - angle_normalized_v3v3(vec3, vec4);
-		face_angles[3]= M_PI - angle_normalized_v3v3(vec4, vec1);
-	}
-	else {
-		sub_v3_v3v3(vec1, efa->v3->co, efa->v1->co);
-		sub_v3_v3v3(vec2, efa->v1->co, efa->v2->co);
-		sub_v3_v3v3(vec3, efa->v2->co, efa->v3->co);
-
-		normalize_v3(vec1);
-		normalize_v3(vec2);
-		normalize_v3(vec3);
-
-		face_angles[0]= M_PI - angle_normalized_v3v3(vec1, vec2);
-		face_angles[1]= M_PI - angle_normalized_v3v3(vec2, vec3);
-
-		//face_angles[2]= M_PI - (face_angles[0] + face_angles[1]);
-		face_angles[2] = M_PI - angle_normalized_v3v3(vec3, vec1);
-	}
-}
 void EM_solidify(EditMesh *em, float dist)
 {
 	EditFace *efa;
@@ -2446,9 +2407,16 @@
 		if(!(efa->f & SELECT))
 			continue;
 
-		em_face_angles(efa, face_angles);
+		if(efa->v4) {
+			angle_quad_v3(face_angles, efa->v1->co, efa->v2->co, efa->v3->co, efa->v4->co);
+			j= 3;
+		}
+		else {
+			angle_tri_v3(face_angles, efa->v1->co, efa->v2->co, efa->v3->co);
+			j= 2;
+		}
 
-		for(j= efa->v4 ? 3:2; j>=0; j--) {
+		for(; j>=0; j--) {
 			eve= *(&efa->v1 + j);
 			vert_accum[eve->tmp.l] += face_angles[j];
 			vert_angles[eve->tmp.l]+= shell_angle_to_dist(angle_normalized_v3v3(eve->no, efa->n)) * face_angles[j];





More information about the Bf-blender-cvs mailing list