diff options
Diffstat (limited to 'source/blender/blenkernel/intern/deform.c')
-rw-r--r-- | source/blender/blenkernel/intern/deform.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/source/blender/blenkernel/intern/deform.c b/source/blender/blenkernel/intern/deform.c index 0c3c78f6eef..021433dee9e 100644 --- a/source/blender/blenkernel/intern/deform.c +++ b/source/blender/blenkernel/intern/deform.c @@ -94,6 +94,31 @@ void defvert_copy (MDeformVert *dvert_r, const MDeformVert *dvert) } } +/* copy an index from one dvert to another + * - do nothing if neither are set. + * - add destination weight if needed. + */ +void defvert_copy_index (MDeformVert *dv_dst, const MDeformVert *dv_src, const int defgroup) +{ + MDeformWeight *dw_src, *dw_dst; + + dw_src= defvert_find_index(dv_src, defgroup); + + if (dw_src) { + /* source is valid, verify destination */ + dw_dst= defvert_verify_index(dv_dst, defgroup); + dw_dst->weight= dw_src->weight; + } + else { + /* source was NULL, assign zero, could also remove */ + dw_dst= defvert_find_index(dv_dst, defgroup); + + if (dw_dst) { + dw_dst->weight= 0.0f; + } + } +} + /* only sync over matching weights, don't add or remove groups * warning, loop within loop. */ |