Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes

mitk::PlanarRectangle Class Reference

Implementation of PlanarFigure representing a polygon with two or more control points. More...

#include <mitkPlanarRectangle.h>

Inheritance diagram for mitk::PlanarRectangle:
Inheritance graph
[legend]
Collaboration diagram for mitk::PlanarRectangle:
Collaboration graph
[legend]

List of all members.

Public Types

typedef PlanarRectangle Self
typedef PlanarFigure Superclass
typedef itk::SmartPointer< SelfPointer
typedef itk::SmartPointer
< const Self
ConstPointer

Public Member Functions

virtual const char * GetClassName () const
virtual void PlaceFigure (const Point2D &point)
 Place figure in its minimal configuration (a point at least) onto the given 2D geometry.
virtual unsigned int GetMinimumNumberOfControlPoints () const
 Polygon has 2 control points per definition.
virtual unsigned int GetMaximumNumberOfControlPoints () const
 Polygon maximum number of control points is principally not limited.
virtual bool SetControlPoint (unsigned int index, const Point2D &point, bool createIfDoesNotExist=false)

Static Public Member Functions

static Pointer New ()

Protected Member Functions

 PlanarRectangle ()
virtual ~PlanarRectangle ()
virtual void GeneratePolyLine ()
 Generates the poly-line representation of the planar figure.
virtual void GenerateHelperPolyLine (double mmPerDisplayUnit, unsigned int displayHeight)
 Generates the poly-lines that should be drawn the same size regardless of zoom.
virtual void EvaluateFeaturesInternal ()
 Calculates feature quantities of the planar figure.
virtual void PrintSelf (std::ostream &os, itk::Indent indent) const

Protected Attributes

const unsigned int FEATURE_ID_CIRCUMFERENCE
const unsigned int FEATURE_ID_AREA

Detailed Description

Implementation of PlanarFigure representing a polygon with two or more control points.

Definition at line 35 of file mitkPlanarRectangle.h.


Member Typedef Documentation

typedef itk::SmartPointer<const Self> mitk::PlanarRectangle::ConstPointer

Reimplemented from mitk::PlanarFigure.

Definition at line 38 of file mitkPlanarRectangle.h.

typedef itk::SmartPointer<Self> mitk::PlanarRectangle::Pointer

Reimplemented from mitk::PlanarFigure.

Definition at line 38 of file mitkPlanarRectangle.h.

Reimplemented from mitk::PlanarFigure.

Definition at line 38 of file mitkPlanarRectangle.h.

Reimplemented from mitk::PlanarFigure.

Definition at line 38 of file mitkPlanarRectangle.h.


Constructor & Destructor Documentation

mitk::PlanarRectangle::PlanarRectangle (  ) [protected]

Definition at line 24 of file mitkPlanarRectangle.cpp.

References mitk::PlanarFigure::m_PolyLines, mitk::BoolProperty::New(), mitk::PlanarFigure::ResetNumberOfControlPoints(), and mitk::BaseData::SetProperty().

: FEATURE_ID_CIRCUMFERENCE( this->AddFeature( "Circumference", "mm" ) ),
  FEATURE_ID_AREA( this->AddFeature( "Area", "mm^2" ) )
{
  // Rectangle has four control points
  this->ResetNumberOfControlPoints( 4 );
  this->SetProperty( "closed", mitk::BoolProperty::New(true) );

  m_PolyLines->InsertElement( 0, VertexContainerType::New());
}
mitk::PlanarRectangle::~PlanarRectangle (  ) [protected, virtual]

Definition at line 36 of file mitkPlanarRectangle.cpp.

{
}

Member Function Documentation

void mitk::PlanarRectangle::EvaluateFeaturesInternal (  ) [protected, virtual]

Calculates feature quantities of the planar figure.

Implements mitk::PlanarFigure.

Definition at line 142 of file mitkPlanarRectangle.cpp.

References QuadProgPP::abs().

{
  // Calculate circumference
  double circumference = 0.0;
  unsigned int i;
  for ( i = 0; i < this->GetNumberOfControlPoints(); ++i )
  {
    circumference += this->GetWorldControlPoint( i ).EuclideanDistanceTo( 
      this->GetWorldControlPoint( (i + 1) % this->GetNumberOfControlPoints() ) );
  }

  this->SetQuantity( FEATURE_ID_CIRCUMFERENCE, circumference );


  // Calculate rectangle area (well, done a bit clumsy...)
  double area = 0.0;
  if ( this->GetGeometry2D() != NULL )
  {
    for ( i = 0; i < this->GetNumberOfControlPoints(); ++i )
    {
      Point2D p0 = this->GetControlPoint( i );
      Point2D p1 = this->GetControlPoint( (i + 1) % this->GetNumberOfControlPoints() );

      area += p0[0] * p1[1] - p1[0] * p0[1];
    }
    area /= 2.0;
  }
  
  this->SetQuantity( FEATURE_ID_AREA, abs(area) );

}
void mitk::PlanarRectangle::GenerateHelperPolyLine ( double  mmPerDisplayUnit,
unsigned int  displayHeight 
) [protected, virtual]

