WxNviz GSoC 2011

From GRASS-Wiki
Jump to navigation Jump to search

See wxNviz page.

Accepted Google Summer of Code 2011 project, see also related GSoC 2008 and GSoC 2010 pages.

Student Name: Anna Kratochvilova, Czech University in Prague
Organization: OSGeo - Open Source Geospatial Foundation
Mentor Name: Martin Landa, Helena Mitasova
Title: Completion of wxGUI Nviz extension for 3D data visualization in GRASS GIS
This project continues in the development of GRASS GIS 3D visualizaton tool wxNviz based on wxPython and underlying OGSF library. The goal is to add missing functionality so that wxNviz's predecessor written in Tcl/Tk could be replaced by completed wxNviz in GRASS 7. The plan is to add missing features like animations or cutting planes and additionally implement better view control.



This project continues in the development of wxNviz as 3D visualization tool for native GRASS GUI (wxGUI). Nviz graphical user interface is originally written in Tcl/Tk. Tcl/Tk-based nviz is planed to be removed in GRASS 7 and still waits for its completed successor. Currently wxNviz lacks many features of original Nviz application. The goal of this project is to add the missing functionality and in the result to replace Tcl/Tk-based nviz in GRASS 7 by modern 3D visualization tool integrated in wxGUI.


GRASS GIS (Geographic Resources Analysis Support System) is one of the largest open source Geographic Information Systems. GRASS GIS is a Free Software project released under the GNU General Public License and it is the part of Open Source Geospatial Foundation. GRASS GIS consists of more than 400 modules for spatial analysis, image processing, manipulation and visualization of many types of data. It is widely used in academic and commercial settings thanks to its powerful tools providing functionality missing in other geographic information systems. GRASS works on multiple platforms, including Linux, Mac OS X and Microsoft Windows.

GRASS was originally controlled via its command line. The first graphical user interface was written in Tcl/Tk, which later appeared to be insufficient. Since 2006 new wxGUI is being developed using wxPython as a GUI toolkit for the Python programming language.

wxNviz is a one of the wxGUI extensions. It enables visualization of multiple surfaces (raster data) in 3D space, volume data (3D raster data), overlaying 2D vector data over surfaces and displaying 3D vector data. wxNviz uses OGSF and Nviz library as an interface for OpenGL. Completion of wxNviz is essential for GRASS 7 which can be released only without dependency on Tcl/Tk. This project picks up on wxNviz development within Google Summer of Code 2008 and 2010 and it should make wxNviz fully functional.

The idea

At present wxNviz provides only partial functionality of Tcl/Tk-based nviz so this project focuses on completion of this wxGUI extension. The plan is to add following missing features: cutting planes, scaled difference, animations, vector data querying, decorations (north arrow, legend, labels, scale bar). Implementation of missing functionality would remove the major obstacle of GRASS 7 release which is the dependency on Tcl/Tk-based Nviz. Additional plan is to improve view controlling which is not very intuitive presently. Petr Voldan, a PhD student of our faculty (FCE CTU in Prague), was dealing with this issue so new view control could follow his results.

Project plan

Period Task Status / Notes
April 26 - May 22 Bonding period
May 23 fixing existing bugs never ending story ;-)
May 30 improve GUI design
June 6 implement cutting planes
June 13 thematic points postponed
June 20 testing, bug fixing
June 27 testing, bug fixing
July 4 nviz_cmd - "save state"
July 11 implement decorations text missing, not working on Mac
July 15 Mid-term evaluations deadline
July 18 volumes - cross sections
July 25 better view control panning to be implemented
August 1 implement vector data querying
August 8 implement scaled difference
August 15 testing, documentation
August 22 Final evaluation
  • text rendering in OpenGL

Thematic mapping

Only for vector point maps in current mapset
  1. checkbox to enable/disable thematic mapping
  2. button for setting colors to launch colorrules.ColorTable
  3. improve ColorTable for vector maps
  • if no layer/table available create it using v.db.addtable
  • select first available layer/table
  • compute range
  • select GRASSRGB if available
  • if rgb column doesn't exist in the table show dialog for creating new column
  • compute rgb values for given range (postponed)
  • use current display region for preview
  • add column for size
  1. call GP_set_style_thematic(id, layer, rgb_column, NULL, ...)
  2. re-render data
Implement support for color tables
  1. Redesign ColorTable class
Implement thematic mapping for other vector data, not only points
  1. implement in OGSF fn to enable/disable thematic mapping
  2. implement suppor of color tables for vector data
  3. rewrite v.colors

How to test

Download GRASS 7 from SVN repository.

Please report any bugs, wishes via trac:

component: wxGUI
keywords: nviz

See list of known bugs.


Week 0 (May 23)

  • bug fixing - r46208
  • GUI enhancements (enable to change range of sliders, foldpanel bar)

Week 1 (May 30)

  • bug fixing - lights - r46504
  • new functionality - constant surfaces, look here feature - r46504
  • selection of surfaces on which vector points/lines should be displayed - r46558
Surface page of WxNviz modified (2011-06-02)
Constant surface page added (2011-06-02)
Lighting fixed (2011-05-02)

Week 2 (June 6)

  • cutting planes - r46654
  • view page GUI modified
Cutting planes (shading blend) (2011-06-10)
Cutting planes (shading top color) (2011-06-10)
View page modified (2011-06-10)

Week 3 (June 13)

Week 4 (June 20)

  • new nviz features in workspace: view, light, constant planes (r46775)

Week 5 (June 27)

  • nviz light model and fringe problem hopefully fixed
  • generating commands for nviz_cmd (view, light, surfaces, vectors, cutting plane, fringe)
  • nviz_cmd - cutting planes added
Picture of surfaces cut by two planes (generated by nviz_cmd) (2011-06-30)
Command for nviz_cmd generated by wxNviz (2011-07-01)

Week 6 (July 4)

  • north arrow implemented
  • fixed some bugs in volumes
  • add new functionality to nviz_cmd - north arrow, missing features from volumes
  • interactive positioning (x, y) of cutting planes (need to be improved)
North Arrow implemented (2011-07-08)
Colored isosurfaces with transparency (2011-07-08)

Week 7 (July 11)

  • volume slices implemented
  • volume slices added to nviz_cmd
  • transparency added to constant planes
Partially transparent slice (2011-07-14)
Combination of slices and isosurface (2011-07-14)

Week 8 (July 18)

  • legend and text labels (reuse 2D mode)
  • partly solved latlon maps - sliders for float values (z-exag, position), still problem with lighting
Raster legend, text label and north arrow (2011-07-22)

Week 9 (July 25)

  • legend and text rendering is still not solved for Mac
  • interactive legend resizing for 2D view (not yet implemented in 3D)

Weekly Reports