casa  $Rev:20696$
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines
Public Member Functions | Static Public Member Functions | Protected Attributes
casa::WCPolygon Class Reference

Class to define a 2-D polygonal world coordinate region in an image. More...

#include <WCPolygon.h>

Inheritance diagram for casa::WCPolygon:
casa::WCRegion

List of all members.

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.
WCPolygonoperator= (const WCPolygon &other)
 Assignment (copy semantics)
virtual Bool operator== (const WCRegion &other) const
 Comparison.
virtual WCRegioncloneRegion () const
 Clone a WCPolygon object.
virtual Bool canExtend () const
 WCPolygon cannot extend a region.
virtual LCRegiondoToLCRegion (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 WCPolygonfromRecord (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

Detailed Description

Class to define a 2-D polygonal world coordinate region in an image.

Intended use:

Public interface

Prerequisite

Synopsis

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.

Example

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

Example

    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

Example

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.

Example

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.

Motivation

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;

To Do

Definition at line 205 of file WCPolygon.h.


Constructor & Destructor Documentation

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.

Copy constructor (reference semantics).

virtual casa::WCPolygon::~WCPolygon ( ) [virtual]

Destructor.


Member Function Documentation

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.

WCPolygon& casa::WCPolygon::operator= ( const WCPolygon other)

Assignment (copy semantics)

virtual Bool casa::WCPolygon::operator== ( const WCRegion other) const [virtual]

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]

Return region type.

Returns the class name

Implements casa::WCRegion.


Member Data Documentation

Definition at line 271 of file WCPolygon.h.

Definition at line 270 of file WCPolygon.h.

Definition at line 272 of file WCPolygon.h.

Definition at line 269 of file WCPolygon.h.

Definition at line 267 of file WCPolygon.h.

Definition at line 268 of file WCPolygon.h.


The documentation for this class was generated from the following file: