36#include "RNA_prototypes.hh"
74 float (*vertexCos_Real)[3],
77 const bool use_factor = mcmd->
factor < 1.0f;
78 int influence_group_index;
82 float (*vertexCos_Store)[3] = (use_factor || influence_group_index != -1 ||
86 float (*vertexCos)[3] = vertexCos_Store ? vertexCos_Store : vertexCos_Real;
88 const float fps = scene->frames_per_second();
91 const char *err_str =
nullptr;
145 switch (mcmd->
type) {
148 filepath, vertexCos, verts_num, mcmd->
interp, time, fps, mcmd->
time_mode, &err_str);
152 filepath, vertexCos, verts_num, mcmd->
interp, time, fps, mcmd->
time_mode, &err_str);
162 Mesh *mesh =
static_cast<Mesh *
>(ob->data);
178 mesh->face_offsets().data(),
180 mesh->corner_verts().data(),
183 reinterpret_cast<const float (*)[3]
>(mesh->vert_positions().data()),
185 const_cast<const float (*)[3]
>(vertexCos_Real),
187 const_cast<const float (*)[3]
>(vertexCos),
192 memcpy(vertexCos, vertexCos_New,
sizeof(*vertexCos) * verts_num);
204 bool use_matrix =
false;
231 for (
i = 0;
i < verts_num;
i++) {
237 if (vertexCos_Store) {
239 if (influence_group_index != -1) {
246 if (!mesh->deform_verts().is_empty()) {
247 for (
int i = 0;
i < verts_num;
i++) {
251 const float local_vertex_fac = global_offset +
253 influence_group_index) *
256 vertexCos_Real[
i], vertexCos_Real[
i], vertexCos_Store[
i], local_vertex_fac);
260 else if (use_factor) {
265 memcpy(vertexCos_Real, vertexCos_Store,
sizeof(*vertexCos_Store) * verts_num);
285 reinterpret_cast<float (*)[3]
>(positions.
data()),
356 row->
prop(
ptr, prop, 0, 0, toggles_flag,
IFACE_(
"X"), ICON_NONE);
357 row->
prop(
ptr, prop, 1, 0, toggles_flag,
IFACE_(
"Y"), ICON_NONE);
358 row->
prop(
ptr, prop, 2, 0, toggles_flag,
IFACE_(
"Z"), ICON_NONE);
378 "MeshCacheModifierData",
380 &RNA_MeshCacheModifier,
void BKE_mesh_calc_relative_deform(const int *face_offsets, int faces_num, const int *corner_verts, int totvert, const float(*vert_cos_src)[3], const float(*vert_cos_dst)[3], const float(*vert_cos_org)[3], float(*vert_cos_new)[3])
void BKE_modifier_copydata_generic(const ModifierData *md, ModifierData *md_dst, int flag)
@ eModifierTypeFlag_AcceptsCVs
@ eModifierTypeFlag_SupportsEditmode
@ eModifierTypeFlag_AcceptsVertexCosOnly
void BKE_modifier_set_error(const Object *ob, ModifierData *md, const char *format,...) ATTR_PRINTF_FORMAT(3
float BKE_scene_ctime_get(const Scene *scene)
void mul_m3_v3(const float M[3][3], float r[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])
bool mat3_from_axis_conversion(int src_forward, int src_up, int dst_forward, int dst_up, float r_mat[3][3])
void interp_v3_v3v3(float r[3], const float a[3], const float b[3], float t)
void interp_vn_vn(float *array_tar, const float *array_src, float t, int size)
bool BLI_path_abs(char path[FILE_MAX], const char *basepath) ATTR_NONNULL(1
char * STRNCPY(char(&dst)[N], const char *src)
#define MEMCMP_STRUCT_AFTER_IS_ZERO(struct_var, member)
#define MEMCPY_STRUCT_AFTER(struct_dst, struct_src, member)
Scene * DEG_get_evaluated_scene(const Depsgraph *graph)
#define ID_BLEND_PATH_FROM_GLOBAL(_id)
#define DNA_struct_default_get(struct_name)
@ MOD_MESHCACHE_INVERT_VERTEX_GROUP
@ MOD_MESHCACHE_FLIP_AXIS_Z
@ MOD_MESHCACHE_FLIP_AXIS_X
@ MOD_MESHCACHE_FLIP_AXIS_Y
@ MOD_MESHCACHE_DEFORM_INTEGRATE
@ MOD_MESHCACHE_PLAY_CFEA
@ MOD_MESHCACHE_TIME_FRAME
@ MOD_MESHCACHE_TIME_FACTOR
@ MOD_MESHCACHE_TIME_SECONDS
@ eModifierType_MeshCache
Object is a sort of wrapper for general info.
Read Guarded memory(de)allocation.
static void init_data(ModifierData *md)
static void deform_verts(ModifierData *md, const ModifierEvalContext *ctx, Mesh *mesh, blender::MutableSpan< blender::float3 > positions)
static void panel_register(ARegionType *region_type)
static void panel_draw(const bContext *, Panel *panel)
static bool depends_on_time(Scene *, ModifierData *)
static void init_data(ModifierData *md)
static void deform_verts(ModifierData *md, const ModifierEvalContext *ctx, Mesh *mesh, blender::MutableSpan< blender::float3 > positions)
static void panel_register(ARegionType *region_type)
static void time_remapping_panel_draw(const bContext *, Panel *panel)
static void meshcache_do(MeshCacheModifierData *mcmd, Scene *scene, Object *ob, Mesh *mesh, float(*vertexCos_Real)[3], int verts_num)
ModifierTypeInfo modifierType_MeshCache
static bool depends_on_time(Scene *, ModifierData *md)
static void axis_mapping_panel_draw(const bContext *, Panel *panel)
static void panel_draw(const bContext *, Panel *panel)
bool MOD_meshcache_read_mdd_times(const char *filepath, float(*vertexCos)[3], const int verts_tot, const char interp, const float time, const float fps, const char time_mode, const char **r_err_str)
bool MOD_meshcache_read_pc2_times(const char *filepath, float(*vertexCos)[3], const int verts_tot, const char interp, const float time, const float fps, const char time_mode, const char **r_err_str)
void modifier_vgroup_ui(uiLayout *layout, PointerRNA *ptr, PointerRNA *ob_ptr, const StringRefNull vgroup_prop, const std::optional< StringRefNull > invert_vgroup_prop, const std::optional< StringRefNull > text)
PanelType * modifier_subpanel_register(ARegionType *region_type, const char *name, const char *label, PanelDrawFn draw_header, PanelDrawFn draw, PanelType *parent)
PanelType * modifier_panel_register(ARegionType *region_type, ModifierType type, PanelDrawFn draw)
PointerRNA * modifier_panel_get_property_pointers(Panel *panel, PointerRNA *r_ob_ptr)
void modifier_error_message_draw(uiLayout *layout, PointerRNA *ptr)
void MOD_get_vgroup(const Object *ob, const Mesh *mesh, const char *name, const MDeformVert **dvert, int *defgrp_index)
@ UI_ITEM_R_FORCE_BLANK_DECORATE
constexpr int64_t size() const
constexpr T * data() const
void * MEM_malloc_arrayN(size_t len, size_t size, const char *str)
void MEM_freeN(void *vmemh)
PropertyRNA * RNA_struct_find_property(PointerRNA *ptr, const char *identifier)
int RNA_enum_get(PointerRNA *ptr, const char *name)
uiLayout & column(bool align)
void use_property_split_set(bool value)
void prop(PointerRNA *ptr, PropertyRNA *prop, int index, int value, eUI_Item_Flag flag, std::optional< blender::StringRef > name_opt, int icon, std::optional< blender::StringRef > placeholder=std::nullopt)