[Bf-blender-cvs] [b6ba4e7] alembic_basic_io: Partially revert some previous commits:

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


Commit: b6ba4e7067581e728e7c1c8546333f3d3bfefe5d
Author: Kévin Dietrich
Date:   Mon May 30 19:14:29 2016 +0200
Branches: alembic_basic_io
https://developer.blender.org/rBb6ba4e7067581e728e7c1c8546333f3d3bfefe5d

Partially revert some previous commits:

- Avoid double matrix multiplication.
- Also build transforms with no children as empties.

They wery bringing some regressions.

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

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/abc_util.cc
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 ffe7482..b4b7b85 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, false)
+    : AbcObjectReader(object, settings)
 {}
 
 bool AbcEmptyReader::valid() const
diff --git a/source/blender/alembic/intern/abc_object.cc b/source/blender/alembic/intern/abc_object.cc
index 8664dcb..14803cf 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, bool has_data)
+AbcObjectReader::AbcObjectReader(const IObject &object, ImportSettings &settings)
     : m_name("")
     , m_object_name("")
     , m_data_name("")
@@ -318,9 +318,7 @@ AbcObjectReader::AbcObjectReader(const IObject &object, ImportSettings &settings
 	std::vector<std::string> parts;
 	split(m_name, '/', parts);
 
-	if (has_data) {
-		assert(parts.size() >= 2);
-
+	if (parts.size() >= 2) {
 		m_object_name = parts[parts.size() - 2];
 		m_data_name = parts[parts.size() - 1];
 	}
diff --git a/source/blender/alembic/intern/abc_object.h b/source/blender/alembic/intern/abc_object.h
index 2062a10..4afcee8 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, bool has_data = true);
+	explicit AbcObjectReader(const Alembic::Abc::IObject &object, ImportSettings &settings);
 
 	virtual ~AbcObjectReader();
 
diff --git a/source/blender/alembic/intern/abc_util.cc b/source/blender/alembic/intern/abc_util.cc
index 00c401b..e60c354 100644
--- a/source/blender/alembic/intern/abc_util.cc
+++ b/source/blender/alembic/intern/abc_util.cc
@@ -207,10 +207,26 @@ void create_transform_matrix(float r_mat[4][4])
 static void get_matrix(const Alembic::AbcGeom::ISampleSelector &sample_sel,
                        const Alembic::AbcGeom::IXform &leaf, Imath::M44d &m)
 {
-	Alembic::AbcGeom::IXformSchema xform_schema = leaf.getSchema();
+	Alembic::AbcGeom::IXformSchema leaf_schema = leaf.getSchema();
     Alembic::AbcGeom::XformSample xs;
-	xform_schema.get(xs, sample_sel);
+	leaf_schema.get(xs, sample_sel);
 	m = xs.getMatrix();
+
+	if (!xs.getInheritsXforms()) {
+		return;
+	}
+
+	Alembic::AbcGeom::IObject obj = leaf.getParent();
+
+	if (!obj.valid() || !Alembic::AbcGeom::IXform::matches(obj.getHeader())) {
+		return;
+	}
+
+	Alembic::AbcGeom::IXform parent(obj, Alembic::AbcGeom::kWrapExisting);
+	Alembic::AbcGeom::IXformSchema parent_schema = parent.getSchema();
+    Alembic::AbcGeom::XformSample parent_xs;
+	parent_schema.get(parent_xs, sample_sel);
+	m = parent_xs.getMatrix() * m;
 }
 
 void create_input_transform(const Alembic::AbcGeom::ISampleSelector &sample_sel,
diff --git a/source/blender/alembic/intern/alembic_capi.cc b/source/blender/alembic/intern/alembic_capi.cc
index a14f657..f96be72 100644
--- a/source/blender/alembic/intern/alembic_capi.cc
+++ b/source/blender/alembic/intern/alembic_capi.cc
@@ -451,7 +451,7 @@ static void create_hierarchy(Main *bmain, Scene *scene, AbcObjectReader *root)
 
 	/* 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) {
+	if (parts.size() <= 2) {
 		return;
 	}




More information about the Bf-blender-cvs mailing list