Commit: 6543fe592f46d328ee12ce38871a8102aa2a4f3e
Author: Kévin Dietrich
Date:   Wed Jun 29 23:37:36 2016 +0200
Branches: alembic_basic_io
https://developer.blender.org/rB6543fe592f46d328ee12ce38871a8102aa2a4f3e

Add support to read edge crease data.

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

M       source/blender/alembic/intern/abc_mesh.cc

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

diff --git a/source/blender/alembic/intern/abc_mesh.cc 
b/source/blender/alembic/intern/abc_mesh.cc
index 9ebb23a..abb289c 100644
--- a/source/blender/alembic/intern/abc_mesh.cc
+++ b/source/blender/alembic/intern/abc_mesh.cc
@@ -836,6 +836,19 @@ bool AbcMeshReader::valid() const
        return m_schema.valid() || m_subd_schema.valid();
 }
 
+static MEdge *find_edge(MEdge *edges, int totedge, int v1, int v2)
+{
+       for (int i = 0, e = totedge; i < e; ++i) {
+               MEdge &edge = edges[i];
+
+               if (edge.v1 == v1 && edge.v2 == v2) {
+                       return &edge;
+               }
+       }
+
+       return NULL;
+}
+
 void AbcMeshReader::readObjectData(Main *bmain, Scene *scene, float time)
 {
        Mesh *mesh = BKE_mesh_add(bmain, m_data_name.c_str());
@@ -890,6 +903,26 @@ void AbcMeshReader::readObjectData(Main *bmain, Scene 
*scene, float time)
                readFaceSetsSample(bmain, mesh, poly_start, sample_sel);
        }
 
+       if (m_subd_schema.valid()) {
+               const ISubDSchema::Sample sample = 
m_subd_schema.getValue(sample_sel);
+
+               Int32ArraySamplePtr indices = sample.getCreaseIndices();
+               Alembic::Abc::FloatArraySamplePtr sharpnesses = 
sample.getCreaseSharpnesses();
+
+               MEdge *edges = mesh->medge;
+
+               if (indices && sharpnesses) {
+                       for (int i = 0, s = 0, e = indices->size(); i < e; i += 
2, ++s) {
+                               MEdge *edge = find_edge(edges, mesh->totedge, 
(*indices)[i], (*indices)[i + 1]);
+
+                               if (edge) {
+                                       edge->crease = 
FTOCHAR((*sharpnesses)[s]);                              }
+                       }
+
+                       mesh->cd_flag |= ME_CDFLAG_EDGE_CREASE;
+               }
+       }
+
        if (!is_constant) {
                addDefaultModifier(bmain);
        }

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

Reply via email to