Add DM_get_looptri_array utility function

This commit is contained in:
2015-07-22 20:54:12 +10:00
parent a6f00bb75c
commit b305041ce6
2 changed files with 38 additions and 0 deletions

View File

@@ -800,5 +800,11 @@ struct MEdge *DM_get_edge_array(struct DerivedMesh *dm, bool *allocated);
struct MLoop *DM_get_loop_array(struct DerivedMesh *dm, bool *allocated);
struct MPoly *DM_get_poly_array(struct DerivedMesh *dm, bool *allocated);
struct MFace *DM_get_tessface_array(struct DerivedMesh *dm, bool *allocated);
const MLoopTri *DM_get_looptri_array(
DerivedMesh *dm,
const MVert *mvert,
const MPoly *mpoly, int mpoly_len,
const MLoop *mloop, int mloop_len,
bool *allocated);
#endif /* __BKE_DERIVEDMESH_H__ */

View File

@@ -3882,3 +3882,35 @@ MFace *DM_get_tessface_array(DerivedMesh *dm, bool *allocated)
return mface;
}
const MLoopTri *DM_get_looptri_array(
DerivedMesh *dm,
const MVert *mvert,
const MPoly *mpoly, int mpoly_len,
const MLoop *mloop, int mloop_len,
bool *allocated)
{
const MLoopTri *looptri = dm->getLoopTriArray(dm);
*allocated = false;
if (looptri == NULL) {
if (mpoly_len > 0) {
const int looptris_num = poly_to_tri_count(mpoly_len, mloop_len);
MLoopTri *looptri_data;
looptri_data = MEM_mallocN(sizeof(MLoopTri) * looptris_num, __func__);
BKE_mesh_recalc_looptri(
mloop, mpoly,
mvert,
mloop_len, mpoly_len,
looptri_data);
looptri = looptri_data;
*allocated = true;
}
}
return looptri;
}