Commit: 8155d25d395c30efd7724509afe2e50fb58c6d87 Author: Campbell Barton Date: Thu Jul 23 15:08:27 2015 +1000 Branches: master https://developer.blender.org/rB8155d25d395c30efd7724509afe2e50fb58c6d87
Utility function to get poly -> looptri mapping =================================================================== M source/blender/blenkernel/BKE_mesh_mapping.h M source/blender/blenkernel/intern/mesh_mapping.c =================================================================== diff --git a/source/blender/blenkernel/BKE_mesh_mapping.h b/source/blender/blenkernel/BKE_mesh_mapping.h index 633bd8a..c8a1700 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 1d89785..c03f1fe 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; +} + /** \} */ _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs