casa  $Rev:20696$
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines
DisplayDatas.h
Go to the documentation of this file.
00001 //# DisplayDatas.h: The DisplayDatas module - AIPS++ data-based display
00002 //# Copyright (C) 1994,1995,1996,1997,1998,1999,2000
00003 //# Associated Universities, Inc. Washington DC, USA.
00004 //#
00005 //# This library is free software; you can redistribute it and/or modify it
00006 //# under the terms of the GNU Library General Public License as published by
00007 //# the Free Software Foundation; either version 2 of the License, or (at your
00008 //# option) any later version.
00009 //#
00010 //# This library is distributed in the hope that it will be useful, but WITHOUT
00011 //# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
00012 //# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Library General Public
00013 //# License for more details.
00014 //#
00015 //# You should have received a copy of the GNU Library General Public License
00016 //# along with this library; if not, write to the Free Software Foundation,
00017 //# Inc., 675 Massachusetts Ave, Cambridge, MA 02139, USA.
00018 //#
00019 //# Correspondence concerning AIPS++ should be addressed as follows:
00020 //#        Internet email: aips2-request@nrao.edu.
00021 //#        Postal address: AIPS++ Project Office
00022 //#                        National Radio Astronomy Observatory
00023 //#                        520 Edgemont Road
00024 //#                        Charlottesville, VA 22903-2475 USA
00025 //#
00026 //# $Id$
00027 
00028 #ifndef TRIALDISPLAY_DISPLAYDATAS_H
00029 #define TRIALDISPLAY_DISPLAYDATAS_H
00030 
00031 #include <display/DisplayDatas/LatticeAsRaster.h>
00032 #include <display/DisplayDatas/LatticeAsContour.h>
00033 
00034 namespace casa { //# NAMESPACE CASA - BEGIN
00035 
00036 // <module>
00037 //
00038 // <summary>
00039 // A module providing classes to draw AIPS++ data in specific ways
00040 // </summary>
00041 //
00042 // <use visibility=export>
00043 //
00044 // <reviewed reviewer="None yet" date="yyyy/mm/dd" demos="">
00045 // </reviewed>
00046 //
00047 // <prerequisite>
00048 // <li> DisplayCanvas
00049 // </prerequisite>
00050 //
00051 // <etymology>
00052 // The module provides various classes that are responsible for
00053 // "displaying" "data"
00054 // </etymology>
00055 //
00056 // <synopsis> 
00057 //
00058 // <h3>Motivation</h3>
00059 //
00060 // The basic drawing devices in the Display Library are the <linkto
00061 // class="PixelCanvas">PixelCanvas</linkto> and the <linkto
00062 // class="WorldCanvas">WorldCanvas</linkto>.  These devices know
00063 // nothing about what data look like, what kind of object will draw on
00064 // the devices, and in what circumstances these devices will be used.
00065 // The only thing they define is the interface of how to draw on them
00066 // and the way that they communicate with other objects, for example
00067 // the event handlers.
00068 //
00069 // <h3>The DisplayDatas</h3>
00070 //
00071 // Thus classes are needed to transform data into objects that are
00072 // understood by the canvases.  These are the DisplayDatas, which
00073 // generate drawing commands based on data and some algorithm which
00074 // translates that data into a visual representation: eg. a contouring
00075 // algorithm.  Exactly how the data is represented is entirely defined
00076 // by the DisplayDatas, and as long as it can be done using the
00077 // primitives of the WorldCanvas, there are no restrictions.  To
00078 // display data in a new way, all that must be written is a new
00079 // DisplayData which generates appropriate drawing instructions, and
00080 // can be asked to carry out those instructions.  The DisplayDatas
00081 // should be thought of as the "workhorses" of the AIPS++ Display
00082 // Library.
00083 //
00084 // <h3>The WorldCanvasHolder</h3>
00085 //
00086 // The administration of a number of DisplayDatas on one WorldCanvas
00087 // is handled by the WorldCanvasHolder class.  The WorldCanvasHolder
00088 // provides methods to register and unregister DisplayDatas.  The
00089 // WorldCanvasHolder installs handlers on the WorldCanvas for each
00090 // event generated by the WorldCanvas.  Since its main task is to
00091 // allow more than one DisplayData object to draw on a WorldCanvas at
00092 // any one time, the WorldCanvasHolder must pass WorldCanvas events on
00093 // to the registered DisplayDatas, either directly or indirectly.  For
00094 // example, motion events (which occur when the pointer is moved
00095 // across the WorldCanvas) will be immediately passed on to all
00096 // DisplayDatas for processing, while refresh events (which occur when
00097 // the WorldCanvas needs to redraw itself, eg. following a resize) are
00098 // managed by the WorldCanvasHolder itself, which may ask only a
00099 // subset of the registered DisplayDatas to redraw themselves, and
00100 // also ensures that raster-type DisplayDatas draw before vector-type
00101 // DisplayDatas.
00102 //
00103 // Some DisplayDatas will consist of a sequence of "drawings," for
00104 // example, a set of channel maps in a data cube.  The DisplayDatas
00105 // are built with such sequences in mind, and the appropriate "frame"
00106 // to draw is negotiated between the WorldCanvasHolder and the one or
00107 // more DisplayDatas actually registered with the WorldCanvasHolder.
00108 // A sequence of images is not restricted to separate planes through a
00109 // data volume: it could comprise blinking between two or more images,
00110 // or rendering views of data along different lines-of-sight.
00111 //
00112 // To control what is displayed on a WorldCanvas, the programmer can
00113 // put restrictions on a WorldCanvasHolder and on DisplayDatas. Only
00114 // the DisplayDatas whose internal restrictions actually match those
00115 // of the WorldCanvasHolder will be allowed to draw on the
00116 // WorldCanvas.  Indeed, an important part of the support for
00117 // DisplayDatas comprising sequences of images is implemented by
00118 // placing restrictions on the WorldCanvas that are appropriate to the
00119 // desired image plane.
00120 //
00121 // </synopsis>
00122 //
00123 // </module>
00124 
00125 
00126 } //# NAMESPACE CASA - END
00127 
00128 #endif
00129