Alembic import: fix scene min/max time computation to take objects with
authorKévin Dietrich <kevin.dietrich@mailoo.org>
Wed, 17 Aug 2016 20:20:15 +0000 (22:20 +0200)
committerKévin Dietrich <kevin.dietrich@mailoo.org>
Wed, 17 Aug 2016 20:26:50 +0000 (22:26 +0200)
transform animations into account.

source/blender/alembic/intern/abc_camera.cc
source/blender/alembic/intern/abc_curves.cc
source/blender/alembic/intern/abc_mesh.cc
source/blender/alembic/intern/abc_nurbs.cc
source/blender/alembic/intern/abc_points.cc
source/blender/alembic/intern/abc_transform.cc
source/blender/alembic/intern/abc_util.h

index 38a6d3d33cfdd9e5bc70f6377af6e1a79eb9f031..5c34ec1391f42b9e7341a26f2ac790a2e658462d 100644 (file)
@@ -109,7 +109,7 @@ AbcCameraReader::AbcCameraReader(const Alembic::Abc::IObject &object, ImportSett
        ICamera abc_cam(m_iobject, kWrapExisting);
        m_schema = abc_cam.getSchema();
 
-       get_min_max_time(m_schema, m_min_time, m_max_time);
+       get_min_max_time(m_iobject, m_schema, m_min_time, m_max_time);
 }
 
 bool AbcCameraReader::valid() const
index 4e1e4e7e490e4e762b49666fb59d4018830cc7c2..2b54741a5c5c5dd8a07e29c366f88cd80d3b6b7f 100644 (file)
@@ -190,7 +190,7 @@ AbcCurveReader::AbcCurveReader(const Alembic::Abc::IObject &object, ImportSettin
        ICurves abc_curves(object, kWrapExisting);
        m_curves_schema = abc_curves.getSchema();
 
-       get_min_max_time(m_curves_schema, m_min_time, m_max_time);
+       get_min_max_time(m_iobject, m_curves_schema, m_min_time, m_max_time);
 }
 
 bool AbcCurveReader::valid() const
index f1c7b6b3aa3ce48c9eb234cd18e120def45c7798..b80b7c0c4c89d5e7ae3d16292b512a778e3c4a3b 100644 (file)
@@ -968,7 +968,8 @@ AbcMeshReader::AbcMeshReader(const IObject &object, ImportSettings &settings)
 
        IPolyMesh ipoly_mesh(m_iobject, kWrapExisting);
        m_schema = ipoly_mesh.getSchema();
-       get_min_max_time(m_schema, m_min_time, m_max_time);
+
+       get_min_max_time(m_iobject, m_schema, m_min_time, m_max_time);
 }
 
 bool AbcMeshReader::valid() const
@@ -1120,7 +1121,8 @@ AbcSubDReader::AbcSubDReader(const IObject &object, ImportSettings &settings)
 
        ISubD isubd_mesh(m_iobject, kWrapExisting);
        m_schema = isubd_mesh.getSchema();
-       get_min_max_time(m_schema, m_min_time, m_max_time);
+
+       get_min_max_time(m_iobject, m_schema, m_min_time, m_max_time);
 }
 
 bool AbcSubDReader::valid() const
index a3c18ad6301d1f55d1ebe6c3b47ec0f7b0702ec4..4f57dfdae9ed0db25b6adee9fd2c10c9e693d96a 100644 (file)
@@ -201,7 +201,7 @@ AbcNurbsReader::AbcNurbsReader(const IObject &object, ImportSettings &settings)
     : AbcObjectReader(object, settings)
 {
        getNurbsPatches(m_iobject);
-       get_min_max_time(m_schemas[0].first, m_min_time, m_max_time);
+       get_min_max_time(m_iobject, m_schemas[0].first, m_min_time, m_max_time);
 }
 
 bool AbcNurbsReader::valid() const
index fa5b71ac09483937e13f770b31dedb6548a0bcc8..758d4827b8aad4a6fc0f5cd751d13f42e37d5250 100644 (file)
@@ -141,7 +141,7 @@ AbcPointsReader::AbcPointsReader(const Alembic::Abc::IObject &object, ImportSett
 {
        IPoints ipoints(m_iobject, kWrapExisting);
        m_schema = ipoints.getSchema();
-       get_min_max_time(m_schema, m_min_time, m_max_time);
+       get_min_max_time(m_iobject, m_schema, m_min_time, m_max_time);
 }
 
 bool AbcPointsReader::valid() const
index 3326ae0ed848cc3a898c2cdcc8bee357577e2820..7f8984f9970d303178685d2e4a22c257e1187927 100644 (file)
@@ -137,7 +137,7 @@ AbcEmptyReader::AbcEmptyReader(const Alembic::Abc::IObject &object, ImportSettin
        Alembic::AbcGeom::IXform xform(object, Alembic::AbcGeom::kWrapExisting);
        m_schema = xform.getSchema();
 
-       get_min_max_time(m_schema, m_min_time, m_max_time);
+       get_min_max_time(m_iobject, m_schema, m_min_time, m_max_time);
 }
 
 bool AbcEmptyReader::valid() const
index 688a25d85f60829d400497c5c1f7ed1662a90ce1..8cdfe21e43f50ac5828d39d7c5f6fa2babf4d747 100644 (file)
@@ -64,7 +64,7 @@ void create_input_transform(const Alembic::AbcGeom::ISampleSelector &sample_sel,
                             float r_mat[4][4], float scale, bool has_alembic_parent = false);
 
 template <typename Schema>
-void get_min_max_time(const Schema &schema, chrono_t &min, chrono_t &max)
+void get_min_max_time_ex(const Schema &schema, chrono_t &min, chrono_t &max)
 {
        const Alembic::Abc::TimeSamplingPtr &time_samp = schema.getTimeSampling();
 
@@ -81,6 +81,15 @@ void get_min_max_time(const Schema &schema, chrono_t &min, chrono_t &max)
        }
 }
 
+template <typename Schema>
+void get_min_max_time(const Alembic::AbcGeom::IObject &object, const Schema &schema, chrono_t &min, chrono_t &max)
+{
+       get_min_max_time_ex(schema, min, max);
+
+       Alembic::AbcGeom::IXform parent(object.getParent(), Alembic::AbcGeom::kWrapExisting);
+       get_min_max_time_ex(parent.getSchema(), min, max);
+}
+
 bool has_property(const Alembic::Abc::ICompoundProperty &prop, const std::string &name);
 
 /* ************************** */