Mercurial > hg > orthanc-stone
comparison Framework/Toolbox/OrthancSlicesLoader.cpp @ 421:f87f28624b96 cache-in-radiography
tentative to make SmartLoader and RadiographyScene work together (not really working)
author | am@osimis.io |
---|---|
date | Tue, 20 Nov 2018 16:35:29 +0100 |
parents | aee3d7941c9b |
children |
comparison
equal
deleted
inserted
replaced
420:8bf717c4e497 | 421:f87f28624b96 |
---|---|
187 (*this, operation.GetSliceIndex(), operation.GetSlice(), operation.GetQuality()); | 187 (*this, operation.GetSliceIndex(), operation.GetSlice(), operation.GetQuality()); |
188 EmitMessage(msg); | 188 EmitMessage(msg); |
189 } | 189 } |
190 | 190 |
191 | 191 |
192 void OrthancSlicesLoader::SortAndFinalizeSlices() | 192 void OrthancSlicesLoader::SortAndFinalizeSlices(const OrthancPlugins::FullOrthancDataset& dicomTags) |
193 { | 193 { |
194 bool ok = false; | 194 bool ok = false; |
195 | 195 |
196 if (slices_.GetSliceCount() > 0) | 196 if (slices_.GetSliceCount() > 0) |
197 { | 197 { |
209 | 209 |
210 if (ok) | 210 if (ok) |
211 { | 211 { |
212 LOG(INFO) << "Loaded a series with " << slices_.GetSliceCount() << " slice(s)"; | 212 LOG(INFO) << "Loaded a series with " << slices_.GetSliceCount() << " slice(s)"; |
213 EmitMessage(SliceGeometryReadyMessage(*this)); | 213 EmitMessage(SliceGeometryReadyMessage(*this)); |
214 EmitMessage(SliceTagsReadyMessage(*this, dicomTags)); | |
214 } | 215 } |
215 else | 216 else |
216 { | 217 { |
217 LOG(ERROR) << "This series is empty"; | 218 LOG(ERROR) << "This series is empty"; |
218 EmitMessage(SliceGeometryErrorMessage(*this)); | 219 EmitMessage(SliceGeometryErrorMessage(*this)); |
234 void OrthancSlicesLoader::ParseSeriesGeometry(const OrthancApiClient::JsonResponseReadyMessage& message) | 235 void OrthancSlicesLoader::ParseSeriesGeometry(const OrthancApiClient::JsonResponseReadyMessage& message) |
235 { | 236 { |
236 const Json::Value& series = message.GetJson(); | 237 const Json::Value& series = message.GetJson(); |
237 Json::Value::Members instances = series.getMemberNames(); | 238 Json::Value::Members instances = series.getMemberNames(); |
238 | 239 |
240 if (instances.size() < 1) | |
241 { | |
242 throw Orthanc::OrthancException(Orthanc::ErrorCode_InexistentItem); | |
243 } | |
244 OrthancPlugins::FullOrthancDataset firstInstanceDataSet(series[instances[0]]); | |
245 | |
239 slices_.Reserve(instances.size()); | 246 slices_.Reserve(instances.size()); |
240 | 247 |
241 for (size_t i = 0; i < instances.size(); i++) | 248 for (size_t i = 0; i < instances.size(); i++) |
242 { | 249 { |
243 OrthancPlugins::FullOrthancDataset dataset(series[instances[i]]); | 250 OrthancPlugins::FullOrthancDataset dataset(series[instances[i]]); |
262 { | 269 { |
263 LOG(WARNING) << "Skipping invalid frame " << frame << " within instance " << instances[i]; | 270 LOG(WARNING) << "Skipping invalid frame " << frame << " within instance " << instances[i]; |
264 } | 271 } |
265 } | 272 } |
266 } | 273 } |
267 | 274 |
268 SortAndFinalizeSlices(); | 275 SortAndFinalizeSlices(firstInstanceDataSet); |
269 } | 276 } |
270 | 277 |
271 void OrthancSlicesLoader::ParseInstanceGeometry(const OrthancApiClient::JsonResponseReadyMessage& message) | 278 void OrthancSlicesLoader::ParseInstanceGeometry(const OrthancApiClient::JsonResponseReadyMessage& message) |
272 { | 279 { |
273 const Json::Value& tags = message.GetJson(); | 280 const Json::Value& tags = message.GetJson(); |
299 EmitMessage(SliceGeometryErrorMessage(*this)); | 306 EmitMessage(SliceGeometryErrorMessage(*this)); |
300 return; | 307 return; |
301 } | 308 } |
302 } | 309 } |
303 | 310 |
304 SortAndFinalizeSlices(); | 311 SortAndFinalizeSlices(dataset); |
305 } | 312 } |
306 | 313 |
307 | 314 |
308 void OrthancSlicesLoader::ParseFrameGeometry(const OrthancApiClient::JsonResponseReadyMessage& message) | 315 void OrthancSlicesLoader::ParseFrameGeometry(const OrthancApiClient::JsonResponseReadyMessage& message) |
309 { | 316 { |
322 if (slice->ParseOrthancFrame(dicom, instanceId, frame)) | 329 if (slice->ParseOrthancFrame(dicom, instanceId, frame)) |
323 { | 330 { |
324 LOG(INFO) << "Loaded instance geometry " << instanceId; | 331 LOG(INFO) << "Loaded instance geometry " << instanceId; |
325 slices_.AddSlice(slice.release()); | 332 slices_.AddSlice(slice.release()); |
326 EmitMessage(SliceGeometryReadyMessage(*this)); | 333 EmitMessage(SliceGeometryReadyMessage(*this)); |
334 EmitMessage(SliceTagsReadyMessage(*this, dataset)); | |
327 } | 335 } |
328 else | 336 else |
329 { | 337 { |
330 LOG(WARNING) << "Skipping invalid instance " << instanceId; | 338 LOG(WARNING) << "Skipping invalid instance " << instanceId; |
331 EmitMessage(SliceGeometryErrorMessage(*this)); | 339 EmitMessage(SliceGeometryErrorMessage(*this)); |