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