Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include "mitkPlanarFourPointAngle.h"
00020 #include "mitkGeometry2D.h"
00021
00022
00023 mitk::PlanarFourPointAngle::PlanarFourPointAngle()
00024 : FEATURE_ID_ANGLE( this->AddFeature( "Angle", "deg" ) )
00025 {
00026
00027 this->ResetNumberOfControlPoints( 2 );
00028
00029 m_PolyLines->InsertElement( 0, VertexContainerType::New());
00030 m_PolyLines->InsertElement( 1, VertexContainerType::New());
00031 }
00032
00033
00034 mitk::PlanarFourPointAngle::~PlanarFourPointAngle()
00035 {
00036 }
00037
00038
00039 void mitk::PlanarFourPointAngle::GeneratePolyLine()
00040 {
00041
00042
00043 m_PolyLines->ElementAt( 0 )->Reserve( 2 );
00044 if (m_ControlPoints->Size() > 2)
00045 {
00046 m_PolyLines->ElementAt( 1 )->Reserve( this->GetNumberOfControlPoints() - 2 );
00047 }
00048
00049 for ( unsigned int i = 0; i < this->GetNumberOfControlPoints(); ++i )
00050 {
00051 if (i < 2)
00052 {
00053 m_PolyLines->ElementAt( 0 )->ElementAt( i ) = m_ControlPoints->ElementAt( i );
00054 }
00055 if (i > 1)
00056 {
00057 m_PolyLines->ElementAt( 1 )->ElementAt( i-2 ) = m_ControlPoints->ElementAt( i );
00058 }
00059 }
00060 }
00061
00062 void mitk::PlanarFourPointAngle::GenerateHelperPolyLine(double , unsigned int )
00063 {
00064
00065
00066 }
00067
00068 void mitk::PlanarFourPointAngle::EvaluateFeaturesInternal()
00069 {
00070 if ( this->GetNumberOfControlPoints() < 4 )
00071 {
00072
00073 return;
00074 }
00075
00076
00077 const Point2D &p0 = this->GetControlPoint( 0 );
00078 const Point2D &p1 = this->GetControlPoint( 1 );
00079 const Point2D &p2 = this->GetControlPoint( 2 );
00080 const Point2D &p3 = this->GetControlPoint( 3 );
00081
00082 Vector2D v0 = p1 - p0;
00083 Vector2D v1 = p3 - p2;
00084
00085 v0.Normalize();
00086 v1.Normalize();
00087 double angle = acos( v0 * v1 );
00088
00089 this->SetQuantity( FEATURE_ID_ANGLE, angle );
00090 }
00091
00092
00093 void mitk::PlanarFourPointAngle::PrintSelf( std::ostream& os, itk::Indent indent) const
00094 {
00095 Superclass::PrintSelf( os, indent );
00096
00097 }