[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [47764] branches/meshdata_transfer/source/ blender/editors/object/object_vgroup.c: Bugfix: no longer crashes when dverts does not exist on source.

Ove Murberg Henriksen sorayasilvermoon at hotmail.com
Tue Jun 12 00:58:53 CEST 2012


Revision: 47764
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=47764
Author:   cyborgmuppet
Date:     2012-06-11 22:58:49 +0000 (Mon, 11 Jun 2012)
Log Message:
-----------
Bugfix: no longer crashes when dverts does not exist on source.
Added release for derivedmesh.

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-11 22:20:46 UTC (rev 47763)
+++ branches/meshdata_transfer/source/blender/editors/object/object_vgroup.c	2012-06-11 22:58:49 UTC (rev 47764)
@@ -438,7 +438,7 @@
 int ED_vgroup_transfer_weight(Object *ob_dst, Object *ob_src, bDeformGroup *dg_src, Scene *scene, MethodOption method_option, ReplaceOption replace_option)
 {
 	bDeformGroup *dg_dst;
-	Mesh *me_dst;
+	Mesh *me_dst, *me_src;
 	DerivedMesh *dmesh_src;
 	BVHTreeFromMesh tree_mesh_vertices_src, tree_mesh_faces_src = {NULL};
 	MDeformVert **dv_array_src, **dv_array_dst, **dv_src, **dv_dst;
@@ -461,7 +461,11 @@
 	/* get meshes */
 	dmesh_src = mesh_get_derived_deform(scene, ob_src, CD_MASK_BAREMESH | CD_MASK_ORIGINDEX);
 	me_dst = ob_dst->data;
+	me_src = ob_src->data;
 
+	/* sanity check */
+	if (!me_src->dvert) return 0;
+
 	/* create data in memory when nothing there */
 	if (!me_dst->dvert) ED_vgroup_data_create(ob_dst->data);
 
@@ -491,6 +495,7 @@
 				ED_vgroup_delete(ob_dst, defgroup_find_name(ob_dst, dg_dst->name));
 				if (dv_array_src) MEM_freeN(dv_array_src);
 				if (dv_array_dst) MEM_freeN(dv_array_dst);
+				dmesh_src->release(dmesh_src);
 				return 0;
 			}
 
@@ -641,6 +646,7 @@
 	/*free memory*/
 	if (dv_array_src) MEM_freeN(dv_array_src);
 	if (dv_array_dst) MEM_freeN(dv_array_dst);
+	dmesh_src->release(dmesh_src);
 
 	return 1;
 }




More information about the Bf-blender-cvs mailing list