[GRASS-SVN] r32848 - in grass/branches/develbranch_6/gui/wxpython: gui_modules nviz

svn_grass at osgeo.org svn_grass at osgeo.org
Sun Aug 17 17:39:34 EDT 2008


Author: martinl
Date: 2008-08-17 17:39:32 -0400 (Sun, 17 Aug 2008)
New Revision: 32848

Modified:
   grass/branches/develbranch_6/gui/wxpython/gui_modules/nviz_mapdisp.py
   grass/branches/develbranch_6/gui/wxpython/gui_modules/nviz_tools.py
   grass/branches/develbranch_6/gui/wxpython/nviz/nviz.h
   grass/branches/develbranch_6/gui/wxpython/nviz/volume.cpp
Log:
wxGUI/nviz2: better isosurface draw mode support, added methods to change isosurface attributes

Modified: grass/branches/develbranch_6/gui/wxpython/gui_modules/nviz_mapdisp.py
===================================================================
--- grass/branches/develbranch_6/gui/wxpython/gui_modules/nviz_mapdisp.py	2008-08-17 19:49:01 UTC (rev 32847)
+++ grass/branches/develbranch_6/gui/wxpython/gui_modules/nviz_mapdisp.py	2008-08-17 21:39:32 UTC (rev 32848)
@@ -400,7 +400,7 @@
             for sec in data.keys():
                 for sec1 in data[sec].keys():
                     for sec2 in data[sec][sec1].keys():
-                        if sec2 not in ('object'):
+                        if sec2 not in ('object', 'all'):
                             data[sec][sec1][sec2]['update'] = None
 
             event = wxUpdateProperties(data=data)
@@ -1059,14 +1059,11 @@
                     if attrb == 'mask':
                         # TODO: invert mask
                         # TODO: broken in NVIZ
-                        # self.nvizClass.UnsetSurfaceMask(id)
-                        pass
+                        self.nvizClass.UnsetIsosurfaceMask(id, isosurfId)
                     elif attrb == 'transp':
-                        # self.nvizClass.UnsetSurfaceTransp(id)
-                        pass
+                        self.nvizClass.UnsetIsosurfaceTransp(id, isosurfId)
                     elif attrb == 'emit':
-                        # self.nvizClass.UnsetSurfaceEmit(id) 
-                        pass
+                        self.nvizClass.UnsetIsosurfaceEmit(id, isosurfId) 
                 else:
                     if type(value) == type('') and \
                             len(value) <= 0: # ignore empty values (TODO: warning)
@@ -1076,17 +1073,13 @@
                     elif attrb == 'mask':
                         # TODO: invert mask
                         # TODO: broken in NVIZ
-                        # self.nvizClass.SetSurfaceMask(id, False, str(value))
-                        pass
+                        self.nvizClass.SetIsosurfaceMask(id, isosurfId, False, str(value))
                     elif attrb == 'transp':
-                        # self.nvizClass.SetSurfaceTransp(id, map, str(value)) 
-                        pass
+                        self.nvizClass.SetIsosurfaceTransp(id, isosurfId, map, str(value)) 
                     elif attrb == 'shine':
-                        # self.nvizClass.SetSurfaceShine(id, map, str(value)) 
-                        pass
+                        self.nvizClass.SetIsosurfaceShine(id, isosurfId, map, str(value)) 
                     elif attrb == 'emit':
-                        # self.nvizClass.SetSurfaceEmit(id, map, str(value)) 
-                        pass
+                        self.nvizClass.SetIsosurfaceEmit(id, isosurfId, map, str(value)) 
                 isosurf[attrb].pop('update')
             isosurfId += 1
         

Modified: grass/branches/develbranch_6/gui/wxpython/gui_modules/nviz_tools.py
===================================================================
--- grass/branches/develbranch_6/gui/wxpython/gui_modules/nviz_tools.py	2008-08-17 19:49:01 UTC (rev 32847)
+++ grass/branches/develbranch_6/gui/wxpython/gui_modules/nviz_tools.py	2008-08-17 21:39:32 UTC (rev 32848)
@@ -6,7 +6,6 @@
 Classes:
  - NvizToolWindow
  - ViewPositionWindow
- - IsoSurfList
 
 (C) 2008 by the GRASS Development Team
 
@@ -797,8 +796,11 @@
         gridSizer = wx.GridBagSizer(vgap=3, hgap=3)
 
         # list
-        isolevel = IsoSurfList(parent=panel, win=self.win['volume'],
-                               size=(300, 150))
+        isolevel = wx.CheckListBox(parent=panel, id=wx.ID_ANY,
+                                   size=(300, 150))
+        self.Bind(wx.EVT_CHECKLISTBOX, self.OnVolumeIsosurfCheck, isolevel)
+        self.Bind(wx.EVT_LISTBOX, self.OnVolumeIsosurfSelect, isolevel)
+
         self.win['volume']['isosurfs'] = isolevel.GetId()
         gridSizer.Add(item=isolevel, pos=(0, 0), span=(4, 1))
         
