Blender  V2.93
meshlaplacian.h
Go to the documentation of this file.
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  *
16  * BIF_meshlaplacian.h: Algorithms using the mesh laplacian.
17  */
18 
23 #pragma once
24 
25 //#define RIGID_DEFORM
26 
27 struct Mesh;
28 struct Object;
29 struct bDeformGroup;
30 
31 #ifdef RIGID_DEFORM
32 struct EditMesh;
33 #endif
34 
35 /* Laplacian System */
36 
37 struct LaplacianSystem;
38 typedef struct LaplacianSystem LaplacianSystem;
39 
40 void laplacian_add_vertex(LaplacianSystem *sys, float *co, int pinned);
41 void laplacian_add_triangle(LaplacianSystem *sys, int v1, int v2, int v3);
42 
43 void laplacian_begin_solve(LaplacianSystem *sys, int index);
44 void laplacian_add_right_hand_side(LaplacianSystem *sys, int v, float value);
47 
48 /* Heat Weighting */
49 
50 void heat_bone_weighting(struct Object *ob,
51  struct Mesh *me,
52  float (*verts)[3],
53  int numbones,
54  struct bDeformGroup **dgrouplist,
55  struct bDeformGroup **dgroupflip,
56  float (*root)[3],
57  float (*tip)[3],
58  const int *selected,
59  const char **error_str);
60 
61 #ifdef RIGID_DEFORM
62 /* As-Rigid-As-Possible Deformation */
63 
64 void rigid_deform_begin(struct EditMesh *em);
65 void rigid_deform_iteration(void);
66 void rigid_deform_end(int cancel);
67 #endif
68 
69 /* Harmonic Coordinates */
70 
71 /* ED_mesh_deform_bind_callback(...) defined in ED_armature.h */
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble v1
ATTR_WARN_UNUSED_RESULT const BMVert * v2
ATTR_WARN_UNUSED_RESULT const BMVert * v
static float verts[][3]
float laplacian_system_get_solution(LaplacianSystem *sys, int v)
void laplacian_add_right_hand_side(LaplacianSystem *sys, int v, float value)
int laplacian_system_solve(LaplacianSystem *sys)
void heat_bone_weighting(struct Object *ob, struct Mesh *me, float(*verts)[3], int numbones, struct bDeformGroup **dgrouplist, struct bDeformGroup **dgroupflip, float(*root)[3], float(*tip)[3], const int *selected, const char **error_str)
void laplacian_add_triangle(LaplacianSystem *sys, int v1, int v2, int v3)
void laplacian_add_vertex(LaplacianSystem *sys, float *co, int pinned)
void laplacian_begin_solve(LaplacianSystem *sys, int index)