Changeset View
Changeset View
Standalone View
Standalone View
source/blender/alembic/intern/alembic_capi.cc
| Show First 20 Lines • Show All 931 Lines • ▼ Show 20 Lines | void ABC_get_transform(CacheReader *reader, float r_mat[4][4], float time, float scale) | ||||
| AbcObjectReader *abc_reader = reinterpret_cast<AbcObjectReader *>(reader); | AbcObjectReader *abc_reader = reinterpret_cast<AbcObjectReader *>(reader); | ||||
| bool is_constant = false; | bool is_constant = false; | ||||
| abc_reader->read_matrix(r_mat, time, scale, is_constant); | abc_reader->read_matrix(r_mat, time, scale, is_constant); | ||||
| } | } | ||||
| /* ************************************************************************** */ | /* ************************************************************************** */ | ||||
| Mesh *ABC_read_mesh(CacheReader *reader, | static AbcObjectReader *get_abc_reader(CacheReader *reader, Object *ob, const char **err_str) | ||||
| Object *ob, | |||||
| Mesh *existing_mesh, | |||||
| const float time, | |||||
| const char **err_str, | |||||
| int read_flag) | |||||
| { | { | ||||
| AbcObjectReader *abc_reader = reinterpret_cast<AbcObjectReader *>(reader); | AbcObjectReader *abc_reader = reinterpret_cast<AbcObjectReader *>(reader); | ||||
| IObject iobject = abc_reader->iobject(); | IObject iobject = abc_reader->iobject(); | ||||
| if (!iobject.valid()) { | if (!iobject.valid()) { | ||||
| *err_str = "Invalid object: verify object path"; | *err_str = "Invalid object: verify object path"; | ||||
| return NULL; | return NULL; | ||||
| } | } | ||||
| const ObjectHeader &header = iobject.getHeader(); | const ObjectHeader &header = iobject.getHeader(); | ||||
| if (!abc_reader->accepts_object_type(header, ob, err_str)) { | if (!abc_reader->accepts_object_type(header, ob, err_str)) { | ||||
| /* err_str is set by acceptsObjectType() */ | /* err_str is set by acceptsObjectType() */ | ||||
| return NULL; | return NULL; | ||||
| } | } | ||||
| return abc_reader; | |||||
| } | |||||
| static ISampleSelector sample_selector_for_time(float time) | |||||
| { | |||||
| /* kFloorIndex is used to be compatible with non-interpolating | /* kFloorIndex is used to be compatible with non-interpolating | ||||
| * properties; they use the floor. */ | * properties; they use the floor. */ | ||||
| ISampleSelector sample_sel(time, ISampleSelector::kFloorIndex); | return ISampleSelector(time, ISampleSelector::kFloorIndex); | ||||
| } | |||||
| Mesh *ABC_read_mesh(CacheReader *reader, | |||||
| Object *ob, | |||||
| Mesh *existing_mesh, | |||||
| const float time, | |||||
| const char **err_str, | |||||
| int read_flag) | |||||
| { | |||||
| AbcObjectReader *abc_reader = get_abc_reader(reader, ob, err_str); | |||||
| if (abc_reader == NULL) { | |||||
| return NULL; | |||||
| } | |||||
| ISampleSelector sample_sel = sample_selector_for_time(time); | |||||
| return abc_reader->read_mesh(existing_mesh, sample_sel, read_flag, err_str); | return abc_reader->read_mesh(existing_mesh, sample_sel, read_flag, err_str); | ||||
| } | } | ||||
| bool ABC_mesh_topology_changed( | |||||
| CacheReader *reader, Object *ob, Mesh *existing_mesh, const float time, const char **err_str) | |||||
| { | |||||
| AbcObjectReader *abc_reader = get_abc_reader(reader, ob, err_str); | |||||
| if (abc_reader == NULL) { | |||||
| return NULL; | |||||
| } | |||||
| ISampleSelector sample_sel = sample_selector_for_time(time); | |||||
| return abc_reader->topology_changed(existing_mesh, sample_sel); | |||||
| } | |||||
| /* ************************************************************************** */ | /* ************************************************************************** */ | ||||
| void CacheReader_free(CacheReader *reader) | void CacheReader_free(CacheReader *reader) | ||||
| { | { | ||||
| AbcObjectReader *abc_reader = reinterpret_cast<AbcObjectReader *>(reader); | AbcObjectReader *abc_reader = reinterpret_cast<AbcObjectReader *>(reader); | ||||
| abc_reader->decref(); | abc_reader->decref(); | ||||
| if (abc_reader->refcount() == 0) { | if (abc_reader->refcount() == 0) { | ||||
| ▲ Show 20 Lines • Show All 43 Lines • Show Last 20 Lines | |||||