[Bf-committers] [Bf-blender-cvs] SVN commit: /data/svn/bf-blender [51578] trunk/blender: Merge GSoC project from branch: Laplacian Smooth (Operator & Modifier)

Alexander Pinzon Fernandez apinzonf at gmail.com
Wed Oct 24 17:17:38 CEST 2012


Ohhh
Daniel thanks a lot for your help with merge this branch into trunk.

Att
Alexander Pinzon Fernandez

2012/10/24 Daniel Genrich <daniel.genrich at gmx.net>

> 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
> Bf-blender-cvs at blender.org
> http://lists.blender.org/mailman/listinfo/bf-blender-cvs
>


More information about the Bf-committers mailing list