@@ -905,8 +907,8 @@
                     value.SetRange(minVal=0, maxVal=255)
                 else:
                     value.SetRange(minVal=0, maxVal=100)
-                value.Bind(wx.EVT_SPINCTRL, self.OnSurfaceMap)
-                value.Bind(wx.EVT_TEXT, self.OnSurfaceMap)
+                value.Bind(wx.EVT_SPINCTRL, self.OnVolumeIsosurfMap)
+                value.Bind(wx.EVT_TEXT, self.OnVolumeIsosurfMap)
             
             if value:
                 self.win['volume'][code]['const'] = value.GetId()
@@ -1613,6 +1615,9 @@
         if not attrb:
             return
 
+        if nvizType == 'volume' and attrb == 'topo':
+            return
+        
         selection = self.FindWindowById(self.win[nvizType][attrb]['use']).GetSelection()
         if self.win[nvizType][attrb]['required']:
             selection += 1
@@ -2063,7 +2068,50 @@
     def OnVolumeIsosurfMap(self, event):
         """Set surface attribute"""
         self.SetMapObjAttrb(nvizType='volume', winId=event.GetId())
-                
+
+    def OnVolumeIsosurfCheck(self, event):
+        """Isosurface checked (->load) or unchecked (->unload)"""
+        index = event.GetSelection()
+        list = self.FindWindowById(self.win['volume']['isosurfs'])
+        data = self.mapWindow.GetSelectedLayer(type='nviz')['volume']
+        id = data['object']['id']
+        
+        isosurfId = event.GetSelection()
+        
+        if list.IsChecked(index):
+            self.mapWindow.nvizClass.SetIsosurfaceTransp(id, isosurfId, False, "0")
+        else:
+            # disable -> make transparent
+            self.mapWindow.nvizClass.SetIsosurfaceTransp(id, isosurfId, False, "255")
+        
+        if self.parent.autoRender.IsChecked():
+            self.mapWindow.Refresh(False)
+        
+    def OnVolumeIsosurfSelect(self, event):
+        """Isosurface item selected"""
+        winUp = self.FindWindowById(self.win['volume']['btnIsosurfMoveUp'])
+        winDown = self.FindWindowById(self.win['volume']['btnIsosurfMoveDown'])
+        selection = event.GetSelection()
+        if selection == 0:
+            winUp.Enable(False)
+            if not winDown.IsEnabled():
+                winDown.Enable()
+        elif selection == self.FindWindowById(event.GetId()).GetCount() - 1:
+            winDown.Enable(False)
+            if not winUp.IsEnabled():
+                winUp.Enable()
+        else:
+            if not winDown.IsEnabled():
+                winDown.Enable()
+            if not winUp.IsEnabled():
+                winUp.Enable()
+        
+        # update dialog
+        layer = self.mapWindow.GetSelectedLayer()
+        data = self.mapWindow.GetSelectedLayer(type='nviz')['volume']['isosurface'][selection]
+        
+        self.UpdateVolumeIsosurfPage(layer, data)
+
     def OnVolumeIsosurfAdd(self, event):
         """Add new isosurface to the list"""
         list = self.FindWindowById(self.win['volume']['isosurfs'])
@@ -2499,36 +2547,50 @@
 
         self.SetIsosurfaceMode(data['draw']['shading']['value'])
         self.SetIsosurfaceResolution(data['draw']['resolution']['value'])
-                
+            
+        self.UpdateVolumeIsosurfPage(layer, data['attribute'])
+        
+    def UpdateVolumeIsosurfPage(self, layer, data):
+        """Update dialog -- isosurface attributes"""
         #
         # isosurface attributes
         #
-        for attr in ('color', ): # required
-            if layer and layer.type == '3d-raster':
-                self.FindWindowById(self.win['volume'][attr]['map']).SetValue(layer.name)
+        for attrb in ('topo', 'color', 'mask',
+                     'transp', 'shine', 'emit'):
+            # check required first
+            if attrb == 'topo':
+                self.FindWindowById(self.win['volume'][attrb]['const']).SetValue(0)
+                continue
+            if attrb == 'color':
+                if layer and layer.type == '3d-raster':
+                    self.FindWindowById(self.win['volume'][attrb]['map']).SetValue(layer.name)
+                else:
+                    self.FindWindowById(self.win['volume'][attrb]['map']).SetValue('')
+                self.SetMapObjUseMap(nvizType='volume',
+                                     attrb=attrb, map=True) # -> map
+                continue
+
+            # skip empty attributes
+            if not data.has_key(attrb):
+                continue
+            
+            value = data[attrb]['value']
+            if attrb == 'color':
+                if data[attrb]['map']:
+                    self.FindWindowById(self.win['volume'][attrb]['map']).SetValue(value)
+                else: # constant
+                    color = map(int, value.split(':'))
+                    self.FindWindowById(self.win['volume'][attrb]['const']).SetColour(color)
             else:
