# HG changeset patch # User am@osimis.io # Date 1539773152 -7200 # Node ID 7a364e44fbb4eaf2544c20a0b6642fb9598d0702 # Parent b10dfdb96866d004031bf3bd9e6e0f9ce2e42e0a renamed SetDefaultView in FitContent diff -r b10dfdb96866 -r 7a364e44fbb4 Applications/Samples/LayoutPetCtFusionApplication.h --- a/Applications/Samples/LayoutPetCtFusionApplication.h Wed Oct 17 12:30:32 2018 +0200 +++ b/Applications/Samples/LayoutPetCtFusionApplication.h Wed Oct 17 12:45:52 2018 +0200 @@ -89,7 +89,7 @@ { if (key == 's') { - that_.SetDefaultView(); + that_.FitContent(); } } }; @@ -109,11 +109,11 @@ LayeredSceneWidget* fusionSagittal_; - void SetDefaultView() + void FitContent() { - petAxial_->SetDefaultView(); - petCoronal_->SetDefaultView(); - petSagittal_->SetDefaultView(); + petAxial_->FitContent(); + petCoronal_->FitContent(); + petSagittal_->FitContent(); } @@ -361,7 +361,7 @@ virtual void NotifySizeChange(const WorldSceneWidget& source, ViewportGeometry& view) { - view.SetDefaultView(); + view.FitContent(); } virtual void NotifyViewChange(const WorldSceneWidget& source, diff -r b10dfdb96866 -r 7a364e44fbb4 Applications/Samples/SimpleViewer/MainWidgetInteractor.cpp --- a/Applications/Samples/SimpleViewer/MainWidgetInteractor.cpp Wed Oct 17 12:30:32 2018 +0200 +++ b/Applications/Samples/SimpleViewer/MainWidgetInteractor.cpp Wed Oct 17 12:45:52 2018 +0200 @@ -97,7 +97,7 @@ switch (keyChar) { case 's': - widget.SetDefaultView(); + widget.FitContent(); break; default: diff -r b10dfdb96866 -r 7a364e44fbb4 Applications/Samples/SimpleViewer/SimpleViewerApplication.cpp --- a/Applications/Samples/SimpleViewer/SimpleViewerApplication.cpp Wed Oct 17 12:30:32 2018 +0200 +++ b/Applications/Samples/SimpleViewer/SimpleViewerApplication.cpp Wed Oct 17 12:45:52 2018 +0200 @@ -166,7 +166,7 @@ void SimpleViewerApplication::OnWidgetGeometryChanged(const LayerWidget::GeometryChangedMessage& message) { - message.origin_.SetDefaultView(); + message.origin_.FitContent(); } void SimpleViewerApplication::SelectSeriesInMainViewport(const std::string& seriesId) diff -r b10dfdb96866 -r 7a364e44fbb4 Applications/Samples/SimpleViewerApplicationSingleFile.h --- a/Applications/Samples/SimpleViewerApplicationSingleFile.h Wed Oct 17 12:30:32 2018 +0200 +++ b/Applications/Samples/SimpleViewerApplicationSingleFile.h Wed Oct 17 12:45:52 2018 +0200 @@ -163,7 +163,7 @@ switch (keyChar) { case 's': - widget.SetDefaultView(); + widget.FitContent(); break; default: @@ -375,7 +375,7 @@ void OnWidgetGeometryChanged(const LayerWidget::GeometryChangedMessage& message) { - message.origin_.SetDefaultView(); + message.origin_.FitContent(); } void SelectSeriesInMainViewport(const std::string& seriesId) diff -r b10dfdb96866 -r 7a364e44fbb4 Applications/Samples/SingleFrameApplication.h --- a/Applications/Samples/SingleFrameApplication.h Wed Oct 17 12:30:32 2018 +0200 +++ b/Applications/Samples/SingleFrameApplication.h Wed Oct 17 12:45:52 2018 +0200 @@ -108,7 +108,7 @@ switch (keyChar) { case 's': - widget.SetDefaultView(); + widget.FitContent(); break; default: @@ -181,7 +181,7 @@ SetSlice(source_->GetSliceCount() / 2); } - mainWidget_->SetDefaultView(); + mainWidget_->FitContent(); } std::unique_ptr mainWidgetInteractor_; diff -r b10dfdb96866 -r 7a364e44fbb4 Applications/Samples/SingleFrameEditorApplication.h --- a/Applications/Samples/SingleFrameEditorApplication.h Wed Oct 17 12:30:32 2018 +0200 +++ b/Applications/Samples/SingleFrameEditorApplication.h Wed Oct 17 12:45:52 2018 +0200 @@ -119,7 +119,7 @@ switch (keyChar) { case 's': - widget.SetDefaultView(); + widget.FitContent(); break; case 'p': application_.currentTool_ = Tools_Pan; @@ -154,7 +154,7 @@ void OnGeometryChanged(const LayerWidget::GeometryChangedMessage& message) { mainWidget_->SetSlice(source_->GetSlice(slice_).GetGeometry()); - mainWidget_->SetDefaultView(); + mainWidget_->FitContent(); } std::unique_ptr mainWidgetInteractor_; diff -r b10dfdb96866 -r 7a364e44fbb4 Applications/Sdl/SdlEngine.cpp --- a/Applications/Sdl/SdlEngine.cpp Wed Oct 17 12:30:32 2018 +0200 +++ b/Applications/Sdl/SdlEngine.cpp Wed Oct 17 12:45:52 2018 +0200 @@ -120,7 +120,7 @@ { NativeStoneApplicationContext::GlobalMutexLocker locker(context_); SetSize(window_.GetWidth(), window_.GetHeight()); - context_.GetCentralViewport().SetDefaultView(); + context_.GetCentralViewport().FitContent(); } bool stop = false; diff -r b10dfdb96866 -r 7a364e44fbb4 Framework/SmartLoader.cpp --- a/Framework/SmartLoader.cpp Wed Oct 17 12:30:32 2018 +0200 +++ b/Framework/SmartLoader.cpp Wed Oct 17 12:45:52 2018 +0200 @@ -26,6 +26,7 @@ #include "Framework/Widgets/LayerWidget.h" #include "Framework/StoneException.h" #include "Framework/Layers/FrameRenderer.h" +#include "Core/Logging.h" namespace OrthancStone { @@ -50,6 +51,7 @@ CachedSlice(MessageBroker& broker) : LayerSourceBase(broker) {} + virtual ~CachedSlice() {} virtual bool GetExtent(std::vector& points, const CoordinateSystem3D& viewportSlice) @@ -63,12 +65,21 @@ { // TODO: viewportSlice is not used !!!! - // it has already been loaded -> trigger the "layer ready" message immediately - bool isFull = (effectiveQuality_ == SliceImageQuality_FullPng || effectiveQuality_ == SliceImageQuality_FullPam); - std::auto_ptr accessor(new Orthanc::ImageAccessor()); - image_->GetReadOnlyAccessor(*accessor); - LayerSourceBase::NotifyLayerReady(FrameRenderer::CreateRenderer(accessor.release(), *slice_, isFull), - slice_->GetGeometry(), false); + // it has already been loaded -> trigger the "layer ready" message immediately otherwise, do nothing now. The LayerReady will be triggered + // once the LayerSource is ready + if (status_ == CachedSliceStatus_ImageLoaded) + { + LOG(WARNING) << "ScheduleLayerCreation for CachedSlice (image is loaded): " << slice_->GetOrthancInstanceId(); + bool isFull = (effectiveQuality_ == SliceImageQuality_FullPng || effectiveQuality_ == SliceImageQuality_FullPam); + std::auto_ptr accessor(new Orthanc::ImageAccessor()); + image_->GetReadOnlyAccessor(*accessor); + LayerSourceBase::NotifyLayerReady(FrameRenderer::CreateRenderer(accessor.release(), *slice_, isFull), + slice_->GetGeometry(), false); + } + else + { + LOG(WARNING) << "ScheduleLayerCreation for CachedSlice (image is not loaded yet): " << slice_->GetOrthancInstanceId(); + } } CachedSlice* Clone() const @@ -105,10 +116,12 @@ std::auto_ptr layerSource; std::string sliceKeyId = instanceId + ":" + std::to_string(frame); + SmartLoader::CachedSlice* cachedSlice = NULL; if (cachedSlices_.find(sliceKeyId) != cachedSlices_.end()) // && cachedSlices_[sliceKeyId]->status_ == CachedSliceStatus_Loaded) { layerSource.reset(cachedSlices_[sliceKeyId]->Clone()); + cachedSlice = dynamic_cast(layerSource.get()); } else { @@ -134,7 +147,6 @@ throw StoneException(ErrorCode_CanOnlyAddOneLayerAtATime); } - SmartLoader::CachedSlice* cachedSlice = dynamic_cast(layerSource.get()); if (cachedSlice != NULL) { cachedSlice->NotifyGeometryReady(); @@ -144,14 +156,20 @@ void SmartLoader::PreloadSlice(const std::string instanceId, unsigned int frame) { + // TODO: reactivate -> need to be able to ScheduleLayerLoading in ILayerSource without calling ScheduleLayerCreation + return; // TODO: check if it is already in the cache + + // create the slice in the cache with "empty" data boost::shared_ptr cachedSlice(new CachedSlice(IObserver::broker_)); cachedSlice->slice_.reset(new Slice(instanceId, frame)); cachedSlice->status_ = CachedSliceStatus_ScheduledToLoad; std::string sliceKeyId = instanceId + ":" + std::to_string(frame); + LOG(WARNING) << "Will preload: " << sliceKeyId; + cachedSlices_[sliceKeyId] = boost::shared_ptr(cachedSlice); std::auto_ptr layerSource(new OrthancFrameLayerSource(IObserver::broker_, orthancApiClient_)); @@ -186,6 +204,8 @@ const Slice& slice = source.GetSlice(0); // TODO handle GetSliceCount() std::string sliceKeyId = slice.GetOrthancInstanceId() + ":" + std::to_string(slice.GetFrame()); + LOG(WARNING) << "Geometry ready: " << sliceKeyId; + boost::shared_ptr cachedSlice(new CachedSlice(IObserver::broker_)); cachedSlice->slice_.reset(slice.Clone()); cachedSlice->effectiveQuality_ = source.GetImageQuality(); @@ -205,6 +225,8 @@ const Slice& slice = source.GetSlice(0); // TODO handle GetSliceCount() ? std::string sliceKeyId = slice.GetOrthancInstanceId() + ":" + std::to_string(slice.GetFrame()); + LOG(WARNING) << "Image ready: " << sliceKeyId; + boost::shared_ptr cachedSlice(new CachedSlice(IObserver::broker_)); cachedSlice->image_ = message.image_; cachedSlice->effectiveQuality_ = message.imageQuality_; @@ -223,6 +245,8 @@ const Slice& slice = source.GetSlice(0); // TODO handle GetSliceCount() ? std::string sliceKeyId = slice.GetOrthancInstanceId() + ":" + std::to_string(slice.GetFrame()); + LOG(WARNING) << "Layer ready: " << sliceKeyId; + // remove the slice from the preloading slices now that it has been fully loaded and it is referenced in the cache if (preloadingInstances_.find(sliceKeyId) != preloadingInstances_.end()) { diff -r b10dfdb96866 -r 7a364e44fbb4 Framework/SmartLoader.h --- a/Framework/SmartLoader.h Wed Oct 17 12:30:32 2018 +0200 +++ b/Framework/SmartLoader.h Wed Oct 17 12:45:52 2018 +0200 @@ -32,7 +32,7 @@ class SmartLoader : public IObservable, public IObserver { - struct CachedSlice; + class CachedSlice; protected: typedef std::map> CachedSlices; diff -r b10dfdb96866 -r 7a364e44fbb4 Framework/Toolbox/ViewportGeometry.cpp --- a/Framework/Toolbox/ViewportGeometry.cpp Wed Oct 17 12:30:32 2018 +0200 +++ b/Framework/Toolbox/ViewportGeometry.cpp Wed Oct 17 12:45:52 2018 +0200 @@ -121,7 +121,7 @@ } - void ViewportGeometry::SetDefaultView() + void ViewportGeometry::FitContent() { if (width_ > 0 && height_ > 0 && diff -r b10dfdb96866 -r 7a364e44fbb4 Framework/Toolbox/ViewportGeometry.h --- a/Framework/Toolbox/ViewportGeometry.h Wed Oct 17 12:30:32 2018 +0200 +++ b/Framework/Toolbox/ViewportGeometry.h Wed Oct 17 12:45:52 2018 +0200 @@ -83,7 +83,7 @@ return zoom_; } - void SetDefaultView(); + void FitContent(); void ApplyTransform(CairoContext& context) const; diff -r b10dfdb96866 -r 7a364e44fbb4 Framework/Viewport/IViewport.h --- a/Framework/Viewport/IViewport.h Wed Oct 17 12:30:32 2018 +0200 +++ b/Framework/Viewport/IViewport.h Wed Oct 17 12:45:52 2018 +0200 @@ -47,7 +47,7 @@ { } - virtual void SetDefaultView() = 0; + virtual void FitContent() = 0; virtual void Register(IObserver& observer) = 0; diff -r b10dfdb96866 -r 7a364e44fbb4 Framework/Viewport/WidgetViewport.cpp --- a/Framework/Viewport/WidgetViewport.cpp Wed Oct 17 12:30:32 2018 +0200 +++ b/Framework/Viewport/WidgetViewport.cpp Wed Oct 17 12:45:52 2018 +0200 @@ -36,11 +36,11 @@ } - void WidgetViewport::SetDefaultView() + void WidgetViewport::FitContent() { if (centralWidget_.get() != NULL) { - centralWidget_->SetDefaultView(); + centralWidget_->FitContent(); } } diff -r b10dfdb96866 -r 7a364e44fbb4 Framework/Viewport/WidgetViewport.h --- a/Framework/Viewport/WidgetViewport.h Wed Oct 17 12:30:32 2018 +0200 +++ b/Framework/Viewport/WidgetViewport.h Wed Oct 17 12:45:52 2018 +0200 @@ -45,7 +45,7 @@ public: WidgetViewport(); - virtual void SetDefaultView(); + virtual void FitContent(); virtual void SetStatusBar(IStatusBar& statusBar); diff -r b10dfdb96866 -r 7a364e44fbb4 Framework/Widgets/EmptyWidget.h --- a/Framework/Widgets/EmptyWidget.h Wed Oct 17 12:30:32 2018 +0200 +++ b/Framework/Widgets/EmptyWidget.h Wed Oct 17 12:45:52 2018 +0200 @@ -46,7 +46,7 @@ { } - virtual void SetDefaultView() + virtual void FitContent() { } diff -r b10dfdb96866 -r 7a364e44fbb4 Framework/Widgets/IWidget.h --- a/Framework/Widgets/IWidget.h Wed Oct 17 12:30:32 2018 +0200 +++ b/Framework/Widgets/IWidget.h Wed Oct 17 12:45:52 2018 +0200 @@ -35,7 +35,7 @@ { } - virtual void SetDefaultView() = 0; + virtual void FitContent() = 0; virtual void SetParent(IWidget& parent) = 0; diff -r b10dfdb96866 -r 7a364e44fbb4 Framework/Widgets/LayoutWidget.cpp --- a/Framework/Widgets/LayoutWidget.cpp Wed Oct 17 12:30:32 2018 +0200 +++ b/Framework/Widgets/LayoutWidget.cpp Wed Oct 17 12:45:52 2018 +0200 @@ -291,11 +291,11 @@ } - void LayoutWidget::SetDefaultView() + void LayoutWidget::FitContent() { for (size_t i = 0; i < children_.size(); i++) { - children_[i]->GetWidget().SetDefaultView(); + children_[i]->GetWidget().FitContent(); } } diff -r b10dfdb96866 -r 7a364e44fbb4 Framework/Widgets/LayoutWidget.h --- a/Framework/Widgets/LayoutWidget.h Wed Oct 17 12:30:32 2018 +0200 +++ b/Framework/Widgets/LayoutWidget.h Wed Oct 17 12:45:52 2018 +0200 @@ -53,7 +53,7 @@ virtual ~LayoutWidget(); - virtual void SetDefaultView(); + virtual void FitContent(); virtual void NotifyContentChanged(const IWidget& widget); diff -r b10dfdb96866 -r 7a364e44fbb4 Framework/Widgets/WidgetBase.h --- a/Framework/Widgets/WidgetBase.h Wed Oct 17 12:30:32 2018 +0200 +++ b/Framework/Widgets/WidgetBase.h Wed Oct 17 12:45:52 2018 +0200 @@ -55,7 +55,7 @@ public: WidgetBase(const std::string& name); - virtual void SetDefaultView() + virtual void FitContent() { } diff -r b10dfdb96866 -r 7a364e44fbb4 Framework/Widgets/WorldSceneWidget.cpp --- a/Framework/Widgets/WorldSceneWidget.cpp Wed Oct 17 12:30:32 2018 +0200 +++ b/Framework/Widgets/WorldSceneWidget.cpp Wed Oct 17 12:45:52 2018 +0200 @@ -200,10 +200,10 @@ } - void WorldSceneWidget::SetDefaultView() + void WorldSceneWidget::FitContent() { SetSceneExtent(view_); - view_.SetDefaultView(); + view_.FitContent(); NotifyContentChanged(); } diff -r b10dfdb96866 -r 7a364e44fbb4 Framework/Widgets/WorldSceneWidget.h --- a/Framework/Widgets/WorldSceneWidget.h Wed Oct 17 12:30:32 2018 +0200 +++ b/Framework/Widgets/WorldSceneWidget.h Wed Oct 17 12:45:52 2018 +0200 @@ -106,7 +106,7 @@ void SetInteractor(IWorldSceneInteractor& interactor); - virtual void SetDefaultView(); + virtual void FitContent(); void SetView(const ViewportGeometry& view); diff -r b10dfdb96866 -r 7a364e44fbb4 Framework/dev.h --- a/Framework/dev.h Wed Oct 17 12:30:32 2018 +0200 +++ b/Framework/dev.h Wed Oct 17 12:45:52 2018 +0200 @@ -684,7 +684,7 @@ slices_.reset(new VolumeImageGeometry(image, projection_)); SetSlice(slices_->GetSliceCount() / 2); - widget_.SetDefaultView(); + widget_.FitContent(); } } @@ -756,7 +756,7 @@ switch (keyChar) { case 's': - widget.SetDefaultView(); + widget.FitContent(); break; default: diff -r b10dfdb96866 -r 7a364e44fbb4 Resources/CMake/OrthancStoneConfiguration.cmake --- a/Resources/CMake/OrthancStoneConfiguration.cmake Wed Oct 17 12:30:32 2018 +0200 +++ b/Resources/CMake/OrthancStoneConfiguration.cmake Wed Oct 17 12:45:52 2018 +0200 @@ -264,6 +264,7 @@ ${ORTHANC_STONE_ROOT}/Framework/Viewport/CairoContext.cpp ${ORTHANC_STONE_ROOT}/Framework/Viewport/CairoFont.cpp ${ORTHANC_STONE_ROOT}/Framework/Viewport/CairoSurface.cpp + ${ORTHANC_STONE_ROOT}/Framework/Viewport/IViewport.h ${ORTHANC_STONE_ROOT}/Framework/Viewport/IStatusBar.h ${ORTHANC_STONE_ROOT}/Framework/Viewport/WidgetViewport.cpp ${ORTHANC_STONE_ROOT}/Framework/Volumes/ImageBuffer3D.cpp