Commit: ca755167830b99c23e7f474ac3f9c36eb158761c
Author: Kévin Dietrich
Date:   Wed Jun 1 17:15:57 2016 +0200
Branches: alembic_basic_io
https://developer.blender.org/rBca755167830b99c23e7f474ac3f9c36eb158761c

Add a points/particles reader.

Similarly to the hair being written as curves, this does not create a
particle system, but rather reads the points as Mesh which only has
vertices.

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

M       source/blender/alembic/intern/abc_mesh.cc
M       source/blender/alembic/intern/abc_mesh.h
M       source/blender/alembic/intern/abc_points.cc
M       source/blender/alembic/intern/abc_points.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 95c6816..8092aff 100644
--- a/source/blender/alembic/intern/abc_mesh.cc
+++ b/source/blender/alembic/intern/abc_mesh.cc
@@ -961,7 +961,7 @@ void AbcMeshWriter::getGeoGroups(
 /* Some helpers for mesh generation */
 namespace utils {
 
-static void mesh_add_verts(Mesh *mesh, size_t len)
+void mesh_add_verts(Mesh *mesh, size_t len)
 {
        if (len == 0) {
                return;
diff --git a/source/blender/alembic/intern/abc_mesh.h 
b/source/blender/alembic/intern/abc_mesh.h
index 0d51fe5..3588a30 100644
--- a/source/blender/alembic/intern/abc_mesh.h
+++ b/source/blender/alembic/intern/abc_mesh.h
@@ -140,6 +140,12 @@ void read_mpolys(MPoly *mpolys, MLoop *mloops, MLoopUV 
*mloopuvs,
                  const Alembic::AbcGeom::Int32ArraySamplePtr &face_counts,
                  const Alembic::AbcGeom::V2fArraySamplePtr &uvs = 
Alembic::AbcGeom::V2fArraySamplePtr());
 
+namespace utils {
+
+void mesh_add_verts(struct Mesh *mesh, size_t len);
+
+}
+
 /* *********************************** */
 
 class AbcEmptyReader : public AbcObjectReader {
diff --git a/source/blender/alembic/intern/abc_points.cc 
b/source/blender/alembic/intern/abc_points.cc
index b47fcb6..14381bd 100644
--- a/source/blender/alembic/intern/abc_points.cc
+++ b/source/blender/alembic/intern/abc_points.cc
@@ -26,10 +26,15 @@
 
 #include <Alembic/Abc/All.h>
 
+#include "abc_mesh.h"
 #include "abc_transform.h"
 
 extern "C" {
+#include "DNA_mesh_types.h"
+
 #include "BKE_lattice.h"
+#include "BKE_mesh.h"
+#include "BKE_object.h"
 #include "BKE_particle.h"
 #include "BKE_scene.h"
 
@@ -37,10 +42,18 @@ extern "C" {
 }
 
 using Alembic::AbcGeom::kVertexScope;
+using Alembic::AbcGeom::kWrapExisting;
+using Alembic::AbcGeom::P3fArraySamplePtr;
+
+using Alembic::AbcGeom::IPoints;
+using Alembic::AbcGeom::IPointsSchema;
+using Alembic::AbcGeom::ISampleSelector;
 
 using Alembic::AbcGeom::OPoints;
 using Alembic::AbcGeom::OPointsSchema;
 
+/* ****************************************** */
+
 AbcPointsWriter::AbcPointsWriter(Scene *scene,
                                  Object *ob,
                                     AbcTransformWriter *parent,
@@ -118,3 +131,39 @@ void AbcPointsWriter::do_write()
 
        m_schema.set(m_sample);
 }
+
+/* ****************************************** */
+
+AbcPointsReader::AbcPointsReader(const Alembic::Abc::IObject &object, 
ImportSettings &settings)
+    : AbcObjectReader(object, settings)
+{
+       IPoints ipoints(m_iobject, kWrapExisting);
+       m_schema = ipoints.getSchema();
+}
+
+bool AbcPointsReader::valid() const
+{
+       return m_schema.valid();
+}
+
+void AbcPointsReader::readObjectData(Main *bmain, Scene *scene, float time)
+{
+       Mesh *mesh = BKE_mesh_add(bmain, m_data_name.c_str());
+
+       const ISampleSelector sample_sel(time);
+       m_sample = m_schema.getValue(sample_sel);
+
+       const P3fArraySamplePtr &positions = m_sample.getPositions();
+
+       utils::mesh_add_verts(mesh, positions->size());
+       read_mverts(mesh->mvert, positions);
+
+       BKE_mesh_validate(mesh, false, false);
+
+       m_object = BKE_object_add(bmain, scene, OB_MESH, m_object_name.c_str());
+       m_object->data = mesh;
+
+       if (m_settings->is_sequence || !m_schema.isConstant()) {
+               addDefaultModifier();
+       }
+}
diff --git a/source/blender/alembic/intern/abc_points.h 
b/source/blender/alembic/intern/abc_points.h
index ad8a49f..de1adec 100644
--- a/source/blender/alembic/intern/abc_points.h
+++ b/source/blender/alembic/intern/abc_points.h
@@ -24,10 +24,13 @@
 
 #pragma once
 
+#include "abc_object.h"
 #include "abc_shape.h"
 
 class ParticleSystem;
 
+/* ****************************************** */
+
 class AbcPointsWriter : public AbcShapeWriter {
        Alembic::AbcGeom::OPointsSchema m_schema;
        Alembic::AbcGeom::OPointsSchema::Sample m_sample;
@@ -43,3 +46,17 @@ public:
 
        void do_write();
 };
+
+/* ****************************************** */
+
+class AbcPointsReader : public AbcObjectReader {
+       Alembic::AbcGeom::IPointsSchema m_schema;
+       Alembic::AbcGeom::IPointsSchema::Sample m_sample;
+
+public:
+       AbcPointsReader(const Alembic::Abc::IObject &object, ImportSettings 
&settings);
+
+       bool valid() const;
+
+       void readObjectData(Main *bmain, Scene *scene, float time);
+};
diff --git a/source/blender/alembic/intern/alembic_capi.cc 
b/source/blender/alembic/intern/alembic_capi.cc
index 5ad7f68..ce55d72 100644
--- a/source/blender/alembic/intern/alembic_capi.cc
+++ b/source/blender/alembic/intern/alembic_capi.cc
@@ -31,6 +31,7 @@
 #include "abc_hair.h"
 #include "abc_mesh.h"
 #include "abc_nurbs.h"
+#include "abc_points.h"
 #include "abc_util.h"
 
 extern "C" {
@@ -372,7 +373,7 @@ static void visit_object(const IObject &object,
                        reader = new AbcCameraReader(child, settings);
                }
                else if (IPoints::matches(md)) {
-                       /* Pass for now. */
+                       reader = new AbcPointsReader(child, settings);
                }
                else if (IMaterial::matches(md)) {
                        /* Pass for now. */

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

Reply via email to