Browse Source

nviz/wxGUI: redirect error message from nviz module

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@32231 15284696-431f-4ddb-bdfa-cd5b030d7da7
Martin Landa 17 years ago
parent
commit
8edea38548

+ 1 - 1
gui/wxpython/gui_modules/goutput.py

@@ -105,7 +105,7 @@ class GMConsole(wx.Panel):
         """
         if Debug.get_level() == 0:
             # don't redirect when debugging is enabled
-            # sys.stderr = self.cmd_stderr
+            sys.stderr = self.cmd_stderr
             
             return True
 

+ 18 - 8
gui/wxpython/gui_modules/nviz.py

@@ -142,6 +142,7 @@ class GLWindow(MapWindow, glcanvas.GLCanvas):
 
         dc = wx.PaintDC(self)
         self.SetCurrent()
+        
         if not self.init:
             self.nvizClass.InitView()
 
@@ -343,13 +344,21 @@ class GLWindow(MapWindow, glcanvas.GLCanvas):
         while(len(listOfItems) > 0):
             item = listOfItems.pop()
             type = self.tree.GetPyData(item)[0]['type']
+            
+            try:
+                if type == 'raster':
+                    self.LoadRaster(item)
+            except gcmd.NvizError, e:
+                print >> sys.stderr, "Nviz: %s" % (self.nvizClass.GetErrorMsg())
+                print >> sys.stderr, "Nviz: " + e.message
+
+            try:
+                if type == 'vector':
+                    self.LoadVector(item)
+            except gcmd.NvizError, e:
+                print >> sys.stderr, "Nviz: %s" % (self.nvizClass.GetErrorMsg())
+                print >> sys.stderr, "Nviz: " + e.message
 
-            if type == 'raster':
-                self.LoadRaster(item)
-
-            elif type == 'vector':
-                self.LoadVector(item)
-                
         stop = time.time()
         
         Debug.msg(3, "GLWindow.LoadDataLayers(): time=%f" % (stop-start))
@@ -402,7 +411,7 @@ class GLWindow(MapWindow, glcanvas.GLCanvas):
         id = self.nvizClass.LoadSurface(str(layer.name), None, None)
         if id < 0:
             raise gcmd.NvizError(parent=self.parent,
-                                 message=_("Unable to load raster map <%s>" % layer.name))
+                                 message=_("Raster map <%s> not loaded" % layer.name))
         
         self.layers['raster']['name'].append(layer.name)
         self.layers['raster']['id'].append(id)
@@ -587,7 +596,8 @@ class GLWindow(MapWindow, glcanvas.GLCanvas):
 
             if id < 0:
                 raise gcmd.NvizError(parent=self.parent,
-                                     message=_("Unable to load vector map <%s>" % layer.name))
+                                     message=_("Vector map <%s> (%s) not loaded" % \
+                                                   (layer.name, type)))
 
             self.layers['v' + type]['name'].append(layer.name)
             self.layers['v'  + type]['id'].append(id)

+ 3 - 0
gui/wxpython/gui_modules/workspace.py

@@ -426,6 +426,9 @@ class WriteWorkspaceFile(object):
         for attrb in data.iterkeys():
             if len(data[attrb]) < 1: # skip empty attributes
                 continue
+            if attrb == 'object':
+                continue
+            
             for name in data[attrb].iterkeys():
                 # surface attribute
                 if attrb == 'attribute':

+ 28 - 0
gui/wxpython/nviz/init.cpp

@@ -19,6 +19,8 @@
 #include "nviz.h"
 
 static void swap_gl();
+static int print_error(const char *, const int);
+static std::string *error;
 
 /*!
   \brief Initialize Nviz class instance
@@ -27,6 +29,9 @@ Nviz::Nviz()
 {
     G_gisinit(""); /* GRASS functions */
 
+    error = new std::string();
+
+    G_set_error_routine(&print_error);
     G_set_verbose(0); // TODO: read progress info
 
     GS_libinit();
@@ -51,6 +56,8 @@ Nviz::~Nviz()
 
     data = NULL;
     glCanvas = NULL;
+
+    delete error;
 }
 
 /*!
@@ -127,3 +134,24 @@ void Nviz::SetBgColor(const char *color_str)
 
     return;
 }
+
+std::string Nviz::GetErrorMsg()
+{
+    if (error) {
+	std::string retStr(*error);
+	error->clear();
+	return retStr;
+    }
+
+    return std::string();
+}
+
+int print_error(const char *msg, const int type)
+{
+    if (error) {
+	error->append(msg);
+	error->append("\n");
+    }
+
+    return 0;
+}

+ 3 - 0
gui/wxpython/nviz/nviz.h

@@ -1,6 +1,7 @@
 #ifndef WXNVIZ_H
 #define WXNVIZ_H
 
+#include <string>
 #include <vector>
 
 extern "C" {
@@ -41,6 +42,8 @@ public:
     /* destructor */
     ~Nviz();
 
+    std::string GetErrorMsg();
+
     /* change_view.cpp */
     int ResizeWindow(int, int);
     std::vector<double> SetViewDefault();

+ 3 - 0
gui/wxpython/nviz/nviz.i

@@ -16,4 +16,7 @@ namespace std {
 namespace std { 
    %template(IntVecIntMap) map<int, vector<int> >;
 }
+
+%include "std_string.i"
+
 %include "nviz.h"