diff options
author | Campbell Barton <ideasman42@gmail.com> | 2012-09-16 12:25:31 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2012-09-16 12:25:31 +0400 |
commit | b3d2ea28ceaaff9bcec1b47d148414997876f229 (patch) | |
tree | 81d0a18b6b84809eb38d5c16f64c48a0971aea11 /source/blender/blenkernel/intern/curve.c | |
parent | de8c8029049dbc463dd94493a4f3ea3779f4603b (diff) |
speedup for vertex parent lookups, were looping over array elements when it wasn't needed for lattice and curves, and in some cases meshes.
do dirrect array lookups instead where possible.
Diffstat (limited to 'source/blender/blenkernel/intern/curve.c')
-rw-r--r-- | source/blender/blenkernel/intern/curve.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/source/blender/blenkernel/intern/curve.c b/source/blender/blenkernel/intern/curve.c index a2f88781cbb..09ca0df0680 100644 --- a/source/blender/blenkernel/intern/curve.c +++ b/source/blender/blenkernel/intern/curve.c @@ -429,6 +429,33 @@ void BKE_curve_texspace_calc(Curve *cu) } } +int BKE_nurbList_index_get_co(ListBase *nurb, const int index, float r_co[3]) +{ + Nurb *nu; + int tot = 0; + + for (nu = nurb->first; nu; nu = nu->next) { + int tot_nu; + if (nu->type == CU_BEZIER) { + tot_nu = nu->pntsu; + if (index - tot < tot_nu) { + copy_v3_v3(r_co, nu->bezt[index - tot].vec[1]); + return TRUE; + } + } + else { + tot_nu = nu->pntsu * nu->pntsv; + if (index - tot < tot_nu) { + copy_v3_v3(r_co, nu->bp[index - tot].vec); + return TRUE; + } + } + tot += tot_nu; + } + + return FALSE; +} + int BKE_nurbList_verts_count(ListBase *nurb) { Nurb *nu; |