[Bf-blender-cvs] [a31937a] alembic_basic_io: Reset smooth flag when creating a new derivedmesh.

Kévin Dietrich noreply at git.blender.org
Thu Jul 14 14:43:16 CEST 2016


Commit: a31937ae82083ebcce3f6568c741034c38bef26a
Author: Kévin Dietrich
Date:   Thu Jul 14 08:41:03 2016 +0200
Branches: alembic_basic_io
https://developer.blender.org/rBa31937ae82083ebcce3f6568c741034c38bef26a

Reset smooth flag when creating a new derivedmesh.

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

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

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

diff --git a/source/blender/alembic/intern/alembic_capi.cc b/source/blender/alembic/intern/alembic_capi.cc
index d8d0ac2..1ed162a 100644
--- a/source/blender/alembic/intern/alembic_capi.cc
+++ b/source/blender/alembic/intern/alembic_capi.cc
@@ -807,6 +807,31 @@ void ABC_get_transform(AbcArchiveHandle *handle, Object *ob, const char *object_
 
 /* ***************************************** */
 
+static bool check_smooth_poly_flag(DerivedMesh *dm)
+{
+	MPoly *mpolys = dm->getPolyArray(dm);
+
+	for (int i = 0, e = dm->getNumPolys(dm); i < e; ++i) {
+		MPoly &poly = mpolys[i];
+
+		if ((poly.flag & ME_SMOOTH) != 0) {
+			return true;
+		}
+	}
+
+	return false;
+}
+
+static void set_smooth_poly_flag(DerivedMesh *dm)
+{
+	MPoly *mpolys = dm->getPolyArray(dm);
+
+	for (int i = 0, e = dm->getNumPolys(dm); i < e; ++i) {
+		MPoly &poly = mpolys[i];
+		poly.flag |= ME_SMOOTH;
+	}
+}
+
 static void *add_customdata_cb(void *user_data, const char *name, int data_type)
 {
 	DerivedMesh *dm = static_cast<DerivedMesh *>(user_data);
@@ -840,8 +865,13 @@ static DerivedMesh *read_mesh_sample(DerivedMesh *dm, const IObject &iobject, co
 	const Alembic::Abc::Int32ArraySamplePtr &face_indices = sample.getFaceIndices();
 	const Alembic::Abc::Int32ArraySamplePtr &face_counts = sample.getFaceCounts();
 
+	bool has_smooth_flag = false;
 	bool new_dm = false;
+
 	if (dm->getNumVerts(dm) != positions->size()) {
+		/* Check if we have ME_SMOOTH flag set to restore it later on. */
+		has_smooth_flag = check_smooth_poly_flag(dm);
+
 		DerivedMesh *tmp = CDDM_from_template(dm,
 		                                      positions->size(),
 		                                      0,
@@ -870,6 +900,10 @@ static DerivedMesh *read_mesh_sample(DerivedMesh *dm, const IObject &iobject, co
 			CDDM_calc_normals(dm);
 		}
 
+		if (has_smooth_flag) {
+			set_smooth_poly_flag(dm);
+		}
+
 		CDDM_calc_edges(dm);
 	}




More information about the Bf-blender-cvs mailing list