From b202bf05646b89c8b1f9f24a1d0f9750914997b1 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 30 Nov 2011 07:11:29 +0000 Subject: fix [#29450] Mirror Vertex Groups issue --- source/blender/blenkernel/intern/deform.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'source/blender/blenkernel/intern/deform.c') 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. */ -- cgit v1.2.3