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>2012-04-19 15:25:05 +0400
committerCampbell Barton <ideasman42@gmail.com>2012-04-19 15:25:05 +0400
commitdb2edfcfdec81fb03667a63e70f05ee832bf2586 (patch)
tree0420d0ad4380a67bf1e473174f3ca8f325bb5a13 /source/blender/bmesh
parent250560a423ea889ec491cdfde887571dea3c9e7c (diff)
bmesh api function: BM_edge_face_tangent()
was used by inset but make into an api function since scripts can use this too.
Diffstat (limited to 'source/blender/bmesh')
-rw-r--r--source/blender/bmesh/intern/bmesh_queries.c25
-rw-r--r--source/blender/bmesh/intern/bmesh_queries.h2
-rw-r--r--source/blender/bmesh/operators/bmo_inset.c13
3 files changed, 28 insertions, 12 deletions
diff --git a/source/blender/bmesh/intern/bmesh_queries.c b/source/blender/bmesh/intern/bmesh_queries.c
index 5efdd547ba9..b021fb4c320 100644
--- a/source/blender/bmesh/intern/bmesh_queries.c
+++ b/source/blender/bmesh/intern/bmesh_queries.c
@@ -813,6 +813,31 @@ float BM_edge_face_angle(BMEdge *e)
}
/**
+ * \brief BMESH EDGE/FACE TANGENT
+ *
+ * Calculate the tangent at this loop corner or fallback to the face normal on straignt lines.
+ * This vector always points inward into the face.
+ *
+ * \brief BM_edge_face_tangent
+ * \param e
+ * \param e_loop The loop to calculate the tangent at,
+ * used to get the face and winding direction.
+ */
+
+void BM_edge_face_tangent(BMEdge *e, BMLoop *e_loop, float r_tangent[3])
+{
+ float tvec[3];
+ BMVert *v1, *v2;
+ BM_edge_ordered_verts_ex(e, &v1, &v2, e_loop);
+
+ sub_v3_v3v3(tvec, v1->co, v2->co); /* use for temp storage */
+ /* note, we could average the tangents of both loops,
+ * for non flat ngons it will give a better direction */
+ cross_v3_v3v3(r_tangent, tvec, e_loop->f->no);
+ normalize_v3(r_tangent);
+}
+
+/**
* \brief BMESH VERT/EDGE ANGLE
*
* Calculates the angle a verts 2 edges.
diff --git a/source/blender/bmesh/intern/bmesh_queries.h b/source/blender/bmesh/intern/bmesh_queries.h
index 567d60eeac6..280fe843b1c 100644
--- a/source/blender/bmesh/intern/bmesh_queries.h
+++ b/source/blender/bmesh/intern/bmesh_queries.h
@@ -62,6 +62,8 @@ void BM_loop_face_normal(BMLoop *l, float r_normal[3]);
void BM_loop_face_tangent(BMLoop *l, float r_tangent[3]);
float BM_edge_face_angle(BMEdge *e);
+void BM_edge_face_tangent(BMEdge *e, BMLoop *e_loop, float r_tangent[3]);
+
float BM_vert_edge_angle(BMVert *v);
BMEdge *BM_edge_exists(BMVert *v1, BMVert *v2);
diff --git a/source/blender/bmesh/operators/bmo_inset.c b/source/blender/bmesh/operators/bmo_inset.c
index 3bfacb29197..1c823e7590c 100644
--- a/source/blender/bmesh/operators/bmo_inset.c
+++ b/source/blender/bmesh/operators/bmo_inset.c
@@ -42,17 +42,6 @@ typedef struct SplitEdgeInfo {
BMLoop *l;
} SplitEdgeInfo;
-static void edge_loop_tangent(BMEdge *e, BMLoop *e_loop, float r_no[3])
-{
- float tvec[3];
- BMVert *v1, *v2;
- BM_edge_ordered_verts_ex(e, &v1, &v2, e_loop);
-
- sub_v3_v3v3(tvec, v1->co, v2->co); /* use for temp storage */
- cross_v3_v3v3(r_no, tvec, e_loop->f->no);
- normalize_v3(r_no);
-}
-
/**
* return the tag loop where there is...
* - only 1 tagged face attached to this edge.
@@ -188,7 +177,7 @@ void bmo_inset_exec(BMesh *bm, BMOperator *op)
/* calc edge-split info */
es->e_new = es->l->e;
- edge_loop_tangent(es->e_new, es->l, es->no);
+ BM_edge_face_tangent(es->e_new, es->l, es->no);
if (es->e_new == es->e_old) { /* happens on boundary edges */
/* take care here, we're creating this double edge which _must_ have its verts replaced later on */