-                self.FindWindowById(self.win['volume'][attr]['map']).SetValue('')
+                if data[attrb]['map']:
+                    win = self.FindWindowById(self.win['volume'][attrb]['map'])
+                else:
+                    win = self.FindWindowById(self.win['volume'][attrb]['const'])
+                win.SetValue(value)
+            
             self.SetMapObjUseMap(nvizType='volume',
-                                 attrb=attr, map=True) # -> map
-        
-        if data['attribute'].has_key('color'):
-            value = data['attribute']['color']['value']
-            if data['attribute']['color']['map']:
-                self.FindWindowById(self.win['volume']['color']['map']).SetValue(value)
-            else: # constant
-                color = map(int, value.split(':'))
-                self.FindWindowById(self.win['volume']['color']['const']).SetColour(color)
-            self.SetMapObjUseMap(nvizType='volume',
-                                 attrb=attr, map=data['attribute']['color']['map'])
-
-        self.SetMapObjUseMap(nvizType='volume',
-                             attrb='shine', map=data['attribute']['shine']['map'])
-        value = data['attribute']['shine']['value']
-        if data['attribute']['shine']['map']:
-            self.FindWindowById(self.win['volume']['shine']['map']).SetValue(value)
-        else:
-            self.FindWindowById(self.win['volume']['shine']['const']).SetValue(value)
-        
+                                 attrb=attrb, map=data[attrb]['map'])
+            
     def SetPage(self, name):
         """Get named page"""
         self.notebook.SetSelection(self.page[name]['id'])
@@ -2604,37 +2666,4 @@
             self.mapWindow.Refresh(eraseBackground=False)
         
         event.Skip()
-
-class IsoSurfList(wx.CheckListBox):
-    """List of loaded volume isosurfaces (volume properties page)"""
-    def __init__(self, parent, win, id=wx.ID_ANY, size=wx.DefaultSize):
-        self.parent = parent
-        self.win = win
-        
-        wx.CheckListBox.__init__(self, parent, id, size=size)
-    
-        self.Bind(wx.EVT_CHECKLISTBOX, self.OnCheck)
-        self.Bind(wx.EVT_LISTBOX, self.OnSelect)
-    
-    def OnCheck(self, event):
-        """Item checked/unchecked -> load/delete surface"""
-        # event.IsChecked()
-        
-    def OnSelect(self, event):
-        """Item selected"""
-        winUp = self.parent.FindWindowById(self.win['btnIsosurfMoveUp'])
-        winDown = self.parent.FindWindowById(self.win['btnIsosurfMoveDown'])
-        selection = event.GetSelection()
-        if selection == 0:
-            winUp.Enable(False)
-            if not winDown.IsEnabled():
-                winDown.Enable()
-        elif selection == self.GetCount() - 1:
-            winDown.Enable(False)
-            if not winUp.IsEnabled():
-                winUp.Enable()
-        else:
-            if not winDown.IsEnabled():
-                winDown.Enable()
-            if not winUp.IsEnabled():
-                winUp.Enable()
+  

Modified: grass/branches/develbranch_6/gui/wxpython/nviz/nviz.h
===================================================================
--- grass/branches/develbranch_6/gui/wxpython/nviz/nviz.h	2008-08-17 19:49:01 UTC (rev 32847)
+++ grass/branches/develbranch_6/gui/wxpython/nviz/nviz.h	2008-08-17 21:39:32 UTC (rev 32848)
@@ -104,6 +104,13 @@
     int DeleteIsosurface(int, int);
     int MoveIsosurface(int, int, bool);
     int SetIsosurfaceColor(int, int, bool, const char *);
+    int SetIsosurfaceMask(int, int, bool, const char *);
+    int SetIsosurfaceTransp(int, int, bool, const char *);
+    int SetIsosurfaceShine(int, int, bool, const char *);
+    int SetIsosurfaceEmit(int, int, bool, const char *);
+    int UnsetIsosurfaceMask(int, int);
+    int UnsetIsosurfaceTransp(int, int);
+    int UnsetIsosurfaceEmit(int, int);
     int SetIsosurfaceMode(int, int);
     int SetIsosurfaceRes(int, int);
 };

