Page MenuHomePhabricator

bug-8506-unittest-smooth-polygon.patch

Authored By
holfter
Jul 12 2011, 11:00 AM
Size
12 KB
Referenced Files
None
Subscribers
None

bug-8506-unittest-smooth-polygon.patch

From 95b443f4763fff4830945d4f3dbf37a540d118ef Mon Sep 17 00:00:00 2001
From: Adrian Holfter <adrian@adrian-laptop.(none)>
Date: Tue, 12 Jul 2011 10:55:11 +0200
Subject: [PATCH] Created unittest for PlanarSubdivisionPolygon and added it to IOTest
---
.../DataManagement/mitkPlanarSubdivisionPolygon.h | 4 +-
Modules/PlanarFigure/Testing/files.cmake | 1 +
.../Testing/mitkPlanarFigureIOTest.cpp | 25 +++
.../Testing/mitkPlanarSubdivisionPolygonTest.cpp | 174 ++++++++++++++++++++
4 files changed, 202 insertions(+), 2 deletions(-)
create mode 100644 Modules/PlanarFigure/Testing/mitkPlanarSubdivisionPolygonTest.cpp
diff --git a/Modules/PlanarFigure/DataManagement/mitkPlanarSubdivisionPolygon.h b/Modules/PlanarFigure/DataManagement/mitkPlanarSubdivisionPolygon.h
index 4348ae6..15fcec7 100644
--- a/Modules/PlanarFigure/DataManagement/mitkPlanarSubdivisionPolygon.h
+++ b/Modules/PlanarFigure/DataManagement/mitkPlanarSubdivisionPolygon.h
@@ -39,10 +39,10 @@ public:
itkNewMacro( Self );
- /** \brief Subdivision Polygon has 4 control points per definition. */
+ /** \brief Subdivision Polygon has 3 control points per definition. */
unsigned int GetMinimumNumberOfControlPoints() const
{
- return 4;
+ return 3;
}
diff --git a/Modules/PlanarFigure/Testing/files.cmake b/Modules/PlanarFigure/Testing/files.cmake
index 5eae54b..9f34bf1 100644
--- a/Modules/PlanarFigure/Testing/files.cmake
+++ b/Modules/PlanarFigure/Testing/files.cmake
@@ -1,6 +1,7 @@
SET(MODULE_TESTS
mitkPlanarCrossTest.cpp
mitkPlanarPolygonTest.cpp
+ mitkPlanarSubdivisionPolygonTest.cpp
mitkPlanarFigureIOTest.cpp
mitkPlanarFigureObjectFactoryTest.cpp
mitkPlanarArrowTest.cpp
diff --git a/Modules/PlanarFigure/Testing/mitkPlanarFigureIOTest.cpp b/Modules/PlanarFigure/Testing/mitkPlanarFigureIOTest.cpp
index 8257e67..2c59c3e 100644
--- a/Modules/PlanarFigure/Testing/mitkPlanarFigureIOTest.cpp
+++ b/Modules/PlanarFigure/Testing/mitkPlanarFigureIOTest.cpp
@@ -17,6 +17,7 @@ PURPOSE. See the above copyright notices for more information.
#include "mitkPlanarFourPointAngle.h"
#include "mitkPlanarLine.h"
#include "mitkPlanarPolygon.h"
+#include "mitkPlanarSubdivisionPolygon.h"
#include "mitkPlanarRectangle.h"
#include "mitkPlanarFigureWriter.h"
@@ -99,6 +100,16 @@ public:
planarPolygon->AddControlPoint( p2 );
planarPolygon->AddControlPoint( p3 );
planarFigures.push_back( planarPolygon.GetPointer() );
+
+ // Create PlanarSubdivisionPolygon
+ mitk::PlanarSubdivisionPolygon::Pointer planarSubdivisionPolygon = mitk::PlanarSubdivisionPolygon::New();
+ planarSubdivisionPolygon->SetClosed( false );
+ planarSubdivisionPolygon->SetGeometry2D( planeGeometry );
+ planarSubdivisionPolygon->PlaceFigure( p0 );
+ planarSubdivisionPolygon->SetCurrentControlPoint( p1 );
+ planarSubdivisionPolygon->AddControlPoint( p2 );
+ planarSubdivisionPolygon->AddControlPoint( p3 );
+ planarFigures.push_back( planarSubdivisionPolygon.GetPointer() );
// Create PlanarRectangle
mitk::PlanarRectangle::Pointer planarRectangle = mitk::PlanarRectangle::New();
@@ -183,6 +194,16 @@ public:
planarPolygonPrecise->AddControlPoint( p3precise );
planarFigures.push_back( planarPolygonPrecise.GetPointer() );
+ // Create PlanarSubdivisionPolygon
+ mitk::PlanarSubdivisionPolygon::Pointer planarSubdivisionPolygonPrecise = mitk::PlanarSubdivisionPolygon::New();
+ planarSubdivisionPolygonPrecise->SetClosed( false );
+ planarSubdivisionPolygonPrecise->SetGeometry2D( preciseGeometry );
+ planarSubdivisionPolygonPrecise->PlaceFigure( p0precise );
+ planarSubdivisionPolygonPrecise->SetCurrentControlPoint( p1precise );
+ planarSubdivisionPolygonPrecise->AddControlPoint( p2precise );
+ planarSubdivisionPolygonPrecise->AddControlPoint( p3precise );
+ planarFigures.push_back( planarSubdivisionPolygonPrecise.GetPointer() );
+
// Create PlanarRectangle
mitk::PlanarRectangle::Pointer planarRectanglePrecise = mitk::PlanarRectangle::New();
planarRectanglePrecise->SetGeometry2D( preciseGeometry );
@@ -218,6 +239,10 @@ public:
{
copiedFigure = mitk::PlanarPolygon::New();
}
+ if(strcmp((*it1)->GetNameOfClass(), "PlanarSubdivisionPolygon") == 0)
+ {
+ copiedFigure = mitk::PlanarSubdivisionPolygon::New();
+ }
if(strcmp((*it1)->GetNameOfClass(), "PlanarCross") == 0)
{
copiedFigure = mitk::PlanarCross::New();
diff --git a/Modules/PlanarFigure/Testing/mitkPlanarSubdivisionPolygonTest.cpp b/Modules/PlanarFigure/Testing/mitkPlanarSubdivisionPolygonTest.cpp
new file mode 100644
index 0000000..93307c6
--- /dev/null
+++ b/Modules/PlanarFigure/Testing/mitkPlanarSubdivisionPolygonTest.cpp
@@ -0,0 +1,174 @@
+/*=========================================================================
+
+Program: Medical Imaging & Interaction Toolkit
+Language: C++
+Date: $Date: 2010-03-15 11:12:36 +0100 (Mo, 15 Mrz 2010) $
+Version: $Revision: 21745 $
+
+Copyright (c) German Cancer Research Center, Division of Medical and
+Biological Informatics. All rights reserved.
+See MITKCopyright.txt or http://www.mitk.org/copyright.html for details.
+
+This software is distributed WITHOUT ANY WARRANTY; without even
+the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+PURPOSE. See the above copyright notices for more information.
+
+=========================================================================*/
+
+#include "mitkTestingMacros.h"
+#include "mitkPlanarSubdivisionPolygon.h"
+#include "mitkPlaneGeometry.h"
+
+
+class mitkPlanarSubdivisionPolygonTestClass
+{
+
+public:
+
+
+static void TestPlanarSubdivisionPolygonPlacement( mitk::PlanarSubdivisionPolygon::Pointer planarSubdivisionPolygon )
+{
+ // Test for correct minimum number of control points in cross-mode
+ MITK_TEST_CONDITION( planarSubdivisionPolygon->GetMinimumNumberOfControlPoints() == 3, "Minimum number of control points" );
+
+ // Test for correct maximum number of control points in cross-mode
+ MITK_TEST_CONDITION( planarSubdivisionPolygon->GetMaximumNumberOfControlPoints() == 1000, "Maximum number of control points" );
+
+ // Test for correct rounds of subdivisionPoints
+ MITK_TEST_CONDITION( planarSubdivisionPolygon->GetSubdivisionRounds() == 5, "Subdivision point generation depth" );
+
+ // Test for correct tension parameter
+ MITK_TEST_CONDITION( planarSubdivisionPolygon->GetTensionParameter() == 0.0625, "Tension parameter" );
+
+ // Initial placement of planarSubdivisionPolygon
+ mitk::Point2D p0;
+ p0[0] = 25.0; p0[1] = 25.0;
+ planarSubdivisionPolygon->PlaceFigure( p0 );
+
+ // Add second control point
+ mitk::Point2D p1;
+ p1[0] = 75.0; p1[1] = 25.0;
+ planarSubdivisionPolygon->SetControlPoint(1, p1 );
+
+ // Add third control point
+ mitk::Point2D p2;
+ p2[0] = 75.0; p2[1] = 75.0;
+ planarSubdivisionPolygon->AddControlPoint( p2 );
+
+ // Add fourth control point
+ mitk::Point2D p3;
+ p3[0] = 25.0; p3[1] = 75.0;
+ planarSubdivisionPolygon->AddControlPoint( p3 );
+
+ // Test for number of control points
+ MITK_TEST_CONDITION( planarSubdivisionPolygon->GetNumberOfControlPoints() == 4, "Number of control points after placement" );
+
+ // Test if PlanarFigure is closed
+ MITK_TEST_CONDITION( planarSubdivisionPolygon->IsClosed(), "Test if property 'closed' is set by default" );
+
+ // Test for number of polylines
+ const mitk::PlanarFigure::PolyLineType polyLine0 = planarSubdivisionPolygon->GetPolyLine( 0 );
+ mitk::PlanarFigure::PolyLineType::const_iterator iter = polyLine0.begin();
+ MITK_TEST_CONDITION( planarSubdivisionPolygon->GetPolyLinesSize() == 1, "Number of polylines after placement" );
+
+ // Test if subdivision point count is correct
+ MITK_TEST_CONDITION( polyLine0.size() == 128, "correct number of subdivision points for this depth level" );
+
+ // Test if control points are in correct order between subdivision points
+ bool correctPoint = true;
+ iter = polyLine0.begin();
+ advance(iter, 31);
+ if( iter->Point != p0 ){ correctPoint = false; }
+ advance(iter, 32);
+ if( iter->Point != p1 ){ correctPoint = false; }
+ advance(iter, 32);
+ if( iter->Point != p2 ){ correctPoint = false; }
+ advance(iter, 32);
+ if( iter->Point != p3 ){ correctPoint = false; }
+ MITK_TEST_CONDITION( correctPoint, "Test if control points are in correct order in polyline" );
+
+ // Test if a picked point has the correct coordinates
+ mitk::Point2D testPoint;
+ testPoint[0] = 50.000;
+ testPoint[1] = 18.750;
+ iter = polyLine0.begin();
+ advance(iter, 47);
+ MITK_TEST_CONDITION( iter->Point == testPoint, "Test if subdivision points are calculated correctly" );
+
+ // Test for number of measurement features
+ /*
+ Does not work yet
+
+ planarSubdivisionPolygon->EvaluateFeatures();
+ MITK_TEST_CONDITION( planarSubdivisionPolygon->GetNumberOfFeatures() == 2, "Number of measurement features" );
+
+ // Test for correct feature evaluation
+ double length0 = 4 * 50.0; // circumference
+ MITK_TEST_CONDITION( fabs( planarSubdivisionPolygon->GetQuantity( 0 ) - length0) < mitk::eps, "Size of longest diameter" );
+
+ double length1 = 50.0 * 50.0 ; // area
+ MITK_TEST_CONDITION( fabs( planarSubdivisionPolygon->GetQuantity( 1 ) - length1) < mitk::eps, "Size of short axis diameter" );
+ */
+}
+
+static void TestPlanarSubdivisionPolygonEditing( mitk::PlanarSubdivisionPolygon::Pointer planarSubdivisionPolygon )
+{
+ int initialNumberOfControlPoints = planarSubdivisionPolygon->GetNumberOfControlPoints();
+
+ mitk::Point2D pnt;
+ pnt[0] = 75.0; pnt[1] = 25.0;
+ planarSubdivisionPolygon->AddControlPoint( pnt);
+
+ MITK_TEST_CONDITION( planarSubdivisionPolygon->GetNumberOfControlPoints() == initialNumberOfControlPoints+1, "A new control-point shall be added" );
+ MITK_TEST_CONDITION( planarSubdivisionPolygon->GetControlPoint( planarSubdivisionPolygon->GetNumberOfControlPoints()-1 ) == pnt, "Control-point shall be added at the end." );
+
+
+ planarSubdivisionPolygon->RemoveControlPoint( 3 );
+ MITK_TEST_CONDITION( planarSubdivisionPolygon->GetNumberOfControlPoints() == initialNumberOfControlPoints, "A control-point has been removed" );
+ MITK_TEST_CONDITION( planarSubdivisionPolygon->GetControlPoint( 3 ) == pnt, "It shall be possible to remove any control-point." );
+
+ planarSubdivisionPolygon->RemoveControlPoint( 0 );
+ planarSubdivisionPolygon->RemoveControlPoint( 0 );
+ planarSubdivisionPolygon->RemoveControlPoint( 0 );
+ MITK_TEST_CONDITION( planarSubdivisionPolygon->GetNumberOfControlPoints() == 3, "Control-points cannot be removed if only three points remain." );
+
+ mitk::Point2D pnt1;
+ pnt1[0] = 33.0; pnt1[1] = 33.0;
+ planarSubdivisionPolygon->AddControlPoint( pnt1, 0 );
+ MITK_TEST_CONDITION( planarSubdivisionPolygon->GetNumberOfControlPoints() == 4, "A control-point has been added" );
+ MITK_TEST_CONDITION( planarSubdivisionPolygon->GetControlPoint( 0 ) == pnt1, "It shall be possible to insert a control-point at any position." );
+
+}
+
+};
+/**
+ * mitkplanarSubdivisionPolygonTest tests the methods and behavior of mitk::planarSubdivisionPolygon with sub-tests:
+ *
+ * 1. Instantiation and basic tests, including feature evaluation
+ *
+ */
+int mitkPlanarSubdivisionPolygonTest(int /* argc */, char* /*argv*/[])
+{
+ // always start with this!
+ MITK_TEST_BEGIN("planarSubdivisionPolygon")
+
+ // create PlaneGeometry on which to place the planarSubdivisionPolygon
+ mitk::PlaneGeometry::Pointer planeGeometry = mitk::PlaneGeometry::New();
+ planeGeometry->InitializeStandardPlane( 100.0, 100.0 );
+
+ // **************************************************************************
+ // 1. Instantiation and basic tests, including feature evaluation
+ mitk::PlanarSubdivisionPolygon::Pointer planarSubdivisionPolygon = mitk::PlanarSubdivisionPolygon::New();
+ planarSubdivisionPolygon->SetGeometry2D( planeGeometry );
+
+ // first test: did this work?
+ MITK_TEST_CONDITION_REQUIRED( planarSubdivisionPolygon.IsNotNull(), "Testing instantiation" );
+
+ // Test placement of planarSubdivisionPolygon by control points
+ mitkPlanarSubdivisionPolygonTestClass::TestPlanarSubdivisionPolygonPlacement( planarSubdivisionPolygon );
+
+ mitkPlanarSubdivisionPolygonTestClass::TestPlanarSubdivisionPolygonEditing( planarSubdivisionPolygon );
+
+ // always end with this!
+ MITK_TEST_END();
+}
--
1.7.0.4

File Metadata

Mime Type
text/plain
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
667
Default Alt Text
bug-8506-unittest-smooth-polygon.patch (12 KB)

Event Timeline

unittest for PlanarSubdivisionPolygon (see bug 8505)