# HG changeset patch # User Sebastien Jodogne # Date 1541512760 -3600 # Node ID ba5ad93f935ae1761dad07eafd20a49b98248480 # Parent 2308fe0b0b058c5e42bba7fd5dcf388552a340bd ILayerSource::LayerErrorMessage diff -r 2308fe0b0b05 -r ba5ad93f935a Framework/Layers/DicomStructureSetRendererFactory.cpp --- a/Framework/Layers/DicomStructureSetRendererFactory.cpp Tue Nov 06 14:41:36 2018 +0100 +++ b/Framework/Layers/DicomStructureSetRendererFactory.cpp Tue Nov 06 14:59:20 2018 +0100 @@ -130,7 +130,7 @@ { if (loader_.HasStructureSet()) { - NotifyLayerReady(new Renderer(loader_.GetStructureSet(), viewportSlice), viewportSlice, false); + NotifyLayerReady(new Renderer(loader_.GetStructureSet(), viewportSlice), viewportSlice); } } } diff -r 2308fe0b0b05 -r ba5ad93f935a Framework/Layers/ILayerSource.h --- a/Framework/Layers/ILayerSource.h Tue Nov 06 14:41:36 2018 +0100 +++ b/Framework/Layers/ILayerSource.h Tue Nov 06 14:59:20 2018 +0100 @@ -60,20 +60,16 @@ class LayerReadyMessage : public OriginMessage { private: - std::auto_ptr renderer_; - const CoordinateSystem3D& slice_; - bool isError_; + std::auto_ptr renderer_; + const CoordinateSystem3D& slice_; public: LayerReadyMessage(ILayerSource& origin, ILayerRenderer* renderer, // Takes ownership => TODO Remove this! - const CoordinateSystem3D& slice, - bool isError // TODO => create NotifyLayerError - ) : + const CoordinateSystem3D& slice) : OriginMessage(origin), renderer_(renderer), - slice_(slice), - isError_(isError) + slice_(slice) { } @@ -92,10 +88,25 @@ { return slice_; } + }; - bool IsError() const + + class LayerErrorMessage : public OriginMessage + { + private: + const CoordinateSystem3D& slice_; + + public: + LayerErrorMessage(ILayerSource& origin, + const CoordinateSystem3D& slice) : + OriginMessage(origin), + slice_(slice) { - return isError_; + } + + const CoordinateSystem3D& GetSlice() const + { + return slice_; } }; diff -r 2308fe0b0b05 -r ba5ad93f935a Framework/Layers/LayerSourceBase.cpp --- a/Framework/Layers/LayerSourceBase.cpp Tue Nov 06 14:41:36 2018 +0100 +++ b/Framework/Layers/LayerSourceBase.cpp Tue Nov 06 14:59:20 2018 +0100 @@ -46,10 +46,14 @@ } void LayerSourceBase::NotifyLayerReady(ILayerRenderer* layer, - const CoordinateSystem3D& slice, - bool isError) + const CoordinateSystem3D& slice) { - EmitMessage(ILayerSource::LayerReadyMessage(*this, layer, slice, isError)); + EmitMessage(ILayerSource::LayerReadyMessage(*this, layer, slice)); + } + + void LayerSourceBase::NotifyLayerError(const CoordinateSystem3D& slice) + { + EmitMessage(ILayerSource::LayerErrorMessage(*this, slice)); } void LayerSourceBase::NotifyImageReady(const Orthanc::ImageAccessor& image, diff -r 2308fe0b0b05 -r ba5ad93f935a Framework/Layers/LayerSourceBase.h --- a/Framework/Layers/LayerSourceBase.h Tue Nov 06 14:41:36 2018 +0100 +++ b/Framework/Layers/LayerSourceBase.h Tue Nov 06 14:59:20 2018 +0100 @@ -40,8 +40,9 @@ void NotifySliceChange(const Slice& slice); void NotifyLayerReady(ILayerRenderer* layer, - const CoordinateSystem3D& slice, - bool isError); + const CoordinateSystem3D& slice); + + void NotifyLayerError(const CoordinateSystem3D& slice); void NotifyImageReady(const Orthanc::ImageAccessor& image, SliceImageQuality imageQuality, diff -r 2308fe0b0b05 -r ba5ad93f935a Framework/Layers/OrthancFrameLayerSource.cpp --- a/Framework/Layers/OrthancFrameLayerSource.cpp Tue Nov 06 14:41:36 2018 +0100 +++ b/Framework/Layers/OrthancFrameLayerSource.cpp Tue Nov 06 14:59:20 2018 +0100 @@ -59,13 +59,13 @@ message.GetEffectiveQuality() == SliceImageQuality_FullPam); LayerSourceBase::NotifyLayerReady(FrameRenderer::CreateRenderer(message.GetImage(), message.GetSlice(), isFull), - message.GetSlice().GetGeometry(), false); + message.GetSlice().GetGeometry()); } void OrthancFrameLayerSource::OnSliceImageError(const OrthancSlicesLoader::SliceImageErrorMessage& message) { - LayerSourceBase::NotifyLayerReady(NULL, message.GetSlice().GetGeometry(), true); + LayerSourceBase::NotifyLayerError(message.GetSlice().GetGeometry()); } OrthancFrameLayerSource::OrthancFrameLayerSource(MessageBroker& broker, OrthancApiClient& orthanc) : diff -r 2308fe0b0b05 -r ba5ad93f935a Framework/Messages/MessageType.h --- a/Framework/Messages/MessageType.h Tue Nov 06 14:41:36 2018 +0100 +++ b/Framework/Messages/MessageType.h Tue Nov 06 14:59:20 2018 +0100 @@ -33,6 +33,7 @@ MessageType_LayerSource_SliceChanged, MessageType_LayerSource_ImageReady, // instance pixels data have been loaded MessageType_LayerSource_LayerReady, // layer is ready to be rendered + MessageType_LayerSource_LayerError, MessageType_SliceLoader_GeometryReady, MessageType_SliceLoader_GeometryError, diff -r 2308fe0b0b05 -r ba5ad93f935a Framework/SmartLoader.cpp --- a/Framework/SmartLoader.cpp Tue Nov 06 14:41:36 2018 +0100 +++ b/Framework/SmartLoader.cpp Tue Nov 06 14:59:20 2018 +0100 @@ -73,9 +73,10 @@ if (status_ == CachedSliceStatus_ImageLoaded) { LOG(WARNING) << "ScheduleLayerCreation for CachedSlice (image is loaded): " << slice_->GetOrthancInstanceId(); - bool isFull = (effectiveQuality_ == SliceImageQuality_FullPng || effectiveQuality_ == SliceImageQuality_FullPam); + bool isFull = (effectiveQuality_ == SliceImageQuality_FullPng || + effectiveQuality_ == SliceImageQuality_FullPam); LayerSourceBase::NotifyLayerReady(FrameRenderer::CreateRenderer(*image_, *slice_, isFull), - slice_->GetGeometry(), false); + slice_->GetGeometry()); } else { diff -r 2308fe0b0b05 -r ba5ad93f935a Framework/Widgets/LayerWidget.cpp --- a/Framework/Widgets/LayerWidget.cpp Tue Nov 06 14:41:36 2018 +0100 +++ b/Framework/Widgets/LayerWidget.cpp Tue Nov 06 14:59:20 2018 +0100 @@ -387,6 +387,7 @@ layer.RegisterObserverCallback(new Callable(*this, &LayerWidget::OnSliceChanged)); layer.RegisterObserverCallback(new Callable(*this, &LayerWidget::OnContentChanged)); layer.RegisterObserverCallback(new Callable(*this, &LayerWidget::OnLayerReady)); + layer.RegisterObserverCallback(new Callable(*this, &LayerWidget::OnLayerError)); } @@ -587,32 +588,38 @@ size_t index; if (LookupLayer(index, message.GetOrigin())) { - if (message.IsError()) - { - LOG(ERROR) << "Using error renderer on layer " << index; - } - else - { - LOG(INFO) << "Renderer ready for layer " << index; - } + LOG(INFO) << "Renderer ready for layer " << index; // TODO -- REMOVE THIS UGLY STUFF ILayerSource::LayerReadyMessage& ugly = const_cast(message); - if (ugly.GetRendererRaw().get() != NULL) - { - UpdateLayer(index, ugly.GetRendererRaw().release(), message.GetSlice()); - } - else if (message.IsError()) + if (ugly.GetRendererRaw().get() == NULL) { - // TODO - //UpdateLayer(index, new SliceOutlineRenderer(slice), slice); + throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError); } + + UpdateLayer(index, ugly.GetRendererRaw().release(), message.GetSlice()); } + EmitMessage(LayerWidget::ContentChangedMessage(*this)); } + void LayerWidget::OnLayerError(const ILayerSource::LayerErrorMessage& message) + { + size_t index; + if (LookupLayer(index, message.GetOrigin())) + { + LOG(ERROR) << "Using error renderer on layer " << index; + + // TODO + //UpdateLayer(index, new SliceOutlineRenderer(slice), slice); + + EmitMessage(LayerWidget::ContentChangedMessage(*this)); + } + } + + void LayerWidget::ResetChangedLayers() { changedLayers_.resize(layers_.size()); diff -r 2308fe0b0b05 -r ba5ad93f935a Framework/Widgets/LayerWidget.h --- a/Framework/Widgets/LayerWidget.h Tue Nov 06 14:41:36 2018 +0100 +++ b/Framework/Widgets/LayerWidget.h Tue Nov 06 14:59:20 2018 +0100 @@ -67,6 +67,8 @@ virtual void OnLayerReady(const ILayerSource::LayerReadyMessage& message); + virtual void OnLayerError(const ILayerSource::LayerErrorMessage& message); + void ObserveLayer(ILayerSource& source); void ResetChangedLayers(); diff -r 2308fe0b0b05 -r ba5ad93f935a Framework/dev.h --- a/Framework/dev.h Tue Nov 06 14:41:36 2018 +0100 +++ b/Framework/dev.h Tue Nov 06 14:59:20 2018 +0100 @@ -660,14 +660,14 @@ LayerSourceBase::NotifyLayerReady( FrameRenderer::CreateRenderer(*frame, *slice, isFullQuality), //new SliceOutlineRenderer(slice), - slice->GetGeometry(), false); + slice->GetGeometry()); return; } } // Error CoordinateSystem3D slice; - LayerSourceBase::NotifyLayerReady(NULL, slice, true); + LayerSourceBase::NotifyLayerError(slice); } }; @@ -870,7 +870,7 @@ viewportSlice.GetOrigin(), viewportSlice.GetNormal())) { // The two slice are parallel, don't try and display the intersection - NotifyLayerReady(NULL, reference.GetGeometry(), false); + NotifyLayerError(reference.GetGeometry()); } else { @@ -885,12 +885,12 @@ extent.GetX1(), extent.GetY1(), extent.GetX2(), extent.GetY2())) { - NotifyLayerReady(new LineLayerRenderer(x1, y1, x2, y2, slice), reference.GetGeometry(), false); + NotifyLayerReady(new LineLayerRenderer(x1, y1, x2, y2, slice), reference.GetGeometry()); } else { - // Parallel slices - NotifyLayerReady(NULL, reference.GetGeometry(), false); + // Error: Parallel slices + NotifyLayerError(reference.GetGeometry()); } } }