casa
$Rev:20696$
|
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