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:
authorAlexander Gavrilov <angavrilov@gmail.com>2018-10-20 21:02:52 +0300
committerAlexander Gavrilov <angavrilov@gmail.com>2018-11-06 21:20:17 +0300
commit0709fac41ef0a20955069fcd6609577189e96d5c (patch)
treec7f6f7e993ccf7bf1fda3ec37f42dc5b2650f045 /source/blender/blenkernel/intern/mesh.c
parent84fa806491cd6485847140424a87d14ea135d2e7 (diff)
BKE_mesh: add a utility to get edge indices from looptri.
Not all three sides of a tesselated mesh triangle are guaranteed to be original mesh edges, so a somewhat complicated check is required to detect which ones are real. It seems that until now there was no utility function for that, only some example code.
Diffstat (limited to 'source/blender/blenkernel/intern/mesh.c')
-rw-r--r--source/blender/blenkernel/intern/mesh.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/source/blender/blenkernel/intern/mesh.c b/source/blender/blenkernel/intern/mesh.c
index 8e1ea219ee3..ed01889d200 100644
--- a/source/blender/blenkernel/intern/mesh.c
+++ b/source/blender/blenkernel/intern/mesh.c
@@ -1270,6 +1270,21 @@ int BKE_mesh_edge_other_vert(const MEdge *e, int v)
return -1;
}
+/**
+ * Sets each output array element to the edge index if it is a real edge, or -1.
+ */
+void BKE_mesh_looptri_get_real_edges(const Mesh *mesh, const MLoopTri *looptri, int r_edges[3])
+{
+ for (int i = 2, i_next = 0; i_next < 3; i = i_next++) {
+ const MLoop *l1 = &mesh->mloop[looptri->tri[i]], *l2 = &mesh->mloop[looptri->tri[i_next]];
+ const MEdge *e = &mesh->medge[l1->e];
+
+ bool is_real = (l1->v == e->v1 && l2->v == e->v2) || (l1->v == e->v2 && l2->v == e->v1);
+
+ r_edges[i] = is_real ? l1->e : -1;
+ }
+}
+
/* basic vertex data functions */
bool BKE_mesh_minmax(const Mesh *me, float r_min[3], float r_max[3])
{