[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [48053] branches/meshdata_transfer/source/ blender/editors/object/object_vgroup.c: Bugfix: no longer crashes when MDefomWeight is not fond on source.
Ove Murberg Henriksen
sorayasilvermoon at hotmail.com
Mon Jun 18 21:32:46 CEST 2012
Revision: 48053
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=48053
Author: cyborgmuppet
Date: 2012-06-18 19:32:45 +0000 (Mon, 18 Jun 2012)
Log Message:
-----------
Bugfix: no longer crashes when MDefomWeight is not fond on source.
Modified Paths:
--------------
branches/meshdata_transfer/source/blender/editors/object/object_vgroup.c
Modified: branches/meshdata_transfer/source/blender/editors/object/object_vgroup.c
===================================================================
--- branches/meshdata_transfer/source/blender/editors/object/object_vgroup.c 2012-06-18 19:04:16 UTC (rev 48052)
+++ branches/meshdata_transfer/source/blender/editors/object/object_vgroup.c 2012-06-18 19:32:45 UTC (rev 48053)
@@ -509,8 +509,10 @@
/* copy weight */
dw_src = defvert_find_index(*dv_src, index_src);
- dw_dst = defvert_find_index(*dv_dst, index_dst);
- vgroup_transfer_weight(mv_dst, &dw_dst->weight, dw_src->weight, replace_mode);
+ if(dw_src && dw_src->weight) {
+ dw_dst = defvert_verify_index(*dv_dst, index_dst);
+ vgroup_transfer_weight(mv_dst, &dw_dst->weight, dw_src->weight, replace_mode);
+ }
}
break;
@@ -534,15 +536,11 @@
&nearest, tree_mesh_vertices_src.nearest_callback, &tree_mesh_vertices_src);
/* copy weight */
- /*
- ideasman42 2012/06/17 21:32:15
- this is very bad - this function will add a vertex weight if not found, thereby modifying the source which should never happen.
-use defvert_find_index() instead. You will need to do something sane when the vgroup is not found -
-it should not add any vgroups or act as if all vgroups are 0 weight.
- */
dw_src = defvert_find_index(dv_array_src[nearest.index], index_src);
- dw_dst = defvert_find_index(*dv_dst, index_dst);
- vgroup_transfer_weight(mv_dst, &dw_dst->weight, dw_src->weight, replace_mode);
+ if(dw_src && dw_src->weight) {
+ dw_dst = defvert_verify_index(*dv_dst, index_dst);
+ vgroup_transfer_weight(mv_dst, &dw_dst->weight, dw_src->weight, replace_mode);
+ }
}
/* free memory */
@@ -607,8 +605,10 @@
}
/* copy weight */
- dw_dst = defvert_find_index(*dv_dst, index_dst);
- vgroup_transfer_weight(mv_dst, &dw_dst->weight, weight, replace_mode);
+ if(weight > 0) {
+ dw_dst = defvert_verify_index(*dv_dst, index_dst);
+ vgroup_transfer_weight(mv_dst, &dw_dst->weight, weight, replace_mode);
+ }
}
/* free memory */
@@ -657,8 +657,10 @@
/* copy weight */
dw_src = defvert_find_index(dv_array_src[index_nearest_vertex], index_src);
- dw_dst = defvert_find_index(*dv_dst, index_dst);
- vgroup_transfer_weight(mv_dst, &dw_dst->weight, dw_src->weight, replace_mode);
+ if(dw_src && dw_src->weight) {
+ dw_dst = defvert_verify_index(*dv_dst, index_dst);
+ vgroup_transfer_weight(mv_dst, &dw_dst->weight, dw_src->weight, replace_mode);
+ }
}
/* free memory */
More information about the Bf-blender-cvs
mailing list