Mercurial > hg > orthanc-stone
comparison Framework/Deprecated/SmartLoader.cpp @ 1066:b537002f83a9 broker
removing broker from deprecated classes
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Tue, 15 Oct 2019 15:39:39 +0200 |
parents | e713f1a99861 |
children | 04a95ee91327 |
comparison
equal
deleted
inserted
replaced
1065:9d42f89b8c3c | 1066:b537002f83a9 |
---|---|
19 **/ | 19 **/ |
20 | 20 |
21 | 21 |
22 #include "SmartLoader.h" | 22 #include "SmartLoader.h" |
23 | 23 |
24 #include "../Messages/MessageForwarder.h" | |
25 #include "../StoneException.h" | 24 #include "../StoneException.h" |
26 #include "Core/Images/Image.h" | 25 #include "Core/Images/Image.h" |
27 #include "Core/Logging.h" | 26 #include "Core/Logging.h" |
28 #include "Layers/DicomSeriesVolumeSlicer.h" | 27 #include "Layers/DicomSeriesVolumeSlicer.h" |
29 #include "Layers/FrameRenderer.h" | 28 #include "Layers/FrameRenderer.h" |
66 boost::shared_ptr<Orthanc::ImageAccessor> image_; | 65 boost::shared_ptr<Orthanc::ImageAccessor> image_; |
67 SliceImageQuality effectiveQuality_; | 66 SliceImageQuality effectiveQuality_; |
68 CachedSliceStatus status_; | 67 CachedSliceStatus status_; |
69 | 68 |
70 public: | 69 public: |
71 CachedSlice(OrthancStone::MessageBroker& broker) : | |
72 IVolumeSlicer(broker) | |
73 { | |
74 } | |
75 | |
76 virtual ~CachedSlice() | 70 virtual ~CachedSlice() |
77 { | 71 { |
78 } | 72 } |
79 | 73 |
80 virtual bool GetExtent(std::vector<OrthancStone::Vector>& points, | 74 virtual bool GetExtent(std::vector<OrthancStone::Vector>& points, |
104 } | 98 } |
105 } | 99 } |
106 | 100 |
107 CachedSlice* Clone() const | 101 CachedSlice* Clone() const |
108 { | 102 { |
109 CachedSlice* output = new CachedSlice(GetBroker()); | 103 CachedSlice* output = new CachedSlice; |
110 output->sliceIndex_ = sliceIndex_; | 104 output->sliceIndex_ = sliceIndex_; |
111 output->slice_.reset(slice_->Clone()); | 105 output->slice_.reset(slice_->Clone()); |
112 output->image_ = image_; | 106 output->image_ = image_; |
113 output->effectiveQuality_ = effectiveQuality_; | 107 output->effectiveQuality_ = effectiveQuality_; |
114 output->status_ = status_; | 108 output->status_ = status_; |
117 } | 111 } |
118 | 112 |
119 }; | 113 }; |
120 | 114 |
121 | 115 |
122 SmartLoader::SmartLoader(OrthancStone::MessageBroker& broker, | 116 SmartLoader::SmartLoader(OrthancApiClient& orthancApiClient) : |
123 OrthancApiClient& orthancApiClient) : | |
124 IObservable(broker), | |
125 imageQuality_(SliceImageQuality_FullPam), | 117 imageQuality_(SliceImageQuality_FullPam), |
126 orthancApiClient_(orthancApiClient) | 118 orthancApiClient_(orthancApiClient) |
127 { | 119 { |
128 } | 120 } |
129 | 121 |
148 layerSource.reset(cachedSlices_[sliceKeyId]->Clone()); | 140 layerSource.reset(cachedSlices_[sliceKeyId]->Clone()); |
149 cachedSlice = dynamic_cast<SmartLoader::CachedSlice*>(layerSource.get()); | 141 cachedSlice = dynamic_cast<SmartLoader::CachedSlice*>(layerSource.get()); |
150 } | 142 } |
151 else | 143 else |
152 { | 144 { |
153 layerSource.reset(new DicomSeriesVolumeSlicer(IObservable::GetBroker(), orthancApiClient_)); | 145 layerSource.reset(new DicomSeriesVolumeSlicer(orthancApiClient_)); |
154 dynamic_cast<DicomSeriesVolumeSlicer*>(layerSource.get())->SetImageQuality(imageQuality_); | 146 dynamic_cast<DicomSeriesVolumeSlicer*>(layerSource.get())->SetImageQuality(imageQuality_); |
155 layerSource->RegisterObserverCallback(new OrthancStone::Callable<SmartLoader, IVolumeSlicer::GeometryReadyMessage>(shared_from_this(), &SmartLoader::OnLayerGeometryReady)); | 147 Register<IVolumeSlicer::GeometryReadyMessage>(*layerSource, &SmartLoader::OnLayerGeometryReady); |
156 layerSource->RegisterObserverCallback(new OrthancStone::Callable<SmartLoader, DicomSeriesVolumeSlicer::FrameReadyMessage>(shared_from_this(), &SmartLoader::OnFrameReady)); | 148 Register<DicomSeriesVolumeSlicer::FrameReadyMessage>(*layerSource, &SmartLoader::OnFrameReady); |
157 layerSource->RegisterObserverCallback(new OrthancStone::Callable<SmartLoader, IVolumeSlicer::LayerReadyMessage>(shared_from_this(), &SmartLoader::OnLayerReady)); | 149 Register<IVolumeSlicer::LayerReadyMessage>(*layerSource, &SmartLoader::OnLayerReady); |
158 dynamic_cast<DicomSeriesVolumeSlicer*>(layerSource.get())->LoadFrame(instanceId, frame); | 150 dynamic_cast<DicomSeriesVolumeSlicer*>(layerSource.get())->LoadFrame(instanceId, frame); |
159 } | 151 } |
160 | 152 |
161 // make sure that the widget registers the events before we trigger them | 153 // make sure that the widget registers the events before we trigger them |
162 if (sliceViewer.GetLayerCount() == layerIndex) | 154 if (sliceViewer.GetLayerCount() == layerIndex) |
187 // TODO: check if it is already in the cache | 179 // TODO: check if it is already in the cache |
188 | 180 |
189 | 181 |
190 | 182 |
191 // create the slice in the cache with "empty" data | 183 // create the slice in the cache with "empty" data |
192 boost::shared_ptr<CachedSlice> cachedSlice(new CachedSlice(IObservable::GetBroker())); | 184 boost::shared_ptr<CachedSlice> cachedSlice(new CachedSlice); |
193 cachedSlice->slice_.reset(new Slice(instanceId, frame)); | 185 cachedSlice->slice_.reset(new Slice(instanceId, frame)); |
194 cachedSlice->status_ = CachedSliceStatus_ScheduledToLoad; | 186 cachedSlice->status_ = CachedSliceStatus_ScheduledToLoad; |
195 std::string sliceKeyId = instanceId + ":" + boost::lexical_cast<std::string>(frame); | 187 std::string sliceKeyId = instanceId + ":" + boost::lexical_cast<std::string>(frame); |
196 | 188 |
197 LOG(WARNING) << "Will preload: " << sliceKeyId; | 189 LOG(WARNING) << "Will preload: " << sliceKeyId; |
198 | 190 |
199 cachedSlices_[sliceKeyId] = boost::shared_ptr<CachedSlice>(cachedSlice); | 191 cachedSlices_[sliceKeyId] = boost::shared_ptr<CachedSlice>(cachedSlice); |
200 | 192 |
201 std::auto_ptr<IVolumeSlicer> layerSource(new DicomSeriesVolumeSlicer(IObservable::GetBroker(), orthancApiClient_)); | 193 std::auto_ptr<IVolumeSlicer> layerSource(new DicomSeriesVolumeSlicer(orthancApiClient_)); |
202 | 194 |
203 dynamic_cast<DicomSeriesVolumeSlicer*>(layerSource.get())->SetImageQuality(imageQuality_); | 195 dynamic_cast<DicomSeriesVolumeSlicer*>(layerSource.get())->SetImageQuality(imageQuality_); |
204 layerSource->RegisterObserverCallback(new OrthancStone::Callable<SmartLoader, IVolumeSlicer::GeometryReadyMessage>(shared_from_this(), &SmartLoader::OnLayerGeometryReady)); | 196 Register<IVolumeSlicer::GeometryReadyMessage>(*layerSource, &SmartLoader::OnLayerGeometryReady); |
205 layerSource->RegisterObserverCallback(new OrthancStone::Callable<SmartLoader, DicomSeriesVolumeSlicer::FrameReadyMessage>(shared_from_this(), &SmartLoader::OnFrameReady)); | 197 Register<DicomSeriesVolumeSlicer::FrameReadyMessage>(*layerSource, &SmartLoader::OnFrameReady); |
206 layerSource->RegisterObserverCallback(new OrthancStone::Callable<SmartLoader, IVolumeSlicer::LayerReadyMessage>(shared_from_this(), &SmartLoader::OnLayerReady)); | 198 Register<IVolumeSlicer::LayerReadyMessage>(*layerSource, &SmartLoader::OnLayerReady); |
207 dynamic_cast<DicomSeriesVolumeSlicer*>(layerSource.get())->LoadFrame(instanceId, frame); | 199 dynamic_cast<DicomSeriesVolumeSlicer*>(layerSource.get())->LoadFrame(instanceId, frame); |
208 | 200 |
209 // keep a ref to the VolumeSlicer until the slice is fully loaded and saved to cache | 201 // 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()); | 202 preloadingInstances_[sliceKeyId] = boost::shared_ptr<IVolumeSlicer>(layerSource.release()); |
211 } | 203 } |
232 std::string sliceKeyId = (slice.GetOrthancInstanceId() + ":" + | 224 std::string sliceKeyId = (slice.GetOrthancInstanceId() + ":" + |
233 boost::lexical_cast<std::string>(slice.GetFrame())); | 225 boost::lexical_cast<std::string>(slice.GetFrame())); |
234 | 226 |
235 LOG(WARNING) << "Geometry ready: " << sliceKeyId; | 227 LOG(WARNING) << "Geometry ready: " << sliceKeyId; |
236 | 228 |
237 boost::shared_ptr<CachedSlice> cachedSlice(new CachedSlice(IObservable::GetBroker())); | 229 boost::shared_ptr<CachedSlice> cachedSlice(new CachedSlice); |
238 cachedSlice->slice_.reset(slice.Clone()); | 230 cachedSlice->slice_.reset(slice.Clone()); |
239 cachedSlice->effectiveQuality_ = source.GetImageQuality(); | 231 cachedSlice->effectiveQuality_ = source.GetImageQuality(); |
240 cachedSlice->status_ = CachedSliceStatus_GeometryLoaded; | 232 cachedSlice->status_ = CachedSliceStatus_GeometryLoaded; |
241 | 233 |
242 cachedSlices_[sliceKeyId] = boost::shared_ptr<CachedSlice>(cachedSlice); | 234 cachedSlices_[sliceKeyId] = boost::shared_ptr<CachedSlice>(cachedSlice); |
253 std::string sliceKeyId = (slice.GetOrthancInstanceId() + ":" + | 245 std::string sliceKeyId = (slice.GetOrthancInstanceId() + ":" + |
254 boost::lexical_cast<std::string>(slice.GetFrame())); | 246 boost::lexical_cast<std::string>(slice.GetFrame())); |
255 | 247 |
256 LOG(WARNING) << "Image ready: " << sliceKeyId; | 248 LOG(WARNING) << "Image ready: " << sliceKeyId; |
257 | 249 |
258 boost::shared_ptr<CachedSlice> cachedSlice(new CachedSlice(IObservable::GetBroker())); | 250 boost::shared_ptr<CachedSlice> cachedSlice(new CachedSlice); |
259 cachedSlice->image_.reset(Orthanc::Image::Clone(message.GetFrame())); | 251 cachedSlice->image_.reset(Orthanc::Image::Clone(message.GetFrame())); |
260 cachedSlice->effectiveQuality_ = message.GetImageQuality(); | 252 cachedSlice->effectiveQuality_ = message.GetImageQuality(); |
261 cachedSlice->slice_.reset(message.GetSlice().Clone()); | 253 cachedSlice->slice_.reset(message.GetSlice().Clone()); |
262 cachedSlice->status_ = CachedSliceStatus_ImageLoaded; | 254 cachedSlice->status_ = CachedSliceStatus_ImageLoaded; |
263 | 255 |