Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2009-12-15 12:39:46 +0300
committerCampbell Barton <ideasman42@gmail.com>2009-12-15 12:39:46 +0300
commit7fc799d4a9c52254390e5df2942c73831ca7e5ac (patch)
treec265c60e3cff3913d280f6229b9eae01cc91e44b /source/blender/editors/mesh/editmesh_lib.c
parent55898c04fd4935de5610242bfb259f30e58b0413 (diff)
utility functions for getting the corner angles of a quad or tri: angle_quad_v3 & angle_tri_v3
Diffstat (limited to 'source/blender/editors/mesh/editmesh_lib.c')
-rw-r--r--source/blender/editors/mesh/editmesh_lib.c50
1 files changed, 9 insertions, 41 deletions
diff --git a/source/blender/editors/mesh/editmesh_lib.c b/source/blender/editors/mesh/editmesh_lib.c
index c543c3287a0..52af5ce8e2f 100644
--- a/source/blender/editors/mesh/editmesh_lib.c
+++ b/source/blender/editors/mesh/editmesh_lib.c
@@ -2388,45 +2388,6 @@ void EM_make_hq_normals(EditMesh *em)
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 @@ void EM_solidify(EditMesh *em, float dist)
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];