00001 //# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 00002 //# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public 00003 //# License for more details. 00004 //# 00005 //# You should have received a copy of the GNU Library General Public License 00006 //# along with this library; if not, write to the Free Software Foundation, 00007 //# Inc., 675 Massachusetts Ave, Cambridge, MA 02139, USA. 00008 //# 00009 //# Correspondence concerning AIPS++ should be addressed as follows: 00010 //# Internet email: aips2-request@nrao.edu. 00011 //# Postal address: AIPS++ Project Office 00012 //# National Radio Astronomy Observatory 00013 //# 520 Edgemont Road 00014 //# Charlottesville, VA 22903-2475 USA 00015 //# 00016 00017 #ifndef ANNOTATIONS_ANNRECTBOX_H 00018 #define ANNOTATIONS_ANNRECTBOX_H 00019 00020 #include <casa/aips.h> 00021 #include <imageanalysis/Annotations/AnnPolygon.h> 00022 00023 namespace casa { 00024 00025 // <summary> 00026 // This class represents an annotation for rectangular (in position coordinates) region specified 00027 // in an ascii region file as proposed in CAS-2285 00028 // </summary> 00029 // <author>Dave Mehringer</author> 00030 // <use visibility=export> 00031 // <reviewed reviewer="" date="yyyy/mm/dd" tests="" demos=""> 00032 // </reviewed> 00033 // <prerequisite> 00034 00035 // </prerequisite> 00036 00037 // <etymology> 00038 // Holds the specification of an annotation for a rectangular region as specified in ASCII format. 00039 // </etymology> 00040 00041 // <synopsis> 00042 // This class represents an annotation for a rectangular region in coordinate space. In general, in order 00043 // to preserve the region through a rotation (eg from one coordinate frame to another), all four corners 00044 // must be tracked through the rotation. Hence, this region is effectively a four corner polygon. 00045 // </synopsis> 00046 00047 00048 class AnnRectBox: public AnnPolygon { 00049 00050 public: 00051 00052 AnnRectBox( 00053 const Quantity& blcx, 00054 const Quantity& blcy, 00055 const Quantity& trcx, 00056 const Quantity& trcy, 00057 const String& dirRefFrameString, 00058 const CoordinateSystem& csys, 00059 const IPosition& imShape, 00060 const Quantity& beginFreq, 00061 const Quantity& endFreq, 00062 const String& freqRefFrameString, 00063 const String& dopplerString, 00064 const Quantity& restfreq, 00065 const Vector<Stokes::StokesTypes> stokes, 00066 const Bool annotationOnly 00067 ); 00068 00069 // Simplified constructor. 00070 // all frequencies are used (these can be set after construction). 00071 // blcx, blcy, trcx, and trcy 00072 // must be in the same frame as the csys direction coordinate. 00073 // is a region (not just an annotation), although this value can be changed after 00074 // construction. 00075 AnnRectBox( 00076 const Quantity& blcx, 00077 const Quantity& blcy, 00078 const Quantity& trcx, 00079 const Quantity& trcy, 00080 const CoordinateSystem& csys, 00081 const IPosition& imShape, 00082 const Vector<Stokes::StokesTypes>& stokes 00083 ); 00084 00085 // implicit copy constructor and destructor are fine 00086 00087 AnnRectBox& operator=(const AnnRectBox& other); 00088 00089 // get the blc and trc direction coords for the box. 00090 // The output directions will be converted from the input 00091 // reference frame to the reference frame of the input 00092 // coordinate system if necessary. 00093 // blc is the 0th component, trc the 1st in the returned vector. 00094 00095 //Vector<MDirection> getCorners() const; 00096 00097 ostream& print(ostream &os) const; 00098 00099 private: 00100 AnnotationBase::Direction _inputCorners; 00101 }; 00102 00103 } 00104 00105 #endif