diff --git a/Modules/Core/include/mitkDataNode.h b/Modules/Core/include/mitkDataNode.h index 5a445f5..9f300b1 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 The "names" used for (renderer-specific) PropertyLists in GetPropertyList(string). + * + * 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..01bc8d7 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( const mitk::GeometryData& leftHandSide, const 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..921bae6 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( const mitk::GeometryData& leftHandSide, const 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..7280d53 100644 --- a/Modules/Core/src/DataManagement/mitkLevelWindow.cpp +++ b/Modules/Core/src/DataManagement/mitkLevelWindow.cpp @@ -423,17 +423,16 @@ bool mitk::LevelWindow::IsFixed() const return m_Fixed; } -bool mitk::LevelWindow::operator==(const mitk::LevelWindow& levWin) const +bool mitk::LevelWindow::operator==(const mitk::LevelWindow& other) 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 + mitk::Equal(this->m_RangeMin, other.m_RangeMin, mitk::sqrteps) + && mitk::Equal(this->m_RangeMax, other.m_RangeMax, mitk::sqrteps) + && mitk::Equal(this->m_LowerWindowBound, other.m_LowerWindowBound, mitk::sqrteps) + && mitk::Equal(this->m_UpperWindowBound, other.m_UpperWindowBound, mitk::sqrteps) + && mitk::Equal(this->m_DefaultLowerBound, other.m_DefaultLowerBound, mitk::sqrteps) + && mitk::Equal(this->m_DefaultUpperBound, other.m_DefaultUpperBound, mitk::sqrteps) + && m_Fixed == other.m_Fixed; } bool mitk::LevelWindow::operator!=(const mitk::LevelWindow& levWin) const