Fix T49111: Automatically add file path suffix for Alembic and Collada
authorKévin Dietrich <kevin.dietrich@mailoo.org>
Fri, 19 Aug 2016 02:42:12 +0000 (04:42 +0200)
committerKévin Dietrich <kevin.dietrich@mailoo.org>
Fri, 19 Aug 2016 02:42:45 +0000 (04:42 +0200)
export.

This aligns the behaviour of the file selection with the other
exporters. The Alembic case would fail if the filepath did not have an
extension set.

Also set a default file name for the Alembic export operator in case the
Blender file was not saved before exporting.

source/blender/editors/io/io_alembic.c
source/blender/editors/io/io_collada.c

index 63c6f3dfecfe73d856180dd8bd232ed262ae9e9e..96a3ef1f2f6ba92e9d721c79be07a97c524aaab3 100644 (file)
 static int wm_alembic_export_invoke(bContext *C, wmOperator *op, const wmEvent *event)
 {
        if (!RNA_struct_property_is_set(op->ptr, "filepath")) {
+               Main *bmain = CTX_data_main(C);
                char filepath[FILE_MAX];
-               BLI_strncpy(filepath, G.main->name, sizeof(filepath));
+
+               if (bmain->name[0] == '\0') {
+                       BLI_strncpy(filepath, "untitled", sizeof(filepath));
+               }
+               else {
+                       BLI_strncpy(filepath, bmain->name, sizeof(filepath));
+               }
+
                BLI_replace_extension(filepath, sizeof(filepath), ".abc");
                RNA_string_set(op->ptr, "filepath", filepath);
        }
@@ -213,6 +221,20 @@ static void wm_alembic_export_draw(bContext *UNUSED(C), wmOperator *op)
        ui_alembic_export_settings(op->layout, &ptr);
 }
 
+static bool wm_alembic_export_check(bContext *UNUSED(C), wmOperator *op)
+{
+       char filepath[FILE_MAX];
+       RNA_string_get(op->ptr, "filepath", filepath);
+
+       if (!BLI_testextensie(filepath, ".abc")) {
+               BLI_ensure_extension(filepath, FILE_MAX, ".abc");
+               RNA_string_set(op->ptr, "filepath", filepath);
+               return true;
+       }
+
+       return false;
+}
+
 void WM_OT_alembic_export(wmOperatorType *ot)
 {
        ot->name = "Export Alembic";
@@ -223,6 +245,7 @@ void WM_OT_alembic_export(wmOperatorType *ot)
        ot->exec = wm_alembic_export_exec;
        ot->poll = WM_operator_winactive;
        ot->ui = wm_alembic_export_draw;
+       ot->check = wm_alembic_export_check;
 
        WM_operator_properties_filesel(ot, FILE_TYPE_FOLDER | FILE_TYPE_ALEMBIC,
                                       FILE_BLENDER, FILE_SAVE, WM_FILESEL_FILEPATH,
index d62651cef81b658fb1c3419d0987f485c907149e..8659100df87416c3f05e3cecd1973e536f64b28e 100644 (file)
@@ -280,6 +280,20 @@ static void wm_collada_export_draw(bContext *UNUSED(C), wmOperator *op)
        uiCollada_exportSettings(op->layout, &ptr);
 }
 
+static bool wm_collada_export_check(bContext *UNUSED(C), wmOperator *op)
+{
+       char filepath[FILE_MAX];
+       RNA_string_get(op->ptr, "filepath", filepath);
+
+       if (!BLI_testextensie(filepath, ".dae")) {
+               BLI_ensure_extension(filepath, FILE_MAX, ".dae");
+               RNA_string_set(op->ptr, "filepath", filepath);
+               return true;
+       }
+
+       return false;
+}
+
 void WM_OT_collada_export(wmOperatorType *ot)
 {
        static EnumPropertyItem prop_bc_export_mesh_type[] = {
@@ -302,6 +316,7 @@ void WM_OT_collada_export(wmOperatorType *ot)
        ot->invoke = wm_collada_export_invoke;
        ot->exec = wm_collada_export_exec;
        ot->poll = WM_operator_winactive;
+       ot->check = wm_collada_export_check;
 
        ot->flag |= OPTYPE_PRESET;