Changeset View
Changeset View
Standalone View
Standalone View
source/blender/blenkernel/intern/editderivedmesh.c
| Show First 20 Lines • Show All 236 Lines • ▼ Show 20 Lines | |||||
| #endif | #endif | ||||
| } | } | ||||
| static void emDM_recalcTessellation(DerivedMesh *UNUSED(dm)) | static void emDM_recalcTessellation(DerivedMesh *UNUSED(dm)) | ||||
| { | { | ||||
| /* do nothing */ | /* do nothing */ | ||||
| } | } | ||||
| static void emDM_recalcLoopTri(DerivedMesh *UNUSED(dm)) | |||||
| { | |||||
| /* Nothing to do: emDM tessellation is known, | |||||
| * allocate and fill in with emDM_getLoopTriArray */ | |||||
| } | |||||
| static const MLoopTri *emDM_getLoopTriArray(DerivedMesh *dm) | |||||
| { | |||||
| if (dm->looptris.array) { | |||||
| BLI_assert(poly_to_tri_count(dm->numPolyData, dm->numLoopData) == dm->looptris.num); | |||||
| } | |||||
| else { | |||||
| EditDerivedBMesh *bmdm = (EditDerivedBMesh *)dm; | |||||
| BMLoop *(*looptris)[3] = bmdm->em->looptris; | |||||
| MLoopTri *mlooptri; | |||||
| const int tottri = bmdm->em->tottri; | |||||
| int i; | |||||
| DM_ensure_looptri_data(dm); | |||||
| mlooptri = dm->looptris.array; | |||||
| BLI_assert(poly_to_tri_count(dm->numPolyData, dm->numLoopData) == dm->looptris.num); | |||||
| BLI_assert(tottri == dm->looptris.num); | |||||
| BM_mesh_elem_index_ensure(bmdm->em->bm, BM_FACE | BM_LOOP); | |||||
| for (i = 0; i < tottri; i++) { | |||||
| BMLoop **ltri = looptris[i]; | |||||
| MLoopTri *lt = &mlooptri[i]; | |||||
| ARRAY_SET_ITEMS( | |||||
| lt->tri, | |||||
| BM_elem_index_get(ltri[0]), | |||||
| BM_elem_index_get(ltri[1]), | |||||
| BM_elem_index_get(ltri[2])); | |||||
| lt->poly = BM_elem_index_get(ltri[0]->f); | |||||
| } | |||||
| } | |||||
| return dm->looptris.array; | |||||
| } | |||||
| static void emDM_foreachMappedVert( | static void emDM_foreachMappedVert( | ||||
| DerivedMesh *dm, | DerivedMesh *dm, | ||||
| void (*func)(void *userData, int index, const float co[3], const float no_f[3], const short no_s[3]), | void (*func)(void *userData, int index, const float co[3], const float no_f[3], const short no_s[3]), | ||||
| void *userData, | void *userData, | ||||
| DMForeachFlag flag) | DMForeachFlag flag) | ||||
| { | { | ||||
| EditDerivedBMesh *bmdm = (EditDerivedBMesh *)dm; | EditDerivedBMesh *bmdm = (EditDerivedBMesh *)dm; | ||||
| BMesh *bm = bmdm->em->bm; | BMesh *bm = bmdm->em->bm; | ||||
| ▲ Show 20 Lines • Show All 1,536 Lines • ▼ Show 20 Lines | DerivedMesh *getEditDerivedBMesh(BMEditMesh *em, | ||||
| bmdm->dm.getPolyDataLayout = bmDm_getPolyDataLayout; | bmdm->dm.getPolyDataLayout = bmDm_getPolyDataLayout; | ||||
| bmdm->dm.getNumVerts = emDM_getNumVerts; | bmdm->dm.getNumVerts = emDM_getNumVerts; | ||||
| bmdm->dm.getNumEdges = emDM_getNumEdges; | bmdm->dm.getNumEdges = emDM_getNumEdges; | ||||
| bmdm->dm.getNumTessFaces = emDM_getNumTessFaces; | bmdm->dm.getNumTessFaces = emDM_getNumTessFaces; | ||||
| bmdm->dm.getNumLoops = emDM_getNumLoops; | bmdm->dm.getNumLoops = emDM_getNumLoops; | ||||
| bmdm->dm.getNumPolys = emDM_getNumPolys; | bmdm->dm.getNumPolys = emDM_getNumPolys; | ||||
| bmdm->dm.getLoopTriArray = emDM_getLoopTriArray; | |||||
| bmdm->dm.getVert = emDM_getVert; | bmdm->dm.getVert = emDM_getVert; | ||||
| bmdm->dm.getVertCo = emDM_getVertCo; | bmdm->dm.getVertCo = emDM_getVertCo; | ||||
| bmdm->dm.getVertNo = emDM_getVertNo; | bmdm->dm.getVertNo = emDM_getVertNo; | ||||
| bmdm->dm.getPolyNo = emDM_getPolyNo; | bmdm->dm.getPolyNo = emDM_getPolyNo; | ||||
| bmdm->dm.getEdge = emDM_getEdge; | bmdm->dm.getEdge = emDM_getEdge; | ||||
| bmdm->dm.getTessFace = emDM_getTessFace; | bmdm->dm.getTessFace = emDM_getTessFace; | ||||
| bmdm->dm.copyVertArray = emDM_copyVertArray; | bmdm->dm.copyVertArray = emDM_copyVertArray; | ||||
| bmdm->dm.copyEdgeArray = emDM_copyEdgeArray; | bmdm->dm.copyEdgeArray = emDM_copyEdgeArray; | ||||
| bmdm->dm.copyTessFaceArray = emDM_copyTessFaceArray; | bmdm->dm.copyTessFaceArray = emDM_copyTessFaceArray; | ||||
| bmdm->dm.copyLoopArray = emDM_copyLoopArray; | bmdm->dm.copyLoopArray = emDM_copyLoopArray; | ||||
| bmdm->dm.copyPolyArray = emDM_copyPolyArray; | bmdm->dm.copyPolyArray = emDM_copyPolyArray; | ||||
| bmdm->dm.getTessFaceDataArray = emDM_getTessFaceDataArray; | bmdm->dm.getTessFaceDataArray = emDM_getTessFaceDataArray; | ||||
| bmdm->dm.calcNormals = emDM_calcNormals; | bmdm->dm.calcNormals = emDM_calcNormals; | ||||
| bmdm->dm.calcLoopNormals = emDM_calcLoopNormals; | bmdm->dm.calcLoopNormals = emDM_calcLoopNormals; | ||||
| bmdm->dm.calcLoopNormalsSpaceArray = emDM_calcLoopNormalsSpaceArray; | bmdm->dm.calcLoopNormalsSpaceArray = emDM_calcLoopNormalsSpaceArray; | ||||
| bmdm->dm.recalcTessellation = emDM_recalcTessellation; | bmdm->dm.recalcTessellation = emDM_recalcTessellation; | ||||
| bmdm->dm.recalcTessellation = emDM_recalcLoopTri; | |||||
| bmdm->dm.foreachMappedVert = emDM_foreachMappedVert; | bmdm->dm.foreachMappedVert = emDM_foreachMappedVert; | ||||
| bmdm->dm.foreachMappedLoop = emDM_foreachMappedLoop; | bmdm->dm.foreachMappedLoop = emDM_foreachMappedLoop; | ||||
| bmdm->dm.foreachMappedEdge = emDM_foreachMappedEdge; | bmdm->dm.foreachMappedEdge = emDM_foreachMappedEdge; | ||||
| bmdm->dm.foreachMappedFaceCenter = emDM_foreachMappedFaceCenter; | bmdm->dm.foreachMappedFaceCenter = emDM_foreachMappedFaceCenter; | ||||
| bmdm->dm.drawEdges = emDM_drawEdges; | bmdm->dm.drawEdges = emDM_drawEdges; | ||||
| bmdm->dm.drawMappedEdges = emDM_drawMappedEdges; | bmdm->dm.drawMappedEdges = emDM_drawMappedEdges; | ||||
| ▲ Show 20 Lines • Show All 551 Lines • Show Last 20 Lines | |||||