comparison 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
comparison
equal deleted inserted replaced
1796:20a0aba0ede5 1797:013dec434a84
22 22
23 #include "MacroSceneLayer.h" 23 #include "MacroSceneLayer.h"
24 24
25 #include <OrthancException.h> 25 #include <OrthancException.h>
26 26
27 #include <cassert>
28
29 namespace OrthancStone 27 namespace OrthancStone
30 { 28 {
31 void MacroSceneLayer::Clear() 29 void MacroSceneLayer::Clear()
32 { 30 {
33 for (size_t i = 0; i < layers_.size(); i++) 31 for (size_t i = 0; i < layers_.size(); i++)
34 { 32 {
35 assert(layers_[i] != NULL); 33 if (layers_[i] != NULL)
36 delete layers_[i]; 34 {
35 delete layers_[i];
36 }
37 } 37 }
38 38
39 layers_.clear(); 39 layers_.clear();
40 BumpRevision(); 40 BumpRevision();
41 } 41 }
47 { 47 {
48 throw Orthanc::OrthancException(Orthanc::ErrorCode_NullPointer); 48 throw Orthanc::OrthancException(Orthanc::ErrorCode_NullPointer);
49 } 49 }
50 else 50 else
51 { 51 {
52 // TODO - Use recycling list from DeleteLayer()
53
52 size_t index = layers_.size(); 54 size_t index = layers_.size();
53 layers_.push_back(layer); 55 layers_.push_back(layer);
54 BumpRevision(); 56 BumpRevision();
55 return index; 57 return index;
56 } 58 }
68 { 70 {
69 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange); 71 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange);
70 } 72 }
71 else 73 else
72 { 74 {
73 assert(layers_[index] != NULL); 75 if (layers_[index] != NULL)
74 delete layers_[index]; 76 {
77 delete layers_[index];
78 }
75 79
76 layers_[index] = layer; 80 layers_[index] = layer;
77 BumpRevision(); 81 BumpRevision();
78 } 82 }
79 } 83 }
80 84
81 85
82 const ISceneLayer& MacroSceneLayer::GetLayer(size_t i) const 86 bool MacroSceneLayer::HasLayer(size_t index) const
83 { 87 {
84 if (i >= layers_.size()) 88 if (index >= layers_.size())
85 { 89 {
86 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange); 90 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange);
87 } 91 }
88 else 92 else
89 { 93 {
90 assert(layers_[i] != NULL); 94 return (layers_[index] != NULL);
91 return *layers_[i]; 95 }
96 }
97
98
99 void MacroSceneLayer::DeleteLayer(size_t index)
100 {
101 if (index >= layers_.size())
102 {
103 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange);
104 }
105 else if (layers_[index] == NULL)
106 {
107 throw Orthanc::OrthancException(Orthanc::ErrorCode_InexistentItem);
108 }
109 else
110 {
111 // TODO - Add to a recycling list
112
113 delete layers_[index];
114 layers_[index] = NULL;
115 }
116 }
117
118
119 const ISceneLayer& MacroSceneLayer::GetLayer(size_t index) const
120 {
121 if (index >= layers_.size())
122 {
123 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange);
124 }
125 else if (layers_[index] == NULL)
126 {
127 throw Orthanc::OrthancException(Orthanc::ErrorCode_InexistentItem);
128 }
129 else
130 {
131 return *layers_[index];
92 } 132 }
93 } 133 }
94 134
95 135
96 ISceneLayer* MacroSceneLayer::Clone() const 136 ISceneLayer* MacroSceneLayer::Clone() const
97 { 137 {
98 std::unique_ptr<MacroSceneLayer> copy(new MacroSceneLayer); 138 std::unique_ptr<MacroSceneLayer> copy(new MacroSceneLayer);
99 139
100 for (size_t i = 0; i < layers_.size(); i++) 140 for (size_t i = 0; i < layers_.size(); i++)
101 { 141 {
102 assert(layers_[i] != NULL); 142 if (layers_[i] == NULL)
103 copy->layers_.push_back(layers_[i]->Clone()); 143 {
144 copy->layers_.push_back(NULL);
145 }
146 else
147 {
148 copy->layers_.push_back(layers_[i]->Clone());
149 }
104 } 150 }
151
152 // TODO - Copy recycling list
105 153
106 return copy.release(); 154 return copy.release();
107 } 155 }
108 156
109 157
111 { 159 {
112 target.Clear(); 160 target.Clear();
113 161
114 for (size_t i = 0; i < layers_.size(); i++) 162 for (size_t i = 0; i < layers_.size(); i++)
115 { 163 {
116 assert(layers_[i] != NULL); 164 if (layers_[i] != NULL)
117 165 {
118 Extent2D subextent; 166 Extent2D subextent;
119 layers_[i]->GetBoundingBox(subextent); 167 layers_[i]->GetBoundingBox(subextent);
120 target.Union(subextent); 168 target.Union(subextent);
169 }
121 } 170 }
122 } 171 }
123 } 172 }