comparison Framework/Deprecated/Widgets/SliceViewerWidget.cpp @ 1068:04a95ee91327 broker

recovery of OrthancStoneSingleFrame
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 15 Oct 2019 19:36:57 +0200
parents b537002f83a9
children 0ca50d275b9a
comparison
equal deleted inserted replaced
1067:05b2e71ed145 1068:04a95ee91327
248 } 248 }
249 else 249 else
250 { 250 {
251 index = found->second; 251 index = found->second;
252 assert(index < layers_.size() && 252 assert(index < layers_.size() &&
253 layers_[index] == &layer); 253 layers_[index].get() == &layer);
254 return true; 254 return true;
255 } 255 }
256 } 256 }
257 257
258 258
369 started_(false) 369 started_(false)
370 { 370 {
371 SetBackgroundCleared(true); 371 SetBackgroundCleared(true);
372 } 372 }
373 373
374
375 SliceViewerWidget::~SliceViewerWidget()
376 {
377 for (size_t i = 0; i < layers_.size(); i++)
378 {
379 delete layers_[i];
380 }
381 }
382 374
383 void SliceViewerWidget::ObserveLayer(IVolumeSlicer& layer) 375 void SliceViewerWidget::ObserveLayer(IVolumeSlicer& layer)
384 { 376 {
385 // currently ignoring errors of type IVolumeSlicer::GeometryErrorMessage 377 // currently ignoring errors of type IVolumeSlicer::GeometryErrorMessage
386 378
390 Register<IVolumeSlicer::LayerReadyMessage>(layer, &SliceViewerWidget::OnLayerReady); 382 Register<IVolumeSlicer::LayerReadyMessage>(layer, &SliceViewerWidget::OnLayerReady);
391 Register<IVolumeSlicer::LayerErrorMessage>(layer, &SliceViewerWidget::OnLayerError); 383 Register<IVolumeSlicer::LayerErrorMessage>(layer, &SliceViewerWidget::OnLayerError);
392 } 384 }
393 385
394 386
395 size_t SliceViewerWidget::AddLayer(IVolumeSlicer* layer) // Takes ownership 387 size_t SliceViewerWidget::AddLayer(boost::shared_ptr<IVolumeSlicer> layer)
396 { 388 {
397 if (layer == NULL) 389 if (layer == NULL)
398 { 390 {
399 throw Orthanc::OrthancException(Orthanc::ErrorCode_NullPointer); 391 throw Orthanc::OrthancException(Orthanc::ErrorCode_NullPointer);
400 } 392 }
401 393
402 size_t index = layers_.size(); 394 size_t index = layers_.size();
403 layers_.push_back(layer); 395 layers_.push_back(layer);
404 styles_.push_back(RenderStyle()); 396 styles_.push_back(RenderStyle());
405 layersIndex_[layer] = index; 397 layersIndex_[layer.get()] = index;
406 398
407 ResetPendingScene(); 399 ResetPendingScene();
408 400
409 ObserveLayer(*layer); 401 ObserveLayer(*layer);
410 402
412 404
413 return index; 405 return index;
414 } 406 }
415 407
416 408
417 void SliceViewerWidget::ReplaceLayer(size_t index, IVolumeSlicer* layer) // Takes ownership 409 void SliceViewerWidget::ReplaceLayer(size_t index,
410 boost::shared_ptr<IVolumeSlicer> layer)
418 { 411 {
419 if (layer == NULL) 412 if (layer == NULL)
420 { 413 {
421 throw Orthanc::OrthancException(Orthanc::ErrorCode_NullPointer); 414 throw Orthanc::OrthancException(Orthanc::ErrorCode_NullPointer);
422 } 415 }
424 if (index >= layers_.size()) 417 if (index >= layers_.size())
425 { 418 {
426 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange); 419 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange);
427 } 420 }
428 421
429 delete layers_[index];
430 layers_[index] = layer; 422 layers_[index] = layer;
431 layersIndex_[layer] = index; 423 layersIndex_[layer.get()] = index;
432 424
433 ResetPendingScene(); 425 ResetPendingScene();
434 426
435 ObserveLayer(*layer); 427 ObserveLayer(*layer);
436 428
443 if (index >= layers_.size()) 435 if (index >= layers_.size())
444 { 436 {
445 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange); 437 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange);
446 } 438 }
447 439
448 IVolumeSlicer* previousLayer = layers_[index]; 440 IVolumeSlicer* previousLayer = layers_[index].get();
449 layersIndex_.erase(layersIndex_.find(previousLayer)); 441 layersIndex_.erase(layersIndex_.find(previousLayer));
450 layers_.erase(layers_.begin() + index); 442 layers_.erase(layers_.begin() + index);
451 changedLayers_.erase(changedLayers_.begin() + index); 443 changedLayers_.erase(changedLayers_.begin() + index);
452 styles_.erase(styles_.begin() + index); 444 styles_.erase(styles_.begin() + index);
453 445
454 delete layers_[index]; 446 layers_[index].reset();
455 447
456 currentScene_->DeleteLayer(index); 448 currentScene_->DeleteLayer(index);
457 ResetPendingScene(); 449 ResetPendingScene();
458 450
459 NotifyContentChanged(); 451 NotifyContentChanged();