[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