WCResampleHandler.h

Go to the documentation of this file.
00001 //# WCResampleHandler.h: base class for resampling data pixels to the screen
00002 //# Copyright (C) 1993,1994,1995,1996,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_WCRESAMPLEHANDLER_H
00029 #define TRIALDISPLAY_WCRESAMPLEHANDLER_H
00030 
00031 #include <casa/aips.h>
00032 #include <casa/Arrays/Vector.h>
00033 
00034 namespace casa { //# NAMESPACE CASA - BEGIN
00035 
00036         template <class T> class Matrix;
00037 
00038 // <summary>
00039 // Base class for resampling data pixels to World/PixelCanvas pixels.
00040 // </summary>
00041 //
00042 // <prerequisite>
00043 // <li> Display library image drawing process
00044 // </prerequisite>
00045 //
00046 // <etymology>
00047 // The name of WCResampleHandler comes from
00048 // WorldCanvas + Resample + Handler
00049 // </etymology>
00050 //
00051 // <synopsis>
00052 // WCResampleHandler is the tool used to extract a rectangular
00053 // subregion of an image for purposes of display.  This class is
00054 // abstract and defines the interface the
00055 // <linkto class="WorldCanvas">WorldCanvas</linkto> sees.
00056 //
00057 // When the resample handler fires, it extracts a rectangular subregion
00058 // of its input matrix and stores it in its output matrix.  If
00059 // the default subregion is the whole image and the output image is
00060 // the same size as the input image, then the output image is
00061 // a copy of the input image.
00062 //
00063 // If not, the subregion of the image is resampled to fit the output
00064 // matrix size.
00065 // </synopsis>
00066 //
00067 // <motivation>
00068 // Objectify the concept of resampling to allow programmers
00069 // to write their own, more complicated versions and register
00070 // them with the WorldCanvas.
00071 // </motivation>
00072 
00073         class WCResampleHandler {
00074 
00075         public:
00076 
00077                 // (Required) default constructor.
00078                 WCResampleHandler();
00079 
00080                 // Copy Constructor (copy semantics)
00081                 WCResampleHandler (const WCResampleHandler& other);
00082 
00083                 // Assignment operator (copy semantics)
00084                 WCResampleHandler& operator=(const WCResampleHandler& other);
00085 
00086                 // Destructor.
00087                 virtual ~WCResampleHandler();
00088 
00089 
00090                 // The output array is presized by the caller to the correct size.  It will
00091                 // be filled using information in the input array combined with other
00092                 // resample-specific information.  Here again the interface is type expanded
00093                 // rather than templated because C++ doesn't yet handle templated member
00094                 // functions in a non-templated class.
00095                 // <group>
00096                 virtual void operator()(Matrix<Bool> &out, const Matrix<Bool> &in) = 0;
00097                 virtual void operator()(Matrix<uChar> &out, const Matrix<uChar> &in) = 0;
00098                 virtual void operator()(Matrix<Char> &out, const Matrix<Char> &in) = 0;
00099                 virtual void operator()(Matrix<uShort> &out, const Matrix<uShort> &in) = 0;
00100                 virtual void operator()(Matrix<Short> &out, const Matrix<Short> &in) = 0;
00101                 virtual void operator()(Matrix<uInt> &out, const Matrix<uInt> &in) = 0;
00102                 virtual void operator()(Matrix<Int> &out, const Matrix<Int> &in) = 0;
00103                 virtual void operator()(Matrix<uLong> &out, const Matrix<uLong> &in) = 0;
00104                 virtual void operator()(Matrix<Long> &out, const Matrix<Long> &in) = 0;
00105                 virtual void operator()(Matrix<Float> &out, const Matrix<Float> &in) = 0;
00106                 virtual void operator()(Matrix<Double> &out, const Matrix<Double> &in) = 0;
00107                 virtual void operator()(Matrix<Complex> &out, const Matrix<Complex> &in) = 0;
00108                 virtual void operator()(Matrix<DComplex> &out, const Matrix<DComplex> &in) = 0;
00109                 // </group>
00110 
00111                 // These functions resample the input matrix to the output.
00112                 // inblc is the location 'within' the input matrix for the
00113                 // bottom-left pixel of the output (sim. for intrc); blank is
00114                 // the output value where none of the input data is useful.
00115                 // The output matrix must be presized to the required size.
00116                 // <group>
00117                 virtual void operator()(Matrix<Float> &out, const Matrix<Float> &in,
00118                                         const Vector<Float> &inblc,
00119                                         const Vector<Float> &intrc,
00120                                         const Float blank = 0.0) = 0;
00121                 virtual void operator()(Matrix<Float> &out, Matrix<Bool>& outMask,
00122                                         const Matrix<Float> &in, const Matrix<Bool> &inMask,
00123                                         const Vector<Float> &inblc,
00124                                         const Vector<Float> &intrc,
00125                                         const Float blank = 0.0) = 0;
00126                 virtual void operator()(Matrix<Bool> &out, const Matrix<Bool> &in,
00127                                         const Vector<Float> &inblc,
00128                                         const Vector<Float> &intrc,
00129                                         const Bool blank = False) = 0;
00130                 // </group>
00131 
00132                 // These functions manipulate which subregion in "in" gets expanded
00133                 // to "out" Coordinates are the fraction of the image to use, with
00134                 // <0.0, 0.0> representing the bottom-left corner of the first pixel
00135                 // and <1.0, 1.0> representing the top-right corner of the last
00136                 // pixel.  These parameters are interpreted according to the derived
00137                 // class.
00138                 // <group>
00139                 void setSubregion(const Vector<Double> &blc,
00140                                   const Vector<Double> &trc) {
00141                         itsBlc = blc;
00142                         itsTrc = trc;
00143                 }
00144                 void getSubregion(Vector<Double> &blc,
00145                                   Vector<Double> &trc) const {
00146                         blc = itsBlc;
00147                         trc = itsTrc;
00148                 }
00149                 // </group>
00150 
00151 
00152         protected:
00153 
00154                 // Get the bottom left corner (range <0-1,0-1>) of the subregion
00155                 const Vector<Double> &blc() const {
00156                         return itsBlc;
00157                 }
00158 
00159                 // Get the top right corner (range <0-1,0-1>) of the subregion
00160                 const Vector<Double> &trc() const {
00161                         return itsTrc;
00162                 }
00163 
00164         private:
00165 
00166                 // Current subregion
00167                 Vector<Double> itsBlc;
00168                 Vector<Double> itsTrc;
00169 
00170         };
00171 
00172 
00173 } //# NAMESPACE CASA - END
00174 
00175 #endif
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines

Generated on 31 Aug 2016 for casa by  doxygen 1.6.1