Ohhh Daniel thanks a lot for your help with merge this branch into trunk. Att Alexander Pinzon Fernandez
2012/10/24 Daniel Genrich <[email protected]> > Revision: 51578 > > http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=51578 > Author: genscher > Date: 2012-10-24 10:39:11 +0000 (Wed, 24 Oct 2012) > Log Message: > ----------- > Merge GSoC project from branch: Laplacian Smooth (Operator & Modifier) > by Alexander Pinzon Fernandez (apinzonf) > > Supported by Google Summer of Code 2012 > > Project Documentation: > http://wiki.blender.org/index.php/User:Apinzonf > > Manual Page: > > http://wiki.blender.org/index.php/User:Apinzonf/Doc:2.6/Manual/Modifiers/Deform/Laplacian_Smooth > > Modified Paths: > -------------- > trunk/blender/release/scripts/startup/bl_ui/properties_data_modifier.py > trunk/blender/release/scripts/startup/bl_ui/space_view3d.py > trunk/blender/source/blender/bmesh/CMakeLists.txt > trunk/blender/source/blender/bmesh/SConscript > trunk/blender/source/blender/bmesh/intern/bmesh_opdefines.c > trunk/blender/source/blender/bmesh/intern/bmesh_operators_private.h > trunk/blender/source/blender/editors/mesh/editmesh_tools.c > trunk/blender/source/blender/editors/mesh/mesh_intern.h > trunk/blender/source/blender/editors/mesh/mesh_ops.c > trunk/blender/source/blender/editors/space_outliner/outliner_draw.c > trunk/blender/source/blender/makesdna/DNA_modifier_types.h > trunk/blender/source/blender/makesrna/RNA_access.h > trunk/blender/source/blender/makesrna/intern/rna_modifier.c > trunk/blender/source/blender/modifiers/CMakeLists.txt > trunk/blender/source/blender/modifiers/MOD_modifiertypes.h > trunk/blender/source/blender/modifiers/SConscript > trunk/blender/source/blender/modifiers/intern/MOD_util.c > > Added Paths: > ----------- > trunk/blender/source/blender/bmesh/operators/bmo_smooth_laplacian.c > trunk/blender/source/blender/modifiers/intern/MOD_laplaciansmooth.c > > Modified: > trunk/blender/release/scripts/startup/bl_ui/properties_data_modifier.py > =================================================================== > --- > trunk/blender/release/scripts/startup/bl_ui/properties_data_modifier.py > 2012-10-24 10:09:48 UTC (rev 51577) > +++ > trunk/blender/release/scripts/startup/bl_ui/properties_data_modifier.py > 2012-10-24 10:39:11 UTC (rev 51578) > @@ -331,6 +331,20 @@ > row.operator("object.hook_select", text="Select") > row.operator("object.hook_assign", text="Assign") > > + def LAPLACIANSMOOTH(self, layout, ob, md): > + layout.prop(md, "iterations") > + layout.prop(md, "lamb") > + layout.prop(md, "lambdaborder") > + row = layout.row() > + row.label(text="Axis: ") > + row.prop(md, "use_x") > + row.prop(md, "use_y") > + row.prop(md, "use_z") > + row = layout.row() > + row.prop(md, "volume_preservation") > + layout.label(text="Vertex Group:") > + layout.prop_search(md, "vertex_group", ob, "vertex_groups", > text="") > + > def LATTICE(self, layout, ob, md): > split = layout.split() > > > Modified: trunk/blender/release/scripts/startup/bl_ui/space_view3d.py > =================================================================== > --- trunk/blender/release/scripts/startup/bl_ui/space_view3d.py 2012-10-24 > 10:09:48 UTC (rev 51577) > +++ trunk/blender/release/scripts/startup/bl_ui/space_view3d.py 2012-10-24 > 10:39:11 UTC (rev 51578) > @@ -1711,6 +1711,7 @@ > layout.operator("mesh.select_all", text="Select Inverse").action > = 'INVERT' > layout.operator("mesh.flip_normals") > layout.operator("mesh.vertices_smooth", text="Smooth") > + layout.operator("mesh.vertices_smooth_laplacian", text="Laplacian > Smooth") > layout.operator("mesh.inset") > layout.operator("mesh.bevel", text="Bevel") > layout.operator("mesh.bridge_edge_loops") > > Modified: trunk/blender/source/blender/bmesh/CMakeLists.txt > =================================================================== > --- trunk/blender/source/blender/bmesh/CMakeLists.txt 2012-10-24 > 10:09:48 UTC (rev 51577) > +++ trunk/blender/source/blender/bmesh/CMakeLists.txt 2012-10-24 > 10:39:11 UTC (rev 51578) > @@ -29,8 +29,7 @@ > ../blenlib > ../makesdna > ../../../intern/guardedalloc > - ../../../extern/bullet2/src > -) > + ../../../extern/bullet2/src ../../../intern/opennl/extern) > > set(INC_SYS > > @@ -52,6 +51,7 @@ > operators/bmo_mirror.c > operators/bmo_primitive.c > operators/bmo_removedoubles.c > + operators/bmo_smooth_laplacian.c > operators/bmo_symmetrize.c > operators/bmo_subdivide.c > operators/bmo_subdivide.h > > Modified: trunk/blender/source/blender/bmesh/SConscript > =================================================================== > --- trunk/blender/source/blender/bmesh/SConscript 2012-10-24 > 10:09:48 UTC (rev 51577) > +++ trunk/blender/source/blender/bmesh/SConscript 2012-10-24 > 10:39:11 UTC (rev 51578) > @@ -13,8 +13,7 @@ > '../makesdna', > '../blenkernel', > '#/intern/guardedalloc', > - '#/extern/bullet2/src' > - ] > + '#/extern/bullet2/src' '#/intern/opennl/extern', ] > > defs = [] > > > Modified: trunk/blender/source/blender/bmesh/intern/bmesh_opdefines.c > =================================================================== > --- trunk/blender/source/blender/bmesh/intern/bmesh_opdefines.c 2012-10-24 > 10:09:48 UTC (rev 51577) > +++ trunk/blender/source/blender/bmesh/intern/bmesh_opdefines.c 2012-10-24 > 10:39:11 UTC (rev 51578) > @@ -114,6 +114,26 @@ > }; > > /* > + * Vertext Smooth Laplacian > + * Smooths vertices by using Laplacian smoothing propose by. > + * Desbrun, et al. Implicit Fairing of Irregular Meshes using Diffusion > and Curvature Flow > +*/ > +static BMOpDefine bmo_smooth_laplacian_vert_def = { > + "smooth_laplacian_vert", > + {{BMO_OP_SLOT_ELEMENT_BUF, "verts"}, //input vertices > + {BMO_OP_SLOT_FLT, "lambda"}, //lambda param > + {BMO_OP_SLOT_FLT, "lambda_border"}, //lambda param in border > + {BMO_OP_SLOT_BOOL, "use_x"}, //Smooth object along X axis > + {BMO_OP_SLOT_BOOL, "use_y"}, //Smooth object along Y axis > + {BMO_OP_SLOT_BOOL, "use_z"}, //Smooth object along Z axis > + {BMO_OP_SLOT_BOOL, "volume_preservation"}, //Apply volume > preservation after smooth > + {0} /* null-terminating sentinel */, > + }, > + bmo_smooth_laplacian_vert_exec, > + 0 > +}; > + > +/* > * Right-Hand Faces > * > * Computes an "outside" normal for the specified input faces. > @@ -1278,6 +1298,7 @@ > &bmo_similar_verts_def, > &bmo_slide_vert_def, > &bmo_smooth_vert_def, > + &bmo_smooth_laplacian_vert_def, > &bmo_solidify_def, > &bmo_spin_def, > &bmo_split_def, > > Modified: > trunk/blender/source/blender/bmesh/intern/bmesh_operators_private.h > =================================================================== > --- trunk/blender/source/blender/bmesh/intern/bmesh_operators_private.h > 2012-10-24 10:09:48 UTC (rev 51577) > +++ trunk/blender/source/blender/bmesh/intern/bmesh_operators_private.h > 2012-10-24 10:39:11 UTC (rev 51578) > @@ -91,6 +91,7 @@ > void bmo_similar_verts_exec(BMesh *bm, BMOperator *op); > void bmo_slide_vert_exec(BMesh *bm, BMOperator *op); > void bmo_smooth_vert_exec(BMesh *bm, BMOperator *op); > +void bmo_smooth_laplacian_vert_exec(BMesh *bm, BMOperator *op); > void bmo_solidify_face_region_exec(BMesh *bm, BMOperator *op); > void bmo_spin_exec(BMesh *bm, BMOperator *op); > void bmo_split_edges_exec(BMesh *bm, BMOperator *op); > > Added: trunk/blender/source/blender/bmesh/operators/bmo_smooth_laplacian.c > =================================================================== > --- trunk/blender/source/blender/bmesh/operators/bmo_smooth_laplacian.c > (rev 0) > +++ trunk/blender/source/blender/bmesh/operators/bmo_smooth_laplacian.c > 2012-10-24 10:39:11 UTC (rev 51578) > @@ -0,0 +1,613 @@ > +/* > + * ***** BEGIN GPL LICENSE BLOCK ***** > + * > + * This program is free software; you can redistribute it and/or > + * modify it under the terms of the GNU General Public License > + * as published by the Free Software Foundation; either version 2 > + * of the License, or (at your option) any later version. > + * > + * This program is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + * GNU General Public License for more details. > + * > + * You should have received a copy of the GNU General Public License > + * along with this program; if not, write to the Free Software Foundation, > + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. > + * > + * Contributor(s): Alexander Pinzon > + * > + * ***** END GPL LICENSE BLOCK ***** > + */ > + > +/** \file blender/bmesh/operators/bmo_smooth_laplacian.c > + * \ingroup bmesh > + */ > + > +#include "MEM_guardedalloc.h" > + > +#include "DNA_meshdata_types.h" > + > +#include "BLI_array.h" > +#include "BLI_heap.h" > +#include "BLI_math.h" > +#include "BLI_math_geom.h" > +#include "BLI_smallhash.h" > + > +#include "BKE_customdata.h" > +#include "BKE_mesh.h" > + > +#include "bmesh.h" > + > +#include "ONL_opennl.h" > + > +#include "intern/bmesh_operators_private.h" /* own include */ > + > +#define SMOOTH_LAPLACIAN_AREA_FACTOR 4.0f > +#define SMOOTH_LAPLACIAN_EDGE_FACTOR 2.0f > +#define SMOOTH_LAPLACIAN_MAX_EDGE_PERCENTAGE 1.8 > +#define SMOOTH_LAPLACIAN_MIN_EDGE_PERCENTAGE 0.15 > + > +struct BLaplacianSystem { > + float *eweights; /* Length weights per Edge */ > + float (*fweights)[3]; /* Cotangent weights per face */ > + float *ring_areas; /* Total area per ring*/ > + float *vlengths; /* Total sum of lengths(edges) per > vertice*/ > + float *vweights; /* Total sum of weights per > vertice*/ > + int numEdges; /* Number of edges*/ > + int numFaces; /* Number of faces*/ > + int numVerts; /* Number of verts*/ > + short *zerola; /* Is zero area or length*/ > + > + /* Pointers to data*/ > + BMesh *bm; > + BMOperator *op; > + NLContext *context; > + > + /*Data*/ > + float min_area; > +}; > +typedef struct BLaplacianSystem LaplacianSystem; > + > +static float compute_volume(BMesh *bm, BMOperator *op); > +static float cotan_weight(float *v1, float *v2, float *v3); > +static int vert_is_boundary(BMVert *v); > +static LaplacianSystem * init_laplacian_system( int a_numEdges, int > a_numFaces, int a_numVerts); > +static void init_laplacian_matrix(LaplacianSystem * sys); > +static void delete_laplacian_system(LaplacianSystem * sys); > +static void delete_void_pointer(void * data); > +static void fill_laplacian_matrix(LaplacianSystem * sys); > +static void memset_laplacian_system(LaplacianSystem *sys, int val); > +static void validate_solution(LaplacianSystem * sys, int usex, int usey, > int usez, float lambda, float lambda_border, int volumepreservation); > +static void volume_preservation(BMesh *bm, BMOperator *op, float vini, > float vend, int usex, int usey, int usez); > + > +static void delete_void_pointer(void * data) > +{ > + if (data) { > + MEM_freeN(data); > + data = NULL; > + } > +} > + > +static void delete_laplacian_system(LaplacianSystem * sys) > +{ > + delete_void_pointer(sys->eweights); > + delete_void_pointer(sys->fweights); > + delete_void_pointer(sys->ring_areas); > + delete_void_pointer(sys->vlengths); > + delete_void_pointer(sys->vweights); > + delete_void_pointer(sys->zerola); > + if (sys->context) { > + nlDeleteContext(sys->context); > + } > + sys->bm = NULL; > + sys->op = NULL; > + MEM_freeN(sys); > +} > + > +static void memset_laplacian_system(LaplacianSystem *sys, int val) > +{ > + memset(sys->eweights , val, sizeof(float) * sys->numEdges); > + memset(sys->fweights , val, sizeof(float) * sys->numFaces * 3); > + memset(sys->ring_areas , val, sizeof(float) * sys->numVerts); > + memset(sys->vlengths , val, sizeof(float) * sys->numVerts); > + memset(sys->vweights , val, sizeof(float) * sys->numVerts); > + memset(sys->zerola , val, sizeof(short) * > sys->numVerts); > +} > + > +static LaplacianSystem * init_laplacian_system( int a_numEdges, int > a_numFaces, int a_numVerts) > +{ > + LaplacianSystem * sys; > + sys = MEM_callocN(sizeof(LaplacianSystem), "ModLaplSmoothSystem"); > + sys->numEdges = a_numEdges; > + sys->numFaces = a_numFaces; > + sys->numVerts = a_numVerts; > + > + sys->eweights = MEM_callocN(sizeof(float) * sys->numEdges, > "ModLaplSmoothEWeight"); > + if (!sys->eweights) { > + delete_laplacian_system(sys); > + return NULL; > + } > + > + sys->fweights = MEM_callocN(sizeof(float) * 3 * sys->numFaces, > "ModLaplSmoothFWeight"); > + if (!sys->fweights) { > + delete_laplacian_system(sys); > + return NULL; > + } > + > + sys->ring_areas = MEM_callocN(sizeof(float) * sys->numVerts, > "ModLaplSmoothRingAreas"); > + if (!sys->ring_areas) { > + delete_laplacian_system(sys); > + return NULL; > + } > + > + sys->vlengths = MEM_callocN(sizeof(float) * sys->numVerts, > "ModLaplSmoothVlengths"); > > @@ Diff output truncated at 10240 characters. @@ > _______________________________________________ > Bf-blender-cvs mailing list > [email protected] > http://lists.blender.org/mailman/listinfo/bf-blender-cvs > _______________________________________________ Bf-committers mailing list [email protected] http://lists.blender.org/mailman/listinfo/bf-committers
