[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