diff options
author | Campbell Barton <ideasman42@gmail.com> | 2012-04-30 22:54:14 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2012-04-30 22:54:14 +0400 |
commit | 1d743d11dcd48807c4dc13c109f5199573015b9d (patch) | |
tree | ac38b4a0af53bd23198bd8281afb525e863cf5fb /source/blender/bmesh/intern/bmesh_interp.c | |
parent | df74a51bac173b8e47882801bf0f5d47d856f897 (diff) |
bmesh - python api
- bm.*.layers.*.verify()
- bm.*.layers.*.is_singleton
- bm.*.layers.*.copy_from(other)
also added api functons
- BM_data_layer_copy(...)
- CustomData_layertype_is_singleton(type)
Diffstat (limited to 'source/blender/bmesh/intern/bmesh_interp.c')
-rw-r--r-- | source/blender/bmesh/intern/bmesh_interp.c | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/source/blender/bmesh/intern/bmesh_interp.c b/source/blender/bmesh/intern/bmesh_interp.c index 5149a5436a2..c774880332b 100644 --- a/source/blender/bmesh/intern/bmesh_interp.c +++ b/source/blender/bmesh/intern/bmesh_interp.c @@ -853,6 +853,52 @@ void BM_data_layer_free_n(BMesh *bm, CustomData *data, int type, int n) if (olddata.layers) MEM_freeN(olddata.layers); } +void BM_data_layer_copy(BMesh *bm, CustomData *data, int type, int src_n, int dst_n) +{ + BMIter iter; + + if (&bm->vdata == data) { + BMVert *eve; + + BM_ITER_MESH (eve, &iter, bm, BM_VERTS_OF_MESH) { + void *ptr = CustomData_bmesh_get_n(data, eve->head.data, type, dst_n); + CustomData_bmesh_set_n(data, eve->head.data, type, src_n, ptr); + } + } + else if (&bm->edata == data) { + BMEdge *eed; + + BM_ITER_MESH (eed, &iter, bm, BM_EDGES_OF_MESH) { + void *ptr = CustomData_bmesh_get_n(data, eed->head.data, type, dst_n); + CustomData_bmesh_set_n(data, eed->head.data, type, src_n, ptr); + } + } + else if (&bm->pdata == data) { + BMFace *efa; + + BM_ITER_MESH (efa, &iter, bm, BM_FACES_OF_MESH) { + void *ptr = CustomData_bmesh_get_n(data, efa->head.data, type, dst_n); + CustomData_bmesh_set_n(data, efa->head.data, type, src_n, ptr); + } + } + else if (&bm->ldata == data) { + BMIter liter; + BMFace *efa; + BMLoop *l; + + BM_ITER_MESH (efa, &iter, bm, BM_FACES_OF_MESH) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { + void *ptr = CustomData_bmesh_get_n(data, l->head.data, type, dst_n); + CustomData_bmesh_set_n(data, l->head.data, type, src_n, ptr); + } + } + } + else { + /* should never reach this! */ + BLI_assert(0); + } +} + float BM_elem_float_data_get(CustomData *cd, void *element, int type) { float *f = CustomData_bmesh_get(cd, ((BMHeader *)element)->data, type); |