Mercurial > hg > orthanc-stone
comparison Framework/Widgets/LayerWidget.cpp @ 315:aad37d0b6407 am-2
Added LayerWidget::RemoveLayer + DELETE commands in WebService
author | am@osimis.io |
---|---|
date | Fri, 05 Oct 2018 10:38:16 +0200 |
parents | 14ef1227120f |
children | 3a4ca166fafa |
comparison
equal
deleted
inserted
replaced
314:97f16214dc5e | 315:aad37d0b6407 |
---|---|
35 private: | 35 private: |
36 CoordinateSystem3D slice_; | 36 CoordinateSystem3D slice_; |
37 double thickness_; | 37 double thickness_; |
38 size_t countMissing_; | 38 size_t countMissing_; |
39 std::vector<ILayerRenderer*> renderers_; | 39 std::vector<ILayerRenderer*> renderers_; |
40 | 40 public: |
41 void DeleteLayer(size_t index) | 41 void DeleteLayer(size_t index) |
42 { | 42 { |
43 if (index >= renderers_.size()) | 43 if (index >= renderers_.size()) |
44 { | 44 { |
45 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange); | 45 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange); |
54 renderers_[index] = NULL; | 54 renderers_[index] = NULL; |
55 countMissing_++; | 55 countMissing_++; |
56 } | 56 } |
57 } | 57 } |
58 | 58 |
59 public: | |
60 Scene(const CoordinateSystem3D& slice, | 59 Scene(const CoordinateSystem3D& slice, |
61 double thickness, | 60 double thickness, |
62 size_t countLayers) : | 61 size_t countLayers) : |
63 slice_(slice), | 62 slice_(slice), |
64 thickness_(thickness), | 63 thickness_(thickness), |
363 WorldSceneWidget(name), | 362 WorldSceneWidget(name), |
364 IObserver(broker), | 363 IObserver(broker), |
365 IObservable(broker), | 364 IObservable(broker), |
366 started_(false) | 365 started_(false) |
367 { | 366 { |
368 // DeclareHandledMessage(MessageType_LayerSource_GeometryReady); | |
369 // DeclareHandledMessage(MessageType_LayerSource_ContentChanged); | |
370 // DeclareHandledMessage(MessageType_LayerSource_LayerReady); | |
371 // DeclareHandledMessage(MessageType_LayerSource_SliceChanged); | |
372 // DeclareHandledMessage(MessageType_LayerSource_GeometryError); | |
373 | |
374 // DeclareEmittableMessage(MessageType_Widget_GeometryChanged); | |
375 // DeclareEmittableMessage(MessageType_Widget_ContentChanged); | |
376 | |
377 SetBackgroundCleared(true); | 367 SetBackgroundCleared(true); |
378 } | 368 } |
379 | 369 |
380 | 370 |
381 LayerWidget::~LayerWidget() | 371 LayerWidget::~LayerWidget() |
438 ObserveLayer(*layer); | 428 ObserveLayer(*layer); |
439 | 429 |
440 InvalidateLayer(index); | 430 InvalidateLayer(index); |
441 } | 431 } |
442 | 432 |
433 void LayerWidget::RemoveLayer(size_t index) | |
434 { | |
435 if (index >= layers_.size()) | |
436 { | |
437 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange); | |
438 } | |
439 | |
440 ILayerSource* previousLayer = layers_[index]; | |
441 layersIndex_.erase(layersIndex_.find(previousLayer)); | |
442 layers_.erase(layers_.begin() + index); | |
443 changedLayers_.erase(changedLayers_.begin() + index); | |
444 styles_.erase(styles_.begin() + index); | |
445 | |
446 delete layers_[index]; | |
447 | |
448 currentScene_->DeleteLayer(index); | |
449 ResetPendingScene(); | |
450 | |
451 NotifyContentChanged(); | |
452 } | |
443 | 453 |
444 const RenderStyle& LayerWidget::GetLayerStyle(size_t layer) const | 454 const RenderStyle& LayerWidget::GetLayerStyle(size_t layer) const |
445 { | 455 { |
446 if (layer >= layers_.size()) | 456 if (layer >= layers_.size()) |
447 { | 457 { |