Generates the poly-lines that should be drawn the same size regardless of zoom.

Implements mitk::PlanarFigure.

Definition at line 137 of file mitkPlanarRectangle.cpp.

{
  // A polygon does not require helper objects
}
void mitk::PlanarRectangle::GeneratePolyLine (  ) [protected, virtual]

Generates the poly-line representation of the planar figure.

Implements mitk::PlanarFigure.

Definition at line 127 of file mitkPlanarRectangle.cpp.

{
  // TODO: start polygon at specified initalize point...
  m_PolyLines->ElementAt( 0 )->Reserve( this->GetNumberOfControlPoints() );
  for ( unsigned int i = 0; i < this->GetNumberOfControlPoints(); ++i )
  {
    m_PolyLines->ElementAt( 0 )->ElementAt( i ) = m_ControlPoints->ElementAt( i );  
  }
}
virtual const char* mitk::PlanarRectangle::GetClassName (  ) const [virtual]

Reimplemented from mitk::PlanarFigure.

virtual unsigned int mitk::PlanarRectangle::GetMaximumNumberOfControlPoints (  ) const [inline, virtual]

Polygon maximum number of control points is principally not limited.

Implements mitk::PlanarFigure.

Definition at line 59 of file mitkPlanarRectangle.h.

  {
    return 4;
  }
virtual unsigned int mitk::PlanarRectangle::GetMinimumNumberOfControlPoints (  ) const [inline, virtual]

Polygon has 2 control points per definition.

Implements mitk::PlanarFigure.

Definition at line 52 of file mitkPlanarRectangle.h.

  {
    return 4;
  }
static Pointer mitk::PlanarRectangle::New (  ) [static]
virtual void mitk::PlanarRectangle::PlaceFigure ( const Point2D &  point ) [virtual]

Place figure in its minimal configuration (a point at least) onto the given 2D geometry.

Must be implemented in sub-classes.

Reimplemented from mitk::PlanarFigure.

void mitk::PlanarRectangle::PrintSelf ( std::ostream &  os,
itk::Indent  indent 
) const [protected, virtual]

Reimplemented from mitk::PlanarFigure.

Definition at line 175 of file mitkPlanarRectangle.cpp.

{
  Superclass::PrintSelf( os, indent );

  os << indent << "Number of control points: " << this->GetNumberOfControlPoints() << std::endl;

  os << indent << "Control points:" << std::endl;

  mitk::PlanarFigure::VertexContainerType::ConstIterator it;

  for ( unsigned int i = 0; i < this->GetNumberOfControlPoints(); ++i )
  {
    os << indent << indent << i << ": " << m_ControlPoints->ElementAt( i ) << std::endl;
  }
}
bool mitk::PlanarRectangle::SetControlPoint ( unsigned int  index,
const Point2D &  point,
bool  createIfDoesNotExist = false 
) [virtual]

Reimplemented from mitk::PlanarFigure.

Definition at line 67 of file mitkPlanarRectangle.cpp.

{
  // heres the deal with the rectangle:
  // when a point is moved all corresponding corner points are moved with him
  // e.g. if the lower right point (index=3) is moved the upper right point (index=1)
  // is moved in the same x direction
  // and the lower left point (index=2) is moved in the same y direction
  // the upper left point (index=0) is left untouched
  bool set = false;

  if (createIfDoesNotExist)
  {
    m_ControlPoints->InsertElement( index, point );
    set = true;
  }
  else if ( index < this->GetNumberOfControlPoints() )
  {
    m_ControlPoints->InsertElement( index, point );
    set = true;
  }

  if(set)
  {
    // can be made better ...
    unsigned int horizontalCorrespondingPointIndex = 1;
    unsigned int verticalCorrespondingPointIndex = 3;
    if(index == 1)
    {
      horizontalCorrespondingPointIndex = 0;
      verticalCorrespondingPointIndex = 2;
    }
    else if(index == 2)
    {
      horizontalCorrespondingPointIndex = 3;
      verticalCorrespondingPointIndex = 1;
    }
    else if(index == 3)
    {
      horizontalCorrespondingPointIndex = 2;
      verticalCorrespondingPointIndex = 0;
    }

    m_ControlPoints->ElementAt( verticalCorrespondingPointIndex ).SetElement(0, point[0]);
    m_ControlPoints->ElementAt( horizontalCorrespondingPointIndex ).SetElement(1, point[1]);
  }

  return set;
}

Member Data Documentation

const unsigned int mitk::PlanarRectangle::FEATURE_ID_AREA [protected]

Definition at line 82 of file mitkPlanarRectangle.h.

const unsigned int mitk::PlanarRectangle::FEATURE_ID_CIRCUMFERENCE [protected]

Definition at line 81 of file mitkPlanarRectangle.h.


The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines