Commit: 38726e2f7ce9abf401786390551fcba1d2bf0902
Author: Kévin Dietrich
Date:   Wed Apr 6 13:18:31 2016 +0200
Branches: alembic_basic_io
https://developer.blender.org/rB38726e2f7ce9abf401786390551fcba1d2bf0902

Set up objects' position, rotation and scale upon import.

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

M       source/blender/alembic/intern/abc_camera.cc
M       source/blender/alembic/intern/abc_camera.h
M       source/blender/alembic/intern/abc_mesh.cc
M       source/blender/alembic/intern/abc_mesh.h
M       source/blender/alembic/intern/abc_nurbs.cc
M       source/blender/alembic/intern/abc_nurbs.h
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_camera.cc 
b/source/blender/alembic/intern/abc_camera.cc
index ad9a45d..f155326 100644
--- a/source/blender/alembic/intern/abc_camera.cc
+++ b/source/blender/alembic/intern/abc_camera.cc
@@ -115,7 +115,7 @@ bool AbcCameraReader::valid() const
        return m_schema.valid();
 }
 
-void AbcCameraReader::readObject(Main *bmain, Scene *scene, float time, Object 
*parent)
+void AbcCameraReader::readObjectData(Main *bmain, Scene *scene, float time, 
Object *parent)
 {
        Camera *bcam = static_cast<Camera *>(BKE_camera_add(bmain, 
"abc_camera"));
 
diff --git a/source/blender/alembic/intern/abc_camera.h 
b/source/blender/alembic/intern/abc_camera.h
index 8e11148..72a48b5 100644
--- a/source/blender/alembic/intern/abc_camera.h
+++ b/source/blender/alembic/intern/abc_camera.h
@@ -52,7 +52,7 @@ public:
 
        bool valid() const;
 
-       void readObject(Main *bmain, Scene *scene, float time, Object *parent);
+       void readObjectData(Main *bmain, Scene *scene, float time, Object 
*parent);
 };
 
 #endif  /* __ABC_CAMERA_WRITER_H__ */
diff --git a/source/blender/alembic/intern/abc_mesh.cc 
b/source/blender/alembic/intern/abc_mesh.cc
index 025fc22..e668e73 100644
--- a/source/blender/alembic/intern/abc_mesh.cc
+++ b/source/blender/alembic/intern/abc_mesh.cc
@@ -43,6 +43,8 @@ extern "C" {
 #include "BKE_modifier.h"
 #include "BKE_object.h"
 
+#include "ED_object.h"
+
 #include "WM_api.h"
 #include "WM_types.h"
 }
@@ -1049,7 +1051,7 @@ bool AbcMeshReader::valid() const
        return m_schema.valid();
 }
 
-void AbcMeshReader::readObject(Main *bmain, Scene *scene, float time, Object 
*parent)
+void AbcMeshReader::readObjectData(Main *bmain, Scene *scene, float time, 
Object *parent)
 {
        Mesh *blender_mesh = BKE_mesh_add(bmain, m_data_name.c_str());
 
@@ -1165,40 +1167,11 @@ void AbcMeshReader::readObject(Main *bmain, Scene 
*scene, float time, Object *pa
        }
 #endif
 
-       // Compute edge array is done here
        BKE_mesh_validate(blender_mesh, false, false);
 
        m_object = BKE_object_add(bmain, scene, OB_MESH, m_object_name.c_str());
        m_object->data = blender_mesh;
 
-       if (parent) {
-               m_object->parent = parent;
-
-               DAG_id_tag_update(&m_object->id, OB_RECALC_OB);
-               DAG_relations_tag_update(bmain);
-               WM_main_add_notifier(NC_OBJECT | ND_PARENT, m_object);
-       }
-
-       // setup object matrix
-       const Alembic::AbcGeom::MetaData &md = m_iobject.getMetaData();
-
-       if (Alembic::AbcGeom::IXformSchema::matches(md)) {
-               Alembic::AbcGeom::IXform x(m_iobject, 
Alembic::AbcGeom::kWrapExisting);
-               Alembic::AbcGeom::IXformSchema &schema(x.getSchema());
-
-               if (schema.valid()) {
-                       Alembic::AbcGeom::ISampleSelector xform_sample(time);
-                       Alembic::AbcGeom::XformSample xs;
-                       schema.get(xs, xform_sample);
-
-                       for (int i = 0; i < 4; ++i) {
-                               for (int j = 0; j < 4; j++) {
-                                       m_object->obmat[i][j] = 
xs.getMatrix()[i][j];
-                               }
-                       }
-               }
-       }
-
        // TODO
 #if 0
        if (apply_materials) {
diff --git a/source/blender/alembic/intern/abc_mesh.h 
b/source/blender/alembic/intern/abc_mesh.h
index 6e00b1b..95d2397 100644
--- a/source/blender/alembic/intern/abc_mesh.h
+++ b/source/blender/alembic/intern/abc_mesh.h
@@ -108,7 +108,7 @@ public:
 
        bool valid() const;
 
-       void readObject(Main *bmain, Scene *scene, float time, Object *parent);
+       void readObjectData(Main *bmain, Scene *scene, float time, Object 
*parent);
 };
 
 #endif  /* __ABC_MESH_WRITER_H__ */
diff --git a/source/blender/alembic/intern/abc_nurbs.cc 
b/source/blender/alembic/intern/abc_nurbs.cc
index 4725682..23b81e0 100644
--- a/source/blender/alembic/intern/abc_nurbs.cc
+++ b/source/blender/alembic/intern/abc_nurbs.cc
@@ -210,7 +210,7 @@ bool AbcNurbsReader::valid() const
        return m_schemas[0].first.valid();
 }
 
-void AbcNurbsReader::readObject(Main *bmain, Scene *scene, float time, Object 
*parent)
+void AbcNurbsReader::readObjectData(Main *bmain, Scene *scene, float time, 
Object *parent)
 {
        Curve *cu = static_cast<Curve *>(BKE_curve_add(bmain, "abc_curve", 
OB_SURF));
 
diff --git a/source/blender/alembic/intern/abc_nurbs.h 
b/source/blender/alembic/intern/abc_nurbs.h
index 4a65695..f8bbf69 100644
--- a/source/blender/alembic/intern/abc_nurbs.h
+++ b/source/blender/alembic/intern/abc_nurbs.h
@@ -49,7 +49,7 @@ public:
 
        bool valid() const;
 
-       void readObject(Main *bmain, Scene *scene, float time, Object *parent);
+       void readObjectData(Main *bmain, Scene *scene, float time, Object 
*parent);
 
 private:
        void getNurbsPatches(const Alembic::Abc::IObject &obj);
diff --git a/source/blender/alembic/intern/abc_object.cc 
b/source/blender/alembic/intern/abc_object.cc
index 958edb2..eaf49e9 100644
--- a/source/blender/alembic/intern/abc_object.cc
+++ b/source/blender/alembic/intern/abc_object.cc
@@ -31,6 +31,10 @@ extern "C" {
 
 #include "BLI_math.h"
 #include "BLI_utildefines.h"
+
+#include "DNA_object_types.h"
+
+#include "BKE_depsgraph.h"
 }
 
 AbcObjectWriter::AbcObjectWriter(Object *obj, AbcExportOptions &opts)
@@ -334,3 +338,32 @@ Object *AbcObjectReader::object() const
 {
        return m_object;
 }
+
+void AbcObjectReader::readObjectMatrix(const float time) const
+{
+       const Alembic::AbcGeom::MetaData &md = 
m_iobject.getParent().getMetaData();
+
+       if (!Alembic::AbcGeom::IXformSchema::matches(md)) {
+               return;
+       }
+
+       Alembic::AbcGeom::IXform x(m_iobject.getParent(), 
Alembic::AbcGeom::kWrapExisting);
+       Alembic::AbcGeom::IXformSchema &schema(x.getSchema());
+
+       if (schema.valid()) {
+               Alembic::AbcGeom::ISampleSelector xform_sample(time);
+               Alembic::AbcGeom::XformSample xs;
+               schema.get(xs, xform_sample);
+
+               for (int i = 0; i < 3; ++i) {
+                       m_object->loc[i] = xs.getTranslation()[i];
+                       m_object->size[i] = xs.getScale()[i];
+               }
+
+               m_object->rot[0] = xs.getXRotation();
+               m_object->rot[1] = xs.getYRotation();
+               m_object->rot[2] = xs.getZRotation();
+
+               DAG_id_tag_update(&(m_object->id), OB_RECALC_OB);
+       }
+}
diff --git a/source/blender/alembic/intern/abc_object.h 
b/source/blender/alembic/intern/abc_object.h
index 9777441..f6d7e03 100644
--- a/source/blender/alembic/intern/abc_object.h
+++ b/source/blender/alembic/intern/abc_object.h
@@ -104,7 +104,9 @@ public:
        Object *object() const;
 
        virtual bool valid() const = 0;
-       virtual void readObject(Main *bmain, Scene *scene, float time, Object 
*parent) = 0;
+       virtual void readObjectData(Main *bmain, Scene *scene, float time, 
Object *parent) = 0;
+
+       void readObjectMatrix(const float time) const;
 };
 
 #endif
diff --git a/source/blender/alembic/intern/alembic_capi.cc 
b/source/blender/alembic/intern/alembic_capi.cc
index 28a6729..c593354 100644
--- a/source/blender/alembic/intern/alembic_capi.cc
+++ b/source/blender/alembic/intern/alembic_capi.cc
@@ -919,7 +919,8 @@ void ABC_import(bContext *C, const char *filename, int 
from_forward, int from_up
                AbcObjectReader *reader = *iter;
 
                if (reader->valid()) {
-                       reader->readObject(CTX_data_main(C), CTX_data_scene(C), 
0.0f, NULL);
+                       reader->readObjectData(CTX_data_main(C), 
CTX_data_scene(C), 0.0f, NULL);
+                       reader->readObjectMatrix(0.0f);
                }
        }

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to