comparison Framework/SmartLoader.cpp @ 728:8190213e2279 am-dev

Merged default into am-dev
author Alain Mazy <am@osimis.io>
date Tue, 21 May 2019 13:25:58 +0200
parents 4f2416d519b4
children
comparison
equal deleted inserted replaced
690:f185cfcb72a0 728:8190213e2279
26 #include "Framework/Widgets/SliceViewerWidget.h" 26 #include "Framework/Widgets/SliceViewerWidget.h"
27 #include "Framework/StoneException.h" 27 #include "Framework/StoneException.h"
28 #include "Framework/Layers/FrameRenderer.h" 28 #include "Framework/Layers/FrameRenderer.h"
29 #include "Core/Logging.h" 29 #include "Core/Logging.h"
30 30
31 namespace OrthancStone 31 namespace Deprecated
32 { 32 {
33 enum CachedSliceStatus 33 enum CachedSliceStatus
34 { 34 {
35 CachedSliceStatus_ScheduledToLoad, 35 CachedSliceStatus_ScheduledToLoad,
36 CachedSliceStatus_GeometryLoaded, 36 CachedSliceStatus_GeometryLoaded,
51 { 51 {
52 } 52 }
53 53
54 virtual ILayerRenderer* CreateRenderer() const 54 virtual ILayerRenderer* CreateRenderer() const
55 { 55 {
56 bool isFull = (that_.effectiveQuality_ == SliceImageQuality_FullPng || 56 bool isFull = (that_.effectiveQuality_ == OrthancStone::SliceImageQuality_FullPng ||
57 that_.effectiveQuality_ == SliceImageQuality_FullPam); 57 that_.effectiveQuality_ == OrthancStone::SliceImageQuality_FullPam);
58 58
59 return FrameRenderer::CreateRenderer(*that_.image_, *that_.slice_, isFull); 59 return FrameRenderer::CreateRenderer(*that_.image_, *that_.slice_, isFull);
60 } 60 }
61 }; 61 };
62 62
63 unsigned int sliceIndex_; 63 unsigned int sliceIndex_;
64 std::auto_ptr<Slice> slice_; 64 std::auto_ptr<Slice> slice_;
65 boost::shared_ptr<Orthanc::ImageAccessor> image_; 65 boost::shared_ptr<Orthanc::ImageAccessor> image_;
66 SliceImageQuality effectiveQuality_; 66 OrthancStone::SliceImageQuality effectiveQuality_;
67 CachedSliceStatus status_; 67 CachedSliceStatus status_;
68 68
69 public: 69 public:
70 CachedSlice(MessageBroker& broker) : 70 CachedSlice(OrthancStone::MessageBroker& broker) :
71 IVolumeSlicer(broker) 71 IVolumeSlicer(broker)
72 { 72 {
73 } 73 }
74 74
75 virtual ~CachedSlice() 75 virtual ~CachedSlice()
76 { 76 {
77 } 77 }
78 78
79 virtual bool GetExtent(std::vector<Vector>& points, 79 virtual bool GetExtent(std::vector<OrthancStone::Vector>& points,
80 const CoordinateSystem3D& viewportSlice) 80 const OrthancStone::CoordinateSystem3D& viewportSlice)
81 { 81 {
82 // TODO: viewportSlice is not used !!!! 82 // TODO: viewportSlice is not used !!!!
83 slice_->GetExtent(points); 83 slice_->GetExtent(points);
84 return true; 84 return true;
85 } 85 }
86 86
87 virtual void ScheduleLayerCreation(const CoordinateSystem3D& viewportSlice) 87 virtual void ScheduleLayerCreation(const OrthancStone::CoordinateSystem3D& viewportSlice)
88 { 88 {
89 // TODO: viewportSlice is not used !!!! 89 // TODO: viewportSlice is not used !!!!
90 90
91 // it has already been loaded -> trigger the "layer ready" message immediately otherwise, do nothing now. The LayerReady will be triggered 91 // it has already been loaded -> trigger the "layer ready" message immediately otherwise, do nothing now. The LayerReady will be triggered
92 // once the VolumeSlicer is ready 92 // once the VolumeSlicer is ready
116 } 116 }
117 117
118 }; 118 };
119 119
120 120
121 SmartLoader::SmartLoader(MessageBroker& broker, 121 SmartLoader::SmartLoader(OrthancStone::MessageBroker& broker,
122 OrthancApiClient& orthancApiClient) : 122 OrthancApiClient& orthancApiClient) :
123 IObservable(broker), 123 IObservable(broker),
124 IObserver(broker), 124 IObserver(broker),
125 imageQuality_(SliceImageQuality_FullPam), 125 imageQuality_(OrthancStone::SliceImageQuality_FullPam),
126 orthancApiClient_(orthancApiClient) 126 orthancApiClient_(orthancApiClient)
127 { 127 {
128 } 128 }
129 129
130 void SmartLoader::SetFrameInWidget(SliceViewerWidget& sliceViewer, 130 void SmartLoader::SetFrameInWidget(SliceViewerWidget& sliceViewer,
150 } 150 }
151 else 151 else
152 { 152 {
153 layerSource.reset(new DicomSeriesVolumeSlicer(IObserver::GetBroker(), orthancApiClient_)); 153 layerSource.reset(new DicomSeriesVolumeSlicer(IObserver::GetBroker(), orthancApiClient_));
154 dynamic_cast<DicomSeriesVolumeSlicer*>(layerSource.get())->SetImageQuality(imageQuality_); 154 dynamic_cast<DicomSeriesVolumeSlicer*>(layerSource.get())->SetImageQuality(imageQuality_);
155 layerSource->RegisterObserverCallback(new Callable<SmartLoader, IVolumeSlicer::GeometryReadyMessage>(*this, &SmartLoader::OnLayerGeometryReady)); 155 layerSource->RegisterObserverCallback(new OrthancStone::Callable<SmartLoader, IVolumeSlicer::GeometryReadyMessage>(*this, &SmartLoader::OnLayerGeometryReady));
156 layerSource->RegisterObserverCallback(new Callable<SmartLoader, DicomSeriesVolumeSlicer::FrameReadyMessage>(*this, &SmartLoader::OnFrameReady)); 156 layerSource->RegisterObserverCallback(new OrthancStone::Callable<SmartLoader, DicomSeriesVolumeSlicer::FrameReadyMessage>(*this, &SmartLoader::OnFrameReady));
157 layerSource->RegisterObserverCallback(new Callable<SmartLoader, IVolumeSlicer::LayerReadyMessage>(*this, &SmartLoader::OnLayerReady)); 157 layerSource->RegisterObserverCallback(new OrthancStone::Callable<SmartLoader, IVolumeSlicer::LayerReadyMessage>(*this, &SmartLoader::OnLayerReady));
158 dynamic_cast<DicomSeriesVolumeSlicer*>(layerSource.get())->LoadFrame(instanceId, frame); 158 dynamic_cast<DicomSeriesVolumeSlicer*>(layerSource.get())->LoadFrame(instanceId, frame);
159 } 159 }
160 160
161 // make sure that the widget registers the events before we trigger them 161 // make sure that the widget registers the events before we trigger them
162 if (sliceViewer.GetLayerCount() == layerIndex) 162 if (sliceViewer.GetLayerCount() == layerIndex)
167 { 167 {
168 sliceViewer.ReplaceLayer(layerIndex, layerSource.release()); 168 sliceViewer.ReplaceLayer(layerIndex, layerSource.release());
169 } 169 }
170 else 170 else
171 { 171 {
172 throw StoneException(ErrorCode_CanOnlyAddOneLayerAtATime); 172 throw OrthancStone::StoneException(OrthancStone::ErrorCode_CanOnlyAddOneLayerAtATime);
173 } 173 }
174 174
175 if (cachedSlice != NULL) 175 if (cachedSlice != NULL)
176 { 176 {
177 BroadcastMessage(IVolumeSlicer::GeometryReadyMessage(*cachedSlice)); 177 BroadcastMessage(IVolumeSlicer::GeometryReadyMessage(*cachedSlice));
199 cachedSlices_[sliceKeyId] = boost::shared_ptr<CachedSlice>(cachedSlice); 199 cachedSlices_[sliceKeyId] = boost::shared_ptr<CachedSlice>(cachedSlice);
200 200
201 std::auto_ptr<IVolumeSlicer> layerSource(new DicomSeriesVolumeSlicer(IObserver::GetBroker(), orthancApiClient_)); 201 std::auto_ptr<IVolumeSlicer> layerSource(new DicomSeriesVolumeSlicer(IObserver::GetBroker(), orthancApiClient_));
202 202
203 dynamic_cast<DicomSeriesVolumeSlicer*>(layerSource.get())->SetImageQuality(imageQuality_); 203 dynamic_cast<DicomSeriesVolumeSlicer*>(layerSource.get())->SetImageQuality(imageQuality_);
204 layerSource->RegisterObserverCallback(new Callable<SmartLoader, IVolumeSlicer::GeometryReadyMessage>(*this, &SmartLoader::OnLayerGeometryReady)); 204 layerSource->RegisterObserverCallback(new OrthancStone::Callable<SmartLoader, IVolumeSlicer::GeometryReadyMessage>(*this, &SmartLoader::OnLayerGeometryReady));
205 layerSource->RegisterObserverCallback(new Callable<SmartLoader, DicomSeriesVolumeSlicer::FrameReadyMessage>(*this, &SmartLoader::OnFrameReady)); 205 layerSource->RegisterObserverCallback(new OrthancStone::Callable<SmartLoader, DicomSeriesVolumeSlicer::FrameReadyMessage>(*this, &SmartLoader::OnFrameReady));
206 layerSource->RegisterObserverCallback(new Callable<SmartLoader, IVolumeSlicer::LayerReadyMessage>(*this, &SmartLoader::OnLayerReady)); 206 layerSource->RegisterObserverCallback(new OrthancStone::Callable<SmartLoader, IVolumeSlicer::LayerReadyMessage>(*this, &SmartLoader::OnLayerReady));
207 dynamic_cast<DicomSeriesVolumeSlicer*>(layerSource.get())->LoadFrame(instanceId, frame); 207 dynamic_cast<DicomSeriesVolumeSlicer*>(layerSource.get())->LoadFrame(instanceId, frame);
208 208
209 // keep a ref to the VolumeSlicer until the slice is fully loaded and saved to cache 209 // keep a ref to the VolumeSlicer until the slice is fully loaded and saved to cache
210 preloadingInstances_[sliceKeyId] = boost::shared_ptr<IVolumeSlicer>(layerSource.release()); 210 preloadingInstances_[sliceKeyId] = boost::shared_ptr<IVolumeSlicer>(layerSource.release());
211 } 211 }