[GRASS-SVN] r32744 - in grass/trunk/gui/wxpython: gui_modules nviz
svn_grass at osgeo.org
svn_grass at osgeo.org
Wed Aug 13 12:47:23 EDT 2008
Author: martinl
Date: 2008-08-13 12:47:21 -0400 (Wed, 13 Aug 2008)
New Revision: 32744
Modified:
grass/trunk/gui/wxpython/gui_modules/nviz.py
grass/trunk/gui/wxpython/nviz/nviz.h
grass/trunk/gui/wxpython/nviz/volume.cpp
Log:
wxGUI/nviz: volume-related updates backported from devbr6, r32739 and r32740
Modified: grass/trunk/gui/wxpython/gui_modules/nviz.py
===================================================================
--- grass/trunk/gui/wxpython/gui_modules/nviz.py 2008-08-13 16:08:13 UTC (rev 32743)
+++ grass/trunk/gui/wxpython/gui_modules/nviz.py 2008-08-13 16:47:21 UTC (rev 32744)
@@ -409,9 +409,11 @@
elif type == '3d-raster':
data[nvizType] = {}
- for sec in ('attribute', 'draw', 'position',
- 'isosurface', 'slice'):
+ for sec in ('attribute', 'draw', 'position'):
data[nvizType][sec] = {}
+ for sec in ('isosurface', 'slice'):
+ data[nvizType][sec] = []
+
# reset to default properties
self.SetVolumeDefaultProp(data[nvizType])
@@ -932,6 +934,12 @@
# -> initialized
data['surface']['object']['init'] = True
+ elif mapLayer.type == '3d-raster':
+ id = data['volume']['object']['id']
+ self.UpdateVolumeProperties(id, data['volume'])
+ # -> initialized
+ data['volume']['object']['init'] = True
+
elif mapLayer.type == 'vector':
for type in ('lines', 'points'):
if data['vector'][type].has_key('object'):
@@ -941,8 +949,7 @@
data['vector'][type]['object']['init'] = True
def UpdateRasterProperties(self, id, data):
- """Apply changes for surfaces"""
-
+ """Update surface layer properties"""
# surface attributes
for attrb in ('topo', 'color', 'mask',
'transp', 'shine', 'emit'):
@@ -1022,7 +1029,11 @@
z = data['position']['z']
self.nvizClass.SetSurfacePosition(id, x, y, z)
self.update.remove('surface:position')
-
+
+ def UpdateRasterProperties(self, id, data):
+ """Apply volume layer properties"""
+ pass
+
def UpdateVectorProperties(self, id, data, type):
"""Update vector layer properties
@@ -1836,7 +1847,7 @@
_("gouraud")])
shade.SetName("selection")
self.win['volume']['draw']['shading'] = shade.GetId()
- # shade.Bind(wx.EVT_CHOICE, self.OnSurfaceMode)
+ shade.Bind(wx.EVT_CHOICE, self.OnVolumeIsosurfMode)
gridSizer.Add(item=shade, flag=wx.ALIGN_CENTER_VERTICAL,
pos=(0, 3))
@@ -1850,7 +1861,7 @@
max=100)
resol.SetName("value")
self.win['volume']['draw']['resolution'] = resol.GetId()
- # resC.Bind(wx.EVT_SPINCTRL, self.OnSurfaceResolution)
+ resol.Bind(wx.EVT_SPINCTRL, self.OnVolumeIsosurfResolution)
gridSizer.Add(item=resol, pos=(0, 5))
boxSizer.Add(item=gridSizer, proportion=1,
@@ -1875,7 +1886,7 @@
# buttons (add, delete, move up, move down)
btnAdd = wx.Button(parent=panel, id=wx.ID_ADD)
- self.win['volume']['btnIsoSurfAdd'] = btnAdd.GetId()
+ self.win['volume']['btnIsosurfAdd'] = btnAdd.GetId()
btnAdd.Bind(wx.EVT_BUTTON, self.OnVolumeIsosurfAdd)
gridSizer.Add(item=btnAdd,
pos=(0, 1))
@@ -1931,7 +1942,7 @@
else:
use = None
# check for required properties
- if code not in ('topo', 'color'):
+ if code not in ('topo', 'color', 'shine'):
use.Insert(item=_("unset"), pos=0)
self.win['volume'][code]['required'] = False
else:
@@ -3028,40 +3039,121 @@
if self.parent.autoRender.IsChecked():
self.mapWindow.Refresh(False)
+ def UpdateIsosurfButtons(self, list):
+ """Enable/disable buttons 'add', 'delete',
+ 'move up', 'move down'"""
+ nitems = list.GetCount()
+ add = self.parent.FindWindowById(self.win['volume']['btnIsosurfAdd'])
+ delete = self.parent.FindWindowById(self.win['volume']['btnIsosurfDelete'])
+ moveDown = self.parent.FindWindowById(self.win['volume']['btnIsosurfMoveDown'])
+ moveUp = self.parent.FindWindowById(self.win['volume']['btnIsosurfMoveUp'])
+ if nitems >= wxnviz.MAX_ISOSURFS:
+ # disable add button on max
+ add.Enable(False)
+ else:
+ add.Enable(True)
+
+ if nitems < 1:
+ # disable 'delete' if only one item in the lis
+ delete.Enable(False)
+ else:
+ delete.Enable(True)
+
+ if list.GetSelection() >= nitems - 1:
+ # disable 'move-down' if last
+ moveDown.Enable(False)
+ else:
+ moveDown.Enable(True)
+
+ if list.GetSelection() < 1:
+ # disable 'move-up' if first
+ moveUp.Enable(False)
+ else:
+ moveUp.Enable(True)
+
+ def OnVolumeIsosurfMode(self, event):
+ """Set isosurface draw mode"""
+ layer = self.mapWindow.GetSelectedLayer()
+ data = self.mapWindow.GetSelectedLayer(type='nviz')['volume']
+ id = data['object']['id']
+
+ mode = 0
+ value = event.GetSelection()
+ if value == 0:
+ mode |= wxnviz.DM_FLAT
+ else:
+ mode |= wxnviz.DM_GOURAUD
+
+ self.mapWindow.nvizClass.SetIsosurfaceMode(id, mode)
+
+ if self.parent.autoRender.IsChecked():
+ self.mapWindow.Refresh(False)
+
+ def OnVolumeIsosurfResolution(self, event):
+ """Set isosurface draw resolution"""
+ layer = self.mapWindow.GetSelectedLayer()
+ data = self.mapWindow.GetSelectedLayer(type='nviz')['volume']
+ id = data['object']['id']
+ self.mapWindow.nvizClass.SetIsosurfaceRes(id, event.GetInt())
+
+ if self.parent.autoRender.IsChecked():
+ self.mapWindow.Refresh(False)
+
def OnVolumeIsosurfAdd(self, event):
"""Add new isosurface to the list"""
list = self.FindWindowById(self.win['volume']['isosurfs'])
level = self.FindWindowById(self.win['volume']['topo']['const']).GetValue()
- list.Append("%s %s" % (_("Level"), str(level)))
- list.Check(list.GetCount()-1)
- list.SetSelection(list.GetCount()-1)
+ sel = list.GetSelection()
+ if sel < 0 or sel >= list.GetCount() - 1:
+ item = list.Append(item="%s %s" % (_("Level"), str(level)))
+ else:
+ list.Insert(item="%s %s" % (_("Level"), str(level)),
+ pos=sel+1) # append
+ item = sel + 1
+ print item
+ list.Check(item)
+ list.SetSelection(item)
- # add isosurface
layer = self.mapWindow.GetSelectedLayer()
data = self.mapWindow.GetSelectedLayer(type='nviz')['volume']
id = data['object']['id']
+ # collect properties
+ isosurfData = {}
+ for attrb in ('topo', 'color', 'mask',
+ 'transp', 'shine', 'emit'):
+ if attrb == 'topo':
+ isosurfData[attrb] = {}
+ win = self.FindWindowById(self.win['volume'][attrb]['const'])
+ isosurfData[attrb]['value'] = win.GetValue()
+ else:
+ uwin = self.FindWindowById(self.win['volume'][attrb]['use'])
+ sel = uwin.GetSelection()
+ if self.win['volume'][attrb]['required']:
+ sel += 1
+ if sel == 0: # unset
+ continue
+
+ isosurfData[attrb] = {}
+ if sel == 1: # map
+ isosurfData[attrb]['map'] = True
+ vwin = self.FindWindowById(self.win['volume'][attrb]['map'])
+ else: # const
+ isosurfData[attrb]['map'] = False
+ vwin = self.FindWindowById(self.win['volume'][attrb]['const'])
+ isosurfData[attrb]['value'] = vwin.GetValue()
+
+ data['isosurface'].insert(item, isosurfData)
+ print '#', data
+
+ # add isosurface
self.mapWindow.nvizClass.AddIsosurface(id, level)
self.mapWindow.nvizClass.SetIsosurfaceColor(id, 0, True, str(layer.name))
- # disable add button on max
- if list.GetCount() >= wxnviz.MAX_ISOSURFS:
- self.FindWindowById(event.GetId()).Enable(False)
- # disable 'move-down'
- moveDown = self.parent.FindWindowById(self.win['volume']['btnIsosurfMoveDown'])
- if not moveDown.IsEnabled():
- moveDown.Enable(False)
-
- # enable delete & move buttons
- btnDelete = self.FindWindowById(self.win['volume']['btnIsosurfDelete'])
- if not btnDelete.IsEnabled():
- btnDelete.Enable(True)
- if list.GetCount() > 1:
- btnMoveUp = self.FindWindowById(self.win['volume']['btnIsosurfMoveUp'])
- if not btnMoveUp.IsEnabled():
- btnMoveUp.Enable(True)
-
+ # update buttons
+ self.UpdateIsosurfButtons(list)
+
if self.parent.autoRender.IsChecked():
self.mapWindow.Refresh(False)
@@ -3070,7 +3162,6 @@
def OnVolumeIsosurfDelete(self, event):
"""Remove isosurface from list"""
list = self.FindWindowById(self.win['volume']['isosurfs'])
- btn = self.FindWindowById(event.GetId())
# remove item from list
isosurfId = list.GetSelection()
@@ -3079,20 +3170,18 @@
if list.GetCount() > 0:
list.SetSelection(list.GetCount()-1)
- # delete isosurface
layer = self.mapWindow.GetSelectedLayer()
data = self.mapWindow.GetSelectedLayer(type='nviz')['volume']
id = data['object']['id']
+ # delete isosurface
+ del data['isosurface'][isosurfId]
+ print '#', data
self.mapWindow.nvizClass.DeleteIsosurface(id, isosurfId)
# update buttons
- if list.GetCount() < 1:
- btn.Enable(False)
- elif list.GetCount() < 2:
- self.FindWindowById(self.win['volume']['btnIsosurfMoveUp']).Enable(False)
- self.FindWindowById(self.win['volume']['btnIsosurfMoveDown']).Enable(False)
-
+ self.UpdateIsosurfButtons(list)
+
if self.parent.autoRender.IsChecked():
self.mapWindow.Refresh(False)
@@ -3100,12 +3189,68 @@
def OnVolumeIsosurfMoveUp(self, event):
"""Move isosurface up in the list"""
- pass
+ list = self.FindWindowById(self.win['volume']['isosurfs'])
+ sel = list.GetSelection()
+ if sel < 1:
+ return # this should not happen
+
+ layer = self.mapWindow.GetSelectedLayer()
+ data = self.mapWindow.GetSelectedLayer(type='nviz')['volume']
+ id = data['object']['id']
+
+ # move item up
+ text = list.GetStringSelection()
+ list.Insert(item=text, pos=sel-1)
+ list.Check(sel-1)
+ list.SetSelection(sel-1)
+ list.Delete(sel+1)
+ data['isosurface'].insert(sel-1, data['isosurface'][sel])
+ del data['isosurface'][sel+1]
+ self.mapWindow.nvizClass.MoveIsosurface(id, sel, True)
+
+ print '#', data
+
+ # update buttons
+ self.UpdateIsosurfButtons(list)
+
+ if self.parent.autoRender.IsChecked():
+ self.mapWindow.Refresh(False)
+
+ event.Skip()
+
def OnVolumeIsosurfMoveDown(self, event):
"""Move isosurface dowm in the list"""
- pass
+ list = self.FindWindowById(self.win['volume']['isosurfs'])
+ sel = list.GetSelection()
+ if sel >= list.GetCount() - 1:
+ return # this should not happen
+
+ layer = self.mapWindow.GetSelectedLayer()
+ data = self.mapWindow.GetSelectedLayer(type='nviz')['volume']
+ id = data['object']['id']
+
+ # move item up
+ text = list.GetStringSelection()
+ list.Insert(item=text, pos=sel+2)
+ list.Check(sel+2)
+ list.SetSelection(sel+2)
+ list.Delete(sel)
+ data['isosurface'].insert(sel+2, data['isosurface'][sel])
+ del data['isosurface'][sel]
+ self.mapWindow.nvizClass.MoveIsosurface(id, sel, False)
+
+ print '#', data
+
+ # update buttons
+ self.UpdateIsosurfButtons(list)
+
+ if self.parent.autoRender.IsChecked():
+ self.mapWindow.Refresh(False)
+
+ event.Skip()
+
def UpdatePage(self, pageId):
"""Update dialog (selected page)"""
self.pageChanging = True
@@ -3375,7 +3520,9 @@
win.SetSelection(dict['value'])
else:
win.SetValue(dict['value'])
-
+ #self.SetIsosurfaceMode()
+ #self.SetIsosurfaceResolution()
+
#
# isosurface attributes
#
Modified: grass/trunk/gui/wxpython/nviz/nviz.h
===================================================================
--- grass/trunk/gui/wxpython/nviz/nviz.h 2008-08-13 16:08:13 UTC (rev 32743)
+++ grass/trunk/gui/wxpython/nviz/nviz.h 2008-08-13 16:47:21 UTC (rev 32744)
@@ -102,7 +102,10 @@
/* volume */
int AddIsosurface(int, int);
int DeleteIsosurface(int, int);
+ int MoveIsosurface(int, int, bool);
int SetIsosurfaceColor(int, int, bool, const char *);
+ int SetIsosurfaceMode(int, int);
+ int SetIsosurfaceRes(int, int);
};
#endif /* WXNVIZ_H */
Modified: grass/trunk/gui/wxpython/nviz/volume.cpp
===================================================================
--- grass/trunk/gui/wxpython/nviz/volume.cpp 2008-08-13 16:08:13 UTC (rev 32743)
+++ grass/trunk/gui/wxpython/nviz/volume.cpp 2008-08-13 16:47:21 UTC (rev 32744)
@@ -73,6 +73,36 @@
}
/*!
+ \brief Move isosurface up/down in the list
+
+ \param id volume id
+ \param isosurf_id isosurface id
+ \param up if true move up otherwise down
+
+ \return 1 on success
+ \return -1 volume not found
+ \return -2 isosurface not found
+ \return -3 on failure
+*/
+int Nviz::MoveIsosurface(int id, int isosurf_id, bool up)
+{
+ int ret;
+
+ if (!GVL_vol_exists(id))
+ return -1;
+
+ if (isosurf_id > GVL_isosurf_num_isosurfs(id))
+ return -2;
+
+ if (up)
+ ret = GVL_isosurf_move_up(id, isosurf_id);
+ else
+ ret = GVL_isosurf_move_down(id, isosurf_id);
+
+ return ret < 0 ? -3 : 1;
+}
+
+/*!
\brief Set surface color
\param id surface id
@@ -171,3 +201,47 @@
return ret > 0 ? 1 : -2;
}
+
+/*!
+ \brief Set draw mode for isosurfaces
+
+ \param mode
+
+ \return 1 on success
+ \return -1 volume set not found
+ \return -2 on failure
+*/
+int Nviz::SetIsosurfaceMode(int id, int mode)
+{
+ int ret;
+
+ if (!GVL_vol_exists(id)) {
+ return -1;
+ }
+
+ ret = GVL_isosurf_set_drawmode(id, mode);
+
+ return ret < 0 ? -2 : 1;
+}
+
+/*!
+ \brief Set draw resolution for isosurfaces
+
+ \param res resolution value
+
+ \return 1 on success
+ \return -1 volume set not found
+ \return -2 on failure
+*/
+int Nviz::SetIsosurfaceRes(int id, int res)
+{
+ int ret;
+
+ if (!GVL_vol_exists(id)) {
+ return -1;
+ }
+
+ ret = GVL_isosurf_set_drawres(id, res, res, res);
+
+ return ret < 0 ? -2 : 1;
+}
More information about the grass-commit
mailing list