diff --git a/Modules/Core/include/mitkDataNode.h b/Modules/Core/include/mitkDataNode.h index 5a445f5..6621bf0 100644 --- a/Modules/Core/include/mitkDataNode.h +++ b/Modules/Core/include/mitkDataNode.h @@ -70,6 +70,7 @@ public: typedef mitk::Geometry3D::Pointer Geometry3DPointer; typedef std::vector< itk::SmartPointer< Mapper > > MapperVector; typedef std::map MapOfPropertyLists; + typedef std::vector PropertyListKeyNames; typedef std::set GroupTagList; /** @@ -136,6 +137,14 @@ public: virtual void CopyInformation(const itk::DataObject *data) override; /** + * \brief return the keys of all PropertyLists. + * + * All possible values for the "renderer" parameters of + * the diverse GetProperty/List() methods. + */ + PropertyListKeyNames GetPropertyListNames() const; + + /** * \brief Set the property (instance of BaseProperty) with key \a propertyKey in the PropertyList * of the \a renderer (if NULL, use BaseRenderer-independent PropertyList). This is set-by-value. * diff --git a/Modules/Core/include/mitkGeometryData.h b/Modules/Core/include/mitkGeometryData.h index 72022a8..edc68a5 100644 --- a/Modules/Core/include/mitkGeometryData.h +++ b/Modules/Core/include/mitkGeometryData.h @@ -54,5 +54,16 @@ protected: virtual ~GeometryData(); }; +/** +* @brief Equal Compare two GeometryData objects for equality, returns true if found equal. +* @ingroup MITKTestingAPI +* @param rightHandSide GeometryData to compare. +* @param leftHandSide GeometryData to compare. +* @param eps Epsilon to use for floating point comparison. Most of the time mitk::eps will be sufficient. +* @param verbose Flag indicating if the method should give a detailed console output. +* @return True if every comparison is true, false in any other case. +*/ +MITKCORE_EXPORT bool Equal( mitk::GeometryData& leftHandSide, mitk::GeometryData& rightHandSide, mitk::ScalarType eps, bool verbose); + } // namespace mitk #endif /* MITKGEOMETRYDATA_H_HEADER_INCLUDED_C19C01E2 */ diff --git a/Modules/Core/src/DataManagement/mitkDataNode.cpp b/Modules/Core/src/DataManagement/mitkDataNode.cpp index cd0912a..a090822 100644 --- a/Modules/Core/src/DataManagement/mitkDataNode.cpp +++ b/Modules/Core/src/DataManagement/mitkDataNode.cpp @@ -185,6 +185,17 @@ void mitk::DataNode::SetRequestedRegion( const itk::DataObject * /*data*/) { } +mitk::DataNode::PropertyListKeyNames mitk::DataNode::GetPropertyListNames() const +{ + PropertyListKeyNames result; + + for (auto entries : m_MapOfPropertyLists) + result.push_back( entries.first ); + + return result; +} + + void mitk::DataNode::CopyInformation(const itk::DataObject * /*data*/) { } diff --git a/Modules/Core/src/DataManagement/mitkGeometryData.cpp b/Modules/Core/src/DataManagement/mitkGeometryData.cpp index 0fb9352..1c893cc 100644 --- a/Modules/Core/src/DataManagement/mitkGeometryData.cpp +++ b/Modules/Core/src/DataManagement/mitkGeometryData.cpp @@ -17,6 +17,7 @@ See LICENSE.txt or http://www.mitk.org for details. #include "mitkGeometryData.h" #include "mitkBaseProcess.h" +#include "mitkTimeGeometry.h" mitk::GeometryData::GeometryData() { @@ -60,5 +61,29 @@ void mitk::GeometryData::CopyInformation(const itk::DataObject *) { } - - +bool mitk::Equal( mitk::GeometryData& leftHandSide, mitk::GeometryData& rightHandSide, mitk::ScalarType eps, bool verbose) +{ + unsigned int timeStepsLeft = leftHandSide.GetTimeGeometry()->CountTimeSteps(); + unsigned int timeStepsRight = rightHandSide.GetTimeGeometry()->CountTimeSteps(); + + if (timeStepsLeft != timeStepsRight) + { + if (verbose) + { + MITK_INFO << "[( GeometryData::GetTimeGeometry )] number of time steps are not equal."; + MITK_INFO << "rightHandSide is " << timeStepsRight << " : leftHandSide is " << timeStepsLeft; + } + return false; + } + + bool allEqual = true; + + for (unsigned int t = 0; t < timeStepsLeft; ++t) + { + BaseGeometry* geomLeft = leftHandSide.GetGeometry(t); + BaseGeometry* geomRight = rightHandSide.GetGeometry(t); + allEqual &= mitk::Equal(*geomLeft, *geomRight, eps, verbose); + } + + return allEqual; // valid with initial true for timestep count == 0 +} diff --git a/Modules/Core/src/DataManagement/mitkLevelWindow.cpp b/Modules/Core/src/DataManagement/mitkLevelWindow.cpp index 4085970..9f2fda8 100644 --- a/Modules/Core/src/DataManagement/mitkLevelWindow.cpp +++ b/Modules/Core/src/DataManagement/mitkLevelWindow.cpp @@ -425,15 +425,14 @@ bool mitk::LevelWindow::IsFixed() const bool mitk::LevelWindow::operator==(const mitk::LevelWindow& levWin) const { - if ( m_RangeMin == levWin.GetRangeMin() && - m_RangeMax == levWin.GetRangeMax() && - m_LowerWindowBound == levWin.GetLowerWindowBound() && m_UpperWindowBound == levWin.GetUpperWindowBound() && - m_DefaultLowerBound == levWin.GetDefaultLowerBound() && m_DefaultUpperBound == levWin.GetDefaultUpperBound() && m_Fixed == levWin.IsFixed() ) { - return true; - } - else { - return false; - } + return ( fabs( m_RangeMin - levWin.GetRangeMin() ) < mitk::sqrteps && + fabs(m_RangeMax - levWin.GetRangeMax()) < mitk::sqrteps && + fabs(m_LowerWindowBound - levWin.GetLowerWindowBound()) < mitk::sqrteps && + fabs(m_UpperWindowBound - levWin.GetUpperWindowBound()) < mitk::sqrteps && + fabs(m_DefaultLowerBound - levWin.GetDefaultLowerBound()) < mitk::sqrteps && + fabs(m_DefaultUpperBound - levWin.GetDefaultUpperBound()) < mitk::sqrteps && + m_Fixed == levWin.IsFixed() + ); } bool mitk::LevelWindow::operator!=(const mitk::LevelWindow& levWin) const