diff UnitTestsSources/VolumeRenderingTests.cpp @ 1802:757987cb5a68

recycling of layers in MacroSceneLayer
author Sebastien Jodogne <s.jodogne@gmail.com>
date Thu, 20 May 2021 13:58:26 +0200
parents 4fd065ad1fc0
children 3889ae96d2e9
line wrap: on
line diff
--- a/UnitTestsSources/VolumeRenderingTests.cpp	Thu May 20 13:23:59 2021 +0200
+++ b/UnitTestsSources/VolumeRenderingTests.cpp	Thu May 20 13:58:26 2021 +0200
@@ -22,6 +22,8 @@
 #include "../OrthancStone/Sources/Scene2D/CairoCompositor.h"
 #include "../OrthancStone/Sources/Scene2D/ColorTextureSceneLayer.h"
 #include "../OrthancStone/Sources/Scene2D/CopyStyleConfigurator.h"
+#include "../OrthancStone/Sources/Scene2D/MacroSceneLayer.h"
+#include "../OrthancStone/Sources/Scene2D/PolylineSceneLayer.h"
 #include "../OrthancStone/Sources/Toolbox/SubvoxelReader.h"
 #include "../OrthancStone/Sources/Volumes/DicomVolumeImageMPRSlicer.h"
 #include "../OrthancStone/Sources/Volumes/DicomVolumeImageReslicer.h"
@@ -1012,3 +1014,54 @@
     }
   }
 }
+
+
+TEST(VolumeRendering, MacroLayer)
+{
+  OrthancStone::MacroSceneLayer layer;
+  ASSERT_THROW(layer.AddLayer(NULL), Orthanc::OrthancException);
+
+  ASSERT_EQ(0u, layer.AddLayer(new OrthancStone::PolylineSceneLayer));
+  ASSERT_EQ(1u, layer.AddLayer(new OrthancStone::PolylineSceneLayer));
+  ASSERT_EQ(2u, layer.AddLayer(new OrthancStone::PolylineSceneLayer));
+  ASSERT_EQ(3u, layer.GetSize());
+  ASSERT_TRUE(layer.HasLayer(0));
+  ASSERT_TRUE(layer.HasLayer(1));
+  ASSERT_TRUE(layer.HasLayer(2));
+
+  layer.DeleteLayer(1);
+  ASSERT_EQ(3u, layer.GetSize());
+  ASSERT_TRUE(layer.HasLayer(0));
+  ASSERT_FALSE(layer.HasLayer(1));
+  ASSERT_TRUE(layer.HasLayer(2));
+
+  ASSERT_THROW(layer.UpdateLayer(1, NULL), Orthanc::OrthancException);
+  layer.UpdateLayer(1, new OrthancStone::PolylineSceneLayer);
+  ASSERT_TRUE(layer.HasLayer(1));
+
+  ASSERT_EQ(3u, layer.AddLayer(new OrthancStone::PolylineSceneLayer));
+  ASSERT_EQ(4u, layer.GetSize());
+
+  layer.DeleteLayer(1);
+  layer.DeleteLayer(2);
+  ASSERT_EQ(1u, layer.AddLayer(new OrthancStone::PolylineSceneLayer));
+
+  std::unique_ptr<OrthancStone::MacroSceneLayer> clone(dynamic_cast<OrthancStone::MacroSceneLayer*>(layer.Clone()));
+  
+  layer.UpdateLayer(2, new OrthancStone::PolylineSceneLayer);
+  ASSERT_EQ(4u, layer.AddLayer(new OrthancStone::PolylineSceneLayer));
+  ASSERT_EQ(5u, layer.GetSize());
+  ASSERT_TRUE(layer.HasLayer(0));
+  ASSERT_TRUE(layer.HasLayer(1));
+  ASSERT_TRUE(layer.HasLayer(2));
+  ASSERT_TRUE(layer.HasLayer(3));
+  ASSERT_TRUE(layer.HasLayer(4));
+
+  ASSERT_EQ(2u, clone->AddLayer(new OrthancStone::PolylineSceneLayer));
+  ASSERT_EQ(4u, clone->GetSize());
+  ASSERT_TRUE(clone->HasLayer(0));
+  ASSERT_TRUE(clone->HasLayer(1));
+  ASSERT_TRUE(clone->HasLayer(2));
+  ASSERT_TRUE(clone->HasLayer(3));
+  ASSERT_THROW(clone->HasLayer(4), Orthanc::OrthancException);
+}