[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