Commit: 2a712f61636877e1d161228b7467537a5f9662d9
Author: Kévin Dietrich
Date:   Tue Jun 14 12:36:25 2016 +0200
Branches: alembic_basic_io
https://developer.blender.org/rB2a712f61636877e1d161228b7467537a5f9662d9

Cleaup: de-duplicate exception safety code.

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

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

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

diff --git a/source/blender/alembic/intern/abc_mesh.cc 
b/source/blender/alembic/intern/abc_mesh.cc
index fb337bd..8beeaa1 100644
--- a/source/blender/alembic/intern/abc_mesh.cc
+++ b/source/blender/alembic/intern/abc_mesh.cc
@@ -445,146 +445,138 @@ void AbcMeshWriter::do_write()
        if (!m_first_frame && !m_is_animated)
                return;
 
-       if (m_settings.use_subdiv_schema && m_subdiv_schema.valid()) {
-               writeSubD();
-       }
-       else {
-               writeMesh();
-       }
-}
-
-void AbcMeshWriter::writeMesh()
-{
        DerivedMesh *dm = getFinalMesh();
 
        try {
-               std::vector<float> points, normals;
-               std::vector<int32_t> facePoints, faceCounts;
-
-               get_vertices(dm, points);
-               get_topology(dm, facePoints, faceCounts);
-
-               if (m_first_frame) {
-                       writeCommonData(dm, m_mesh_schema);
+               if (m_settings.use_subdiv_schema && m_subdiv_schema.valid()) {
+                       writeSubD(dm);
+               }
+               else {
+                       writeMesh(dm);
                }
 
-               m_mesh_sample = OPolyMeshSchema::Sample(
-                                   V3fArraySample(
-                                       (const Imath::V3f *) &points.front(),
-                                       points.size() / 3),
-                                   Int32ArraySample(facePoints),
-                                   Int32ArraySample(faceCounts));
+               freeMesh(dm);
+       }
+       catch (...) {
+               freeMesh(dm);
+               throw;
+       }
+}
 
-               UVSample sample;
-               if (m_settings.export_uvs) {
-                       get_uv_sample(sample, dm, m_settings.pack_uv);
+void AbcMeshWriter::writeMesh(DerivedMesh *dm)
+{
+       std::vector<float> points, normals;
+       std::vector<int32_t> facePoints, faceCounts;
 
-                       if (!sample.indices.empty() && !sample.uvs.empty()) {
-                               OV2fGeomParam::Sample uv_sample;
-                               
uv_sample.setVals(V2fArraySample(&sample.uvs[0], sample.uvs.size()));
-                               
uv_sample.setIndices(UInt32ArraySample(&sample.indices[0], 
sample.indices.size()));
-                               uv_sample.setScope(kFacevaryingScope);
+       get_vertices(dm, points);
+       get_topology(dm, facePoints, faceCounts);
 
-                               m_mesh_sample.setUVs(uv_sample);
-                       }
+       if (m_first_frame) {
+               writeCommonData(dm, m_mesh_schema);
+       }
 
-                       write_extra_uvs(m_mesh_schema, dm, m_settings.pack_uv);
-               }
+       m_mesh_sample = OPolyMeshSchema::Sample(
+                           V3fArraySample(
+                               (const Imath::V3f *) &points.front(),
+                               points.size() / 3),
+                           Int32ArraySample(facePoints),
+                           Int32ArraySample(faceCounts));
 
-               if (m_settings.export_normals) {
-                       get_normals(dm, normals);
+       UVSample sample;
+       if (m_settings.export_uvs) {
+               get_uv_sample(sample, dm, m_settings.pack_uv);
 
-                       ON3fGeomParam::Sample normals_sample;
-                       if (!normals.empty()) {
-                               normals_sample.setScope(kFacevaryingScope);
-                               normals_sample.setVals(
-                                           V3fArraySample(
-                                               (const Imath::V3f 
*)&normals.front(),
-                                               normals.size() / 3));
-                       }
+               if (!sample.indices.empty() && !sample.uvs.empty()) {
+                       OV2fGeomParam::Sample uv_sample;
+                       uv_sample.setVals(V2fArraySample(&sample.uvs[0], 
sample.uvs.size()));
+                       
uv_sample.setIndices(UInt32ArraySample(&sample.indices[0], 
sample.indices.size()));
+                       uv_sample.setScope(kFacevaryingScope);
 
-                       m_mesh_sample.setNormals(normals_sample);
+                       m_mesh_sample.setUVs(uv_sample);
                }
 
-               if (m_is_liquid) {
-                       std::vector<float> velocities;
-                       getVelocities(dm, velocities);
+               write_extra_uvs(m_mesh_schema, dm, m_settings.pack_uv);
+       }
+
+       if (m_settings.export_normals) {
+               get_normals(dm, normals);
 
-                       m_mesh_sample.setVelocities(V3fArraySample(
-                                                       (const Imath::V3f 
*)&velocities.front(),
-                                                                       
velocities.size() / 3));
+               ON3fGeomParam::Sample normals_sample;
+               if (!normals.empty()) {
+                       normals_sample.setScope(kFacevaryingScope);
+                       normals_sample.setVals(
+                                   V3fArraySample(
+                                       (const Imath::V3f *)&normals.front(),
+                                       normals.size() / 3));
                }
 
-               m_mesh_sample.setSelfBounds(bounds());
+               m_mesh_sample.setNormals(normals_sample);
+       }
 
-               m_mesh_schema.set(m_mesh_sample);
+       if (m_is_liquid) {
+               std::vector<float> velocities;
+               getVelocities(dm, velocities);
 
-               writeArbGeoParams(dm);
-               freeMesh(dm);
-       }
-       catch (...) {
-               freeMesh(dm);
-               throw;
+               m_mesh_sample.setVelocities(V3fArraySample(
+                                               (const Imath::V3f 
*)&velocities.front(),
+                                               velocities.size() / 3));
        }
-}
 
-void AbcMeshWriter::writeSubD()
-{
-       DerivedMesh *dm = getFinalMesh();
+       m_mesh_sample.setSelfBounds(bounds());
 
-       try {
-               std::vector<float> points, creaseSharpness;
-               std::vector<int32_t> facePoints, faceCounts;
-               std::vector<int32_t> creaseIndices, creaseLengths;
+       m_mesh_schema.set(m_mesh_sample);
 
-               get_vertices(dm, points);
-               get_topology(dm, facePoints, faceCounts);
-               get_creases(dm, creaseIndices, creaseLengths, creaseSharpness);
+       writeArbGeoParams(dm);
+}
 
-               if (m_first_frame) {
-                       /* create materials' facesets */
-                       writeCommonData(dm, m_subdiv_schema);
-               }
+void AbcMeshWriter::writeSubD(DerivedMesh *dm)
+{
+       std::vector<float> points, creaseSharpness;
+       std::vector<int32_t> facePoints, faceCounts;
+       std::vector<int32_t> creaseIndices, creaseLengths;
 
-               m_subdiv_sample = OSubDSchema::Sample(
-                                     V3fArraySample(
-                                         (const Imath::V3f *) &points.front(),
-                                         points.size() / 3),
-                                     Int32ArraySample(facePoints),
-                                     Int32ArraySample(faceCounts));
+       get_vertices(dm, points);
+       get_topology(dm, facePoints, faceCounts);
+       get_creases(dm, creaseIndices, creaseLengths, creaseSharpness);
 
-               UVSample sample;
-               if (m_settings.export_uvs) {
-                       get_uv_sample(sample, dm, m_settings.pack_uv);
+       if (m_first_frame) {
+               /* create materials' facesets */
+               writeCommonData(dm, m_subdiv_schema);
+       }
 
-                       if (!sample.indices.empty() && !sample.uvs.empty()) {
-                               OV2fGeomParam::Sample uv_sample;
-                               
uv_sample.setVals(V2fArraySample(&sample.uvs[0], sample.uvs.size()));
-                               
uv_sample.setIndices(UInt32ArraySample(&sample.indices[0], 
sample.indices.size()));
-                               uv_sample.setScope(kFacevaryingScope);
+       m_subdiv_sample = OSubDSchema::Sample(
+                             V3fArraySample(
+                                 (const Imath::V3f *) &points.front(),
+                                 points.size() / 3),
+                             Int32ArraySample(facePoints),
+                             Int32ArraySample(faceCounts));
 
-                               m_subdiv_sample.setUVs(uv_sample);
-                       }
+       UVSample sample;
+       if (m_settings.export_uvs) {
+               get_uv_sample(sample, dm, m_settings.pack_uv);
 
-                       write_extra_uvs(m_subdiv_schema, dm, 
m_settings.pack_uv);
-               }
+               if (!sample.indices.empty() && !sample.uvs.empty()) {
+                       OV2fGeomParam::Sample uv_sample;
+                       uv_sample.setVals(V2fArraySample(&sample.uvs[0], 
sample.uvs.size()));
+                       
uv_sample.setIndices(UInt32ArraySample(&sample.indices[0], 
sample.indices.size()));
+                       uv_sample.setScope(kFacevaryingScope);
 
-               if (!creaseIndices.empty()) {
-                       
m_subdiv_sample.setCreaseIndices(Int32ArraySample(creaseIndices));
-                       
m_subdiv_sample.setCreaseLengths(Int32ArraySample(creaseLengths));
-                       
m_subdiv_sample.setCreaseSharpnesses(FloatArraySample(creaseSharpness));
+                       m_subdiv_sample.setUVs(uv_sample);
                }
 
-               m_subdiv_sample.setSelfBounds(bounds());
-               m_subdiv_schema.set(m_subdiv_sample);
-
-               writeArbGeoParams(dm);
-               freeMesh(dm);
+               write_extra_uvs(m_subdiv_schema, dm, m_settings.pack_uv);
        }
-       catch (...) {
-               freeMesh(dm);
-               throw;
+
+       if (!creaseIndices.empty()) {
+               
m_subdiv_sample.setCreaseIndices(Int32ArraySample(creaseIndices));
+               
m_subdiv_sample.setCreaseLengths(Int32ArraySample(creaseLengths));
+               
m_subdiv_sample.setCreaseSharpnesses(FloatArraySample(creaseSharpness));
        }
+
+       m_subdiv_sample.setSelfBounds(bounds());
+       m_subdiv_schema.set(m_subdiv_sample);
+
+       writeArbGeoParams(dm);
 }
 
 template <typename Schema>
diff --git a/source/blender/alembic/intern/abc_mesh.h 
b/source/blender/alembic/intern/abc_mesh.h
index 610b2cc..d853551 100644
--- a/source/blender/alembic/intern/abc_mesh.h
+++ b/source/blender/alembic/intern/abc_mesh.h
@@ -68,8 +68,8 @@ private:
 
     bool isAnimated() const;
 
-       void writeMesh();
-       void writeSubD();
+       void writeMesh(DerivedMesh *dm);
+       void writeSubD(DerivedMesh *dm);
 
        void getMeshInfo(DerivedMesh *dm, std::vector<float> &points,
                         std::vector<int32_t> &facePoints,

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

Reply via email to