[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [58677] branches/soc-2013-sketch_mesh/ source/blender/modifiers/intern/MOD_laplaciandeform.c: Frees a BMesh data, obtained from the function DM_to_bmesh.

Alexander Pinzon apinzonf at gmail.com
Sat Jul 27 22:42:43 CEST 2013


Revision: 58677
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=58677
Author:   apinzonf
Date:     2013-07-27 20:42:43 +0000 (Sat, 27 Jul 2013)
Log Message:
-----------
Frees a BMesh data, obtained from the function DM_to_bmesh.

Modified Paths:
--------------
    branches/soc-2013-sketch_mesh/source/blender/modifiers/intern/MOD_laplaciandeform.c

Modified: branches/soc-2013-sketch_mesh/source/blender/modifiers/intern/MOD_laplaciandeform.c
===================================================================
--- branches/soc-2013-sketch_mesh/source/blender/modifiers/intern/MOD_laplaciandeform.c	2013-07-27 20:32:10 UTC (rev 58676)
+++ branches/soc-2013-sketch_mesh/source/blender/modifiers/intern/MOD_laplaciandeform.c	2013-07-27 20:42:43 UTC (rev 58677)
@@ -60,6 +60,7 @@
 	float (*co)[3];				/* Original vertex coordinates*/
 	float (*no)[3];				/* Original vertex normal*/
 	BMVert ** list_verts;		/* Vertex order by index*/
+	BMesh *bm;
 };
 typedef struct BStaticAnchors StaticAnchors;
 
@@ -76,7 +77,6 @@
 	int numVerts;
 	int numHandlers;
 	int numStatics;
-	BMesh *bm;
 	NLContext *context;			/* System for solve general implicit rotations*/
 };
 typedef struct BLaplacianSystem LaplacianSystem;
@@ -113,6 +113,7 @@
 static void rotate_differential_coordinates(SystemCustomData * data);
 static void update_system_state(SystemCustomData * data, int state);
 static void laplacian_deform_preview(SystemCustomData * data, DerivedMesh *dm, float (*vertexCos)[3]);
+static void freeData(ModifierData *md);
 
 static void delete_void_pointer(void *data)
 {
@@ -170,6 +171,7 @@
 	delete_void_pointer(sa->list_index);
 	delete_void_pointer(sa->no);
 	delete_void_pointer(sa->list_verts);
+	if (sa->bm) BM_mesh_free(sa->bm);
 	delete_void_pointer(sa);
 	sa = NULL;
 }
@@ -187,7 +189,6 @@
 	if (!sys) return;
 	delete_void_pointer(sys->delta);
 	delete_void_pointer(sys->list_uverts);
-	sys->bm = NULL;
 	if (sys->context) nlDeleteContext(sys->context);
 	delete_void_pointer(sys);
 	sys = NULL;
@@ -289,14 +290,13 @@
 	BLI_array_declare(index_h);
 	BLI_array_declare(index_s);
 
-	modifier_get_vgroup(ob, dm, smd->defgrp_name_s, &dvert_s, &defgrp_index_s);
-	modifier_get_vgroup(ob, dm, smd->defgrp_name_h, &dvert_h, &defgrp_index_h);
-
 	if (!data) return;
-	if (!dvert_s) return;
-	if (!dvert_h) return;
 
 	if (data->stateSystem == LAP_STATE_INIT) {
+		modifier_get_vgroup(ob, dm, smd->defgrp_name_s, &dvert_s, &defgrp_index_s);
+		modifier_get_vgroup(ob, dm, smd->defgrp_name_h, &dvert_h, &defgrp_index_h);
+		if (!dvert_s) return;
+		if (!dvert_h) return;
 		dv_h = dvert_h;
 		dv_s = dvert_s;
 		bm = DM_to_bmesh(dm, false);
@@ -348,6 +348,8 @@
 			data->sa->list_verts[vid] = v;
 		}
 
+		data->sa->bm = bm;
+
 		////////// init handler
 
 		if (data->shs) {
@@ -427,7 +429,7 @@
 	LaplacianSystem * sys = data->sys;
 	StaticAnchors * sa = data->sa;
 
-	BM_ITER_MESH (f, &fiter, sys->bm, BM_FACES_OF_MESH) {
+	BM_ITER_MESH (f, &fiter, sa->bm, BM_FACES_OF_MESH) {
 	
 		BM_ITER_ELEM_INDEX (vn, &vi, f, BM_VERTS_OF_FACE, i) {
 			vid = BM_elem_index_get(vn);
@@ -522,7 +524,7 @@
 	StaticAnchors * sa = data->sa;
 	BLI_array_declare(vidn);
 
-	BM_ITER_MESH (v, &viter, sys->bm, BM_VERTS_OF_MESH) {
+	BM_ITER_MESH (v, &viter, sa->bm, BM_VERTS_OF_MESH) {
 		i = BM_elem_index_get(v);
 		normalize_v3( sa->no[i]);
 		BM_ITER_ELEM(e, &eiter, v, BM_EDGES_OF_VERT) {
@@ -570,7 +572,7 @@
 	StaticAnchors * sa = data->sa;
 
 
-	BM_ITER_MESH (v, &viter, sys->bm, BM_VERTS_OF_MESH) {
+	BM_ITER_MESH (v, &viter, sa->bm, BM_VERTS_OF_MESH) {
 		i = BM_elem_index_get(v);
 		copy_v3_v3(pi, sa->co[i]); //copy_v3_v3(pi, v->co);
 		copy_v3_v3(ni, sa->no[i]); //copy_v3_v3(ni, v->no);
@@ -664,8 +666,8 @@
 		sys = data->sys;
 		sa = data->sa;
 		shs = data->shs;
-		sys->bm = DM_to_bmesh(dm, false);
-		bm = sys->bm;
+		//sys->bm = DM_to_bmesh(dm, false);
+		bm = sa->bm;
 		n = sys->numVerts;
 		ns = sa->numStatics;
 		nh = shs->numHandlers;
@@ -832,7 +834,20 @@
 
 	}
 }
- 
+
+static void freeData(ModifierData *md)
+{
+	LaplacianDeformModifierData *smd = (LaplacianDeformModifierData *) md;
+	SystemCustomData * data = (SystemCustomData *)(smd->custom_data);
+
+	if (data) {
+		delete_laplacian_system(data->sys);
+		delete_static_anchors(data->sa);
+		delete_handler_anchors(data->shs);
+		delete_void_pointer(data);
+	}
+}
+
 ModifierTypeInfo modifierType_LaplacianDeform = {
 	/* name */              "LaplacianDeform",
 	/* structName */        "LaplacianDeformModifierData",
@@ -850,7 +865,7 @@
 	/* applyModifierEM */   NULL,
 	/* initData */          initData,
 	/* requiredDataMask */  requiredDataMask,
-	/* freeData */          NULL,
+	/* freeData */          freeData,
 	/* isDisabled */        isDisabled,
 	/* updateDepgraph */    NULL,
 	/* dependsOnTime */     NULL,




More information about the Bf-blender-cvs mailing list