52 float vec_u[3], vec_v[3];
61 const float zero_vec[3] = {0.0f};
87 bool disabled =
false;
91 for (
int i = 0; md && i <= cageIndex; i++, md = md->
next) {
107 Mesh *mesh_eval = obedit_eval->
data;
120 const int nverts = editmesh_eval->
bm->
totvert;
121 float(*vertexcos)[3] =
MEM_mallocN(
sizeof(*vertexcos) * nverts,
"vertexcos map");
132 float (*mappedcos)[3],
134 const bool use_select)
161 const float *co_prev, *co_curr, *co_next;
162 const float *vd_prev, *vd_curr, *vd_next;
169 vd_prev = mappedcos[i_prev];
170 vd_curr = mappedcos[i_curr];
171 vd_next = mappedcos[i_next];
174 co_prev = origcos[i_prev];
175 co_curr = origcos[i_curr];
176 co_next = origcos[i_next];
180 co_curr = l_iter->
v->
co;
188 }
while ((l_iter = l_iter->
next) != l_first);
194 float (*mappedcos)[3],
198 for (
int i = 0; i < me->
totvert; i++, mvert++) {
207 for (
int i = 0; i < me->
totpoly; i++, mp++) {
212 for (
int j = 0; j < mp->
totloop; j++) {
214 const float *co_prev, *co_curr, *co_next;
215 const float *vd_prev, *vd_curr, *vd_next;
218 vd_prev = mappedcos[ml_prev->
v];
219 vd_curr = mappedcos[ml_curr->
v];
220 vd_next = mappedcos[ml_next->
v];
223 co_prev = origcos[ml_prev->
v];
224 co_curr = origcos[ml_curr->
v];
225 co_next = origcos[ml_next->
v];
228 co_prev = mvert[ml_prev->
v].
co;
229 co_curr = mvert[ml_curr->
v].
co;
230 co_next = mvert[ml_next->
v].
co;
234 quats[ml_curr->
v], co_curr, co_next, co_prev, vd_curr, vd_next, vd_prev);
254 float (**deformmats)[3][3],
255 float (**deformcos)[3])
260 int i,
a, numleft = 0, numVerts = 0;
273 for (i = 0; md && i <= cageIndex; i++, md = md->
next) {
286 cd_mask_extra = datamasks->
mask;
291 defmats =
MEM_mallocN(
sizeof(*defmats) * numVerts,
"defmats");
293 for (
a = 0;
a < numVerts;
a++) {
297 mti->
deformMatricesEM(md, &mectx, em, me, deformedVerts, defmats, numVerts);
304 for (; md && i <= cageIndex; md = md->
next, i++) {
315 *deformmats = defmats;
316 *deformcos = deformedVerts;
333 *object_crazy = *object_eval;
340 float (**deformmats)[3][3],
341 float (**deformcos)[3])
345 *deformmats =
MEM_callocN(
sizeof(**deformmats) * num_verts,
"defmats");
346 for (
int a = 0;
a < num_verts;
a++) {
370 float (**deformmats)[3][3],
371 float (**deformcos)[3])
385 if (is_sculpt_mode && has_multires) {
393 for (; md; md = md->
next) {
400 if (defmats ==
NULL) {
420 for (; md; md = md->
next) {
430 if (me_eval !=
NULL) {
434 *deformmats = defmats;
435 *deformcos = deformedVerts;
443 float (**deformmats)[3][3],
444 float (**deformcos)[3])
460 float(*deformedVerts)[3] = *deformcos;
470 for (; md; md = md->
next) {
484 if (mesh_eval ==
NULL) {
488 mti->
deformVerts(md, &mectx, mesh_eval, deformedVerts, mesh_eval->totvert);
498 float qmat[3][3], tmat[3][3];
508 if (mesh_eval !=
NULL) {
513 if (*deformmats ==
NULL) {
518 *deformmats =
MEM_callocN(
sizeof(*(*deformmats)) * numVerts,
"defmats");
520 for (
a = 0;
a < numVerts;
a++) {
typedef float(TangentPoint)[2]
void makeDerivedMesh(struct Depsgraph *depsgraph, struct Scene *scene, struct Object *ob, struct BMEditMesh *em, const struct CustomData_MeshMasks *dataMask)
struct Mesh * editbmesh_get_eval_cage_from_orig(struct Depsgraph *depsgraph, struct Scene *scene, struct Object *obedit, const struct CustomData_MeshMasks *dataMask)
bool editbmesh_modifier_is_enabled(struct Scene *scene, const struct Object *ob, struct ModifierData *md, bool has_prev_mesh)
void mesh_get_mapped_verts_coords(struct Mesh *me_eval, float(*r_cos)[3], const int totcos)
float(* editbmesh_vert_coords_alloc(struct BMEditMesh *em, int *r_vert_len))[3]
const CustomData_MeshMasks CD_MASK_BAREMESH
void BKE_id_free(struct Main *bmain, void *idv)
struct Mesh * BKE_mesh_copy_for_eval(struct Mesh *source, bool reference)
float(* BKE_mesh_vert_coords_alloc(const struct Mesh *mesh, int *r_vert_len))[3]
struct Mesh * BKE_mesh_wrapper_from_editmesh_with_coords(struct BMEditMesh *em, const struct CustomData_MeshMasks *cd_mask_extra, const float(*vert_coords)[3], const struct Mesh *me_settings)
const ModifierTypeInfo * BKE_modifier_get_info(ModifierType type)
bool BKE_modifier_is_enabled(const struct Scene *scene, struct ModifierData *md, int required_mode)
struct ModifierData * BKE_modifiers_get_virtual_modifierlist(const struct Object *ob, struct VirtualModifierData *data)
@ eModifierTypeType_OnlyDeform
bool BKE_modifier_is_correctable_deformed(struct ModifierData *md)
void BKE_modifiers_clear_errors(struct Object *ob)
struct CDMaskLink * BKE_modifier_calc_data_masks(const struct Scene *scene, struct Object *ob, struct ModifierData *md, struct CustomData_MeshMasks *final_datamask, int required_mode, ModifierData *previewmd, const struct CustomData_MeshMasks *previewmask)
int BKE_modifiers_get_cage_index(const struct Scene *scene, struct Object *ob, int *r_lastPossibleCageIndex, bool is_virtual)
struct MultiresModifierData * get_multires_modifier(struct Scene *scene, struct Object *ob, bool use_first)
void BLI_linklist_free(LinkNode *list, LinkNodeFreeFP freefunc)
void copy_m3_m3(float m1[3][3], const float m2[3][3])
void unit_m3(float m[3][3])
void mul_m3_m3m3(float R[3][3], const float A[3][3], const float B[3][3])
void sub_qt_qtqt(float q[4], const float a[4], const float b[4])
void tri_to_quat_ex(float quat[4], const float v1[3], const float v2[3], const float v3[3], const float no_orig[3])
void quat_to_mat3(float mat[3][3], const float q[4])
MINLINE float normalize_v3(float r[3])
MINLINE void sub_v3_v3v3(float r[3], const float a[3], const float b[3])
MINLINE void cross_v3_v3v3(float r[3], const float a[3], const float b[3])
struct Depsgraph Depsgraph
struct Scene * DEG_get_input_scene(const Depsgraph *graph)
struct Object * DEG_get_evaluated_object(const struct Depsgraph *depsgraph, struct Object *object)
struct Scene * DEG_get_evaluated_scene(const struct Depsgraph *graph)
@ eModifierMode_DisableTemporary
Object is a sort of wrapper for general info.
Read Guarded memory(de)allocation.
#define BM_FACE_FIRST_LOOP(p)
#define BM_elem_index_get(ele)
#define BM_elem_flag_disable(ele, hflag)
#define BM_elem_index_set(ele, index)
#define BM_elem_flag_test(ele, hflag)
#define BM_elem_flag_enable(ele, hflag)
#define BM_ITER_MESH(ele, iter, bm, itype)
#define BM_ITER_MESH_INDEX(ele, iter, bm, itype, indexvar)
ATTR_WARN_UNUSED_RESULT const BMVert * v
int BKE_crazyspace_get_first_deform_matrices_editbmesh(struct Depsgraph *depsgraph, Scene *scene, Object *ob, BMEditMesh *em, float(**deformmats)[3][3], float(**deformcos)[3])
static bool modifiers_disable_subsurf_temporary(struct Scene *scene, Object *ob)
int BKE_sculpt_get_first_deform_matrices(struct Depsgraph *depsgraph, Scene *scene, Object *object, float(**deformmats)[3][3], float(**deformcos)[3])
BLI_INLINE void tan_calc_quat_v3(float r_quat[4], const float co_1[3], const float co_2[3], const float co_3[3])
float(* BKE_crazyspace_get_mapped_editverts(struct Depsgraph *depsgraph, Object *obedit))[3]
static void set_crazy_vertex_quat(float r_quat[4], const float co_1[3], const float co_2[3], const float co_3[3], const float vd_1[3], const float vd_2[3], const float vd_3[3])
void BKE_crazyspace_build_sculpt(struct Depsgraph *depsgraph, Scene *scene, Object *object, float(**deformmats)[3][3], float(**deformcos)[3])
static bool crazyspace_modifier_supports_deform(ModifierData *md)
void BKE_crazyspace_set_quats_mesh(Mesh *me, float(*origcos)[3], float(*mappedcos)[3], float(*quats)[4])
void BKE_crazyspace_set_quats_editmesh(BMEditMesh *em, float(*origcos)[3], float(*mappedcos)[3], float(*quats)[4], const bool use_select)
static void crazyspace_init_verts_and_matrices(const Mesh *mesh, float(**deformmats)[3][3], float(**deformcos)[3])
static void crazyspace_init_object_for_eval(struct Depsgraph *depsgraph, Object *object, Object *object_crazy)
static bool crazyspace_modifier_supports_deform_matrices(ModifierData *md)
const Depsgraph * depsgraph
void(* MEM_freeN)(void *vmemh)
void *(* MEM_dupallocN)(const void *vmemh)
void *(* MEM_callocN)(size_t len, const char *str)
void *(* MEM_mallocN)(size_t len, const char *str)
struct CustomData_MeshMasks mask
struct BMEditMesh * edit_mesh
struct ModifierData * next
void(* deformVerts)(struct ModifierData *md, const struct ModifierEvalContext *ctx, struct Mesh *mesh, float(*vertexCos)[3], int numVerts)
void(* deformMatrices)(struct ModifierData *md, const struct ModifierEvalContext *ctx, struct Mesh *mesh, float(*vertexCos)[3], float(*defMats)[3][3], int numVerts)
void(* deformMatricesEM)(struct ModifierData *md, const struct ModifierEvalContext *ctx, struct BMEditMesh *editData, struct Mesh *mesh, float(*vertexCos)[3], float(*defMats)[3][3], int numVerts)