Plot.h

Go to the documentation of this file.
00001 //# Plot.h: Plot objects to be drawn on a canvas.
00002 //# Copyright (C) 2008
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 #ifndef PLOT_H_
00028 #define PLOT_H_
00029 
00030 #include <graphics/GenericPlotter/PlotData.h>
00031 #include <graphics/GenericPlotter/PlotItem.h>
00032 
00033 #include <casa/BasicSL/String.h>
00034 
00035 namespace casa {
00036 
00037 // A Plot basically consists of data and customization information.  The data
00038 // is held by the base class whereas any customization should be handled in
00039 // subclasses.
00040 class Plot : public virtual PlotItem {
00041 public:
00042     Plot() { }
00043 
00044     virtual ~Plot() { }
00045     
00046     
00047     // ABSTRACT METHODS //
00048     
00049     // Returns the data associated with this plot.
00050     virtual PlotDataPtr data() const = 0;
00051     
00052     // Should be called whenever the underlying PlotData has changed, to let
00053     // the plot and its attached canvas know that the plot needs to be redrawn.
00054     virtual void dataChanged() = 0;
00055     
00056     // It's likely that any plot subclass (scatter, bar, function, etc.) will
00057     // have lines of some sort, so it's safe to have in the base class.
00058     
00059     // Returns true if this plot has lines shown, false otherwise.
00060     virtual bool linesShown() const = 0;
00061     
00062     // Sets whether or not lines are shown.  If linesShown is true, the
00063     // implementation can decide whether to choose the line style shown, or
00064     // just use the last set PlotLine.
00065     virtual void setLinesShown(bool linesShown = true) = 0;
00066     
00067     // Returns a copy of the line used for this plot.  Note: if lines are not
00068     // shown, then this behavior is undefined.  The last shown line can be
00069     // returned, or a line with style NOLINE, or a null pointer, or....
00070     virtual PlotLinePtr line() const = 0;
00071     
00072     // Sets the plot lines to the given line.  Implies setLinesShown(true)
00073     // unless the given line's style is set to NOLINE.
00074     virtual void setLine(const PlotLine& line) = 0;
00075     
00076     
00077     // IMPLEMENTED METHODS //
00078     
00079     // Convenience methods for setting line.
00080     // <group>
00081     virtual void setLine(const PlotLinePtr line) {
00082         if(!line.null()) setLine(*line);
00083         else             setLinesShown(false);
00084     }
00085     virtual void setLine(const String& color,
00086                          PlotLine::Style style = PlotLine::SOLID,
00087                          double width = 1.0) {
00088         PlotLinePtr l = line();
00089         l->setColor(color);
00090         l->setStyle(style);
00091         l->setWidth(width);
00092         setLine(*l);
00093     }
00094     virtual void setLineColor(const String& color) {
00095         PlotLinePtr l = line();
00096         l->setColor(color);
00097         setLine(*l);
00098     }
00099     virtual void setLineStyle(PlotLine::Style style) {
00100         PlotLinePtr l = line();
00101         l->setStyle(style);
00102         setLine(*l);
00103     }
00104     virtual void setLineWidth(double width) {
00105         PlotLinePtr l = line();
00106         l->setWidth(width);
00107         setLine(*l);
00108     }
00109     // </group>
00110 };
00111 
00112 
00113 // Scatter plot abstract class.  In addition to the abstract methods in Plot, a
00114 // scatter plot subclass should also have symbol customization for the points.
00115 // A scatter plot is expected to consist of PlotPointData.
00116 class ScatterPlot : public virtual Plot {
00117 public:
00118     ScatterPlot() { }
00119 
00120     virtual ~ScatterPlot() { }
00121     
00122     
00123     // Overrides Plot::data().
00124     virtual PlotDataPtr data() const { return pointData(); }
00125     
00126     // Returns the data value at the given index.  Just a thin layer over the
00127     // PlotPointData functionality.
00128     virtual ppoint_t pointAt(unsigned int i) const {
00129         PlotPointDataPtr data = pointData();
00130         if(!data.null()) return ppoint_t(data->xAt(i), data->yAt(i));
00131         else             return ppoint_t(0, 0);
00132     }
00133     
00134     // Implements PlotItem::drawCount().  Provides default implementation that
00135     // returns the number of plotted points.
00136     virtual unsigned int drawCount() const { return pointData()->size(); }
00137     
00138     
00139     // ABSTRACT METHODS //
00140     
00141     // Returns the point data used for this plot.
00142     virtual PlotPointDataPtr pointData() const = 0;
00143     
00144     // Returns true if symbols are shown, false otherwise.
00145     virtual bool symbolsShown() const = 0;
00146     
00147     // Sets whether symbols are shown or not.  If symbolsShown is true, the
00148     // implementation can decide whether to choose the symbol shown, or just
00149     // use the last set PlotSymbol.
00150     virtual void setSymbolsShown(bool symbolsShown = true) = 0;
00151     
00152     // Returns a copy of the symbol for this plot.  Note: if symbols are not
00153     // shown, then this behavior is undefined.  The last shown symbol can be
00154     // returned, or a symbol with style NOSYMBOL, or a null pointer, or....
00155     virtual PlotSymbolPtr symbol() const = 0;
00156     
00157     // Sets the plot symbols to the given symbol. Implies setSymbolsShown(true)
00158     // unless the symbol's style is set to NOSYMBOL.
00159     virtual void setSymbol(const PlotSymbol& symbol) = 0;
00160     
00161     
00162     // IMPLEMENTED METHODS //
00163     
00164     // Convenience methods for setting symbol.
00165     // <group>
00166     virtual void setSymbol(const PlotSymbolPtr symbol) {
00167         if(!symbol.null()) setSymbol(*symbol);
00168         else               setSymbolsShown(false);
00169     }
00170     virtual void setSymbol(PlotSymbol::Symbol s) {
00171         PlotSymbolPtr sym = symbol();
00172         sym->setSymbol(s);
00173         setSymbol(*sym);
00174     }
00175     virtual void setSymbol(char s) {
00176         PlotSymbolPtr sym = symbol();
00177         sym->setSymbol(s);
00178         setSymbol(*sym);
00179     }
00180     virtual void setSymbolSize(double width, double height) {
00181         PlotSymbolPtr sym = symbol();
00182         sym->setSize(width, height);
00183         setSymbol(*sym);
00184     }
00185     virtual void setSymbolLine(const PlotLine& line) {
00186         PlotSymbolPtr sym = symbol();
00187         sym->setLine(line);
00188         setSymbol(*sym);
00189     }
00190     virtual void setSymbolLine(const PlotLinePtr line) {
00191         if(!line.null()) setSymbolLine(*line); }
00192     virtual void setSymbolLine(const String& color,
00193             PlotLine::Style style = PlotLine::SOLID, double width = 1.0) {
00194         PlotSymbolPtr sym = symbol();
00195         sym->setLine(color, style, width);
00196         setSymbol(*sym);
00197     }
00198     virtual void setSymbolAreaFill(const PlotAreaFill& fill) {
00199         PlotSymbolPtr sym = symbol();
00200         sym->setAreaFill(fill);
00201         setSymbol(*sym);
00202     }
00203     virtual void setSymbolAreaFill(const PlotAreaFillPtr fill) {
00204         if(!fill.null()) setSymbolAreaFill(*fill); }
00205     virtual void setSymbolAreaFill(const String& color,
00206             PlotAreaFill::Pattern pattern = PlotAreaFill::FILL) {
00207         PlotSymbolPtr sym = symbol();
00208         sym->setAreaFill(color, pattern);
00209         setSymbol(*sym);
00210     }
00211     // </group>
00212 };
00213 
00214 
00215 // Subclass of ScatterPlot that adds masking functionality.  The ScatterPlot
00216 // customization methods (lines, symbols, etc.) are expected to apply only to
00217 // unmasked data, while additional methods are provided in MaskedScatterPlot
00218 // to customize the masked data (which is not shown by default).
00219 class MaskedScatterPlot : public virtual ScatterPlot {
00220 public:
00221     MaskedScatterPlot() { }
00222     
00223     virtual ~MaskedScatterPlot() { }
00224     
00225     
00226     // Overrides ScatterPlot::pointData().
00227     virtual PlotPointDataPtr pointData() const { return maskedData(); }
00228     
00229     // Returns whether the data at the given index is masked or not.  Just a
00230     // thin layer over the PlotMaskedPointData functionality.
00231     virtual bool maskedAt(unsigned int index) const {
00232         PlotMaskedPointDataPtr data = maskedData();
00233         return !data.null() && data->maskedAt(index);
00234     }
00235     
00236     
00237     // ABSTRACT METHODS //
00238     
00239     // Returns the masked data used for this plot.
00240     virtual PlotMaskedPointDataPtr maskedData() const = 0;
00241     virtual void clearData() = 0;
00242 
00243     // Returns true if this plot has lines shown for masked points, false
00244     // otherwise.
00245     virtual bool maskedLinesShown() const = 0;
00246     
00247     // Sets whether or not lines are shown for masked points.  If linesShown is
00248     // true, the implementation can decide whether to choose the line style
00249     // shown, or just use the last set PlotLine.
00250     virtual void setMaskedLinesShown(bool linesShown = true) = 0;
00251     
00252     // Returns a copy of the line used for masked points.  Note: if lines are
00253     // not shown, then this behavior is undefined.  The last shown line can be
00254     // returned, or a line with style NOLINE, or a null pointer, or....
00255     virtual PlotLinePtr maskedLine() const = 0;
00256     
00257     // Sets the lines for masked points to the given.  Implies
00258     // setMaskedLinesShown(true) unless the given line's style is set to
00259     // NOLINE.
00260     virtual void setMaskedLine(const PlotLine& line) = 0;
00261     
00262     // Convenience methods for setting line for masked points.
00263     // <group>
00264     virtual void setMaskedLine(const PlotLinePtr line) {
00265         if(!line.null()) setMaskedLine(*line);
00266         else             setMaskedLinesShown(false);
00267     }
00268     virtual void setMaskedLine(const String& color,
00269                          PlotLine::Style style = PlotLine::SOLID,
00270                          double width = 1.0) {
00271         PlotLinePtr l = maskedLine();
00272         l->setColor(color);
00273         l->setStyle(style);
00274         l->setWidth(width);
00275         setMaskedLine(*l);
00276     }
00277     virtual void setMaskedLineColor(const String& color) {
00278         PlotLinePtr l = maskedLine();
00279         l->setColor(color);
00280         setMaskedLine(*l);
00281     }
00282     virtual void setMaskedLineStyle(PlotLine::Style style) {
00283         PlotLinePtr l = maskedLine();
00284         l->setStyle(style);
00285         setMaskedLine(*l);
00286     }
00287     virtual void setMaskedLineWidth(double width) {
00288         PlotLinePtr l = maskedLine();
00289         l->setWidth(width);
00290         setMaskedLine(*l);
00291     }
00292     // </group>
00293     
00294     // Returns true if symbols are shown for masked points, false otherwise.
00295     virtual bool maskedSymbolsShown() const = 0;
00296     
00297     // Sets whether symbols are shown or not for masked points.  If
00298     // symbolsShown is true, the implementation can decide whether to choose
00299     // the symbol shown, or just use the last set PlotSymbol.
00300     virtual void setMaskedSymbolsShown(bool symbolsShown = true) = 0;
00301     
00302     // Returns a copy of the symbol for masked points.  Note: if symbols are
00304     // be returned, or a symbol with style NOSYMBOL, or a null pointer, or....
00305     virtual PlotSymbolPtr maskedSymbol() const = 0;
00306     
00307     // Sets the symbols for masked points to the given. Implies
00308     // setMaskedSymbolsShown(true) unless the symbol's style is set to
00309     // NOSYMBOL.
00310     virtual void setMaskedSymbol(const PlotSymbol& symbol) = 0;
00311     
00312     // Convenience methods for setting symbol for masked points.
00313     // <group>
00314     virtual void setMaskedSymbol(const PlotSymbolPtr symbol) {
00315         if(!symbol.null()) setMaskedSymbol(*symbol);
00316         else               setMaskedSymbolsShown(false);
00317     }
00318     virtual void setMaskedSymbol(PlotSymbol::Symbol s) {
00319         PlotSymbolPtr sym = maskedSymbol();
00320         sym->setSymbol(s);
00321         setMaskedSymbol(*sym);
00322     }
00323     virtual void setMaskedSymbol(char s) {
00324         PlotSymbolPtr sym = maskedSymbol();
00325         sym->setSymbol(s);
00326         setMaskedSymbol(*sym);
00327     }
00328     virtual void setMaskedSymbolSize(double width, double height) {
00329         PlotSymbolPtr sym = maskedSymbol();
00330         sym->setSize(width, height);
00331         setMaskedSymbol(*sym);
00332     }
00333     virtual void setMaskedSymbolLine(const PlotLine& line) {
00334         PlotSymbolPtr sym = maskedSymbol();
00335         sym->setLine(line);
00336         setMaskedSymbol(*sym);
00337     }
00338     virtual void setMaskedSymbolLine(const PlotLinePtr line) {
00339         if(!line.null()) setMaskedSymbolLine(*line); }
00340     virtual void setMaskedSymbolLine(const String& color,
00341             PlotLine::Style style = PlotLine::SOLID, double width = 1.0) {
00342         PlotSymbolPtr sym = maskedSymbol();
00343         sym->setLine(color, style, width);
00344         setMaskedSymbol(*sym);
00345     }
00346     virtual void setMaskedSymbolAreaFill(const PlotAreaFill& fill) {
00347         PlotSymbolPtr sym = maskedSymbol();
00348         sym->setAreaFill(fill);
00349         setMaskedSymbol(*sym);
00350     }
00351     virtual void setMaskedSymbolAreaFill(const PlotAreaFillPtr fill) {
00352         if(!fill.null()) setMaskedSymbolAreaFill(*fill); }
00353     virtual void setMaskedSymbolAreaFill(const String& color,
00354             PlotAreaFill::Pattern pattern = PlotAreaFill::FILL) {
00355         PlotSymbolPtr sym = maskedSymbol();
00356         sym->setAreaFill(color, pattern);
00357         setMaskedSymbol(*sym);
00358     }
00359     // </group>
00360 };
00361 
00362 
00363 // An error plot is a scatter plot with error bars drawn.  It is expected to
00364 // consist of PlotErrorData.
00365 class ErrorPlot : public virtual ScatterPlot {
00366 public:
00367     ErrorPlot() { }
00368     
00369     virtual ~ErrorPlot() { }
00370 
00371     
00372     // Overrides ScatterPlot::pointData().
00373     virtual PlotPointDataPtr pointData() const { return errorData(); }
00374     
00375     
00376     // ABSTRACT METHODS //
00377     
00378     // Returns the error data used for this plot.
00379     virtual PlotErrorDataPtr errorData() const = 0;
00380     
00381     // Returns whether the error bar line is shown or not.
00382     virtual bool errorLineShown() const = 0;
00383     
00384     // Sets whether the error bar line is shown.  If show is true, the
00385     // implementation can decide whether to choose the line shown, or just
00386     // use the last set PlotLine.
00387     virtual void setErrorLineShown(bool show = true) = 0;
00388     
00389     // Returns the line used to draw the error bars.
00390     virtual PlotLinePtr errorLine() const = 0;
00391     
00392     // Sets the line used to draw the error bars.
00393     virtual void setErrorLine(const PlotLine& line) = 0;
00394     
00395     // Convenience methods for setting error line.
00396     // <group>
00397     virtual void setErrorLine(const PlotLinePtr line) {
00398         if(!line.null()) setErrorLine(*line);
00399         else             setErrorLineShown(false);
00400     }
00401     virtual void setErrorLine(const String& color,
00402                               PlotLine::Style style = PlotLine::SOLID,
00403                               double width = 1.0) {
00404         PlotLinePtr line = errorLine();
00405         line->setColor(color);
00406         line->setStyle(style);
00407         line->setWidth(width);
00408         setErrorLine(*line);
00409     }
00410     virtual void setErrorLineColor(const String& color) {
00411         PlotLinePtr line = errorLine();
00412         line->setColor(color);
00413         setErrorLine(*line);
00414     }
00415     virtual void setErrorLineStyle(PlotLine::Style style) {
00416         PlotLinePtr line = errorLine();
00417         line->setStyle(style);
00418         setErrorLine(*line);
00419     }
00420     virtual void setErrorLineWidth(double width) {
00421         PlotLinePtr line = errorLine();
00422         line->setWidth(width);
00423         setErrorLine(*line);
00424     }
00425     // </group>
00426     
00427     // Returns the "cap" size of the error bar.  The cap is the perpendicular
00428     // line at the end of the error bar (that makes the error bar look like an
00429     // I rather than a |).
00430     virtual unsigned int errorCapSize() const = 0;
00431     
00432     // Sets the error bar cap size in pixels.
00433     virtual void setErrorCapSize(unsigned int capSize) = 0;
00434 };
00435 
00436 
00437 // An color plot is a scatter plot with differentiated colors for points in
00438 // different bins.  It is expected to consist of PlotBinnedData.
00439 class ColoredPlot : public virtual ScatterPlot {
00440 public:
00441     // Constructor.
00442     ColoredPlot() { }
00443     
00444     // Destructor.
00445     virtual ~ColoredPlot() { }
00446 
00447     
00448     // Overrides ScatterPlot::pointData().
00449     virtual PlotPointDataPtr pointData() const { return binnedColorData(); }
00450     
00451     
00452     // ABSTRACT METHODS //
00453     
00454     // Returns the binned data used for this plot.
00455     virtual PlotBinnedDataPtr binnedColorData() const = 0;
00456     
00457     // Returns the color to use for the bin at the given index.  The color
00458     // applies to the symbol fill color.
00459     virtual PlotColorPtr colorForBin(unsigned int bin) const = 0;
00460     
00461     // Sets the color to use for the bin at the given index.  The color applies
00462     // to the symbol fill color.
00463     virtual void setColorForBin(unsigned int bin, const PlotColorPtr color) = 0;
00464 };
00465 
00466 
00467 // Bar plot abstract class.  It is expected to take data in the form of
00468 // PlotPointData.  The line methods in Plot are used for the bar outlines.
00469 class BarPlot : public virtual Plot {
00470 public:
00471     BarPlot() { }
00472     
00473     virtual ~BarPlot() { }
00474 
00475     
00476     // Overrides Plot::data().
00477     PlotDataPtr data() const { return pointData(); }
00478     
00479     // Returns the data value at the given index.  Just a thin layer over the
00480     // PlotPointData functionality.
00481     virtual ppoint_t pointAt(unsigned int i) const {
00482         PlotPointDataPtr data = pointData();
00483         if(!data.null()) return ppoint_t(data->xAt(i), data->yAt(i));
00484         else             return ppoint_t(0, 0);
00485     }
00486     
00487     // Implements PlotItem::drawCount().  Provides default implementation that
00488     // returns the number of plotted points.
00489     virtual unsigned int drawCount() const { return pointData()->size(); }
00490     
00491     
00492     // ABSTRACT METHODS //
00493     
00494     // Returns the data used for the plot.
00495     virtual PlotPointDataPtr pointData() const = 0;
00496     
00497     // Returns whether or not the bars have an area fill or not.
00498     virtual bool areaIsFilled() const = 0;
00499     
00500     // Sets whether the bars have an area fill.  If fill is true, the
00501     // implementation can decide whether to choose the area fill, or just
00502     // use the last set PlotAreaFill.
00503     virtual void setAreaFilled(bool fill = true) = 0;
00504     
00505     // Returns a copy of the area fill used for the bar interiors.
00506     virtual PlotAreaFillPtr areaFill() const = 0;
00507     
00508     // Sets the area fill used for the bars to the given.
00509     virtual void setAreaFill(const PlotAreaFill& areaFill) = 0;
00510     
00511     
00512     // IMPLEMENTED METHODS //
00513     
00514     // Convenience methods for setting area fill.
00515     // <group>
00516     virtual void setAreaFill(const PlotAreaFillPtr areaFill) {
00517         if(!areaFill.null()) setAreaFill(*areaFill);
00518         else                 setAreaFilled(false);
00519     }
00520     virtual void setAreaFill(const String& color,
00521                           PlotAreaFill::Pattern pattern = PlotAreaFill::FILL) {
00522         PlotAreaFillPtr fill = areaFill();
00523         fill->setColor(color);
00524         fill->setPattern(pattern);
00525         setAreaFill(*fill);
00526     }
00527     // </group>
00528 };
00529 
00530 
00531 // Plot used to show raster (image-like) data.  Expected to use PlotRasterData.
00532 // The line methods in Plot are used for contour lines (if any).  A RasterPlot
00533 // can either use the data values directly as colors, or automatically pick
00534 // colors based on a range of values and a colorbar.  (See PlotRasterData.)
00535 class RasterPlot : public virtual Plot {
00536 public:    
00537     RasterPlot() { }
00538     
00539     virtual ~RasterPlot() { }
00540 
00541     
00542     // Overrides Plot::data().
00543     PlotDataPtr data() const { return rasterData(); }
00544     
00545     // Returns the data at the given point.  Just a thin layer over data
00546     // functionality.
00547     virtual double valueAt(double x, double y) const {
00548         PlotRasterDataPtr data = rasterData();
00549         if(!data.null()) return data->valueAt(x, y);
00550         else             return 0;
00551     }
00552     
00553     
00554     // ABSTRACT METHODS //
00555     
00556     // Returns the data used.
00557     virtual PlotRasterDataPtr rasterData() const = 0;
00558     
00559     // Sets the x range.
00560     virtual void setXRange(double from, double to) = 0;
00561     
00562     // Sets the y range.
00563     virtual void setYRange(double from, double to) = 0;
00564     
00565     // Returns the data format.  See PlotRasterData.
00566     virtual PlotRasterData::Format dataFormat() const = 0;
00567     
00568     // Sets the data format.  See PlotRasterData.
00569     virtual void setDataFormat(PlotRasterData::Format f) = 0;
00570     
00571     // Returns the data origin.  See PlotRasterData.
00572     virtual PlotRasterData::Origin dataOrigin() const = 0;
00573     
00574     // Sets the data origin.  See PlotRasterData.
00575     virtual void setDataOrigin(PlotRasterData::Origin o) = 0;
00576     
00577     // Returns the contour line levels, if any.
00578     virtual vector<double> contourLines() const = 0;
00579     
00580     // Sets the contour line levels.
00581     virtual void setContourLines(const vector<double>& lines) = 0;
00582 };
00583 
00584 
00585 /* Smart pointer definitions */
00586 
00587 INHERITANCE_POINTER2(Plot, PlotPtr, PlotItem, PlotItemPtr)
00588 INHERITANCE_POINTER(ScatterPlot, ScatterPlotPtr, Plot, PlotPtr, PlotItem,
00589                     PlotItemPtr)
00590 INHERITANCE_POINTER(MaskedScatterPlot, MaskedScatterPlotPtr, ScatterPlot,
00591                     ScatterPlotPtr, PlotItem, PlotItemPtr)
00592 INHERITANCE_POINTER(ErrorPlot, ErrorPlotPtr, ScatterPlot, ScatterPlotPtr,
00593                     PlotItem, PlotItemPtr)
00594 INHERITANCE_POINTER(ColoredPlot, ColoredPlotPtr, ScatterPlot, ScatterPlotPtr,
00595                     PlotItem, PlotItemPtr)
00596 INHERITANCE_POINTER(BarPlot, BarPlotPtr, Plot, PlotPtr, PlotItem, PlotItemPtr)
00597 INHERITANCE_POINTER(RasterPlot, RasterPlotPtr, Plot, PlotPtr, PlotItem,
00598                     PlotItemPtr)
00599 
00600 }
00601 
00602 #endif /*PLOT_H_*/
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines

Generated on 31 Aug 2016 for casa by  doxygen 1.6.1