Mercurial > hg > orthanc-stone
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(); |