diff --git a/Modules/Core/test/mitkLevelWindowManagerTest.cpp b/Modules/Core/test/mitkLevelWindowManagerTest.cpp index 69f1d7341f..43cddaee66 100644 --- a/Modules/Core/test/mitkLevelWindowManagerTest.cpp +++ b/Modules/Core/test/mitkLevelWindowManagerTest.cpp @@ -1,445 +1,439 @@ /*============================================================================ The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center (DKFZ) All rights reserved. Use of this source code is governed by a 3-clause BSD license that can be found in the LICENSE file. ============================================================================*/ #include #include #include #include #include #include #include #include #include #include #include class mitkLevelWindowManagerTestSuite : public mitk::TestFixture { CPPUNIT_TEST_SUITE(mitkLevelWindowManagerTestSuite); MITK_TEST(TestModes); MITK_TEST(TestSetLevelWindowProperty); MITK_TEST(TestVisibilityPropertyChanged); MITK_TEST(TestLayerPropertyChanged); MITK_TEST(TestImageRenderingModePropertyChanged); MITK_TEST(TestImageForLevelWindowPropertyChanged); MITK_TEST(TestSelectedPropertyChanged); MITK_TEST(TestRemoveDataNodes); MITK_TEST(TestCombinedPropertiesChanged); - //MITK_TEST(TestMultiComponentRescaling); CPPUNIT_TEST_SUITE_END(); private: mitk::LevelWindowManager::Pointer m_LevelWindowManager; mitk::StandaloneDataStorage::Pointer m_DataManager; std::string m_ImagePath1; std::string m_ImagePath2; std::string m_ImagePath3; mitk::DataNode::Pointer m_DataNode1; mitk::DataNode::Pointer m_DataNode2; mitk::DataNode::Pointer m_DataNode3; mitk::Image::Pointer m_mitkMultiComponentImage; mitk::Image::Pointer m_mitkImageComponent1; mitk::Image::Pointer m_mitkImageComponent2; bool AssertImageForLevelWindowProperty(bool assert1, bool assert2, bool assert3) { bool imageForLevelWindowProperty1, imageForLevelWindowProperty2, imageForLevelWindowProperty3; m_DataNode1->GetBoolProperty("imageForLevelWindow", imageForLevelWindowProperty1); m_DataNode2->GetBoolProperty("imageForLevelWindow", imageForLevelWindowProperty2); m_DataNode3->GetBoolProperty("imageForLevelWindow", imageForLevelWindowProperty3); return (assert1 == imageForLevelWindowProperty1) && (assert2 == imageForLevelWindowProperty2) && (assert3 == imageForLevelWindowProperty3); } bool AssertLevelWindowProperty(bool assert1, bool assert2, bool assert3) { auto levelWindowProperty1 = dynamic_cast(m_DataNode1->GetProperty("levelwindow")); auto levelWindowProperty2 = dynamic_cast(m_DataNode2->GetProperty("levelwindow")); auto levelWindowProperty3 = dynamic_cast(m_DataNode3->GetProperty("levelwindow")); // Check if the active level window property of the manager is equal to any of the level window properties of the nodes auto managerLevelWindowProperty = m_LevelWindowManager->GetLevelWindowProperty(); return (assert1 == (managerLevelWindowProperty == levelWindowProperty1)) && (assert2 == (managerLevelWindowProperty == levelWindowProperty2)) && (assert3 == (managerLevelWindowProperty == levelWindowProperty3)); } public: void setUp() override { m_LevelWindowManager = mitk::LevelWindowManager::New(); m_DataManager = mitk::StandaloneDataStorage::New(); CPPUNIT_ASSERT_NO_THROW_MESSAGE("DataStorage could not be set for the new level window manager", m_LevelWindowManager->SetDataStorage(m_DataManager)); CPPUNIT_ASSERT_MESSAGE("DataStorage could not be retrieved from the new level window manager", m_DataManager == m_LevelWindowManager->GetDataStorage()); m_ImagePath1 = GetTestDataFilePath("Pic3D.nrrd"); m_ImagePath2 = GetTestDataFilePath("UltrasoundImages/4D_TEE_Data_MV.dcm"); m_ImagePath3 = GetTestDataFilePath("RenderingTestData/defaultWatermark.png"); // add multiple objects to the data storage => property observers will be created m_DataNode1 = mitk::IOUtil::Load(m_ImagePath1, *m_DataManager)->GetElement(0); m_DataNode2 = mitk::IOUtil::Load(m_ImagePath2, *m_DataManager)->GetElement(0); CPPUNIT_ASSERT_MESSAGE("Not two relevant nodes found in the data storage", m_LevelWindowManager->GetRelevantNodes()->size() == 2); CPPUNIT_ASSERT_MESSAGE("Not two observers created for the relevant nodes", m_LevelWindowManager->GetNumberOfObservers() == 2); m_DataNode1->SetIntProperty("layer", 1); m_DataNode2->SetIntProperty("layer", 2); bool isImageForLevelWindow1, isImageForLevelWindow2; m_DataNode1->GetBoolProperty("imageForLevelWindow", isImageForLevelWindow1); m_DataNode2->GetBoolProperty("imageForLevelWindow", isImageForLevelWindow2); CPPUNIT_ASSERT_MESSAGE("Initial \"imageForLevelWindow\" property not exclusively set for node 2", !isImageForLevelWindow1 && isImageForLevelWindow2); m_DataNode3 = mitk::IOUtil::Load(m_ImagePath3, *m_DataManager)->GetElement(0); CPPUNIT_ASSERT_MESSAGE("Not three relevant nodes found in the data storage", m_LevelWindowManager->GetRelevantNodes()->size() == 3); CPPUNIT_ASSERT_MESSAGE("Not three observers created for the relevant nodes", m_LevelWindowManager->GetNumberOfObservers() == 3); m_DataNode3->SetIntProperty("layer", 3); AssertImageForLevelWindowProperty(false, false, true); } void tearDown() override {} void TestModes() { CPPUNIT_ASSERT_MESSAGE("AutoTopMost mode is not enabled per default", m_LevelWindowManager->IsAutoTopMost()); CPPUNIT_ASSERT_MESSAGE("SelectedImagesMode mode is not disabled per default", !m_LevelWindowManager->IsSelectedImages()); m_LevelWindowManager->SetSelectedImages(true); CPPUNIT_ASSERT_MESSAGE("AutoTopMost mode was not disabled on mode switch", !m_LevelWindowManager->IsAutoTopMost()); CPPUNIT_ASSERT_MESSAGE("SelectedImagesMode mode was not enabled on mode switch", m_LevelWindowManager->IsSelectedImages()); m_LevelWindowManager->SetSelectedImages(false); CPPUNIT_ASSERT_MESSAGE("AutoTopMost mode was not disabled on mode switch", !m_LevelWindowManager->IsAutoTopMost()); CPPUNIT_ASSERT_MESSAGE("SelectedImagesMode mode was not disabled on mode switch", !m_LevelWindowManager->IsSelectedImages()); m_LevelWindowManager->SetSelectedImages(true); // to enable "SelectedImagesMode" m_LevelWindowManager->SetAutoTopMostImage(true); CPPUNIT_ASSERT_MESSAGE("AutoTopMost mode was not enabled on mode switch", m_LevelWindowManager->IsAutoTopMost()); CPPUNIT_ASSERT_MESSAGE("SelectedImagesMode mode was not disabled on mode switch", !m_LevelWindowManager->IsSelectedImages()); } void TestSetLevelWindowProperty() { m_LevelWindowManager->SetAutoTopMostImage(false); // Setting the level window property of the manager // will make the corresponding node be the "imageForLevelWindow" node. auto levelWindowProperty = dynamic_cast(m_DataNode1->GetProperty("levelwindow")); m_LevelWindowManager->SetLevelWindowProperty(levelWindowProperty); CPPUNIT_ASSERT_MESSAGE("\"imageForLevelWindow\" property not correctly set", AssertImageForLevelWindowProperty(true, false, false)); CPPUNIT_ASSERT_MESSAGE("\"levelwindow\" property not correctly set", AssertLevelWindowProperty(true, false, false)); levelWindowProperty = dynamic_cast(m_DataNode2->GetProperty("levelwindow")); m_LevelWindowManager->SetLevelWindowProperty(levelWindowProperty); CPPUNIT_ASSERT_MESSAGE("\"imageForLevelWindow\" property not correctly set", AssertImageForLevelWindowProperty(false, true, false)); CPPUNIT_ASSERT_MESSAGE("\"levelwindow\" property not correctly set", AssertLevelWindowProperty(false, true, false)); levelWindowProperty = dynamic_cast(m_DataNode3->GetProperty("levelwindow")); m_LevelWindowManager->SetLevelWindowProperty(levelWindowProperty); CPPUNIT_ASSERT_MESSAGE("\"imageForLevelWindow\" property not correctly set", AssertImageForLevelWindowProperty(false, false, true)); CPPUNIT_ASSERT_MESSAGE("\"levelwindow\" property not correctly set", AssertLevelWindowProperty(false, false, true)); levelWindowProperty = mitk::LevelWindowProperty::New(); //CPPUNIT_ASSERT_THROW_MESSAGE("Expected exception for an invalid level window property was not thrown", //m_LevelWindowManager->SetLevelWindowProperty(levelWindowProperty), mitk::Exception); } void TestVisibilityPropertyChanged() { // Hiding a node will make the "next" node be the "imageForLevelWindow" node, if // the hidden node was the "imageForLevelWindow" node before. "Next" is dependent on the node layer. m_DataNode3->SetVisibility(false); CPPUNIT_ASSERT_MESSAGE("\"imageForLevelWindow\" property not correctly set", AssertImageForLevelWindowProperty(false, true, false)); CPPUNIT_ASSERT_MESSAGE("\"levelwindow\" property not correctly set", AssertLevelWindowProperty(false, true, false)); m_DataNode2->SetVisibility(false); CPPUNIT_ASSERT_MESSAGE("\"imageForLevelWindow\" property not correctly set", AssertImageForLevelWindowProperty(true, false, false)); CPPUNIT_ASSERT_MESSAGE("\"levelwindow\" property not correctly set", AssertLevelWindowProperty(true, false, false)); m_DataNode1->SetVisibility(false); CPPUNIT_ASSERT_MESSAGE("\"imageForLevelWindow\" property not correctly set", AssertImageForLevelWindowProperty(false, false, false)); CPPUNIT_ASSERT_MESSAGE("\"levelwindow\" property not correctly set", AssertLevelWindowProperty(false, false, false)); CPPUNIT_ASSERT_MESSAGE("LevelWindowProperty is not null", !m_LevelWindowManager->GetLevelWindowProperty()); m_DataNode3->SetVisibility(true); CPPUNIT_ASSERT_MESSAGE("\"imageForLevelWindow\" property not correctly set", AssertImageForLevelWindowProperty(false, false, true)); CPPUNIT_ASSERT_MESSAGE("\"levelwindow\" property not correctly set", AssertLevelWindowProperty(false, false, true)); } void TestLayerPropertyChanged() { m_DataNode3->SetIntProperty("layer", itk::NumericTraits::min()); CPPUNIT_ASSERT_MESSAGE("\"imageForLevelWindow\" property not correctly set", AssertImageForLevelWindowProperty(false, true, false)); CPPUNIT_ASSERT_MESSAGE("\"levelwindow\" property not correctly set", AssertLevelWindowProperty(false, true, false)); m_DataNode2->SetIntProperty("layer", itk::NumericTraits::min()); CPPUNIT_ASSERT_MESSAGE("\"imageForLevelWindow\" property not correctly set", AssertImageForLevelWindowProperty(true, false, false)); CPPUNIT_ASSERT_MESSAGE("\"levelwindow\" property not correctly set", AssertLevelWindowProperty(true, false, false)); m_DataNode1->SetIntProperty("layer", itk::NumericTraits::min()); CPPUNIT_ASSERT_MESSAGE("\"imageForLevelWindow\" property not correctly set", AssertImageForLevelWindowProperty(false, false, false)); CPPUNIT_ASSERT_MESSAGE("\"levelwindow\" property not correctly set", AssertLevelWindowProperty(false, false, false)); CPPUNIT_ASSERT_MESSAGE("LevelWindowProperty is not null", !m_LevelWindowManager->GetLevelWindowProperty()); m_DataNode3->SetIntProperty("layer", 1); CPPUNIT_ASSERT_MESSAGE("\"imageForLevelWindow\" property not correctly set", AssertImageForLevelWindowProperty(false, false, true)); CPPUNIT_ASSERT_MESSAGE("\"levelwindow\" property not correctly set", AssertLevelWindowProperty(false, false, true)); } void TestImageRenderingModePropertyChanged() { // checking the default rendering mode auto renderingMode = dynamic_cast(m_DataNode3->GetProperty("Image Rendering.Mode")); CPPUNIT_ASSERT_MESSAGE("Initial \"Image Rendering.Mode\" property not set to \"RenderingModeProperty::LOOKUPTABLE_LEVELWINDOW_COLOR\"", mitk::RenderingModeProperty::LOOKUPTABLE_LEVELWINDOW_COLOR == renderingMode->GetRenderingMode()); // Changing the "Image Rendering.Mode" of a node to either "LOOKUPTABLE_COLOR" or // "COLORTRANSFERFUNCTION_COLOR" will ignore this node for the level window m_DataNode3->SetProperty("Image Rendering.Mode", mitk::RenderingModeProperty::New( mitk::RenderingModeProperty::LOOKUPTABLE_COLOR)); CPPUNIT_ASSERT_MESSAGE("\"imageForLevelWindow\" property not correctly set", AssertImageForLevelWindowProperty(false, true, false)); CPPUNIT_ASSERT_MESSAGE("\"levelwindow\" property not correctly set", AssertLevelWindowProperty(false, true, false)); m_DataNode2->SetProperty("Image Rendering.Mode", mitk::RenderingModeProperty::New( mitk::RenderingModeProperty::COLORTRANSFERFUNCTION_COLOR)); CPPUNIT_ASSERT_MESSAGE("\"imageForLevelWindow\" property not correctly set", AssertImageForLevelWindowProperty(true, false, false)); CPPUNIT_ASSERT_MESSAGE("\"levelwindow\" property not correctly set", AssertLevelWindowProperty(true, false, false)); m_DataNode1->SetProperty("Image Rendering.Mode", mitk::RenderingModeProperty::New( mitk::RenderingModeProperty::LOOKUPTABLE_COLOR)); CPPUNIT_ASSERT_MESSAGE("\"imageForLevelWindow\" property not correctly set", AssertImageForLevelWindowProperty(false, false, false)); CPPUNIT_ASSERT_MESSAGE("\"levelwindow\" property not correctly set", AssertLevelWindowProperty(false, false, false)); CPPUNIT_ASSERT_MESSAGE("LevelWindowProperty is not null", !m_LevelWindowManager->GetLevelWindowProperty()); m_DataNode3->SetProperty("Image Rendering.Mode", mitk::RenderingModeProperty::New( mitk::RenderingModeProperty::COLORTRANSFERFUNCTION_LEVELWINDOW_COLOR)); CPPUNIT_ASSERT_MESSAGE("\"imageForLevelWindow\" property not correctly set", AssertImageForLevelWindowProperty(false, false, true)); CPPUNIT_ASSERT_MESSAGE("\"levelwindow\" property not correctly set", AssertLevelWindowProperty(false, false, true)); } void TestImageForLevelWindowPropertyChanged() { m_LevelWindowManager->SetAutoTopMostImage(false); m_DataNode1->SetBoolProperty("imageForLevelWindow", true); CPPUNIT_ASSERT_MESSAGE("\"imageForLevelWindow\" property not correctly set", AssertImageForLevelWindowProperty(true, false, false)); CPPUNIT_ASSERT_MESSAGE("\"levelwindow\" property not correctly set", AssertLevelWindowProperty(true, false, false)); m_DataNode2->SetBoolProperty("imageForLevelWindow", true); CPPUNIT_ASSERT_MESSAGE("\"imageForLevelWindow\" property not correctly set", AssertImageForLevelWindowProperty(false, true, false)); CPPUNIT_ASSERT_MESSAGE("\"levelwindow\" property not correctly set", AssertLevelWindowProperty(false, true, false)); m_DataNode3->SetBoolProperty("imageForLevelWindow", true); CPPUNIT_ASSERT_MESSAGE("\"imageForLevelWindow\" property not correctly set", AssertImageForLevelWindowProperty(false, false, true)); CPPUNIT_ASSERT_MESSAGE("\"levelwindow\" property not correctly set", AssertLevelWindowProperty(false, false, true)); // The top level node will alsways be used as a fall back node // if no specific mode is selected. m_DataNode3->SetBoolProperty("imageForLevelWindow", false); CPPUNIT_ASSERT_MESSAGE("\"imageForLevelWindow\" property not correctly set", AssertImageForLevelWindowProperty(false, false, true)); CPPUNIT_ASSERT_MESSAGE("\"levelwindow\" property not correctly set", AssertLevelWindowProperty(false, false, true)); } void TestSelectedPropertyChanged() { // Selecting a node will make this node be the "imageForLevelWindow" node, if // the "SelectedImagesMode" is enabled (disabled per default). m_DataNode1->SetSelected(true); // selection mode not enabled - node3 stays the "imageForLevelWindow" node CPPUNIT_ASSERT_MESSAGE("\"imageForLevelWindow\" property not correctly set", AssertImageForLevelWindowProperty(false, false, true)); CPPUNIT_ASSERT_MESSAGE("\"levelwindow\" property not correctly set", AssertLevelWindowProperty(false, false, true)); // This will immediately check for the selected node (node 1). m_LevelWindowManager->SetSelectedImages(true); CPPUNIT_ASSERT_MESSAGE("\"imageForLevelWindow\" property not correctly set", AssertImageForLevelWindowProperty(true, false, false)); CPPUNIT_ASSERT_MESSAGE("\"levelwindow\" property not correctly set", AssertLevelWindowProperty(true, false, false)); // Second node will be selected (node 1 and node 2 selected). // It is not specified which data node will be used for the "imageForLevelWindow" / "levelwindow" property, // since the data storage access to the nodes is non-deterministic. // At least check for any valid level window property. m_DataNode2->SetSelected(true); CPPUNIT_ASSERT_MESSAGE("LevelWindowProperty is null", m_LevelWindowManager->GetLevelWindowProperty()); // Third node will be selected (node 1, node 2 and node 3 selected) // It is not specified which data node will be used for the "imageForLevelWindow" / "levelwindow" property, // since the data storage access to the nodes is non-deterministic. // At least check for any valid level window property. m_DataNode3->SetSelected(true); auto usedLevelWindowProperty = m_LevelWindowManager->GetLevelWindowProperty(); CPPUNIT_ASSERT_MESSAGE("LevelWindowProperty is null", usedLevelWindowProperty); // All three nodes are selected: Check if only one node has the "imageForLevelWindow" property set and this node's // "levelwindow" property is used by the level window manager. auto levelWindowProperty1 = dynamic_cast(m_DataNode1->GetProperty("imageForLevelWindow")); if (usedLevelWindowProperty == levelWindowProperty1) { CPPUNIT_ASSERT_MESSAGE("\"imageForLevelWindow\" property not correctly set", AssertImageForLevelWindowProperty(true, false, false)); CPPUNIT_ASSERT_MESSAGE("\"levelwindow\" property not correctly set", AssertLevelWindowProperty(true, false, false)); } auto levelWindowProperty2 = dynamic_cast(m_DataNode2->GetProperty("imageForLevelWindow")); if (usedLevelWindowProperty == levelWindowProperty2) { CPPUNIT_ASSERT_MESSAGE("\"imageForLevelWindow\" property not correctly set", AssertImageForLevelWindowProperty(false, true, false)); CPPUNIT_ASSERT_MESSAGE("\"levelwindow\" property not correctly set", AssertLevelWindowProperty(false, true, false)); } auto levelWindowProperty3 = dynamic_cast(m_DataNode3->GetProperty("imageForLevelWindow")); if (usedLevelWindowProperty == levelWindowProperty3) { CPPUNIT_ASSERT_MESSAGE("\"imageForLevelWindow\" property not correctly set", AssertImageForLevelWindowProperty(false, false, true)); CPPUNIT_ASSERT_MESSAGE("\"levelwindow\" property not correctly set", AssertLevelWindowProperty(false, false, true)); } m_DataNode1->SetSelected(false); m_DataNode2->SetSelected(false); m_DataNode3->SetSelected(false); CPPUNIT_ASSERT_MESSAGE("\"imageForLevelWindow\" property not correctly set", AssertImageForLevelWindowProperty(false, false, false)); CPPUNIT_ASSERT_MESSAGE("\"levelwindow\" property not correctly set", AssertLevelWindowProperty(false, false, false)); CPPUNIT_ASSERT_MESSAGE("LevelWindowProperty is not null", !m_LevelWindowManager->GetLevelWindowProperty()); } void TestCombinedPropertiesChanged() { m_LevelWindowManager->SetSelectedImages(true); m_DataNode1->SetSelected(true); // selection mode enabled - node1 becomes the "imageForLevelWindow" node CPPUNIT_ASSERT_MESSAGE("\"imageForLevelWindow\" property not correctly set", AssertImageForLevelWindowProperty(true, false, false)); CPPUNIT_ASSERT_MESSAGE("\"levelwindow\" property not correctly set", AssertLevelWindowProperty(true, false, false)); m_DataNode2->SetIntProperty("layer", itk::NumericTraits::max()); // selection mode enabled - node1 stays the "imageForLevelWindow" node CPPUNIT_ASSERT_MESSAGE("\"imageForLevelWindow\" property not correctly set", AssertImageForLevelWindowProperty(true, false, false)); CPPUNIT_ASSERT_MESSAGE("\"levelwindow\" property not correctly set", AssertLevelWindowProperty(true, false, false)); m_DataNode1->SetProperty("Image Rendering.Mode", mitk::RenderingModeProperty::New( mitk::RenderingModeProperty::COLORTRANSFERFUNCTION_COLOR)); // selection mode enabled - but node1 is ignored - no active level window property CPPUNIT_ASSERT_MESSAGE("\"imageForLevelWindow\" property not correctly set", AssertImageForLevelWindowProperty(false, false, false)); CPPUNIT_ASSERT_MESSAGE("\"levelwindow\" property not correctly set", AssertLevelWindowProperty(false, false, false)); m_DataNode3->SetBoolProperty("imageForLevelWindow", true); // selection mode enabled - no valid node selected, no active level window property CPPUNIT_ASSERT_MESSAGE("\"imageForLevelWindow\" property not correctly set", AssertImageForLevelWindowProperty(false, false, false)); CPPUNIT_ASSERT_MESSAGE("\"levelwindow\" property not correctly set", AssertLevelWindowProperty(false, false, false)); m_LevelWindowManager->SetSelectedImages(false); // no mode enabled - however, level window is not modified / updated CPPUNIT_ASSERT_MESSAGE("\"imageForLevelWindow\" property not correctly set", AssertImageForLevelWindowProperty(false, false, false)); CPPUNIT_ASSERT_MESSAGE("\"levelwindow\" property not correctly set", AssertLevelWindowProperty(false, false, false)); m_LevelWindowManager->Update(itk::ModifiedEvent()); // no mode enabled - level window is modified / updated with topmost visible node2 as fallback CPPUNIT_ASSERT_MESSAGE("\"imageForLevelWindow\" property not correctly set", AssertImageForLevelWindowProperty(false, true, false)); CPPUNIT_ASSERT_MESSAGE("\"levelwindow\" property not correctly set", AssertLevelWindowProperty(false, true, false)); m_DataNode3->SetBoolProperty("imageForLevelWindow", true); // no mode enabled - use node3 with "imageForLevelWindow" property set CPPUNIT_ASSERT_MESSAGE("\"imageForLevelWindow\" property not correctly set", AssertImageForLevelWindowProperty(false, false, true)); CPPUNIT_ASSERT_MESSAGE("\"levelwindow\" property not correctly set", AssertLevelWindowProperty(false, false, true)); m_DataNode3->SetVisibility(false); // node3 with "imageForLevelWindow" property not visible - use topmost visible node2 as fallback CPPUNIT_ASSERT_MESSAGE("\"imageForLevelWindow\" property not correctly set", AssertImageForLevelWindowProperty(false, true, false)); CPPUNIT_ASSERT_MESSAGE("\"levelwindow\" property not correctly set", AssertLevelWindowProperty(false, true, false)); m_DataNode2->SetProperty("Image Rendering.Mode", mitk::RenderingModeProperty::New( mitk::RenderingModeProperty::LOOKUPTABLE_COLOR)); // fallback node2 is ignored - but "imageForLevelWindow" and "levelWindow" stay "true" for node2 CPPUNIT_ASSERT_MESSAGE("\"imageForLevelWindow\" property not correctly set", AssertImageForLevelWindowProperty(false, true, false)); CPPUNIT_ASSERT_MESSAGE("\"levelwindow\" property not correctly set", AssertLevelWindowProperty(false, true, false)); m_LevelWindowManager->SetAutoTopMostImage(true); // no visible node exists that is not ignored CPPUNIT_ASSERT_MESSAGE("\"imageForLevelWindow\" property not correctly set", AssertImageForLevelWindowProperty(false, false, false)); CPPUNIT_ASSERT_MESSAGE("\"levelwindow\" property not correctly set", AssertLevelWindowProperty(false, false, false)); auto levelWindowProperty = dynamic_cast(m_DataNode3->GetProperty("levelwindow")); m_LevelWindowManager->SetLevelWindowProperty(levelWindowProperty); // explicitely set the level window to node3 CPPUNIT_ASSERT_MESSAGE("\"imageForLevelWindow\" property not correctly set", AssertImageForLevelWindowProperty(false, false, true)); CPPUNIT_ASSERT_MESSAGE("\"levelwindow\" property not correctly set", AssertLevelWindowProperty(false, false, true)); m_DataNode1->SetProperty("Image Rendering.Mode", mitk::RenderingModeProperty::New( mitk::RenderingModeProperty::COLORTRANSFERFUNCTION_LEVELWINDOW_COLOR)); // auto topmost mode enabled - node1 is the only visible non-ignored node CPPUNIT_ASSERT_MESSAGE("\"imageForLevelWindow\" property not correctly set", AssertImageForLevelWindowProperty(true, false, false)); CPPUNIT_ASSERT_MESSAGE("\"levelwindow\" property not correctly set", AssertLevelWindowProperty(true, false, false)); m_DataNode2->SetProperty("Image Rendering.Mode", mitk::RenderingModeProperty::New( mitk::RenderingModeProperty::LOOKUPTABLE_LEVELWINDOW_COLOR)); // auto topmost mode enabled - node2 is topmost visible node CPPUNIT_ASSERT_MESSAGE("\"imageForLevelWindow\" property not correctly set", AssertImageForLevelWindowProperty(false, true, false)); CPPUNIT_ASSERT_MESSAGE("\"levelwindow\" property not correctly set", AssertLevelWindowProperty(false, true, false)); m_DataNode2->SetIntProperty("layer", itk::NumericTraits::min()); // auto topmost mode enabled - node1 is topmost visible node CPPUNIT_ASSERT_MESSAGE("\"imageForLevelWindow\" property not correctly set", AssertImageForLevelWindowProperty(true, false, false)); CPPUNIT_ASSERT_MESSAGE("\"levelwindow\" property not correctly set", AssertLevelWindowProperty(true, false, false)); m_DataNode3->SetVisibility(true); // auto topmost mode enabled - node3 is topmost visible node CPPUNIT_ASSERT_MESSAGE("\"imageForLevelWindow\" property not correctly set", AssertImageForLevelWindowProperty(false, false, true)); CPPUNIT_ASSERT_MESSAGE("\"levelwindow\" property not correctly set", AssertLevelWindowProperty(false, false, true)); } void TestRemoveDataNodes() { m_DataManager->Remove(m_DataNode3); CPPUNIT_ASSERT_MESSAGE("Node not correctly removed", m_LevelWindowManager->GetRelevantNodes()->size() == 2); CPPUNIT_ASSERT_MESSAGE("Observer not correctly removed", m_LevelWindowManager->GetNumberOfObservers() == 2); bool isImageForLevelWindow1, isImageForLevelWindow2; m_DataNode1->GetBoolProperty("imageForLevelWindow", isImageForLevelWindow1); m_DataNode2->GetBoolProperty("imageForLevelWindow", isImageForLevelWindow2); - CPPUNIT_ASSERT_MESSAGE("\"imageForLevelWindow\" property not correctly set", - !isImageForLevelWindow1 && isImageForLevelWindow2); + CPPUNIT_ASSERT_MESSAGE("\"imageForLevelWindow\" property not correctly set", !isImageForLevelWindow1 && isImageForLevelWindow2); - auto levelWindowProperty1 = - dynamic_cast(m_DataNode1->GetProperty("levelwindow")); - auto levelWindowProperty2 = - dynamic_cast(m_DataNode2->GetProperty("levelwindow")); + auto levelWindowProperty1 = dynamic_cast(m_DataNode1->GetProperty("levelwindow")); + auto levelWindowProperty2 = dynamic_cast(m_DataNode2->GetProperty("levelwindow")); auto managerLevelWindowProperty = m_LevelWindowManager->GetLevelWindowProperty(); CPPUNIT_ASSERT_MESSAGE("\"levelwindow\" property not correctly set", (false == (managerLevelWindowProperty == levelWindowProperty1)) && (true == (managerLevelWindowProperty == levelWindowProperty2))); m_DataManager->Remove(m_DataNode2); CPPUNIT_ASSERT_MESSAGE("Node not correctly removed", m_LevelWindowManager->GetRelevantNodes()->size() == 1); CPPUNIT_ASSERT_MESSAGE("Observer not correctly removed", m_LevelWindowManager->GetNumberOfObservers() == 1); m_DataNode1->GetBoolProperty("imageForLevelWindow", isImageForLevelWindow1); CPPUNIT_ASSERT_MESSAGE("\"imageForLevelWindow\" property not correctly set", isImageForLevelWindow1); - levelWindowProperty1 = - dynamic_cast(m_DataNode1->GetProperty("levelwindow")); + levelWindowProperty1 = dynamic_cast(m_DataNode1->GetProperty("levelwindow")); managerLevelWindowProperty = m_LevelWindowManager->GetLevelWindowProperty(); - CPPUNIT_ASSERT_MESSAGE("\"levelwindow\" property not correctly set", - true == (managerLevelWindowProperty == levelWindowProperty1)); + CPPUNIT_ASSERT_MESSAGE("\"levelwindow\" property not correctly set", true == (managerLevelWindowProperty == levelWindowProperty1)); m_DataManager->Remove(m_DataNode1); CPPUNIT_ASSERT_MESSAGE("Node not correctly removed", m_LevelWindowManager->GetRelevantNodes()->size() == 0); CPPUNIT_ASSERT_MESSAGE("Observer not correctly removed", m_LevelWindowManager->GetNumberOfObservers() == 0); CPPUNIT_ASSERT_MESSAGE("LevelWindowProperty is not null", !m_LevelWindowManager->GetLevelWindowProperty()); } }; MITK_TEST_SUITE_REGISTRATION(mitkLevelWindowManager)