diff options
author | Campbell Barton <ideasman42@gmail.com> | 2019-08-21 23:28:35 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2019-08-21 23:48:10 +0300 |
commit | 189aa32a3ac0e949275d16ffb19576a1306d1780 (patch) | |
tree | ff75826925b4b26f6b4aa8928fe3c5d3c799a98f /source/blender/blenkernel/intern/curve.c | |
parent | 4a2d1953f3ca3e1160a3ce767df15e481658bdf6 (diff) |
Cleanup: vertex coordinate access, naming & minor changes
This also splits vertex access and allocation so it's possible
to copy coordinates into an existing array without allocating it.
Diffstat (limited to 'source/blender/blenkernel/intern/curve.c')
-rw-r--r-- | source/blender/blenkernel/intern/curve.c | 57 |
1 files changed, 28 insertions, 29 deletions
diff --git a/source/blender/blenkernel/intern/curve.c b/source/blender/blenkernel/intern/curve.c index 5ec0483d637..24a9d5dc199 100644 --- a/source/blender/blenkernel/intern/curve.c +++ b/source/blender/blenkernel/intern/curve.c @@ -4606,18 +4606,13 @@ void BKE_nurb_direction_switch(Nurb *nu) } } -float (*BKE_curve_nurbs_vertexCos_get(ListBase *lb, int *r_numVerts))[3] +void BKE_curve_nurbs_vert_coords_get(ListBase *lb, float (*vert_coords)[3], int vert_len) { - int i, numVerts = *r_numVerts = BKE_nurbList_verts_count(lb); - float *co, (*cos)[3] = MEM_malloc_arrayN(numVerts, sizeof(*cos), "cu_vcos"); - Nurb *nu; - - co = cos[0]; - for (nu = lb->first; nu; nu = nu->next) { + float *co = vert_coords[0]; + for (Nurb *nu = lb->first; nu; nu = nu->next) { if (nu->type == CU_BEZIER) { BezTriple *bezt = nu->bezt; - - for (i = 0; i < nu->pntsu; i++, bezt++) { + for (int i = 0; i < nu->pntsu; i++, bezt++) { copy_v3_v3(co, bezt->vec[0]); co += 3; copy_v3_v3(co, bezt->vec[1]); @@ -4628,28 +4623,33 @@ float (*BKE_curve_nurbs_vertexCos_get(ListBase *lb, int *r_numVerts))[3] } else { BPoint *bp = nu->bp; - - for (i = 0; i < nu->pntsu * nu->pntsv; i++, bp++) { + for (int i = 0; i < nu->pntsu * nu->pntsv; i++, bp++) { copy_v3_v3(co, bp->vec); co += 3; } } } + BLI_assert(co == vert_coords[vert_len]); +} - return cos; +float (*BKE_curve_nurbs_vert_coords_alloc(ListBase *lb, int *r_vert_len))[3] +{ + const int vert_len = BKE_nurbList_verts_count(lb); + float(*vert_coords)[3] = MEM_malloc_arrayN(vert_len, sizeof(*vert_coords), __func__); + BKE_curve_nurbs_vert_coords_get(lb, vert_coords, vert_len); + *r_vert_len = vert_len; + return vert_coords; } -void BK_curve_nurbs_vertexCos_apply(ListBase *lb, const float (*vertexCos)[3]) +void BK_curve_nurbs_vert_coords_apply(ListBase *lb, const float (*vert_coords)[3]) { - const float *co = vertexCos[0]; - Nurb *nu; - int i; + const float *co = vert_coords[0]; - for (nu = lb->first; nu; nu = nu->next) { + for (Nurb *nu = lb->first; nu; nu = nu->next) { if (nu->type == CU_BEZIER) { BezTriple *bezt = nu->bezt; - for (i = 0; i < nu->pntsu; i++, bezt++) { + for (int i = 0; i < nu->pntsu; i++, bezt++) { copy_v3_v3(bezt->vec[0], co); co += 3; copy_v3_v3(bezt->vec[1], co); @@ -4661,7 +4661,7 @@ void BK_curve_nurbs_vertexCos_apply(ListBase *lb, const float (*vertexCos)[3]) else { BPoint *bp = nu->bp; - for (i = 0; i < nu->pntsu * nu->pntsv; i++, bp++) { + for (int i = 0; i < nu->pntsu * nu->pntsv; i++, bp++) { copy_v3_v3(bp->vec, co); co += 3; } @@ -4671,18 +4671,17 @@ void BK_curve_nurbs_vertexCos_apply(ListBase *lb, const float (*vertexCos)[3]) } } -float (*BKE_curve_nurbs_keyVertexCos_get(ListBase *lb, float *key))[3] +float (*BKE_curve_nurbs_key_vert_coords_alloc(ListBase *lb, float *key, int *r_vert_len))[3] { - int i, numVerts = BKE_nurbList_verts_count(lb); - float *co, (*cos)[3] = MEM_malloc_arrayN(numVerts, sizeof(*cos), "cu_vcos"); - Nurb *nu; + int vert_len = BKE_nurbList_verts_count(lb); + float(*cos)[3] = MEM_malloc_arrayN(vert_len, sizeof(*cos), __func__); - co = cos[0]; - for (nu = lb->first; nu; nu = nu->next) { + float *co = cos[0]; + for (Nurb *nu = lb->first; nu; nu = nu->next) { if (nu->type == CU_BEZIER) { BezTriple *bezt = nu->bezt; - for (i = 0; i < nu->pntsu; i++, bezt++) { + for (int i = 0; i < nu->pntsu; i++, bezt++) { copy_v3_v3(co, &key[0]); co += 3; copy_v3_v3(co, &key[3]); @@ -4695,18 +4694,18 @@ float (*BKE_curve_nurbs_keyVertexCos_get(ListBase *lb, float *key))[3] else { BPoint *bp = nu->bp; - for (i = 0; i < nu->pntsu * nu->pntsv; i++, bp++) { + for (int i = 0; i < nu->pntsu * nu->pntsv; i++, bp++) { copy_v3_v3(co, key); co += 3; key += KEYELEM_FLOAT_LEN_BPOINT; } } } - + *r_vert_len = vert_len; return cos; } -void BKE_curve_nurbs_keyVertexTilts_apply(ListBase *lb, float *key) +void BKE_curve_nurbs_key_vert_tilts_apply(ListBase *lb, float *key) { Nurb *nu; int i; |