Loading...
Searching...
No Matches
LattRegionHolder.h
Go to the documentation of this file.
//# LattRegionHolder.h: Class to hold a region of interest in an image
//# Copyright (C) 1999,2001
//# Associated Universities, Inc. Washington DC, USA.
//#
//# This library is free software; you can redistribute it and/or modify it
//# under the terms of the GNU Library General Public License as published by
//# the Free Software Foundation; either version 2 of the License, or (at your
//# option) any later version.
//#
//# This library is distributed in the hope that it will be useful, but WITHOUT
//# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
//# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
//# License for more details.
//#
//# You should have received a copy of the GNU Library General Public License
//# along with this library; if not, write to the Free Software Foundation,
//# Inc., 675 Massachusetts Ave, Cambridge, MA 02139, USA.
//#
//# Correspondence concerning AIPS++ should be addressed as follows:
//# Internet email: casa-feedback@nrao.edu.
//# Postal address: AIPS++ Project Office
//# National Radio Astronomy Observatory
//# 520 Edgemont Road
//# Charlottesville, VA 22903-2475 USA
#ifndef LATTICES_LATTREGIONHOLDER_H
#define LATTICES_LATTREGIONHOLDER_H
//# Includes
#include <casacore/casa/aips.h>
#include <casacore/lattices/LRegions/LatticeRegion.h>
namespace casacore { //# NAMESPACE CASACORE - BEGIN
//# Forward Declarations
class CoordinateSystem;
class IPosition;
class LCRegion;
class LCSlicer;
class WCRegion;
class String;
class TableRecord;
// <summary>
// Class to hold a region of interest in an image.
// </summary>
// <use visibility=export>
// <reviewed reviewer="" date="" tests="">
// </reviewed>
// <prerequisite>
// <li> <linkto class=LCSlicer>LCSlicer</linkto>
// <li> <linkto class=WCRegion>LCRegion</linkto>
// </prerequisite>
// <synopsis>
// The only purpose of LattRegionHolder is to have a single object for
// the various kinds of regions. It can hold a
// <linkto class=LCRegion>LCRegion</linkto>, and
// <linkto class=LCSlicer>LCSlicer</linkto>.
// </synopsis>
// <example>
// <srcblock>
// </srcblock>
// </example>
// <motivation>
// It was felt that making an abstract base class LatticeRegion for
// LCRegion and WCRegion would create undesirable dependencies of
// module Lattices on module Coordinates. E.g. it would be impossible
// to have a function toWCRegion.
// Therefore the container class LattRegionHolder is chosen, from which
// the container <linkto class=ImageRegion>ImageRegion</linkto> is derived.
// </motivation>
//# <todo asof="1997/11/11">
//# <li>
//# </todo>
class LattRegionHolder
{
public:
// Construct from a region based on lattice coordinates.
LattRegionHolder (const LCRegion&);
// Construct from a slicer based on lattice coordinates.
LattRegionHolder (const LCSlicer&);
// Similar constructors as above, but using a pointer.
// It takes over the pointer, so the user should not delete the
// object. It is deleted by the LattRegionHolder destructor.
// <group>
explicit LattRegionHolder (LCRegion*);
explicit LattRegionHolder (LCSlicer*);
// </group>
// Copy constructor (copy semantics).
LattRegionHolder (const LattRegionHolder& other);
virtual ~LattRegionHolder();
// Assignment (copy semantics).
LattRegionHolder& operator= (const LattRegionHolder& other);
// Clone the object.
virtual LattRegionHolder* clone() const;
// Comparison
// <group>
virtual Bool operator==(const LattRegionHolder& other) const;
Bool operator!=(const LattRegionHolder& other) const;
// </group>
// Test if the underlying region is an LCRegion, etc.
// <group>
Bool isLCRegion() const;
Bool isLCSlicer() const;
virtual Bool isWCRegion() const;
// </group>
// Get the region as a pointer to a LCRegion, LCSlicer, or WCRegion.
// An exception is thrown if the region is not the correct type.
// Functions <src>isWCRegion()</src>, etc. can be used to test the type.
// <group>
const LCRegion* asLCRegionPtr() const;
const LCSlicer* asLCSlicerPtr() const;
virtual const WCRegion* asWCRegionPtr() const;
// </group>
// Get the dimensionality.
uInt ndim() const;
// Convert to a LatticeRegion using the given shape.
LatticeRegion toLatticeRegion (const IPosition& shape) const;
// Convert to a LatticeRegion using the given coordinate system
// (with reference pixel) and shape.
// It will also make the region complete (absolute and non-fractional).
virtual LatticeRegion toLatticeRegion (const CoordinateSystem& cSys,
const IPosition& shape) const;
// Form a compound from this and the other region.
// <group>
virtual LattRegionHolder* makeUnion (const LattRegionHolder& other) const;
virtual LattRegionHolder* makeIntersection
(const LattRegionHolder& other) const;
virtual LattRegionHolder* makeDifference
(const LattRegionHolder& other) const;
virtual LattRegionHolder* makeComplement() const;
// </group>
protected:
// Construct for the given dimensionality (for derived classes).
explicit LattRegionHolder (uInt ndim);
private:
LCRegion* itsLC;
LCSlicer* itsSlicer;
uInt itsNdim;
};
inline Bool LattRegionHolder::isLCRegion() const
{
return (itsLC != 0);
}
inline Bool LattRegionHolder::isLCSlicer() const
{
return (itsSlicer != 0);
}
inline Bool LattRegionHolder::operator!= (const LattRegionHolder& other) const
{
return (! operator== (other));
}
inline uInt LattRegionHolder::ndim() const
{
return itsNdim;
}
} //# NAMESPACE CASACORE - END
#endif
casacore::CoordinateSystem
Definition CoordinateSystem.h:215
casacore::IPosition
Definition IPosition.h:117
casacore::LCRegion
Definition LCRegion.h:86
casacore::LCSlicer
Definition LCSlicer.h:83
casacore::LattRegionHolder::LattRegionHolder
LattRegionHolder(const LCRegion &)
Construct from a region based on lattice coordinates.
casacore::LattRegionHolder::asLCSlicerPtr
const LCSlicer * asLCSlicerPtr() const
casacore::LattRegionHolder::makeUnion
virtual LattRegionHolder * makeUnion(const LattRegionHolder &other) const
Form a compound from this and the other region.
casacore::LattRegionHolder::itsLC
LCRegion * itsLC
Definition LattRegionHolder.h:162
casacore::LattRegionHolder::isWCRegion
virtual Bool isWCRegion() const
casacore::LattRegionHolder::toLatticeRegion
virtual LatticeRegion toLatticeRegion(const CoordinateSystem &cSys, const IPosition &shape) const
Convert to a LatticeRegion using the given coordinate system (with reference pixel) and shape.
casacore::LattRegionHolder::itsSlicer
LCSlicer * itsSlicer
Definition LattRegionHolder.h:163
casacore::LattRegionHolder::itsNdim
uInt itsNdim
Definition LattRegionHolder.h:164
casacore::LattRegionHolder::makeComplement
virtual LattRegionHolder * makeComplement() const
casacore::LattRegionHolder::operator==
virtual Bool operator==(const LattRegionHolder &other) const
Comparison.
casacore::LattRegionHolder::LattRegionHolder
LattRegionHolder(const LCSlicer &)
Construct from a slicer based on lattice coordinates.
casacore::LattRegionHolder::asWCRegionPtr
virtual const WCRegion * asWCRegionPtr() const
casacore::LattRegionHolder::makeDifference
virtual LattRegionHolder * makeDifference(const LattRegionHolder &other) const
casacore::LattRegionHolder::operator!=
Bool operator!=(const LattRegionHolder &other) const
Definition LattRegionHolder.h:176
casacore::LattRegionHolder::ndim
uInt ndim() const
Get the dimensionality.
Definition LattRegionHolder.h:180
casacore::LattRegionHolder::isLCSlicer
Bool isLCSlicer() const
Definition LattRegionHolder.h:172
casacore::LattRegionHolder::toLatticeRegion
LatticeRegion toLatticeRegion(const IPosition &shape) const
Convert to a LatticeRegion using the given shape.
casacore::LattRegionHolder::makeIntersection
virtual LattRegionHolder * makeIntersection(const LattRegionHolder &other) const
casacore::LattRegionHolder::isLCRegion
Bool isLCRegion() const
Test if the underlying region is an LCRegion, etc.
Definition LattRegionHolder.h:168
casacore::LattRegionHolder::LattRegionHolder
LattRegionHolder(LCSlicer *)
casacore::LattRegionHolder::LattRegionHolder
LattRegionHolder(LCRegion *)
Similar constructors as above, but using a pointer.
casacore::LattRegionHolder::LattRegionHolder
LattRegionHolder(uInt ndim)
Construct for the given dimensionality (for derived classes).
casacore::LattRegionHolder::LattRegionHolder
LattRegionHolder(const LattRegionHolder &other)
Copy constructor (copy semantics).
casacore::LattRegionHolder::operator=
LattRegionHolder & operator=(const LattRegionHolder &other)
Assignment (copy semantics).
casacore::LattRegionHolder::asLCRegionPtr
const LCRegion * asLCRegionPtr() const
Get the region as a pointer to a LCRegion, LCSlicer, or WCRegion.
casacore::LattRegionHolder::clone
virtual LattRegionHolder * clone() const
Clone the object.
casacore::LattRegionHolder::~LattRegionHolder
virtual ~LattRegionHolder()
casacore::LatticeRegion
Definition LatticeRegion.h:72
casacore::String
String: the storage and methods of handling collections of characters.
Definition String.h:223
casacore::TableRecord
Definition TableRecord.h:183
casacore::WCRegion
Definition WCRegion.h:94
casacore
this file contains all the compiler specific defines
Definition mainpage.dox:28
casacore::uInt
unsigned int uInt
Definition aipstype.h:49
casacore::shape
IPosition shape(const RecordFieldId &) const
Get the actual shape of this field.
casacore::Bool
bool Bool
Define the standard types used by Casacore.
Definition aipstype.h:40