Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/io/alembic/exporter/abc_writer_abstract.cc')
-rw-r--r--source/blender/io/alembic/exporter/abc_writer_abstract.cc41
1 files changed, 41 insertions, 0 deletions
diff --git a/source/blender/io/alembic/exporter/abc_writer_abstract.cc b/source/blender/io/alembic/exporter/abc_writer_abstract.cc
index 0b08d8c4e58..e99048cc0ee 100644
--- a/source/blender/io/alembic/exporter/abc_writer_abstract.cc
+++ b/source/blender/io/alembic/exporter/abc_writer_abstract.cc
@@ -59,6 +59,7 @@ void ABCAbstractWriter::write(HierarchyContext &context)
if (!frame_has_been_written_) {
is_animated_ = (args_.export_params->frame_start != args_.export_params->frame_end) &&
check_is_animated(context);
+ ensure_custom_properties_exporter(context);
}
else if (!is_animated_) {
/* A frame has already been written, and without animation one frame is enough. */
@@ -67,9 +68,49 @@ void ABCAbstractWriter::write(HierarchyContext &context)
do_write(context);
+ if (custom_props_) {
+ custom_props_->write_all(get_id_properties(context));
+ }
+
frame_has_been_written_ = true;
}
+void ABCAbstractWriter::ensure_custom_properties_exporter(const HierarchyContext &context)
+{
+ if (!args_.export_params->export_custom_properties) {
+ return;
+ }
+
+ if (custom_props_) {
+ /* Custom properties exporter already created. */
+ return;
+ }
+
+ /* Avoid creating a custom properties exporter if there are no custom properties to export. */
+ const IDProperty *id_properties = get_id_properties(context);
+ if (id_properties == nullptr || id_properties->len == 0) {
+ return;
+ }
+
+ custom_props_ = std::make_unique<CustomPropertiesExporter>(this);
+}
+
+const IDProperty *ABCAbstractWriter::get_id_properties(const HierarchyContext &context) const
+{
+ Object *object = context.object;
+ if (object->data == nullptr) {
+ return nullptr;
+ }
+
+ /* Most subclasses write object data, so default to the object data's ID properties. */
+ return static_cast<ID *>(object->data)->properties;
+}
+
+uint32_t ABCAbstractWriter::timesample_index() const
+{
+ return timesample_index_;
+}
+
const Imath::Box3d &ABCAbstractWriter::bounding_box() const
{
return bounding_box_;