Mercurial > hg > orthanc-stone
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); + } } } }