[Bf-blender-cvs] [a80ff62] openvdb: Ask user to overwrite files if they already exist.

Kévin Dietrich noreply at git.blender.org
Sun Jun 7 11:38:44 CEST 2015


Commit: a80ff6214e865be6a79ebea099f38e8965018685
Author: Kévin Dietrich
Date:   Sun Jun 7 02:02:51 2015 +0200
Branches: openvdb
https://developer.blender.org/rBa80ff6214e865be6a79ebea099f38e8965018685

Ask user to overwrite files if they already exist.

Only checks for the frame though.

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

M	source/blender/blenkernel/BKE_smoke.h
M	source/blender/blenkernel/intern/smoke.c
M	source/blender/editors/object/object_modifier.c

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

diff --git a/source/blender/blenkernel/BKE_smoke.h b/source/blender/blenkernel/BKE_smoke.h
index b9bde18..eca5a45 100644
--- a/source/blender/blenkernel/BKE_smoke.h
+++ b/source/blender/blenkernel/BKE_smoke.h
@@ -66,5 +66,6 @@ void smokeModifier_OpenVDB_update_transform(struct SmokeModifierData *smd,
 void smokeModifier_OpenVDB_import(struct SmokeModifierData *smd, struct Scene *scene, struct Object *ob);
 
 struct OpenVDBCache *BKE_openvdb_get_current_cache(struct SmokeDomainSettings *sds);
+void BKE_openvdb_cache_filename(char *string, const char *path, const char *fname, const char *relbase, int frame);
 
 #endif /* __BKE_SMOKE_H__ */
diff --git a/source/blender/blenkernel/intern/smoke.c b/source/blender/blenkernel/intern/smoke.c
index ba3880c..0e75f0e 100644
--- a/source/blender/blenkernel/intern/smoke.c
+++ b/source/blender/blenkernel/intern/smoke.c
@@ -3123,7 +3123,7 @@ static void OpenVDB_write_fluid_settings(SmokeDomainSettings *sds, struct OpenVD
 	OpenVDBWriter_add_meta_mat4(writer, "obmat", sds->obmat);
 }
 
-static void cache_filename(char *string, const char *path, const char *fname, const char *relbase, int frame)
+void BKE_openvdb_cache_filename(char *string, const char *path, const char *fname, const char *relbase, int frame)
 {
 	char cachepath[FILE_MAX];
 
@@ -3348,7 +3348,7 @@ void smokeModifier_OpenVDB_export(SmokeModifierData *smd, Scene *scene, Object *
 		 * so we can't use it here... */
 		scene->r.cfra = fr;
 
-		cache_filename(filename, cache->path, cache->name, relbase, fr);
+		BKE_openvdb_cache_filename(filename, cache->path, cache->name, relbase, fr);
 
 		smokeModifier_process(smd, scene, ob, dm, false);
 
@@ -3405,7 +3405,7 @@ void smokeModifier_OpenVDB_import(SmokeModifierData *smd, Scene *scene, Object *
 
 	for_display = true;
 
-	cache_filename(filename, cache->path, cache->name, relbase, CFRA);
+	BKE_openvdb_cache_filename(filename, cache->path, cache->name, relbase, CFRA);
 	cache->reader = OpenVDBReader_create(filename);
 
 	OpenVDB_read_fluid_settings(sds, cache->reader);
@@ -3451,7 +3451,7 @@ void smokeModifier_OpenVDB_update_transform(SmokeModifierData *smd,
 		 * so we can't use it here... */
 		scene->r.cfra = fr;
 
-		cache_filename(filename, cache->path, cache->name, relbase, fr);
+		BKE_openvdb_cache_filename(filename, cache->path, cache->name, relbase, fr);
 		compute_fluid_matrices(sds);
 		OpenVDB_update_fluid_transform(filename, sds->fluidmat, sds->fluidmat_wt);
 
diff --git a/source/blender/editors/object/object_modifier.c b/source/blender/editors/object/object_modifier.c
index 867a8f1..5ab677d 100644
--- a/source/blender/editors/object/object_modifier.c
+++ b/source/blender/editors/object/object_modifier.c
@@ -45,6 +45,7 @@
 #include "DNA_smoke_types.h"
 
 #include "BLI_bitmap.h"
+#include "BLI_fileops.h"
 #include "BLI_math.h"
 #include "BLI_listbase.h"
 #include "BLI_string.h"
@@ -2408,12 +2409,49 @@ static int smoke_vdb_export_exec(bContext *C, wmOperator *op)
 	UNUSED_VARS(op);
 }
 
+static int smoke_vdb_export_invoke(bContext *C, wmOperator *op, const wmEvent *event)
+{
+	Object *ob = CTX_data_active_object(C);
+	SmokeModifierData *smd = (SmokeModifierData *)modifiers_findByType(ob, eModifierType_Smoke);
+	SmokeDomainSettings *sds = smd->domain;
+	OpenVDBCache *cache = BKE_openvdb_get_current_cache(sds);
+	const char *relbase = modifier_path_relbase(ob);
+	char filename[FILE_MAX];
+
+	if (!cache)
+		return OPERATOR_CANCELLED;
+
+	BKE_openvdb_cache_filename(filename, cache->path, cache->name, relbase, cache->startframe);
+
+	if (BLI_exists(filename)) {
+		if (BLI_is_file(filename)) {
+			if (BLI_file_is_writable(filename)) {
+				return WM_operator_confirm_message(C, op, "Cache target already exists! Overwrite?");
+			}
+			else {
+				BKE_reportf(op->reports, RPT_ERROR, "Cannot overwrite cache target: %200s", filename);
+				return OPERATOR_CANCELLED;
+			}
+		}
+		else {
+			BKE_reportf(op->reports, RPT_ERROR, "Invalid cache target: %200s", filename);
+			return OPERATOR_CANCELLED;
+		}
+	}
+	else {
+		return smoke_vdb_export_exec(C, op);
+	}
+
+	UNUSED_VARS(event);
+}
+
 void OBJECT_OT_smoke_vdb_export(wmOperatorType *ot)
 {
 	ot->name = "Export to OpenVDB";
 	ot->description = "Export simulation to the OpenVDB representation";
 	ot->idname = "OBJECT_OT_smoke_vdb_export";
 
+	ot->invoke = smoke_vdb_export_invoke;
 	ot->poll = ED_operator_object_active_editable;
 	ot->exec = smoke_vdb_export_exec;




More information about the Bf-blender-cvs mailing list