Commit: 2fdaa3787978ea3358961246d65ab5c4ba33aebe
Author: Kévin Dietrich
Date:   Thu Jun 16 15:43:55 2016 +0200
Branches: alembic_basic_io
https://developer.blender.org/rB2fdaa3787978ea3358961246d65ab5c4ba33aebe

Fix normal prop read/write scope.

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

M       source/blender/alembic/intern/abc_mesh.cc
M       source/blender/alembic/intern/abc_mesh.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 8652bb4..dc5d375 100644
--- a/source/blender/alembic/intern/abc_mesh.cc
+++ b/source/blender/alembic/intern/abc_mesh.cc
@@ -395,7 +395,7 @@ void AbcMeshWriter::writeMesh(DerivedMesh *dm)
 
                ON3fGeomParam::Sample normals_sample;
                if (!normals.empty()) {
-                       normals_sample.setScope(kFacevaryingScope);
+                       normals_sample.setScope(kVertexScope);
                        normals_sample.setVals(
                                    V3fArraySample(
                                        (const Imath::V3f *)&normals.front(),
@@ -830,16 +830,32 @@ void AbcMeshReader::readObjectData(Main *bmain, Scene 
*scene, float time)
 
                const ISubDSchema::Sample sample = 
m_subd_schema.getValue(sample_sel);
 
-               readVertexDataSample(mesh, sample.getPositions(), 
IN3fGeomParam());
-               readPolyDataSample(mesh, sample.getFaceIndices(), 
sample.getFaceCounts());
+               readVertexDataSample(mesh, sample.getPositions(), 
N3fArraySamplePtr());
+               readPolyDataSample(mesh, sample.getFaceIndices(), 
sample.getFaceCounts(), N3fArraySamplePtr());
        }
        else {
                is_constant = !has_animations(m_schema, m_settings);
 
                const IPolyMeshSchema::Sample sample = 
m_schema.getValue(sample_sel);
 
-               readVertexDataSample(mesh, sample.getPositions(), 
m_schema.getNormalsParam());
-               readPolyDataSample(mesh, sample.getFaceIndices(), 
sample.getFaceCounts());
+               N3fArraySamplePtr vertex_normals, poly_normals;
+               const IN3fGeomParam normals = m_schema.getNormalsParam();
+
+               if (normals.valid()) {
+                       IN3fGeomParam::Sample normsamp = 
normals.getExpandedValue(sample_sel);
+
+                       if (normals.getScope() == 
Alembic::AbcGeom::kFacevaryingScope) {
+                               poly_normals = normsamp.getVals();
+                       }
+                       else if ((normals.getScope() == 
Alembic::AbcGeom::kVertexScope) ||
+                                (normals.getScope() == 
Alembic::AbcGeom::kVaryingScope))
+                       {
+                               vertex_normals = normsamp.getVals();
+                       }
+               }
+
+               readVertexDataSample(mesh, sample.getPositions(), 
vertex_normals);
+               readPolyDataSample(mesh, sample.getFaceIndices(), 
sample.getFaceCounts(), poly_normals);
        }
 
        BKE_mesh_validate(mesh, false, false);
@@ -861,18 +877,10 @@ void AbcMeshReader::readObjectData(Main *bmain, Scene 
*scene, float time)
 
 void AbcMeshReader::readVertexDataSample(Mesh *mesh,
                                          const P3fArraySamplePtr &positions,
-                                         const IN3fGeomParam &normals)
+                                         const N3fArraySamplePtr &normals)
 {
        utils::mesh_add_verts(mesh, positions->size());
-
-       N3fArraySamplePtr normal_vals;
-
-       if (normals.valid()) {
-               IN3fGeomParam::Sample normsamp = normals.getExpandedValue();
-               normal_vals = normsamp.getVals();
-       }
-
-       read_mverts(mesh->mvert, positions, normal_vals);
+       read_mverts(mesh->mvert, positions, normals);
 }
 
 static void *add_customdata_cb(void *user_data, const char *name, int 
data_type)
@@ -900,7 +908,8 @@ static void *add_customdata_cb(void *user_data, const char 
*name, int data_type)
 
 void AbcMeshReader::readPolyDataSample(Mesh *mesh,
                                        const Int32ArraySamplePtr &face_indices,
-                                       const Int32ArraySamplePtr &face_counts)
+                                       const Int32ArraySamplePtr &face_counts,
+                                       const N3fArraySamplePtr &normals)
 {
        const size_t num_poly = face_counts->size();
        const size_t num_loops = face_indices->size();
@@ -919,16 +928,8 @@ void AbcMeshReader::readPolyDataSample(Mesh *mesh,
                ED_mesh_uv_texture_add(mesh, 
Alembic::Abc::GetSourceName(uv.getMetaData()).c_str(), true);
        }
 
-       const IN3fGeomParam normals = m_schema.valid() ? 
m_schema.getNormalsParam() : IN3fGeomParam();
-       N3fArraySamplePtr normal_vals;
-
-       if (normals.valid()) {
-               IN3fGeomParam::Sample normsamp = normals.getExpandedValue();
-               normal_vals = normsamp.getVals();
-       }
-
        read_mpolys(mesh->mpoly, mesh->mloop, mesh->mloopuv, &mesh->pdata,
-                   face_indices, face_counts, uvsamp_vals, normal_vals);
+                   face_indices, face_counts, uvsamp_vals, normals);
 
        const ICompoundProperty &arb_geom_params = (m_schema.valid() ? 
m_schema.getArbGeomParams()
                                                                     : 
m_subd_schema.getArbGeomParams());
diff --git a/source/blender/alembic/intern/abc_mesh.h 
b/source/blender/alembic/intern/abc_mesh.h
index 656e38a..fe7324b 100644
--- a/source/blender/alembic/intern/abc_mesh.h
+++ b/source/blender/alembic/intern/abc_mesh.h
@@ -108,11 +108,12 @@ private:
 
        void readPolyDataSample(Mesh *mesh,
                                const Alembic::AbcGeom::Int32ArraySamplePtr 
&face_indices,
-                            const Alembic::AbcGeom::Int32ArraySamplePtr 
&face_counts);
+                            const Alembic::AbcGeom::Int32ArraySamplePtr 
&face_counts,
+                               const Alembic::AbcGeom::N3fArraySamplePtr 
&normals);
 
        void readVertexDataSample(Mesh *mesh,
                                  const Alembic::AbcGeom::P3fArraySamplePtr 
&positions,
-                                 const Alembic::AbcGeom::IN3fGeomParam 
&normals);
+                                 const Alembic::AbcGeom::N3fArraySamplePtr 
&normals);
 };
 
 /* ************************************************************************** 
*/
diff --git a/source/blender/alembic/intern/alembic_capi.cc 
b/source/blender/alembic/intern/alembic_capi.cc
index 1ed3253..6b4c91e 100644
--- a/source/blender/alembic/intern/alembic_capi.cc
+++ b/source/blender/alembic/intern/alembic_capi.cc
@@ -732,7 +732,9 @@ static DerivedMesh *read_mesh_sample(DerivedMesh *dm, const 
IObject &iobject, co
                if (normals.getScope() == Alembic::AbcGeom::kFacevaryingScope) {
                        poly_normals = normsamp.getVals();
                }
-               else {
+               else if ((normals.getScope() == Alembic::AbcGeom::kVertexScope) 
||
+                        (normals.getScope() == 
Alembic::AbcGeom::kVaryingScope))
+               {
                        vertex_normals = normsamp.getVals();
                }
        }

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

Reply via email to