[Bf-blender-cvs] [075a2cd] alembic_basic_io: Also build transforms with no children as empties.

Kévin Dietrich noreply at git.blender.org
Tue May 31 01:51:08 CEST 2016


Commit: 075a2cd560462217c6046c8abe20b9113ad59ef3
Author: Kévin Dietrich
Date:   Mon May 30 18:24:47 2016 +0200
Branches: alembic_basic_io
https://developer.blender.org/rB075a2cd560462217c6046c8abe20b9113ad59ef3

Also build transforms with no children as empties.

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

M	source/blender/alembic/intern/abc_mesh.cc
M	source/blender/alembic/intern/abc_object.cc
M	source/blender/alembic/intern/abc_object.h
M	source/blender/alembic/intern/alembic_capi.cc

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

diff --git a/source/blender/alembic/intern/abc_mesh.cc b/source/blender/alembic/intern/abc_mesh.cc
index b4b7b85..ffe7482 100644
--- a/source/blender/alembic/intern/abc_mesh.cc
+++ b/source/blender/alembic/intern/abc_mesh.cc
@@ -1295,7 +1295,7 @@ void AbcMeshReader::readFaceSetsSample(Main *bmain, Mesh *mesh, size_t poly_star
 /* ***************************** AbcEmptyReader ***************************** */
 
 AbcEmptyReader::AbcEmptyReader(const Alembic::Abc::IObject &object, ImportSettings &settings)
-    : AbcObjectReader(object, settings)
+    : AbcObjectReader(object, settings, false)
 {}
 
 bool AbcEmptyReader::valid() const
diff --git a/source/blender/alembic/intern/abc_object.cc b/source/blender/alembic/intern/abc_object.cc
index 848dc71..8664dcb 100644
--- a/source/blender/alembic/intern/abc_object.cc
+++ b/source/blender/alembic/intern/abc_object.cc
@@ -306,7 +306,7 @@ bool AbcObjectWriter::getPropertyValue(ID *id, const std::string &name, double &
 
 /* ****************************** object reader ***************************** */
 
-AbcObjectReader::AbcObjectReader(const IObject &object, ImportSettings &settings)
+AbcObjectReader::AbcObjectReader(const IObject &object, ImportSettings &settings, bool has_data)
     : m_name("")
     , m_object_name("")
     , m_data_name("")
@@ -318,10 +318,15 @@ AbcObjectReader::AbcObjectReader(const IObject &object, ImportSettings &settings
 	std::vector<std::string> parts;
 	split(m_name, '/', parts);
 
-	assert(parts.size() >= 2);
+	if (has_data) {
+		assert(parts.size() >= 2);
 
-	m_object_name = parts[parts.size() - 2];
-	m_data_name = parts[parts.size() - 1];
+		m_object_name = parts[parts.size() - 2];
+		m_data_name = parts[parts.size() - 1];
+	}
+	else {
+		m_object_name = m_data_name = parts[parts.size() - 1];
+	}
 }
 
 AbcObjectReader::~AbcObjectReader()
diff --git a/source/blender/alembic/intern/abc_object.h b/source/blender/alembic/intern/abc_object.h
index 4afcee8..2062a10 100644
--- a/source/blender/alembic/intern/abc_object.h
+++ b/source/blender/alembic/intern/abc_object.h
@@ -92,7 +92,7 @@ protected:
 	ImportSettings *m_settings;
 
 public:
-	explicit AbcObjectReader(const Alembic::Abc::IObject &object, ImportSettings &settings);
+	explicit AbcObjectReader(const Alembic::Abc::IObject &object, ImportSettings &settings, bool has_data = true);
 
 	virtual ~AbcObjectReader();
 
diff --git a/source/blender/alembic/intern/alembic_capi.cc b/source/blender/alembic/intern/alembic_capi.cc
index 6a1d13b..a14f657 100644
--- a/source/blender/alembic/intern/alembic_capi.cc
+++ b/source/blender/alembic/intern/alembic_capi.cc
@@ -376,7 +376,7 @@ static void visit_object(const IObject &object,
 		const MetaData &md = child.getMetaData();
 
 		if (IXform::matches(md)) {
-			if (is_locator(child)) {
+			if (is_locator(child) || child.getNumChildren() == 0) {
 				reader = new AbcEmptyReader(child, settings);
 			}
 		}
@@ -449,9 +449,9 @@ static void create_hierarchy(Main *bmain, Scene *scene, AbcObjectReader *root)
 	std::vector<std::string> parts;
 	split(full_name, '/', parts);
 
-	/* object doesn't have any parents, since its path only contain its name,
-	 * and its data name. */
-	if (parts.size() == 2) {
+	/* Either object doesn't have any parents, since its path only contain its name,
+	 * and its data name, or is an empty with no parents. */
+	if (parts.size() == 2 || parts.size() == 1) {
 		return;
 	}




More information about the Bf-blender-cvs mailing list