[Bf-blender-cvs] [0d744cf673e] master: Alembic: export object data with object data name

Sybren A. Stüvel noreply at git.blender.org
Fri Jun 19 10:22:12 CEST 2020


Commit: 0d744cf673e893bd1e44fa7fd91e916935a3ff45
Author: Sybren A. Stüvel
Date:   Thu Jun 18 18:10:19 2020 +0200
Branches: master
https://developer.blender.org/rB0d744cf673e893bd1e44fa7fd91e916935a3ff45

Alembic: export object data with object data name

Previously the Alembic exporter exported a mesh object to
`{object.name}/{object.name}Shape`. Now it exports to
`{object.name}/{mesh.name}` instead. The same change also applies to
other object data types.

Note that the code now is a bit hackish, as `m_name` is set even in
cases where it isn't used. This hackishness was already there, though,
but it's now just more visible. This will all be cleaned up when the
Alembic exporter is ported to use the `AbstractHierarchyImporter`
structure of the Universal Scene Description (USD) exporter.

Reviewed By: mont29

Differential Revision: https://developer.blender.org/D7672

===================================================================

M	source/blender/io/alembic/intern/abc_writer_object.cc
M	tests/python/alembic_tests.py

===================================================================

diff --git a/source/blender/io/alembic/intern/abc_writer_object.cc b/source/blender/io/alembic/intern/abc_writer_object.cc
index f4a3587f54d..3d280d9f0a4 100644
--- a/source/blender/io/alembic/intern/abc_writer_object.cc
+++ b/source/blender/io/alembic/intern/abc_writer_object.cc
@@ -30,7 +30,17 @@ AbcObjectWriter::AbcObjectWriter(Object *ob,
                                  AbcObjectWriter *parent)
     : m_object(ob), m_settings(settings), m_time_sampling(time_sampling), m_first_frame(true)
 {
-  m_name = get_id_name(m_object) + "Shape";
+  /* This class is used as superclass for objects themselves (i.e. transforms) and for object
+   * data (meshes, curves, cameras, etc.). However, when writing transforms, the m_name field is
+   * ignored. This is a temporary tweak to get the exporter to write object data with the data
+   * name instead of the object name in a safe way. */
+  if (m_object->data == nullptr) {
+    m_name = get_id_name(m_object);
+  }
+  else {
+    ID *ob_data = static_cast<ID *>(m_object->data);
+    m_name = get_id_name(ob_data);
+  }
 
   if (parent) {
     parent->addChild(this);
diff --git a/tests/python/alembic_tests.py b/tests/python/alembic_tests.py
index 2d477c5a6f0..fbb9496c9df 100644
--- a/tests/python/alembic_tests.py
+++ b/tests/python/alembic_tests.py
@@ -253,10 +253,10 @@ class CurveExportTest(AbstractAlembicTest):
         self.run_blender('single-curve.blend', script)
 
         # Now check the resulting Alembic file.
-        abcprop = self.abcprop(abc, '/NurbsCurve/NurbsCurveShape/.geom')
+        abcprop = self.abcprop(abc, '/NurbsCurve/CurveData/.geom')
         self.assertEqual(abcprop['.orders'], [4])
 
-        abcprop = self.abcprop(abc, '/NurbsCurve/NurbsCurveShape/.geom/.userProperties')
+        abcprop = self.abcprop(abc, '/NurbsCurve/CurveData/.geom/.userProperties')
         self.assertEqual(abcprop['blender:resolution'], 10)
 
 
@@ -286,7 +286,7 @@ class HairParticlesExportTest(AbstractAlembicTest):
         abcprop = self.abcprop(abc, '/Suzanne/Non-hair particle system/.geom')
         self.assertIn('.velocities', abcprop)
 
-        abcprop = self.abcprop(abc, '/Suzanne/SuzanneShape/.geom')
+        abcprop = self.abcprop(abc, '/Suzanne/MonkeyMesh/.geom')
         self.assertIn('.faceIndices', abcprop)
 
     @with_tempdir
@@ -299,7 +299,7 @@ class HairParticlesExportTest(AbstractAlembicTest):
         self.assertRaises(AbcPropError, self.abcprop, abc,
                           '/Suzanne/Non-hair particle system/.geom')
 
-        abcprop = self.abcprop(abc, '/Suzanne/SuzanneShape/.geom')
+        abcprop = self.abcprop(abc, '/Suzanne/MonkeyMesh/.geom')
         self.assertIn('.faceIndices', abcprop)
 
     @with_tempdir
@@ -311,7 +311,7 @@ class HairParticlesExportTest(AbstractAlembicTest):
         abcprop = self.abcprop(abc, '/Suzanne/Non-hair particle system/.geom')
         self.assertIn('.velocities', abcprop)
 
-        abcprop = self.abcprop(abc, '/Suzanne/SuzanneShape/.geom')
+        abcprop = self.abcprop(abc, '/Suzanne/MonkeyMesh/.geom')
         self.assertIn('.faceIndices', abcprop)
 
     @with_tempdir
@@ -322,7 +322,7 @@ class HairParticlesExportTest(AbstractAlembicTest):
         self.assertRaises(AbcPropError, self.abcprop, abc,
                           '/Suzanne/Non-hair particle system/.geom')
 
-        abcprop = self.abcprop(abc, '/Suzanne/SuzanneShape/.geom')
+        abcprop = self.abcprop(abc, '/Suzanne/MonkeyMesh/.geom')
         self.assertIn('.faceIndices', abcprop)
 
 
@@ -342,7 +342,7 @@ class UVMapExportTest(AbstractAlembicTest):
         self.maxDiff = 1000
 
         # The main UV map should be written to .geom
-        abcprop = self.abcprop(abc, '/Cube/CubeShape/.geom/uv')
+        abcprop = self.abcprop(abc, '/Cube/Cube/.geom/uv')
         self.assertEqual(abcprop['.vals'], [
             [0.625, 0.75],
             [0.875, 0.75],
@@ -361,7 +361,7 @@ class UVMapExportTest(AbstractAlembicTest):
         ])
 
         # The second UV map should be written to .arbGeomParams
-        abcprop = self.abcprop(abc, '/Cube/CubeShape/.geom/.arbGeomParams/Secondary')
+        abcprop = self.abcprop(abc, '/Cube/Cube/.geom/.arbGeomParams/Secondary')
         self.assertEqual(abcprop['.vals'], [
             [0.75, 0.375],
             [0.75, 0.125],
@@ -465,7 +465,7 @@ class LongNamesExportTest(AbstractAlembicTest):
             0.0, 3.0, 0.0, 1.0,
         ])
 
-        abcprop = self.abcprop(abc, '%s/CubeShape/.geom' % name)
+        abcprop = self.abcprop(abc, '%s/Cube/.geom' % name)
         self.assertIn('.faceCounts', abcprop)



More information about the Bf-blender-cvs mailing list