diff options
author | Campbell Barton <ideasman42@gmail.com> | 2011-11-30 11:11:29 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2011-11-30 11:11:29 +0400 |
commit | b202bf05646b89c8b1f9f24a1d0f9750914997b1 (patch) | |
tree | 8851e06e1c771e077027e258c9cf2721131bffe1 /source/blender/blenkernel/intern/deform.c | |
parent | 4afc0e80a7af094946640b2ec03d8f9eac4042ba (diff) |
fix [#29450] Mirror Vertex Groups issue
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. */ |