40 #include "RNA_prototypes.h"
101 const char defgrpName[64],
149 int i, j, indices_num = 0;
154 for (i = 0, mlt = mlooptri; i < mtri_tot; i++, mlt++) {
156 for (j = 0; j < 3; j++) {
157 const uint v_index = mloop[mlt->
tri[j]].
v;
158 map[v_index].count++;
164 for (i = 0; i < mvert_tot; i++) {
165 map[i].indices = index_iter;
166 index_iter +=
map[i].count;
169 for (i = 0, mlt = mlooptri; i < mtri_tot; i++, mlt++) {
170 for (j = 0; j < 3; j++) {
171 const uint v_index = mloop[mlt->
tri[j]].
v;
172 map[v_index].indices[
map[v_index].count] = i;
173 map[v_index].count++;
187 int i, vid[2], indices_num = 0;
191 for (i = 0, me = medge; i < medge_tot; i++, me++) {
200 for (i = 0; i < mvert_tot; i++) {
201 map[i].indices = index_iter;
202 index_iter +=
map[i].count;
205 for (i = 0, me = medge; i < medge_tot; i++, me++) {
208 map[vid[0]].indices[
map[vid[0]].count] = vid[1];
210 map[vid[1]].indices[
map[vid[1]].count] = vid[0];
256 for (ti = 0; ti < sys->
tris_num; ti++) {
260 co[0] = sys->
co[vidt[0]];
261 co[1] = sys->
co[vidt[1]];
262 co[2] = sys->
co[vidt[2]];
269 for (j = 0; j < 3; j++) {
270 const float *
v1, *
v2, *v3;
273 idv[1] = vidt[(j + 1) % i];
274 idv[2] = vidt[(j + 2) % i];
276 v1 = sys->
co[idv[0]];
277 v2 = sys->
co[idv[1]];
278 v3 = sys->
co[idv[2]];
283 sys->
delta[idv[0]][0] +=
v1[0] * (w2 + w3);
284 sys->
delta[idv[0]][1] +=
v1[1] * (w2 + w3);
285 sys->
delta[idv[0]][2] +=
v1[2] * (w2 + w3);
287 sys->
delta[idv[0]][0] -=
v2[0] * w2;
288 sys->
delta[idv[0]][1] -=
v2[1] * w2;
289 sys->
delta[idv[0]][2] -=
v2[2] * w2;
291 sys->
delta[idv[0]][0] -= v3[0] * w3;
292 sys->
delta[idv[0]][1] -= v3[1] * w3;
293 sys->
delta[idv[0]][2] -= v3[2] * w3;
304 int vid, *vidn =
NULL;
305 float minj, mjt, qj[3], vj[3];
313 for (j = 0; j < ln; j++) {
329 float alpha,
beta, gamma;
330 float pj[3], ni[3], di[3];
331 float uij[3], dun[3], e2[3], pi[3], fni[3],
vn[3][3];
332 int i, j, fidn_num, k, fi;
355 for (fi = 0; fi < fidn_num; fi++) {
358 vin = sys->
tris[fidn[fi]];
359 for (j = 0; j < 3; j++) {
378 fni[0] = alpha * ni[0] +
beta * uij[0] + gamma * e2[0];
379 fni[1] = alpha * ni[1] +
beta * uij[1] + gamma * e2[1];
380 fni[2] = alpha * ni[2] +
beta * uij[2] + gamma * e2[2];
397 int vid, i, j, n, na;
404 for (i = 0; i < n; i++) {
409 for (i = 0; i < na; i++) {
419 for (i = 0; i < n; i++) {
424 for (i = 0; i < na; i++) {
434 for (j = 1; j <= sys->
repeat; j++) {
437 for (i = 0; i < na; i++) {
450 for (vid = 0; vid < sys->
verts_num; vid++) {
466 for (i = 0; i < n; i++) {
471 for (i = 0; i < na; i++) {
481 for (j = 1; j <= sys->
repeat; j++) {
484 for (i = 0; i < na; i++) {
496 for (vid = 0; vid < sys->
verts_num; vid++) {
519 return (dvert !=
NULL);
546 for (i = 0; i < verts_num; i++) {
563 memcpy(sys->
index_anchors, index_anchors,
sizeof(
int) * anchors_num);
564 memcpy(sys->
co, vertexCos,
sizeof(
float[3]) * verts_num);
567 memcpy(lmd->
vertexco, vertexCos,
sizeof(
float[3]) * verts_num);
582 for (i = 0; i < sys->
tris_num; i++) {
583 sys->
tris[i][0] = mloop[mlooptri[i].
tri[0]].
v;
584 sys->
tris[i][1] = mloop[mlooptri[i].
tri[1]].
v;
585 sys->
tris[i][2] = mloop[mlooptri[i].
tri[2]].
v;
618 for (i = 0; i < verts_num; i++) {
636 float(*filevertexCos)[3];
639 filevertexCos =
NULL;
655 filevertexCos =
MEM_malloc_arrayN(verts_num,
sizeof(
float[3]),
"TempModDeformCoordinates");
656 memcpy(filevertexCos, lmd->
vertexco,
sizeof(
float[3]) * verts_num);
671 ob, &lmd->
modifier,
"Vertices changed from %d to %d", lmd->
verts_num, verts_num);
680 "Vertex group '%s' is not valid, or maybe empty",
694 "Vertex group '%s' is not valid, or maybe empty",
699 filevertexCos =
MEM_malloc_arrayN(verts_num,
sizeof(
float[3]),
"TempDeformCoordinates");
700 memcpy(filevertexCos, lmd->
vertexco,
sizeof(
float[3]) * verts_num);
741 bool UNUSED(useRenderParams))
764 float (*vertexCos)[3],
782 float (*vertexCos)[3],
789 if (mesh_src !=
NULL) {
836 "OBJECT_OT_laplaciandeform_bind");
878 N_(
"LaplacianDeform"),
879 "LaplacianDeformModifierData",
881 &RNA_LaplacianDeformModifier,
typedef float(TangentPoint)[2]
void BKE_id_free(struct Main *bmain, void *idv)
const struct MLoopTri * BKE_mesh_runtime_looptri_ensure(const struct Mesh *mesh)
int BKE_mesh_runtime_looptri_len(const struct Mesh *mesh)
void BKE_mesh_wrapper_ensure_mdata(struct Mesh *me)
@ eModifierTypeFlag_SupportsEditmode
@ eModifierTypeFlag_AcceptsMesh
void BKE_modifier_copydata_generic(const struct ModifierData *md, struct ModifierData *md_dst, int flag)
@ eModifierTypeType_OnlyDeform
void BKE_modifier_set_error(const struct Object *ob, struct ModifierData *md, const char *format,...) ATTR_PRINTF_FORMAT(3
float cotangent_tri_weight_v3(const float v1[3], const float v2[3], const float v3[3])
float normal_tri_v3(float n[3], const float v1[3], const float v2[3], const float v3[3])
MINLINE float len_squared_v3(const float v[3]) ATTR_WARN_UNUSED_RESULT
MINLINE float normalize_v3(float r[3])
MINLINE void sub_v3_v3(float r[3], const float a[3])
MINLINE void sub_v3_v3v3(float r[3], const float a[3], const float b[3])
MINLINE void copy_v3_v3(float r[3], const float a[3])
MINLINE float dot_v3v3(const float a[3], const float b[3]) ATTR_WARN_UNUSED_RESULT
MINLINE void cross_v3_v3v3(float r[3], const float a[3], const float b[3])
MINLINE void zero_v3(float r[3])
MINLINE void mul_v3_v3fl(float r[3], const float a[3], float f)
MINLINE void add_v3_v3(float r[3], const float a[3])
char * BLI_strncpy(char *__restrict dst, const char *__restrict src, size_t maxncpy) ATTR_NONNULL()
#define MEMCMP_STRUCT_AFTER_IS_ZERO(struct_var, member)
#define MEMCPY_STRUCT_AFTER(struct_dst, struct_src, member)
#define STACK_PUSH(stack, val)
#define STACK_DECLARE(stack)
#define STACK_SIZE(stack)
#define STACK_INIT(stack, stack_num)
void BLO_read_float3_array(BlendDataReader *reader, int array_size, float **ptr_p)
void BLO_write_float3_array(BlendWriter *writer, uint num, const float *data_ptr)
bool BLO_write_is_undo(BlendWriter *writer)
#define BLO_write_struct_at_address(writer, struct_name, address, data_ptr)
#define ID_IS_LINKED(_id)
#define ID_IS_OVERRIDE_LIBRARY(_id)
#define CD_MASK_MDEFORMVERT
#define DNA_struct_default_get(struct_name)
@ eModifierFlag_OverrideLibrary_Local
@ MOD_LAPLACIANDEFORM_BIND
@ MOD_LAPLACIANDEFORM_INVERT_VGROUP
struct LaplacianDeformModifierData LaplacianDeformModifierData
@ eModifierType_LaplacianDeform
_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 GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble u2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint vn
_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
Read Guarded memory(de)allocation.
PointerRNA * modifier_panel_get_property_pointers(Panel *panel, PointerRNA *r_ob_ptr)
void modifier_panel_end(uiLayout *layout, PointerRNA *ptr)
PanelType * modifier_panel_register(ARegionType *region_type, ModifierType type, PanelDrawFn draw)
void modifier_vgroup_ui(uiLayout *layout, PointerRNA *ptr, PointerRNA *ob_ptr, const char *vgroup_prop, const char *invert_vgroup_prop, const char *text)
Mesh * MOD_deform_mesh_eval_get(Object *ob, struct BMEditMesh *em, Mesh *mesh, const float(*vertexCos)[3], const int verts_num, const bool use_normals, const bool use_orco)
void MOD_get_vgroup(Object *ob, struct Mesh *mesh, const char *name, MDeformVert **dvert, int *defgrp_index)
void uiLayoutSetEnabled(uiLayout *layout, bool enabled)
void uiLayoutSetPropSep(uiLayout *layout, bool is_sep)
void uiItemS(uiLayout *layout)
uiLayout * uiLayoutRow(uiLayout *layout, bool align)
void uiItemR(uiLayout *layout, struct PointerRNA *ptr, const char *propname, int flag, const char *name, int icon)
void uiItemO(uiLayout *layout, const char *name, int icon, const char *opname)
ATTR_WARN_UNUSED_RESULT const BMVert * v2
ccl_gpu_kernel_postfix int ccl_global int * indices
void EIG_linear_solver_variable_set(LinearSolver *solver, int rhs, int index, double value)
void EIG_linear_solver_right_hand_side_add(LinearSolver *solver, int rhs, int index, double value)
LinearSolver * EIG_linear_least_squares_solver_new(int num_rows, int num_columns, int num_rhs)
void EIG_linear_solver_delete(LinearSolver *solver)
double EIG_linear_solver_variable_get(LinearSolver *solver, int rhs, int index)
void EIG_linear_solver_matrix_add(LinearSolver *solver, int row, int col, double value)
bool EIG_linear_solver_solve(LinearSolver *solver)
void *(* MEM_malloc_arrayN)(size_t len, size_t size, const char *str)
void(* MEM_freeN)(void *vmemh)
void *(* MEM_dupallocN)(const void *vmemh)
void *(* MEM_calloc_arrayN)(size_t len, size_t size, const char *str)
void *(* MEM_callocN)(size_t len, const char *str)
SocketIndexByIdentifierMap * map
int RNA_string_length(PointerRNA *ptr, const char *name)
bool RNA_boolean_get(PointerRNA *ptr, const char *name)
ccl_device_inline float beta(float x, float y)