[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