diff OrthancStone/Sources/Scene2D/MacroSceneLayer.cpp @ 1797:013dec434a84

creation of segment or circle measures
author Sebastien Jodogne <s.jodogne@gmail.com>
date Thu, 20 May 2021 10:35:25 +0200
parents 20a0aba0ede5
children 757987cb5a68
line wrap: on
line diff
--- a/OrthancStone/Sources/Scene2D/MacroSceneLayer.cpp	Wed May 19 18:59:45 2021 +0200
+++ b/OrthancStone/Sources/Scene2D/MacroSceneLayer.cpp	Thu May 20 10:35:25 2021 +0200
@@ -24,16 +24,16 @@
 
 #include <OrthancException.h>
 
-#include <cassert>
-
 namespace OrthancStone
 {
   void MacroSceneLayer::Clear()
   {
     for (size_t i = 0; i < layers_.size(); i++)
     {
-      assert(layers_[i] != NULL);
-      delete layers_[i];
+      if (layers_[i] != NULL)
+      {
+        delete layers_[i];
+      }
     }
 
     layers_.clear();
@@ -49,6 +49,8 @@
     }
     else
     {
+      // TODO - Use recycling list from DeleteLayer()
+      
       size_t index = layers_.size();
       layers_.push_back(layer);
       BumpRevision();
@@ -70,8 +72,10 @@
     }
     else
     {
-      assert(layers_[index] != NULL);
-      delete layers_[index];
+      if (layers_[index] != NULL)
+      {
+        delete layers_[index];
+      }
 
       layers_[index] = layer;
       BumpRevision();
@@ -79,16 +83,52 @@
   }    
 
 
-  const ISceneLayer& MacroSceneLayer::GetLayer(size_t i) const
+  bool MacroSceneLayer::HasLayer(size_t index) const
   {
-    if (i >= layers_.size())
+    if (index >= layers_.size())
     {
       throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange);
     }
     else
     {
-      assert(layers_[i] != NULL);
-      return *layers_[i];
+      return (layers_[index] != NULL);
+    }
+  }
+  
+
+  void MacroSceneLayer::DeleteLayer(size_t index)
+  {
+    if (index >= layers_.size())
+    {
+      throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange);
+    }
+    else if (layers_[index] == NULL)
+    {
+      throw Orthanc::OrthancException(Orthanc::ErrorCode_InexistentItem);
+    }
+    else
+    {
+      // TODO - Add to a recycling list
+      
+      delete layers_[index];
+      layers_[index] = NULL;
+    }
+  }
+
+
+  const ISceneLayer& MacroSceneLayer::GetLayer(size_t index) const
+  {
+    if (index >= layers_.size())
+    {
+      throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange);
+    }
+    else if (layers_[index] == NULL)
+    {
+      throw Orthanc::OrthancException(Orthanc::ErrorCode_InexistentItem);
+    }
+    else
+    {
+      return *layers_[index];
     }
   }
 
@@ -99,10 +139,18 @@
 
     for (size_t i = 0; i < layers_.size(); i++)
     {
-      assert(layers_[i] != NULL);
-      copy->layers_.push_back(layers_[i]->Clone());
+      if (layers_[i] == NULL)
+      {
+        copy->layers_.push_back(NULL);
+      }
+      else
+      {
+        copy->layers_.push_back(layers_[i]->Clone());
+      }
     }
 
+    // TODO - Copy recycling list
+
     return copy.release();
   }
   
@@ -113,11 +161,12 @@
 
     for (size_t i = 0; i < layers_.size(); i++)
     {
-      assert(layers_[i] != NULL);
-
-      Extent2D subextent;
-      layers_[i]->GetBoundingBox(subextent);
-      target.Union(subextent);
+      if (layers_[i] != NULL)
+      {
+        Extent2D subextent;
+        layers_[i]->GetBoundingBox(subextent);
+        target.Union(subextent);
+      }
     }
   }
 }