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));