Alembic: clean up exporter metadata code
authorSybren A. Stüvel <sybren@blender.org>
Tue, 19 Nov 2019 11:45:43 +0000 (12:45 +0100)
committerSybren A. Stüvel <sybren@blender.org>
Wed, 20 Nov 2019 09:26:59 +0000 (10:26 +0100)
The Alembic file metadata object was created in one place, a bit of
metadata was added, then it was passed along with other properties which
were then injected as metadata in another function. This is now cleaned up.

No functional changes.

source/blender/alembic/intern/abc_archive.cc
source/blender/alembic/intern/abc_archive.h
source/blender/alembic/intern/abc_exporter.cc

index bb527c23b2076c87ffabf242286634668b74677a..15e7efad1c3d2c0ac558006ca929a83a3fcd092a 100644 (file)
@@ -28,6 +28,8 @@ extern "C" {
 
 #include "BLI_path_util.h"
 #include "BLI_string.h"
+
+#include "DNA_scene_types.h"
 }
 
 #ifdef WIN32
@@ -147,12 +149,15 @@ Alembic::Abc::IObject ArchiveReader::getTop()
 static OArchive create_archive(std::ostream *ostream,
                                const std::string &filename,
                                const std::string &scene_name,
-                               Alembic::Abc::MetaData &md,
+                               double scene_fps,
                                bool ogawa)
 {
-  md.set(Alembic::Abc::kApplicationNameKey, "Blender");
-  md.set(Alembic::Abc::kUserDescriptionKey, scene_name);
-  md.set("blender_version", versionstr);
+  Alembic::Abc::MetaData abc_metadata;
+
+  abc_metadata.set(Alembic::Abc::kApplicationNameKey, "Blender");
+  abc_metadata.set(Alembic::Abc::kUserDescriptionKey, scene_name);
+  abc_metadata.set("blender_version", versionstr);
+  abc_metadata.set("FramesPerTimeUnit", std::to_string(scene_fps));
 
   time_t raw_time;
   time(&raw_time);
@@ -169,13 +174,13 @@ static OArchive create_archive(std::ostream *ostream,
     buffer[buffer_len - 1] = '\0';
   }
 
-  md.set(Alembic::Abc::kDateWrittenKey, buffer);
+  abc_metadata.set(Alembic::Abc::kDateWrittenKey, buffer);
 
   ErrorHandler::Policy policy = ErrorHandler::kThrowPolicy;
 
 #ifdef WITH_ALEMBIC_HDF5
   if (!ogawa) {
-    return OArchive(Alembic::AbcCoreHDF5::WriteArchive(), filename, md, policy);
+    return OArchive(Alembic::AbcCoreHDF5::WriteArchive(), filename, abc_metadata, policy);
   }
 #else
   static_cast<void>(filename);
@@ -183,13 +188,13 @@ static OArchive create_archive(std::ostream *ostream,
 #endif
 
   Alembic::AbcCoreOgawa::WriteArchive archive_writer;
-  return OArchive(archive_writer(ostream, md), kWrapExisting, policy);
+  return OArchive(archive_writer(ostream, abc_metadata), kWrapExisting, policy);
 }
 
 ArchiveWriter::ArchiveWriter(const char *filename,
-                             const char *scene,
-                             bool do_ogawa,
-                             Alembic::Abc::MetaData &md)
+                             const std::string &abc_scene_name,
+                             const Scene *scene,
+                             bool do_ogawa)
 {
   /* Use stream to support unicode character paths on Windows. */
   if (do_ogawa) {
@@ -203,7 +208,7 @@ ArchiveWriter::ArchiveWriter(const char *filename,
 #endif
   }
 
-  m_archive = create_archive(&m_outfile, filename, scene, md, do_ogawa);
+  m_archive = create_archive(&m_outfile, filename, abc_scene_name, FPS, do_ogawa);
 }
 
 OArchive &ArchiveWriter::archive()
index a64de742cdff4c293204b2c74e24d9a94ed8716e..32b1b72747fb367a76caafe3733ff25bbde4e56c 100644 (file)
@@ -35,6 +35,7 @@
 #include <fstream>
 
 struct Main;
+struct Scene;
 
 /* Wrappers around input and output archives. The goal is to be able to use
  * streams so that unicode paths work on Windows (T49112), and to make sure that
@@ -68,10 +69,10 @@ class ArchiveWriter {
   Alembic::Abc::OArchive m_archive;
 
  public:
-  explicit ArchiveWriter(const char *filename,
-                         const char *scene,
-                         bool do_ogawa,
-                         Alembic::Abc::MetaData &md);
+  ArchiveWriter(const char *filename,
+                const std::string &abc_scene_name,
+                const Scene *scene,
+                bool do_ogawa);
 
   Alembic::Abc::OArchive &archive();
 };
index a69178281ff44aeffee22556d76985e15cd2dd55..cbc8fd769b7b3bdbfb47ef3dfc4ce0ae62852468 100644 (file)
@@ -266,27 +266,19 @@ void AbcExporter::getFrameSet(unsigned int nr_of_samples, std::set<double> &fram
 
 void AbcExporter::operator()(short *do_update, float *progress, bool *was_canceled)
 {
-  std::string scene_name;
+  std::string abc_scene_name;
 
   if (m_bmain->name[0] != '\0') {
     char scene_file_name[FILE_MAX];
     BLI_strncpy(scene_file_name, m_bmain->name, FILE_MAX);
-    scene_name = scene_file_name;
+    abc_scene_name = scene_file_name;
   }
   else {
-    scene_name = "untitled";
+    abc_scene_name = "untitled";
   }
 
-  Scene *scene = m_settings.scene;
-  const double fps = FPS;
-  char buf[16];
-  snprintf(buf, 15, "%f", fps);
-  const std::string str_fps = buf;
-
-  Alembic::AbcCoreAbstract::MetaData md;
-  md.set("FramesPerTimeUnit", str_fps);
-
-  m_writer = new ArchiveWriter(m_filename, scene_name.c_str(), m_settings.export_ogawa, md);
+  m_writer = new ArchiveWriter(
+      m_filename, abc_scene_name, m_settings.scene, m_settings.export_ogawa);
 
   /* Create time samplings for transforms and shapes. */