WxNviz GSoC 2010
See wxNviz page.
Accepted Google Summer of Code 2010 project, see also related GSoC 2008 page.
Student Name: | Martin Landa, Czech University in Prague, PhD. |
Organization: | OSGeo - Open Source Geospatial Foundation |
Mentor Name: | Helena Mitasova |
Title: | wxNviz development for enhanced 3/4D visualization and analysis |
- Abstract
-
- The aim of this project is to design fully-featured 3D/4D visualization tool for GRASS GIS and to replace current old-fashioned TCL/TK Nviz. This project continues in Google Summer Of Code project from 2008 ("2.5/3D visualization tool for wxPython GRASS GUI"). The main goal of the project is implement (1) all missing features from wxNviz's predecessor TCL/TK-based Nviz; (2) new functionality including e.g. fog visualization; and finally (3) text displaying and styling in OGSF library.
Application
Introduction
The aim of this project is to continue in wxNviz development and as a result to develop fully-featured 3D/4D vizualization tool for GRASS GIS. In detail, it meas to implement all missing features from wxNviz's predecessor TCL/TK-based nviz and moreover to implement new functionality including e.g. fog vizualization in underlying GRASS OGSF library and it's wxPython front-end wxNviz and command-line tool nviz_cmd.
Background
Geographic Resources Analysis Support System, commonly referred to as GRASS GIS, is a Geographic Information System (GIS) used for data management, image processing, graphics production, spatial modeling, and visualization of many types of data. It is Free Software/Open Source released under GNU General Public License (GPL). GRASS is one the projects under OSGeo umbrella.
wxGUI is a new generation of graphical user interface for GRASS GIS.
wxNviz is a wxGUI extension which allows users to visualize surfaces (raster data) in a 3D space, optionally using thematic coloring, draping 2D vector data over the surfaces, displaying 3D vector data in the space, and visualization of volume data (3D raster data). wxNviz is a wxPython front-end to the underlying OGSF library which reads GRASS datasets and interfaces with OpenGL at a C API level. Initial version of wxNviz has been developed within Google Summer of Code 2008 project. The idea came from the effort to develop fully-featured 3D/4D vizualization tool for GRASS which would be integral part of wxGUI environment. It makes wxGUI to be complete UI which will be shipped as default GUI in GRASS 7.
The idea
The main goal of this project is to implement all missing features from wxNviz's predecessor - TCL/TK-based nviz and to replace Nviz by wxNviz in GRASS 7. The features which are going to be implemented are e.g. lighting, decoration (labels, north arrow, scale bar, legend, fringe), data querying (rasters, vectors, volumes), cutting planes, scaled difference, animations, scripting, including replacement for tool to generate images for dynamic surfaces, and point symbols sized and colored based on attributes. Also some new features including fog support or vertical labels are planned be implemented. Another issue is to update and improve command-line tool nviz_cmd to support all wxNviz functionality.
Additionally design and implementation of text displaying and styling in OGSF library (and it's front-end wxNVIZ) is planned.
Project plan
April 26 - May 23 | Bonding period |
May 24 | Start to code, wxNviz & nviz_cmd bug-fixing period, save display to a graphic file |
May 31 | Implement lighting |
June 7 | Lighting continued |
June 14 | Implement fringe |
June 21 | Implement data querying (rasters, vectors, volumes) |
June 28 | Implement cutting planes, scaled difference |
July 5 | Implement animations |
July 12 | Implement scripting, including replacement for tool to generate images for dynamic surfaces |
July 16 | Mid-term evaluations deadline |
July 19 | Better view settings controlling |
July 26 | Fog support & vertical labels |
August 2 | Final code & functionality review |
August 9 | Write documentation, tutorials, etc. |
August 16 | Final evaluation |
Final Report
The main goal of this project hasn't been fulfilled completely. The development of fully-featured 3D/4D visualization tool for GRASS GIS started within Google Summer of Code 2008 project and continued during this summer.
The overview of the implemented functionality:
- Light control settings (see screenshot)
- Fringes (see screenshot)
- Raster querying (see screenshot)
wxNVIZ GUI which has been designed in 2008 was integrated into wxGUI Layer Manager during this summer. This integration took much more time then has been expected (see screenshot before and after integration). In the result some planned features (see the original project plan) hasn't been implemented due to the lack of free time.
The list of missing functionality:
- Vector querying
- Cutting planes, scaled difference
- Animation, scripting
- Decorations, vertical labels
- Fog support
- Better view controlling
The result of this project is 3D visualization environment for wxGUI which offers basic functionality to the users - displaying raster data as surfaces, 2D/3D vector data, and 3D raster maps as volumes (isosurfaces) in the 3D space. The user can control in the simple way the view, lighting, and fringes.
This environment still doesn't work on MS Windows (see trac #1125) and miss some functionality compared to the original TCL/TK nviz.
Anyway the author of this report is going to work on the missing features during the next months. The goal is to complete wxNviz till the end of this year (2010) and in the result to drop TCL/TK dependency in GRASS 7.0 (the original nviz application is the only one remaining component in GRASS 7.0 which uses TCL/TK).
- Overview of the commits (GRASS 7.0 - trunk)
Roadmap
- Lighting
- 80%
- Not fully working
- Decorations
- Postponed
- Fringe
- 80%
- Fix OGSF functions for generating fringes
- Data querying (rasters, vectors, volumes)
- 50%
- Only rasters
- Cutting planes, scaled difference
- Animations
- Scripting, including replacement for tool to generate images for dynamic surfaces
- Better view settings controlling
- Fog support & vertical labels
Week 0 (May 24)
- initial code clean up, bug-fixing
- recover settings notebook page
- save display to a graphic file - r42359
Week 1 (May 31)
- 3D view tools window integrated into Layer Manager (see screenshots bellow) - r42403
Week 2 (June 7)
- wxNviz GUI maintainance, bug-fixing period
Week 3 (June 14)
- Simple lighting control panel implemented
Week 4 (June 21)
- Fringe implemented in wxNviz and nviz_cmd
Week 5 (June 28)
- Basic raster (surface) querying implemented
Week 6 (July 5)
- Bug-fixing/maintainance
Week 7 (July 12)
- Bug-fixing/maintainance
Week 8 (July 19)
- UI maintainance
Week 9 (July 26)
- UI maintainance
Week 10 (August 2)
- UI maintainance
Week 11 (August 9)
- Cleaning up the code
Weekly Reports
- #0 (2010/05/24)
- #1 (2010/06/01)
- #2 (2010/06/08)
- #3 (2010/06/17)
- #4 (2010/06/23)
- #5 (2010/07/10)
- #6 (2010/07/25)
- #7 (2010/08/12)
Source code
Note: Development of wxNviz is done in trunk (GRASS 7.0) and devbr6 (GRASS 6.5). wxNviz in GRASS 6.4 is frozen due to RC stage.
GRASS 7.0
- gui/wxpython/gui_modules/wxnviz.py
- gui/wxpython/gui_modules/nviz_tools.py
- gui/wxpython/gui_modules/nviz_mapdisp.py
- gui/wxpython/gui_modules/nviz_preferences.py
- visualization/nviz2/cmd
- lib/nviz