Modified: grass/branches/develbranch_6/gui/wxpython/nviz/volume.cpp
===================================================================
--- grass/branches/develbranch_6/gui/wxpython/nviz/volume.cpp	2008-08-17 19:49:01 UTC (rev 32847)
+++ grass/branches/develbranch_6/gui/wxpython/nviz/volume.cpp	2008-08-17 21:39:32 UTC (rev 32848)
@@ -103,9 +103,9 @@
 }
 
 /*!
-  \brief Set surface color
+  \brief Set isosurface color
 
-  \param id surface id
+  \param id volume id
   \param isosurf_id isosurface id (0 - MAX_ISOSURFS)
   \param map if true use map otherwise constant
   \param value map name of value
@@ -113,7 +113,7 @@
   \return 1 on success
   \return -1 volume not found
   \return -2 isosurface not found
-  \return -3 setting attributes failed
+  \return -3 on failure
 */
 int Nviz::SetIsosurfaceColor(int id, int isosurf_id,
 			     bool map, const char *value)
@@ -122,6 +122,84 @@
 }
 
 /*!
+  \brief Set isosurface mask
+
+  @todo invert
+  
+  \param id volume id
+  \param isosurf_id isosurface id (0 - MAX_ISOSURFS)
+  \param invert true for invert mask
+  \param value map name to be used for mask
+
+  \return 1 on success
+  \return -1 volume not found
+  \return -2 isosurface not found
+  \return -3 on failure
+*/
+int Nviz::SetIsosurfaceMask(int id, int isosurf_id,
+			    bool invert, const char *value)
+{
+    return SetIsosurfaceAttr(id, isosurf_id, ATT_MASK, true, value);
+}
+
+/*!
+  \brief Set isosurface transparency
+
+  \param id volume id
+  \param isosurf_id isosurface id (0 - MAX_ISOSURFS)
+  \param map if true use map otherwise constant
+  \param value map name of value
+
+  \return 1 on success
+  \return -1 volume not found
+  \return -2 isosurface not found
+  \return -3 on failure
+*/
+int Nviz::SetIsosurfaceTransp(int id, int isosurf_id,
+			      bool map, const char *value)
+{
+    return SetIsosurfaceAttr(id, isosurf_id, ATT_TRANSP, map, value);
+}
+
+/*!
+  \brief Set isosurface shininess
+
+  \param id volume id
+  \param isosurf_id isosurface id (0 - MAX_ISOSURFS)
+  \param map if true use map otherwise constant
+  \param value map name of value
+
+  \return 1 on success
+  \return -1 volume not found
+  \return -2 isosurface not found
+  \return -3 on failure
+*/
+int Nviz::SetIsosurfaceShine(int id, int isosurf_id,
+			     bool map, const char *value)
+{
+    return SetIsosurfaceAttr(id, isosurf_id, ATT_SHINE, map, value);
+}
+
+/*!
+  \brief Set isosurface emission
+
+  \param id volume id
+  \param isosurf_id isosurface id (0 - MAX_ISOSURFS)
+  \param map if true use map otherwise constant
+  \param value map name of value
+
+  \return 1 on success
+  \return -1 volume not found
+  \return -2 isosurface not found
+  \return -3 on failure
+*/
+int Nviz::SetIsosurfaceEmit(int id, int isosurf_id,
+			    bool map, const char *value)
+{
+    return SetIsosurfaceAttr(id, isosurf_id, ATT_EMIT, map, value);
+}
+
+/*!
   \brief Set isosurface attribute
 
   \param id volume id
@@ -171,6 +249,54 @@
 }
 
 /*!
+  \brief Unset isosurface mask
+
+  \param id volume id
+  \param isosurf_id isosurface id (0 - MAX_ISOSURFS)
+
+  \return 1 on success
+  \return -1 volume not found
+  \return -2 isosurface not found
+  \return -3 setting attributes failed
+*/
+int Nviz::UnsetIsosurfaceMask(int id, int isosurf_id)
+{
+    return UnsetIsosurfaceAttr(id, isosurf_id, ATT_MASK);
+}
+
+/*!
+  \brief Unset isosurface transparency
+
+  \param id volume id
+  \param isosurf_id isosurface id (0 - MAX_ISOSURFS)
+
+  \return 1 on success
+  \return -1 volume not found
+  \return -2 isosurface not found
+  \return -3 setting attributes failed
+*/
+int Nviz::UnsetIsosurfaceTransp(int id, int isosurf_id)
+{
+    return UnsetIsosurfaceAttr(id, isosurf_id, ATT_TRANSP);
+}
+
+/*!
+  \brief Unset isosurface emission
+
+  \param id volume id
+  \param isosurf_id isosurface id (0 - MAX_ISOSURFS)
+
+  \return 1 on success
+  \return -1 volume not found
+  \return -2 isosurface not found
+  \return -3 setting attributes failed
+*/
+int Nviz::UnsetIsosurfaceEmit(int id, int isosurf_id)
+{
+    return UnsetIsosurfaceAttr(id, isosurf_id, ATT_EMIT);
+}
+
+/*!
   \brief Unset surface attribute
 
   \param id surface id



More information about the grass-commit mailing list