casa
$Rev:20696$
|
Class to define a 2-D polygonal world coordinate region in an image. More...
#include <WCPolygon.h>
Public Member Functions | |
WCPolygon () | |
WCPolygon (const Quantum< Vector< Double > > &x, const Quantum< Vector< Double > > &y, const IPosition &pixelAxes, const CoordinateSystem &cSys, const RegionType::AbsRelType absRel=RegionType::Abs) | |
Construct from two vectors of world coordinates defining the polygon vertices. | |
WCPolygon (const LCPolygon &polygon, const IPosition &pixelAxes, const CoordinateSystem &cSys) | |
Construct from an LCPolygon . | |
WCPolygon (const WCPolygon &other) | |
Copy constructor (reference semantics). | |
virtual | ~WCPolygon () |
Destructor. | |
WCPolygon & | operator= (const WCPolygon &other) |
Assignment (copy semantics) | |
virtual Bool | operator== (const WCRegion &other) const |
Comparison. | |
virtual WCRegion * | cloneRegion () const |
Clone a WCPolygon object. | |
virtual Bool | canExtend () const |
WCPolygon cannot extend a region. | |
virtual LCRegion * | doToLCRegion (const CoordinateSystem &cSys, const IPosition &latticeShape, const IPosition &pixelAxesMap, const IPosition &outOrder) const |
Convert to an LCRegion using the given coordinate system. | |
virtual TableRecord | toRecord (const String &tableName) const |
Convert the WCPolygon object to a record. | |
virtual String | type () const |
Return region type. | |
Static Public Member Functions | |
static WCPolygon * | fromRecord (const TableRecord &rec, const String &tableName) |
Convert to a WCPolygon from a record. | |
static String | className () |
Returns "WCPolygon". | |
Protected Attributes | |
Quantum< Vector< Double > > | itsX |
Quantum< Vector< Double > > | itsY |
IPosition | itsPixelAxes |
CoordinateSystem | itsCSys |
RegionType::AbsRelType | itsAbsRel |
Bool | itsNull |
Class to define a 2-D polygonal world coordinate region in an image.
Public interface
The corners of the 2-D polygon are given by world coordinates. The vertices are connected by straight lines in lattice coordinates.
All this class does, apart from constructing itself, is know how to save itself to a Record
and how to convert itself to an LCRegion
. The conversion allows you to apply a WCPolygon
constructed with one CoordinateSystem
to another CoordinateSystem
. That is, you can apply a WCPolygon
from this image to that image.
At construction, it is assumed that the units of the world coordinates are the same as those encapsulated in the construction CoordinateSystem
. You must tell the constructor, which world axes the x and vectors are associated with. Make sure you account for reordering. For example, if you reordered [ra,dec] to be [dec,ra] with the CoordinateSystem::transpose(,)
fuction and wished the x vector to be ra, and the y vector to be dec, then worldAxes=[1,0]
.
The CoordinateSystem
supplied to the toLCRegion
(which returns a pointer to an LCPolygongon
object) function does not have to be identical in structure to that with which the WCPolygon
was constructed. However, each world axis given in the worldAxes
vector at construction must be present somewhere (order is unimportant) in the supplied CoordinateSystem
.
The supplied lattice shape must be 2-D and corresponds to the pixel axes of the two world axes of the supplied CoordinateSystem
which match those of the construction CoordinateSystem
.
Let us give some examples with pseudo-code. cSys is the construction CoordinateSystem and cSys2 is the supplied CoordinateSystem. We list their world axes in the square brackets. The construction polygon values don't matter. Similarly, the values of shape don't matter as long as there are 2 of them.
cSys = [ra, dec, freq]; cSys2 = [ra, dec]; axes=[0,1]; shape = [,]; WCPolygon poly(x, y, axes, cSys); LCRegion* pR = poly.toLCRegion(cSys2, shape);
The resultant LCPolygon will have vertices converted with the [ra, dec] axes from cSys2
cSys = [ra, dec, freq]; cSys2 = [ra, dec]; axes=[0,2]; shape = [,]; WCPolygon poly(x, y, axes, cSys); LCRegion* pR = poly.toLCRegion(cSys2, shape);
This will throw an exception because the [freq] axis is missing in cSys2
In this example we make it a bit harder by reordering the pixel axes too. The new order of the pixel axes in terms of the original order [0,1,2...] is given after the world axes
cSys = [ra, dec, freq]; cSys2 = [stokes, freq, ra, dec], [3,2,1,0]; axes=[1,2]; shape = [,]; WCPolygon poly(x, y, axes, cSys); LCRegion* pR = poly.toLCRegion(cSys2, shape);
The resultant LCPolygon will have vertices converted with the [ra, dec] axes from cSys2. The fact that the pixel axes of cSys2 were reordered is accounted for internally, but does not extrude further.
In this example we make it a bit harder by remove a pixel axis.
cSys = [ra, dec, freq]; cSys2 = [stokes, freq, ra, dec]; cSys2.removePixelAxis(1, cSys2.referencePixel()(1)); axes=[1,2]; shape = [,]; WCPolygon poly(x, y, axes, cSys); LCRegion* pR = poly.toLCRegion(cSys2, shape);
This will throw an exception because the removed pixel axis, pixel axis number 1, corresponds to the [freq] world axis in cSys2, and the [freq] axis is one of those specified at construction. Although the world axis is still present, it is not possible to convert to a pixel coordinate if the pixel axis is not there.
Users must be able to specify regions in world as well as lattice coordinates.
Note: In all the constructors, you have to specifiy which plane the polygon lies in; You do this by specifying the PIXEL AXES (not the world axes) as this is the natural thing the user will want to specify;
Note: For the constructors specifying the world values as simple doubles, it is ASSUMED that the units of those doubles are the same as the native units of the CoordinateSystem
for each axis;
Note: World coordinates may be specified as absolute or offset; If the latter, they are offset with respect to the reference pixel of the CoordinateSystem
;
Definition at line 205 of file WCPolygon.h.
casa::WCPolygon::WCPolygon | ( | const Quantum< Vector< Double > > & | x, |
const Quantum< Vector< Double > > & | y, | ||
const IPosition & | pixelAxes, | ||
const CoordinateSystem & | cSys, | ||
const RegionType::AbsRelType | absRel = RegionType::Abs |
||
) |
Construct from two vectors of world coordinates defining the polygon vertices.
casa::WCPolygon::WCPolygon | ( | const LCPolygon & | polygon, |
const IPosition & | pixelAxes, | ||
const CoordinateSystem & | cSys | ||
) |
Construct from an LCPolygon
.
casa::WCPolygon::WCPolygon | ( | const WCPolygon & | other | ) |
Copy constructor (reference semantics).
virtual casa::WCPolygon::~WCPolygon | ( | ) | [virtual] |
Destructor.
virtual Bool casa::WCPolygon::canExtend | ( | ) | const [virtual] |
WCPolygon cannot extend a region.
Reimplemented from casa::WCRegion.
static String casa::WCPolygon::className | ( | ) | [static] |
Returns "WCPolygon".
virtual WCRegion* casa::WCPolygon::cloneRegion | ( | ) | const [virtual] |
Clone a WCPolygon object.
Implements casa::WCRegion.
virtual LCRegion* casa::WCPolygon::doToLCRegion | ( | const CoordinateSystem & | cSys, |
const IPosition & | latticeShape, | ||
const IPosition & | pixelAxesMap, | ||
const IPosition & | outOrder | ||
) | const [virtual] |
Convert to an LCRegion using the given coordinate system.
Implements casa::WCRegion.
static WCPolygon* casa::WCPolygon::fromRecord | ( | const TableRecord & | rec, |
const String & | tableName | ||
) | [static] |
Convert to a WCPolygon from a record.
Reimplemented from casa::WCRegion.
Comparison.
Reimplemented from casa::WCRegion.
virtual TableRecord casa::WCPolygon::toRecord | ( | const String & | tableName | ) | const [virtual] |
Convert the WCPolygon object to a record.
The record can be used to make the object persistent. The tableName
argument can be used by derived classes (e.g. LCPagedMask) to put very large objects.
Implements casa::WCRegion.
virtual String casa::WCPolygon::type | ( | ) | const [virtual] |
RegionType::AbsRelType casa::WCPolygon::itsAbsRel [protected] |
Definition at line 271 of file WCPolygon.h.
CoordinateSystem casa::WCPolygon::itsCSys [protected] |
Definition at line 270 of file WCPolygon.h.
Bool casa::WCPolygon::itsNull [protected] |
Definition at line 272 of file WCPolygon.h.
IPosition casa::WCPolygon::itsPixelAxes [protected] |
Definition at line 269 of file WCPolygon.h.
Quantum<Vector<Double> > casa::WCPolygon::itsX [protected] |
Definition at line 267 of file WCPolygon.h.
Quantum<Vector<Double> > casa::WCPolygon::itsY [protected] |
Definition at line 268 of file WCPolygon.h.