From 3e2bb0f1684891f28f4c6d6dff5dc70ec2855a6c Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Thu, 31 Jul 2014 10:40:45 -0700 Subject: [PATCH] Add more complete error handling for import/export models --- examples/editModels.js | 25 +++++++++++++------ interface/src/Application.cpp | 9 ++++--- interface/src/Application.h | 2 +- .../scripting/ClipboardScriptingInterface.cpp | 8 +++--- .../scripting/ClipboardScriptingInterface.h | 4 +-- 5 files changed, 31 insertions(+), 17 deletions(-) diff --git a/examples/editModels.js b/examples/editModels.js index 1a5753838d..f3650bada2 100644 --- a/examples/editModels.js +++ b/examples/editModels.js @@ -218,7 +218,10 @@ var ExportMenu = function(opts) { var filename = "models__" + Window.location.hostname + "__" + x + "_" + y + "_" + z + "_" + s + "__.svo"; filename = Window.save("Select where to save", filename, "*.svo") if (filename) { - Clipboard.exportModels(filename, x, y, z, s); + var success = Clipboard.exportModels(filename, x, y, z, s); + if (!succcess) { + WIndow.alert("Export failed: no models found in selected area."); + } } self.close(); }; @@ -431,16 +434,24 @@ var ModelImporter = function(opts) { } } else { if (Window.confirm(("Would you like to import back to the source location?"))) { - Clipboard.importModels(filename); - Clipboard.pasteModels(x, y, z, 1); + var success = Clipboard.importModels(filename); + if (success) { + Clipboard.pasteModels(x, y, z, 1); + } else { + Window.alert("There was an error importing the model file."); + } return; } } } - Clipboard.importModels(filename); - self._importing = true; - self.setImportVisible(true); - Overlays.editOverlay(importBoundaries, { size: s }); + var success = Clipboard.importModels(filename); + if (success) { + self._importing = true; + self.setImportVisible(true); + Overlays.editOverlay(importBoundaries, { size: s }); + } else { + Window.alert("There was an error importing the model file."); + } } } } diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index e469cc7535..540cb47a79 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -1614,10 +1614,13 @@ void Application::importVoxels() { emit importDone(); } -void Application::importModels(const QString& filename) { +bool Application::importModels(const QString& filename) { _modelClipboard.eraseAllOctreeElements(); - _modelClipboard.readFromSVOFile(filename.toLocal8Bit().constData()); - _modelClipboard.reaverageOctreeElements(); + bool success = _modelClipboard.readFromSVOFile(filename.toLocal8Bit().constData()); + if (success) { + _modelClipboard.reaverageOctreeElements(); + } + return success; } void Application::pasteModels(float x, float y, float z) { diff --git a/interface/src/Application.h b/interface/src/Application.h index 44a93f5d7b..d15d8ae63f 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -317,7 +317,7 @@ public slots: void pasteModels(float x, float y, float z); bool exportModels(const QString& filename, float x, float y, float z, float scale); - void importModels(const QString& filename); + bool importModels(const QString& filename); void importVoxels(); // doesn't include source voxel because it goes to clipboard void cutVoxels(const VoxelDetail& sourceVoxel); diff --git a/interface/src/scripting/ClipboardScriptingInterface.cpp b/interface/src/scripting/ClipboardScriptingInterface.cpp index 10799c2abb..aa4a06fa50 100644 --- a/interface/src/scripting/ClipboardScriptingInterface.cpp +++ b/interface/src/scripting/ClipboardScriptingInterface.cpp @@ -102,12 +102,12 @@ void ClipboardScriptingInterface::nudgeVoxel(float x, float y, float z, float s, } -void ClipboardScriptingInterface::exportModels(const QString& filename, float x, float y, float z, float s) { - Application::getInstance()->exportModels(filename, x, y, z, s); +bool ClipboardScriptingInterface::exportModels(const QString& filename, float x, float y, float z, float s) { + return Application::getInstance()->exportModels(filename, x, y, z, s); } -void ClipboardScriptingInterface::importModels(const QString& filename) { - Application::getInstance()->importModels(filename); +bool ClipboardScriptingInterface::importModels(const QString& filename) { + return Application::getInstance()->importModels(filename); } void ClipboardScriptingInterface::pasteModels(float x, float y, float z, float s) { diff --git a/interface/src/scripting/ClipboardScriptingInterface.h b/interface/src/scripting/ClipboardScriptingInterface.h index 373a7308ae..aa5234a115 100644 --- a/interface/src/scripting/ClipboardScriptingInterface.h +++ b/interface/src/scripting/ClipboardScriptingInterface.h @@ -43,8 +43,8 @@ public slots: void nudgeVoxel(const VoxelDetail& sourceVoxel, const glm::vec3& nudgeVec); void nudgeVoxel(float x, float y, float z, float s, const glm::vec3& nudgeVec); - void importModels(const QString& filename); - void exportModels(const QString& filename, float x, float y, float z, float s); + bool importModels(const QString& filename); + bool exportModels(const QString& filename, float x, float y, float z, float s); void pasteModels(float x, float y, float z, float s); };