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 */

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to