37#include "RNA_prototypes.hh"
47#if defined(WITH_USD) || defined(WITH_ALEMBIC)
105#if defined(WITH_USD) || defined(WITH_ALEMBIC)
113 const double frame_offset,
114 const double time_offset,
115 const char **r_err_str)
123 switch (cache_file->
type) {
134 mcmd->
reader, ctx->
object, mesh, frame_offset, r_err_str))
172#if defined(WITH_USD) || defined(WITH_ALEMBIC)
180 const char *err_str =
nullptr;
187 ctx->
object, md,
"Could not create cache reader for file %s", cache_file->
filepath);
194 if (can_use_mesh_for_orco_evaluation(mcmd, ctx, mesh, frame_offset, time_offset, &err_str)) {
202 Mesh *bbox =
nullptr;
205 bbox = generate_bounding_box_mesh(mesh->bounds_min_max(), mesh->
mat, mesh->
totcol);
209 bbox = generate_bounding_box_mesh(
210 pointcloud->bounds_min_max(), pointcloud->
mat, pointcloud->
totcol);
222 velocity_scale *=
FPS;
226 switch (cache_file->
type) {
230 params.time = time_offset;
233 params.velocity_scale = velocity_scale;
263#if defined(WITH_USD) || defined(WITH_ALEMBIC)
269 Mesh *org_mesh = mesh;
276 const char *err_str =
nullptr;
283 ctx->
object, md,
"Could not create reader for file %s", cache_file->
filepath);
291 return generate_bounding_box_mesh(org_mesh->bounds_min_max(), org_mesh->
mat, org_mesh->
totcol);
296 if (can_use_mesh_for_orco_evaluation(mcmd, ctx, mesh, frame_offset, time_offset, &err_str)) {
300 if (object_mesh !=
nullptr) {
301 const Span<float3> mesh_positions = mesh->vert_positions();
304 const Span<float3> me_positions = object_mesh->vert_positions();
311 if ((me_positions.
data() == mesh_positions.
data()) || (me_edges.
data() == mesh_edges.
data()) ||
312 (me_faces.
data() == mesh_faces.
data()))
315 mesh =
reinterpret_cast<Mesh *
>(
329 if (!
ELEM(
result,
nullptr, mesh) && (mesh != org_mesh)) {
343#if defined(WITH_USD) || defined(WITH_ALEMBIC)
385 if (has_cache_file) {
387 layout,
ptr,
"object_path", &cache_file_ptr,
"object_paths", std::nullopt, ICON_NONE);
496 N_(
"MeshSequenceCache"),
497 "MeshSeqCacheModifierData",
499 &RNA_MeshSequenceCacheModifier,
bool ABC_mesh_topology_changed(struct CacheReader *reader, struct Object *ob, const struct Mesh *existing_mesh, double time, const char **r_err_str)
bool BKE_cache_file_uses_render_procedural(const CacheFile *cache_file, Scene *scene)
void BKE_cachefile_reader_free(CacheFile *cache_file, CacheReader **reader)
double BKE_cachefile_time_offset(const CacheFile *cache_file, double time, double fps)
double BKE_cachefile_frame_offset(const CacheFile *cache_file, double time)
void BKE_cachefile_reader_open(CacheFile *cache_file, CacheReader **reader, Object *object, const char *object_path)
void BKE_id_free(Main *bmain, void *idv)
@ LIB_ID_CREATE_NO_USER_REFCOUNT
@ LIB_ID_CREATE_NO_DEG_TAG
ID * BKE_id_copy_ex(Main *bmain, const ID *id, ID **new_id_p, int flag)
void(*)(void *user_data, Object *ob, ID **idpoin, LibraryForeachIDCallbackFlag cb_flag) IDWalkFunc
void BKE_modifier_copydata_generic(const ModifierData *md, ModifierData *md_dst, int flag)
@ eModifierTypeFlag_AcceptsCVs
@ eModifierTypeFlag_AcceptsMesh
void BKE_modifier_set_error(const Object *ob, ModifierData *md, const char *format,...) ATTR_PRINTF_FORMAT(3
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)
void DEG_add_object_cache_relation(DepsNodeHandle *handle, CacheFile *cache_file, eDepsObjectComponentType component, const char *description)
float DEG_get_ctime(const Depsgraph *graph)
Scene * DEG_get_evaluated_scene(const Depsgraph *graph)
@ CACHEFILE_VELOCITY_UNIT_FRAME
@ CACHE_FILE_TYPE_INVALID
#define DNA_struct_default_get(struct_name)
@ eModifierType_MeshSequenceCache
#define MOD_MESHSEQ_READ_ALL
Object is a sort of wrapper for general info.
Read Guarded memory(de)allocation.
static void init_data(ModifierData *md)
static void panel_register(ARegionType *region_type)
static void blend_read(BlendDataReader *, ModifierData *md)
static void panel_draw(const bContext *, Panel *panel)
static void foreach_ID_link(ModifierData *md, Object *ob, IDWalkFunc walk, void *user_data)
static void copy_data(const ModifierData *md, ModifierData *target, const int flag)
static Mesh * modify_mesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh *mesh)
static void free_data(ModifierData *md)
static bool depends_on_time(Scene *, ModifierData *)
ModifierTypeInfo modifierType_MeshSequenceCache
static void override_layers_panel_draw(const bContext *C, Panel *panel)
static void velocity_panel_draw(const bContext *, Panel *panel)
static Mesh * modify_mesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh *mesh)
static void time_panel_draw(const bContext *, Panel *panel)
static void render_procedural_panel_draw(const bContext *C, Panel *panel)
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 uiTemplateCacheFileProcedural(uiLayout *layout, const bContext *C, PointerRNA *fileptr)
void uiTemplateCacheFileLayers(uiLayout *layout, const bContext *C, PointerRNA *fileptr)
bool uiTemplateCacheFilePointer(PointerRNA *ptr, blender::StringRefNull propname, PointerRNA *r_file_ptr)
void uiTemplateCacheFileVelocity(uiLayout *layout, PointerRNA *fileptr)
void uiTemplateCacheFileTimeSettings(uiLayout *layout, PointerRNA *fileptr)
void uiTemplateCacheFile(uiLayout *layout, const bContext *C, PointerRNA *ptr, blender::StringRefNull propname)
void uiItemPointerR(uiLayout *layout, PointerRNA *ptr, blender::StringRefNull propname, PointerRNA *searchptr, blender::StringRefNull searchpropname, std::optional< blender::StringRefNull > name, int icon)
void uiLayoutSetPropSep(uiLayout *layout, bool is_sep)
void ABC_read_geometry(CacheReader *reader, Object *ob, blender::bke::GeometrySet &geometry_set, const ABCReadParams *params, const char **r_err_str)
constexpr const T * data() const
static void update_depsgraph(tGraphSliderOp *gso)
void * MEM_dupallocN(const void *vmemh)
void mesh_translate(Mesh &mesh, const float3 &translation, bool do_shape_keys)
Mesh * create_cuboid_mesh(const float3 &size, int verts_x, int verts_y, int verts_z, const std::optional< StringRef > &uv_id)
bool USD_mesh_topology_changed(CacheReader *reader, const Object *ob, const Mesh *existing_mesh, const double time, const char **r_err_str)
USDMeshReadParams create_mesh_read_params(const double motion_sample_time, const int read_flags)
void USD_read_geometry(CacheReader *reader, const Object *ob, blender::bke::GeometrySet &geometry_set, const USDMeshReadParams params, const char **r_err_str)
T midpoint(const T &a, const T &b)
static bool depends_on_time(Scene *, ModifierData *md)
static void copy_data(const ModifierData *md, ModifierData *target, const int flag)
static void init_data(ModifierData *md)
static void foreach_ID_link(ModifierData *md, Object *ob, IDWalkFunc walk, void *user_data)
static void panel_draw(const bContext *C, Panel *panel)
static void modify_geometry_set(ModifierData *md, const ModifierEvalContext *ctx, bke::GeometrySet *geometry_set)
static void free_data(ModifierData *md)
static void panel_register(ARegionType *region_type)
static void update_depsgraph(ModifierData *md, const ModifierUpdateDepsgraphContext *ctx)
static void blend_read(BlendDataReader *reader, ModifierData *md)
PointerRNA RNA_pointer_get(PointerRNA *ptr, const char *name)
bool RNA_pointer_is_null(const PointerRNA *ptr)
int RNA_enum_get(PointerRNA *ptr, const char *name)
struct CacheReader * reader
struct CacheFile * cache_file
char reader_object_path[1024]
GeometryComponent & get_component_for_write(GeometryComponent::Type component_type)
bool has_pointcloud() const
static GeometrySet from_mesh(Mesh *mesh, GeometryOwnershipType ownership=GeometryOwnershipType::Owned)
const PointCloud * get_pointcloud() const
const Mesh * get_mesh() const
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)