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
This commit is contained in:
parent
0ae7883d7d
commit
0d744cf673
|
@ -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);
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue