Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/io/alembic/intern/abc_reader_mesh.cc')
-rw-r--r--source/blender/io/alembic/intern/abc_reader_mesh.cc30
1 files changed, 30 insertions, 0 deletions
diff --git a/source/blender/io/alembic/intern/abc_reader_mesh.cc b/source/blender/io/alembic/intern/abc_reader_mesh.cc
index 3c1ac8ceeaf..bd40eb35123 100644
--- a/source/blender/io/alembic/intern/abc_reader_mesh.cc
+++ b/source/blender/io/alembic/intern/abc_reader_mesh.cc
@@ -45,6 +45,7 @@
#include "BKE_modifier.h"
#include "BKE_object.h"
+using Alembic::Abc::FloatArraySamplePtr;
using Alembic::Abc::Int32ArraySamplePtr;
using Alembic::Abc::IV3fArrayProperty;
using Alembic::Abc::P3fArraySamplePtr;
@@ -910,6 +911,32 @@ static void read_subd_sample(const std::string &iobject_full_name,
}
}
+static void read_vertex_creases(Mesh *mesh,
+ const Int32ArraySamplePtr &indices,
+ const FloatArraySamplePtr &sharpnesses)
+{
+ if (!(indices && sharpnesses && indices->size() == sharpnesses->size() &&
+ indices->size() != 0)) {
+ return;
+ }
+
+ float *vertex_crease_data = (float *)CustomData_add_layer(
+ &mesh->vdata, CD_CREASE, CD_DEFAULT, nullptr, mesh->totvert);
+ const int totvert = mesh->totvert;
+
+ for (int i = 0, v = indices->size(); i < v; ++i) {
+ const int idx = (*indices)[i];
+
+ if (idx >= totvert) {
+ continue;
+ }
+
+ vertex_crease_data[idx] = (*sharpnesses)[i];
+ }
+
+ mesh->cd_flag |= ME_CDFLAG_VERT_CREASE;
+}
+
/* ************************************************************************** */
AbcSubDReader::AbcSubDReader(const IObject &object, ImportSettings &settings)
@@ -973,6 +1000,7 @@ void AbcSubDReader::readObjectData(Main *bmain, const Alembic::Abc::ISampleSelec
return;
}
+ /* Read egde creases. */
Int32ArraySamplePtr indices = sample.getCreaseIndices();
Alembic::Abc::FloatArraySamplePtr sharpnesses = sample.getCreaseSharpnesses();
@@ -1003,6 +1031,8 @@ void AbcSubDReader::readObjectData(Main *bmain, const Alembic::Abc::ISampleSelec
mesh->cd_flag |= ME_CDFLAG_EDGE_CREASE;
}
+ read_vertex_creases(mesh, sample.getCornerIndices(), sample.getCornerSharpnesses());
+
if (m_settings->validate_meshes) {
BKE_mesh_validate(mesh, false, false);
}