[Bf-blender-cvs] [2a712f6] alembic_basic_io: Cleaup: de-duplicate exception safety code.

Kévin Dietrich noreply at git.blender.org
Tue Jun 14 16:58:51 CEST 2016


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,




More information about the Bf-blender-cvs mailing list