|
Blender V5.0
|
#include "BLI_utildefines.h"#include "BLI_math_geom.h"#include "BLI_math_vector.h"#include "BLI_string.h"#include "BLI_utildefines_stack.h"#include "MEM_guardedalloc.h"#include "BLT_translation.hh"#include "DNA_defaults.h"#include "DNA_mesh_types.h"#include "DNA_meshdata_types.h"#include "DNA_screen_types.h"#include "BKE_deform.hh"#include "BKE_mesh_mapping.hh"#include "UI_interface_layout.hh"#include "UI_resources.hh"#include "BLO_read_write.hh"#include "RNA_access.hh"#include "RNA_prototypes.hh"#include "MOD_ui_common.hh"#include "MOD_util.hh"#include "eigen_capi.h"Go to the source code of this file.
Functions | |
| static LaplacianSystem * | newLaplacianSystem () |
| static LaplacianSystem * | initLaplacianSystem (int verts_num, int edges_num, int tris_num, int anchors_num, const char defgrpName[64], int iterations) |
| static void | deleteLaplacianSystem (LaplacianSystem *sys) |
| static void | createFaceRingMap (const int mvert_tot, blender::Span< blender::int3 > corner_tris, blender::Span< int > corner_verts, MeshElemMap **r_map, int **r_indices) |
| static void | createVertRingMap (const int mvert_tot, const blender::Span< blender::int2 > edges, MeshElemMap **r_map, int **r_indices) |
| static void | initLaplacianMatrix (LaplacianSystem *sys) |
| static void | computeImplictRotations (LaplacianSystem *sys) |
| static void | rotateDifferentialCoordinates (LaplacianSystem *sys) |
| static void | laplacianDeformPreview (LaplacianSystem *sys, float(*vertexCos)[3]) |
| static bool | isValidVertexGroup (LaplacianDeformModifierData *lmd, Object *ob, Mesh *mesh) |
| static void | initSystem (LaplacianDeformModifierData *lmd, Object *ob, Mesh *mesh, float(*vertexCos)[3], int verts_num) |
| static int | isSystemDifferent (LaplacianDeformModifierData *lmd, Object *ob, Mesh *mesh, int verts_num) |
| static void | LaplacianDeformModifier_do (LaplacianDeformModifierData *lmd, Object *ob, Mesh *mesh, float(*vertexCos)[3], int verts_num) |
| static void | init_data (ModifierData *md) |
| static void | copy_data (const ModifierData *md, ModifierData *target, const int flag) |
| static bool | is_disabled (const Scene *, ModifierData *md, bool) |
| static void | required_data_mask (ModifierData *md, CustomData_MeshMasks *r_cddata_masks) |
| static void | deform_verts (ModifierData *md, const ModifierEvalContext *ctx, Mesh *mesh, blender::MutableSpan< blender::float3 > positions) |
| static void | free_data (ModifierData *md) |
| static void | panel_draw (const bContext *, Panel *panel) |
| static void | panel_register (ARegionType *region_type) |
| static void | blend_write (BlendWriter *writer, const ID *id_owner, const ModifierData *md) |
| static void | blend_read (BlendDataReader *reader, ModifierData *md) |
Variables | |
| ModifierTypeInfo | modifierType_LaplacianDeform |
| anonymous enum |
Definition at line 41 of file MOD_laplaciandeform.cc.
|
static |
Definition at line 845 of file MOD_laplaciandeform.cc.
References BLO_read_shared(), LaplacianDeformModifierData::cache_system, LaplacianDeformModifierData::vertexco, and LaplacianDeformModifierData::vertexco_sharing_info.
|
static |
Definition at line 818 of file MOD_laplaciandeform.cc.
References BLI_assert, BLO_write_is_undo(), BLO_write_shared(), BLO_write_struct_at_address, eModifierFlag_OverrideLibrary_Local, ModifierData::flag, ID_IS_LINKED, ID_IS_OVERRIDE_LIBRARY, LaplacianDeformModifierData::vertexco, LaplacianDeformModifierData::vertexco_sharing_info, and LaplacianDeformModifierData::verts_num.
|
static |
Definition at line 312 of file MOD_laplaciandeform.cc.
References copy_v3_v3(), dot_v3v3(), fabsf, i, normalize_v3(), sub_v3_v3v3(), and LaplacianSystem::verts_num.
Referenced by laplacianDeformPreview().
|
static |
|
static |
Definition at line 155 of file MOD_laplaciandeform.cc.
References MeshElemMap::count, i, blender::Span< T >::index_range(), indices, MeshElemMap::indices, and MEM_calloc_arrayN().
Referenced by initSystem().
|
static |
Definition at line 192 of file MOD_laplaciandeform.cc.
References MeshElemMap::count, i, blender::Span< T >::index_range(), indices, MeshElemMap::indices, and MEM_calloc_arrayN().
Referenced by initSystem().
|
static |
Definition at line 763 of file MOD_laplaciandeform.cc.
References blender::MutableSpan< T >::data(), LaplacianDeformModifier_do(), ModifierEvalContext::object, and blender::MutableSpan< T >::size().
|
static |
Definition at line 136 of file MOD_laplaciandeform.cc.
References LaplacianSystem::context, EIG_linear_solver_delete(), and MEM_SAFE_FREE.
Referenced by free_data(), and LaplacianDeformModifier_do().
|
static |
Definition at line 775 of file MOD_laplaciandeform.cc.
References LaplacianDeformModifierData::cache_system, deleteLaplacianSystem(), blender::implicit_sharing::free_shared_data(), LaplacianDeformModifierData::vertexco, LaplacianDeformModifierData::vertexco_sharing_info, and LaplacianDeformModifierData::verts_num.
|
static |
Definition at line 724 of file MOD_laplaciandeform.cc.
References BLI_assert, DNA_struct_default_get, MEMCMP_STRUCT_AFTER_IS_ZERO, and MEMCPY_STRUCT_AFTER.
|
static |
This method computes the Laplacian Matrix and Differential Coordinates for all vertex in the mesh. The Linear system is LV = d Where L is Laplacian Matrix, V as the vertices in Mesh, d is the differential coordinates The Laplacian Matrix is computes as a: Lij = sum(Wij) (if i == j) Lij = Wij (if i != j) Wij is weight between vertex Vi and vertex Vj, we use cotangent weight
The Differential Coordinate is computes as a: di = Vi * sum(Wij) - sum(Wij * Vj) Where: di is the Differential Coordinate i sum (Wij) is the sum of all weights between vertex Vi and its vertices neighbors (Vj). sum (Wij * Vj) is the sum of the product between vertex neighbor Vj and weight Wij for all neighborhood.
This Laplacian Matrix is described in the paper: Desbrun M. et.al, Implicit fairing of irregular meshes using diffusion and curvature flow, SIGGRAPH '99, page 317-324, New York, USA
The computation of Laplace Beltrami operator on Hybrid Triangle/Quad Meshes is described in the paper: Pinzon A., Romero E., Shape Inflation With an Adapted Laplacian Operator For Hybrid Quad/Triangle Meshes, Conference on Graphics Patterns and Images, SIBGRAPI, 2013
The computation of Differential Coordinates is described in the paper: Sorkine, O. Laplacian Surface Editing. Proceedings of the EUROGRAPHICS/ACM SIGGRAPH Symposium on Geometry Processing,
Definition at line 259 of file MOD_laplaciandeform.cc.
References add_v3_v3(), LaplacianSystem::context, cotangent_tri_weight_v3(), EIG_linear_solver_matrix_add(), i, normal_tri_v3(), UNPACK3, and v2.
Referenced by laplacianDeformPreview().
|
static |
Definition at line 110 of file MOD_laplaciandeform.cc.
References MEM_calloc_arrayN(), MEM_malloc_arrayN(), newLaplacianSystem(), STRNCPY(), and LaplacianSystem::verts_num.
Referenced by initSystem().
|
static |
Definition at line 532 of file MOD_laplaciandeform.cc.
References LaplacianDeformModifierData::anchor_grp_name, BKE_defvert_find_weight(), BLI_assert, LaplacianDeformModifierData::cache_system, createFaceRingMap(), createVertRingMap(), LaplacianDeformModifierData::flag, i, blender::implicit_sharing::info_for_mem_free(), initLaplacianSystem(), isValidVertexGroup(), MEM_freeN(), MEM_malloc_arrayN(), MOD_get_vgroup(), MOD_LAPLACIANDEFORM_INVERT_VGROUP, LaplacianDeformModifierData::repeat, blender::Span< T >::size(), STACK_DECLARE, STACK_INIT, STACK_PUSH, STACK_SIZE, LaplacianDeformModifierData::vertexco, LaplacianDeformModifierData::vertexco_sharing_info, LaplacianDeformModifierData::verts_num, and Mesh::verts_num.
Referenced by LaplacianDeformModifier_do().
|
static |
Definition at line 745 of file MOD_laplaciandeform.cc.
References LaplacianDeformModifierData::anchor_grp_name.
|
static |
Definition at line 595 of file MOD_laplaciandeform.cc.
References LaplacianDeformModifierData::anchor_grp_name, BKE_defvert_find_weight(), LaplacianDeformModifierData::cache_system, Mesh::edges_num, LaplacianDeformModifierData::flag, i, LAPDEFORM_SYSTEM_CHANGE_EDGES, LAPDEFORM_SYSTEM_CHANGE_NOT_VALID_GROUP, LAPDEFORM_SYSTEM_CHANGE_VERTEXES, LAPDEFORM_SYSTEM_NOT_CHANGE, LAPDEFORM_SYSTEM_ONLY_CHANGE_ANCHORS, LAPDEFORM_SYSTEM_ONLY_CHANGE_GROUP, MOD_get_vgroup(), MOD_LAPLACIANDEFORM_INVERT_VGROUP, STREQ, and LaplacianSystem::verts_num.
Referenced by LaplacianDeformModifier_do().
|
static |
Definition at line 522 of file MOD_laplaciandeform.cc.
References LaplacianDeformModifierData::anchor_grp_name, and MOD_get_vgroup().
Referenced by initSystem(), and LaplacianDeformModifier_do().
|
static |
Definition at line 638 of file MOD_laplaciandeform.cc.
References LaplacianDeformModifierData::anchor_grp_name, BKE_modifier_set_error(), LaplacianDeformModifierData::cache_system, deleteLaplacianSystem(), Mesh::edges_num, ELEM, LaplacianDeformModifierData::flag, float, blender::implicit_sharing::free_shared_data(), initSystem(), isSystemDifferent(), isValidVertexGroup(), LAPDEFORM_SYSTEM_CHANGE_EDGES, LAPDEFORM_SYSTEM_CHANGE_NOT_VALID_GROUP, LAPDEFORM_SYSTEM_CHANGE_VERTEXES, LAPDEFORM_SYSTEM_ONLY_CHANGE_ANCHORS, LAPDEFORM_SYSTEM_ONLY_CHANGE_GROUP, laplacianDeformPreview(), MEM_malloc_arrayN(), MEM_SAFE_FREE, MOD_LAPLACIANDEFORM_BIND, LaplacianDeformModifierData::modifier, LaplacianDeformModifierData::repeat, LaplacianDeformModifierData::vertexco, LaplacianDeformModifierData::vertexco_sharing_info, and LaplacianDeformModifierData::verts_num.
Referenced by deform_verts().
|
static |
Definition at line 405 of file MOD_laplaciandeform.cc.
References computeImplictRotations(), LaplacianSystem::context, EIG_linear_least_squares_solver_new(), EIG_linear_solver_matrix_add(), EIG_linear_solver_right_hand_side_add(), EIG_linear_solver_solve(), EIG_linear_solver_variable_get(), EIG_linear_solver_variable_set(), i, initLaplacianMatrix(), rotateDifferentialCoordinates(), and LaplacianSystem::verts_num.
Referenced by LaplacianDeformModifier_do().
|
static |
Definition at line 94 of file MOD_laplaciandeform.cc.
References MEM_callocN(), and LaplacianSystem::verts_num.
Referenced by initLaplacianSystem().
Definition at line 786 of file MOD_laplaciandeform.cc.
References uiLayout::enabled_set(), IFACE_, Panel::layout, modifier_error_message_draw(), modifier_panel_get_property_pointers(), modifier_vgroup_ui(), uiLayout::op(), uiLayout::prop(), ptr, RNA_boolean_get(), RNA_string_length(), uiLayout::row(), uiLayout::separator(), UI_ITEM_NONE, and uiLayout::use_property_split_set().
|
static |
Definition at line 813 of file MOD_laplaciandeform.cc.
References eModifierType_LaplacianDeform, modifier_panel_register(), and panel_draw().
|
static |
Definition at line 754 of file MOD_laplaciandeform.cc.
References LaplacianDeformModifierData::anchor_grp_name, CD_MASK_MDEFORMVERT, and CustomData_MeshMasks::vmask.
|
static |
Definition at line 337 of file MOD_laplaciandeform.cc.
References add_v3_v3(), beta(), LaplacianSystem::context, copy_v3_v3(), cross_v3_v3v3(), dot_v3v3(), EIG_linear_solver_right_hand_side_add(), EIG_linear_solver_variable_get(), i, len_squared_v3(), mul_v3_v3fl(), normal_tri_v3(), normalize_v3(), sub_v3_v3(), sub_v3_v3v3(), UNPACK3, LaplacianSystem::verts_num, and zero_v3().
Referenced by laplacianDeformPreview().
| ModifierTypeInfo modifierType_LaplacianDeform |
Definition at line 858 of file MOD_laplaciandeform.cc.