[Bf-blender-cvs] [85761d4] alembic_basic_io: Make mesh validation optional.

Kévin Dietrich noreply at git.blender.org
Thu Jul 21 17:32:21 CEST 2016


Commit: 85761d4779500753a38aa2368c460454c1cb49b3
Author: Kévin Dietrich
Date:   Thu Jul 21 17:27:52 2016 +0200
Branches: alembic_basic_io
https://developer.blender.org/rB85761d4779500753a38aa2368c460454c1cb49b3

Make mesh validation optional.

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

M	source/blender/alembic/ABC_alembic.h
M	source/blender/alembic/intern/abc_mesh.cc
M	source/blender/alembic/intern/abc_object.h
M	source/blender/alembic/intern/abc_points.cc
M	source/blender/alembic/intern/alembic_capi.cc
M	source/blender/editors/io/io_alembic.c

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

diff --git a/source/blender/alembic/ABC_alembic.h b/source/blender/alembic/ABC_alembic.h
index bb735b1..1d642bb 100644
--- a/source/blender/alembic/ABC_alembic.h
+++ b/source/blender/alembic/ABC_alembic.h
@@ -81,7 +81,8 @@ void ABC_import(struct bContext *C,
                 bool is_sequence,
                 bool set_frame_range,
                 int sequence_len,
-                int offset);
+                int offset,
+                bool validate_meshes);
 
 AbcArchiveHandle *ABC_create_handle(const char *filename, struct ListBase *object_paths);
 
diff --git a/source/blender/alembic/intern/abc_mesh.cc b/source/blender/alembic/intern/abc_mesh.cc
index 83c7eba..888c281 100644
--- a/source/blender/alembic/intern/abc_mesh.cc
+++ b/source/blender/alembic/intern/abc_mesh.cc
@@ -1000,7 +1000,10 @@ void AbcMeshReader::readObjectData(Main *bmain, float time)
 	read_mesh_sample(m_settings, m_schema, sample_sel, m_mesh_data, has_smooth_normals);
 
 	BKE_mesh_calc_normals(mesh);
-	BKE_mesh_validate(mesh, false, false);
+
+	if (m_settings->validate_meshes) {
+		BKE_mesh_validate(mesh, false, false);
+	}
 
 	readFaceSetsSample(bmain, mesh, 0, sample_sel);
 
@@ -1164,7 +1167,10 @@ void AbcSubDReader::readObjectData(Main *bmain, float time)
 	}
 
 	BKE_mesh_calc_normals(mesh);
-	BKE_mesh_validate(mesh, false, false);
+
+	if (m_settings->validate_meshes) {
+		BKE_mesh_validate(mesh, false, false);
+	}
 
 	if (has_animations(m_schema, m_settings)) {
 		addCacheModifier();
diff --git a/source/blender/alembic/intern/abc_object.h b/source/blender/alembic/intern/abc_object.h
index f665254..ded565b 100644
--- a/source/blender/alembic/intern/abc_object.h
+++ b/source/blender/alembic/intern/abc_object.h
@@ -103,6 +103,8 @@ struct ImportSettings {
 
 	int flag;
 
+	bool validate_meshes;
+
 	CacheFile *cache_file;
 
 	ImportSettings()
@@ -115,6 +117,7 @@ struct ImportSettings {
 	    , sequence_len(1)
 	    , offset(0)
 	    , flag(0)
+	    , validate_meshes(false)
 	    , cache_file(NULL)
 	{}
 };
diff --git a/source/blender/alembic/intern/abc_points.cc b/source/blender/alembic/intern/abc_points.cc
index c8b346a..b0be0e9 100644
--- a/source/blender/alembic/intern/abc_points.cc
+++ b/source/blender/alembic/intern/abc_points.cc
@@ -173,7 +173,9 @@ void AbcPointsReader::readObjectData(Main *bmain, float time)
 
 	read_mverts(mesh->mvert, positions, vnormals);
 
-	BKE_mesh_validate(mesh, false, false);
+	if (m_settings->validate_meshes) {
+		BKE_mesh_validate(mesh, false, false);
+	}
 
 	m_object = BKE_object_add_only_object(bmain, OB_MESH, m_object_name.c_str());
 	m_object->data = mesh;
diff --git a/source/blender/alembic/intern/alembic_capi.cc b/source/blender/alembic/intern/alembic_capi.cc
index d7a1500..c54b8ad 100644
--- a/source/blender/alembic/intern/alembic_capi.cc
+++ b/source/blender/alembic/intern/alembic_capi.cc
@@ -757,7 +757,7 @@ static void import_freejob(void *user_data)
 	delete data;
 }
 
-void ABC_import(bContext *C, const char *filepath, float scale, bool is_sequence, bool set_frame_range, int sequence_len, int offset)
+void ABC_import(bContext *C, const char *filepath, float scale, bool is_sequence, bool set_frame_range, int sequence_len, int offset, bool validate_meshes)
 {
 	/* Using new here since MEM_* funcs do not call ctor to properly initialize
 	 * data. */
@@ -771,6 +771,7 @@ void ABC_import(bContext *C, const char *filepath, float scale, bool is_sequence
 	job->settings.set_frame_range = set_frame_range;
 	job->settings.sequence_len = sequence_len;
 	job->settings.offset = offset;
+	job->settings.validate_meshes = validate_meshes;
 	job->parent_map = NULL;
 	job->error_code = ABC_NO_ERROR;
 	job->was_cancelled = false;
diff --git a/source/blender/editors/io/io_alembic.c b/source/blender/editors/io/io_alembic.c
index a344609..42d1ced 100644
--- a/source/blender/editors/io/io_alembic.c
+++ b/source/blender/editors/io/io_alembic.c
@@ -383,6 +383,9 @@ static void ui_alembic_import_settings(uiLayout *layout, PointerRNA *imfptr)
 
 	row = uiLayoutRow(box, false);
 	uiItemR(row, imfptr, "set_frame_range", 0, NULL, ICON_NONE);
+
+	row = uiLayoutRow(box, false);
+	uiItemR(row, imfptr, "validate_meshes", 0, NULL, ICON_NONE);
 }
 
 static void wm_alembic_import_draw(bContext *UNUSED(C), wmOperator *op)
@@ -405,12 +408,13 @@ static int wm_alembic_import_exec(bContext *C, wmOperator *op)
 
 	const float scale = RNA_float_get(op->ptr, "scale");
 	const bool set_frame_range = RNA_boolean_get(op->ptr, "set_frame_range");
+	const bool validate_meshes = RNA_boolean_get(op->ptr, "validate_meshes");
 
 	int offset = 0;
 	int sequence_len = get_sequence_len(filename, &offset);
 	const bool is_sequence = (sequence_len > 1);
 
-	ABC_import(C, filename, scale, is_sequence, set_frame_range, sequence_len, offset);
+	ABC_import(C, filename, scale, is_sequence, set_frame_range, sequence_len, offset, validate_meshes);
 
 	return OPERATOR_FINISHED;
 }
@@ -436,6 +440,9 @@ void WM_OT_alembic_import(wmOperatorType *ot)
 	RNA_def_boolean(ot->srna, "set_frame_range", true,
 	                "Set Frame Range",
 	                "If checked, update scene's start and end frame to match those of the Alembic archive");
+
+	RNA_def_boolean(ot->srna, "validate_meshes", 0,
+	                "Validate Meshes", "Check imported mesh objects for invalid data (slow)");
 }
 
 #endif




More information about the Bf-blender-cvs mailing list