**Discrete
Geometry 3D Viewer**

About

PNG, TIFF, PNM (PGM etc.), BMP, TGA and JPEG images

DICOM images with multiple slices

VTK XML Image (VTI) and Legacy (VTK) format with multiple slices or volumes

Comma Seperated Values (CSV) files

GNUPlot Format (2-tuple) Files

Blitz++ Array Format Files

Image Stacks (PNG, TIFF, PNM (PGM etc.), BMP and JPEG)

**For Users:**

Trolltech Qt Open Source (Qt 4.4.x) - An extensive, cross-platform framework/GUI library.

Kitware's Visualisation Toolkit (VTK 5.x) - Scientific Visualisation Library based on OpenGL.

Qt Widgets for Technical Applications (Qwt 5.1.x) - Special technical widgets for Qt including Line plots.

Grassroots DICOM Library (GDCM 2.x) - Specialist, Multi-format DICOM reading/writing library.

Blitz++ (Blitz CVS) Numerical Array Library - Very fast, templated Array package alllowing upto 11D Arrays, functions and slicing operations.

Fastest Fourier Transform in the West Library (FFTW 3.x) - Very mature and fast FFT library.

**Fast Fourier Transforms**(FFTs) of Complex and real data.Finite Radon Transform (FRT) of real data.

View

**complex valued data**.**View raw data**of the files above through the use of tables.**Edit the raw data**, thus allowing some filtering ability.**Surface plots**of the data or results of transforms.**Volume plots**via VTI files.**Animation of volume slices**(surfaces) using surface plots.1D FFTs of data in tables.

1D

**Line plots**of raw data.Save plots as

**vector file formats**.**Animations of 1D plots**of raw data.Images are viewed in a 3D scene allowing gamma control via the mouse.

Zooming, rotation and translation of images.

**Volume and Surface plots**are in full OpenGL 3D graphics.**Arithmetic with Images**as well as functions like exp and log.**Convert images**to and from the above formats.**Histogram**of images of arbitrary data ranges.Apply all of the above to

**individual slices**of the data.Load very large files via

**64-bit support**.**Save complex valued data**(in native format) for loading and display.Memory usage is dependent only on the data being viewed, hence allowing some user control.

**For Developers****:**

The
API provides a **simple
interface** to load common formats, and to
visualise Blitz++ Arrays without having to know the VTK, GDCM and
FFTW libraries as it wraps the main functionalities for Transforms,
Surface and Volume plots. The class naming convention is "DGV"
prefixed and "VTK" suffixed if the class uses the VTK
library. An example of a Gaussian surface plot is the following with
Blitz ++ Arrays:

- #include <QApplication>
- #include "DGVSurfacePlotVTK.h"
- const int Size = 256;
- ///Prototypes
- Array<imageType,2> createGaussian();
- int main(int argc, char *argv[])
- {
- DGVSurfacePlotVTK MainWindow;
- Array<imageType,2> gaussian(Size,Size);
- ///Generate 2D Gaussian Function
- gaussian = createGaussian();
- ///Make and show Surface plot
- MainWindow.setData(gaussian); ///Assign the data
- MainWindow.generatePlot(); ///Generate mesh
- MainWindow.generateAxes(); ///Generate Dynamic axes
- MainWindow.show(); ///Show result
- return app.exec();
- }
- Array<imageType,2> createGaussian()
- {
- ///Gaussian Parameters
- double amplitude = 100.0, stdDev_x = Size/2, stdDev_y = Size/2, x0 = Size/2, y0 = Size/2;
- double variance_x = stdDev_x*stdDev_x, variance_y = stdDev_y*stdDev_y;
- ///Index generators/placeholder
- ///These automatically run through the x, y values of the array
- firstIndex x;
- secondIndex y;
- Array<imageType,2> gauss(Size,Size);
- gauss = amplitude*exp( -( (x-x0)*(x-x0)/variance_x + (y-y0)*(y-y0)/variance_y ) );
- return gauss;
- }

The function createGaussian with the line "gaussian = amplitude*exp( -( (x-x0)*(x-x0)/variance_x + (y-y0)*(y-y0)/variance_y ) );" defines the gaussian "exp( -(x^2+y^2) )" with the parameters given in the line above. The surface plot is done from the sebsequent four lines. All other code is standard Qt application code which can be referenced from the Qt documentation. One can see that it takes more code to generate the Gaussian!