Blender  V3.3
Classes | Macros | Typedefs | Functions
bmo_smooth_laplacian.c File Reference
#include "MEM_guardedalloc.h"
#include "BLI_math.h"
#include "eigen_capi.h"
#include "bmesh.h"
#include "intern/bmesh_operators_private.h"

Go to the source code of this file.

Classes

struct  BLaplacianSystem
 

Macros

#define SMOOTH_LAPLACIAN_MAX_EDGE_PERCENTAGE   1.8f
 
#define SMOOTH_LAPLACIAN_MIN_EDGE_PERCENTAGE   0.15f
 

Typedefs

typedef struct BLaplacianSystem LaplacianSystem
 

Functions

static bool vert_is_boundary (BMVert *v)
 
static LaplacianSysteminit_laplacian_system (int a_numEdges, int a_numLoops, 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, int preserve_volume)
 
static void volume_preservation (BMOperator *op, float vini, float vend, int usex, int usey, int usez)
 
void bmo_smooth_laplacian_vert_exec (BMesh *bm, BMOperator *op)
 

Detailed Description

Advanced smoothing.

Definition in file bmo_smooth_laplacian.c.

Macro Definition Documentation

◆ SMOOTH_LAPLACIAN_MAX_EDGE_PERCENTAGE

#define SMOOTH_LAPLACIAN_MAX_EDGE_PERCENTAGE   1.8f

Definition at line 21 of file bmo_smooth_laplacian.c.

◆ SMOOTH_LAPLACIAN_MIN_EDGE_PERCENTAGE

#define SMOOTH_LAPLACIAN_MIN_EDGE_PERCENTAGE   0.15f

Definition at line 22 of file bmo_smooth_laplacian.c.

Typedef Documentation

◆ LaplacianSystem

Definition at line 1 of file bmo_smooth_laplacian.c.

Function Documentation

◆ bmo_smooth_laplacian_vert_exec()

void bmo_smooth_laplacian_vert_exec ( BMesh bm,
BMOperator op 
)

◆ delete_laplacian_system()

static void delete_laplacian_system ( LaplacianSystem sys)
static

◆ delete_void_pointer()

static void delete_void_pointer ( void data)
static

Definition at line 57 of file bmo_smooth_laplacian.c.

References data, and MEM_freeN.

Referenced by delete_laplacian_system().

◆ fill_laplacian_matrix()

static void fill_laplacian_matrix ( LaplacianSystem sys)
static

◆ init_laplacian_matrix()

static void init_laplacian_matrix ( LaplacianSystem sys)
static

Compute weight between vertex v_i and all your neighbors weight between v_i and v_neighbor

Wij = cot(alpha) + cot(beta) / (4.0 * total area of all faces  * sum all weight)

       v_i *
         / | \
        /  |  \
 v_beta*   |   * v_alpha
        \  |  /
         \ | /
           * v_neighbor

Definition at line 153 of file bmo_smooth_laplacian.c.

References area_tri_v3(), BM_edge_is_boundary(), BM_EDGES_OF_MESH, BM_elem_flag_test, BM_elem_index_get, BM_ELEM_SELECT, BM_FACE_FIRST_LOOP, BM_FACES_OF_MESH, BM_ITER_MESH, BM_ITER_MESH_INDEX, BMVert::co, cotangent_tri_weight_v3(), e, LaplacianSystem::fweights, BMFace::len, len_v3v3(), BLaplacianSystem::min_area, BMLoop::next, BMLoop::prev, BMLoop::v, v1, and v2.

Referenced by bmo_smooth_laplacian_vert_exec().

◆ init_laplacian_system()

static LaplacianSystem * init_laplacian_system ( int  a_numEdges,
int  a_numLoops,
int  a_numVerts 
)
static

◆ memset_laplacian_system()

static void memset_laplacian_system ( LaplacianSystem sys,
int  val 
)
static

Definition at line 80 of file bmo_smooth_laplacian.c.

References LaplacianSystem::fweights.

Referenced by bmo_smooth_laplacian_vert_exec().

◆ validate_solution()

static void validate_solution ( LaplacianSystem sys,
int  usex,
int  usey,
int  usez,
int  preserve_volume 
)
static

◆ vert_is_boundary()

static bool vert_is_boundary ( BMVert v)
static

◆ volume_preservation()

static void volume_preservation ( BMOperator op,
float  vini,
float  vend,
int  usex,
int  usey,
int  usez 
)
static