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>2015-07-23 08:08:27 +0300
committerCampbell Barton <ideasman42@gmail.com>2015-07-23 08:08:27 +0300
commit8155d25d395c30efd7724509afe2e50fb58c6d87 (patch)
treed00ff393c5f710d6f885b889892ed819b19166ec
parent60822ec183a514f38f478ec3f3a167f59865f027 (diff)
Utility function to get poly -> looptri mapping
-rw-r--r--source/blender/blenkernel/BKE_mesh_mapping.h6
-rw-r--r--source/blender/blenkernel/intern/mesh_mapping.c31
2 files changed, 36 insertions, 1 deletions
diff --git a/source/blender/blenkernel/BKE_mesh_mapping.h b/source/blender/blenkernel/BKE_mesh_mapping.h
index 633bd8a2dba..c8a17008f5d 100644
--- a/source/blender/blenkernel/BKE_mesh_mapping.h
+++ b/source/blender/blenkernel/BKE_mesh_mapping.h
@@ -36,6 +36,7 @@ struct MEdge;
struct MPoly;
struct MLoop;
struct MLoopUV;
+struct MLoopTri;
/* map from uv vertex to face (for select linked, stitch, uv suburf) */
@@ -127,7 +128,10 @@ void BKE_mesh_origindex_map_create(
MeshElemMap **r_map, int **r_mem,
const int totorig,
const int *final_origindex, const int totfinal);
-
+void BKE_mesh_origindex_map_create_looptri(
+ MeshElemMap **r_map, int **r_mem,
+ const struct MPoly *mpoly, const int mpoly_num,
+ const struct MLoopTri *looptri, const int looptri_num);
/* islands */
diff --git a/source/blender/blenkernel/intern/mesh_mapping.c b/source/blender/blenkernel/intern/mesh_mapping.c
index 1d8978586b6..c03f1feef9c 100644
--- a/source/blender/blenkernel/intern/mesh_mapping.c
+++ b/source/blender/blenkernel/intern/mesh_mapping.c
@@ -406,6 +406,37 @@ void BKE_mesh_origindex_map_create(MeshElemMap **r_map, int **r_mem,
*r_mem = indices;
}
+/**
+ * A version of #BKE_mesh_origindex_map_create that takes a looptri array.
+ * Making a poly -> looptri map.
+ */
+void BKE_mesh_origindex_map_create_looptri(
+ MeshElemMap **r_map, int **r_mem,
+ const MPoly *mpoly, const int mpoly_num,
+ const MLoopTri *looptri, const int looptri_num)
+{
+ MeshElemMap *map = MEM_callocN(sizeof(MeshElemMap) * (size_t)mpoly_num, "poly-tessface map");
+ int *indices = MEM_mallocN(sizeof(int) * (size_t)looptri_num, "poly-tessface map mem");
+ int *index_step;
+ int i;
+
+ /* create offsets */
+ index_step = indices;
+ for (i = 0; i < mpoly_num; i++) {
+ map[i].indices = index_step;
+ index_step += ME_POLY_TRI_TOT(&mpoly[i]);
+ }
+
+ /* assign poly-tessface users */
+ for (i = 0; i < looptri_num; i++) {
+ MeshElemMap *map_ele = &map[looptri[i].poly];
+ map_ele->indices[map_ele->count++] = i;
+ }
+
+ *r_map = map;
+ *r_mem = indices;
+}
+
/** \} */