[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