Mercurial > hg > orthanc-stone
comparison Framework/Deprecated/SmartLoader.cpp @ 1059:e713f1a99861 broker
replacing MessageBroker by weak_ptr
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Fri, 11 Oct 2019 17:08:34 +0200 |
parents | be9c1530d40a |
children | b537002f83a9 |
comparison
equal
deleted
inserted
replaced
1058:a36c47487a70 | 1059:e713f1a99861 |
---|---|
120 | 120 |
121 | 121 |
122 SmartLoader::SmartLoader(OrthancStone::MessageBroker& broker, | 122 SmartLoader::SmartLoader(OrthancStone::MessageBroker& broker, |
123 OrthancApiClient& orthancApiClient) : | 123 OrthancApiClient& orthancApiClient) : |
124 IObservable(broker), | 124 IObservable(broker), |
125 IObserver(broker), | |
126 imageQuality_(SliceImageQuality_FullPam), | 125 imageQuality_(SliceImageQuality_FullPam), |
127 orthancApiClient_(orthancApiClient) | 126 orthancApiClient_(orthancApiClient) |
128 { | 127 { |
129 } | 128 } |
130 | 129 |
149 layerSource.reset(cachedSlices_[sliceKeyId]->Clone()); | 148 layerSource.reset(cachedSlices_[sliceKeyId]->Clone()); |
150 cachedSlice = dynamic_cast<SmartLoader::CachedSlice*>(layerSource.get()); | 149 cachedSlice = dynamic_cast<SmartLoader::CachedSlice*>(layerSource.get()); |
151 } | 150 } |
152 else | 151 else |
153 { | 152 { |
154 layerSource.reset(new DicomSeriesVolumeSlicer(IObserver::GetBroker(), orthancApiClient_)); | 153 layerSource.reset(new DicomSeriesVolumeSlicer(IObservable::GetBroker(), orthancApiClient_)); |
155 dynamic_cast<DicomSeriesVolumeSlicer*>(layerSource.get())->SetImageQuality(imageQuality_); | 154 dynamic_cast<DicomSeriesVolumeSlicer*>(layerSource.get())->SetImageQuality(imageQuality_); |
156 layerSource->RegisterObserverCallback(new OrthancStone::Callable<SmartLoader, IVolumeSlicer::GeometryReadyMessage>(*this, &SmartLoader::OnLayerGeometryReady)); | 155 layerSource->RegisterObserverCallback(new OrthancStone::Callable<SmartLoader, IVolumeSlicer::GeometryReadyMessage>(shared_from_this(), &SmartLoader::OnLayerGeometryReady)); |
157 layerSource->RegisterObserverCallback(new OrthancStone::Callable<SmartLoader, DicomSeriesVolumeSlicer::FrameReadyMessage>(*this, &SmartLoader::OnFrameReady)); | 156 layerSource->RegisterObserverCallback(new OrthancStone::Callable<SmartLoader, DicomSeriesVolumeSlicer::FrameReadyMessage>(shared_from_this(), &SmartLoader::OnFrameReady)); |
158 layerSource->RegisterObserverCallback(new OrthancStone::Callable<SmartLoader, IVolumeSlicer::LayerReadyMessage>(*this, &SmartLoader::OnLayerReady)); | 157 layerSource->RegisterObserverCallback(new OrthancStone::Callable<SmartLoader, IVolumeSlicer::LayerReadyMessage>(shared_from_this(), &SmartLoader::OnLayerReady)); |
159 dynamic_cast<DicomSeriesVolumeSlicer*>(layerSource.get())->LoadFrame(instanceId, frame); | 158 dynamic_cast<DicomSeriesVolumeSlicer*>(layerSource.get())->LoadFrame(instanceId, frame); |
160 } | 159 } |
161 | 160 |
162 // 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 |
163 if (sliceViewer.GetLayerCount() == layerIndex) | 162 if (sliceViewer.GetLayerCount() == layerIndex) |
188 // TODO: check if it is already in the cache | 187 // TODO: check if it is already in the cache |
189 | 188 |
190 | 189 |
191 | 190 |
192 // create the slice in the cache with "empty" data | 191 // create the slice in the cache with "empty" data |
193 boost::shared_ptr<CachedSlice> cachedSlice(new CachedSlice(IObserver::GetBroker())); | 192 boost::shared_ptr<CachedSlice> cachedSlice(new CachedSlice(IObservable::GetBroker())); |
194 cachedSlice->slice_.reset(new Slice(instanceId, frame)); | 193 cachedSlice->slice_.reset(new Slice(instanceId, frame)); |
195 cachedSlice->status_ = CachedSliceStatus_ScheduledToLoad; | 194 cachedSlice->status_ = CachedSliceStatus_ScheduledToLoad; |
196 std::string sliceKeyId = instanceId + ":" + boost::lexical_cast<std::string>(frame); | 195 std::string sliceKeyId = instanceId + ":" + boost::lexical_cast<std::string>(frame); |
197 | 196 |
198 LOG(WARNING) << "Will preload: " << sliceKeyId; | 197 LOG(WARNING) << "Will preload: " << sliceKeyId; |
199 | 198 |
200 cachedSlices_[sliceKeyId] = boost::shared_ptr<CachedSlice>(cachedSlice); | 199 cachedSlices_[sliceKeyId] = boost::shared_ptr<CachedSlice>(cachedSlice); |
201 | 200 |
202 std::auto_ptr<IVolumeSlicer> layerSource(new DicomSeriesVolumeSlicer(IObserver::GetBroker(), orthancApiClient_)); | 201 std::auto_ptr<IVolumeSlicer> layerSource(new DicomSeriesVolumeSlicer(IObservable::GetBroker(), orthancApiClient_)); |
203 | 202 |
204 dynamic_cast<DicomSeriesVolumeSlicer*>(layerSource.get())->SetImageQuality(imageQuality_); | 203 dynamic_cast<DicomSeriesVolumeSlicer*>(layerSource.get())->SetImageQuality(imageQuality_); |
205 layerSource->RegisterObserverCallback(new OrthancStone::Callable<SmartLoader, IVolumeSlicer::GeometryReadyMessage>(*this, &SmartLoader::OnLayerGeometryReady)); | 204 layerSource->RegisterObserverCallback(new OrthancStone::Callable<SmartLoader, IVolumeSlicer::GeometryReadyMessage>(shared_from_this(), &SmartLoader::OnLayerGeometryReady)); |
206 layerSource->RegisterObserverCallback(new OrthancStone::Callable<SmartLoader, DicomSeriesVolumeSlicer::FrameReadyMessage>(*this, &SmartLoader::OnFrameReady)); | 205 layerSource->RegisterObserverCallback(new OrthancStone::Callable<SmartLoader, DicomSeriesVolumeSlicer::FrameReadyMessage>(shared_from_this(), &SmartLoader::OnFrameReady)); |
207 layerSource->RegisterObserverCallback(new OrthancStone::Callable<SmartLoader, IVolumeSlicer::LayerReadyMessage>(*this, &SmartLoader::OnLayerReady)); | 206 layerSource->RegisterObserverCallback(new OrthancStone::Callable<SmartLoader, IVolumeSlicer::LayerReadyMessage>(shared_from_this(), &SmartLoader::OnLayerReady)); |
208 dynamic_cast<DicomSeriesVolumeSlicer*>(layerSource.get())->LoadFrame(instanceId, frame); | 207 dynamic_cast<DicomSeriesVolumeSlicer*>(layerSource.get())->LoadFrame(instanceId, frame); |
209 | 208 |
210 // 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 |
211 preloadingInstances_[sliceKeyId] = boost::shared_ptr<IVolumeSlicer>(layerSource.release()); | 210 preloadingInstances_[sliceKeyId] = boost::shared_ptr<IVolumeSlicer>(layerSource.release()); |
212 } | 211 } |
233 std::string sliceKeyId = (slice.GetOrthancInstanceId() + ":" + | 232 std::string sliceKeyId = (slice.GetOrthancInstanceId() + ":" + |
234 boost::lexical_cast<std::string>(slice.GetFrame())); | 233 boost::lexical_cast<std::string>(slice.GetFrame())); |
235 | 234 |
236 LOG(WARNING) << "Geometry ready: " << sliceKeyId; | 235 LOG(WARNING) << "Geometry ready: " << sliceKeyId; |
237 | 236 |
238 boost::shared_ptr<CachedSlice> cachedSlice(new CachedSlice(IObserver::GetBroker())); | 237 boost::shared_ptr<CachedSlice> cachedSlice(new CachedSlice(IObservable::GetBroker())); |
239 cachedSlice->slice_.reset(slice.Clone()); | 238 cachedSlice->slice_.reset(slice.Clone()); |
240 cachedSlice->effectiveQuality_ = source.GetImageQuality(); | 239 cachedSlice->effectiveQuality_ = source.GetImageQuality(); |
241 cachedSlice->status_ = CachedSliceStatus_GeometryLoaded; | 240 cachedSlice->status_ = CachedSliceStatus_GeometryLoaded; |
242 | 241 |
243 cachedSlices_[sliceKeyId] = boost::shared_ptr<CachedSlice>(cachedSlice); | 242 cachedSlices_[sliceKeyId] = boost::shared_ptr<CachedSlice>(cachedSlice); |
254 std::string sliceKeyId = (slice.GetOrthancInstanceId() + ":" + | 253 std::string sliceKeyId = (slice.GetOrthancInstanceId() + ":" + |
255 boost::lexical_cast<std::string>(slice.GetFrame())); | 254 boost::lexical_cast<std::string>(slice.GetFrame())); |
256 | 255 |
257 LOG(WARNING) << "Image ready: " << sliceKeyId; | 256 LOG(WARNING) << "Image ready: " << sliceKeyId; |
258 | 257 |
259 boost::shared_ptr<CachedSlice> cachedSlice(new CachedSlice(IObserver::GetBroker())); | 258 boost::shared_ptr<CachedSlice> cachedSlice(new CachedSlice(IObservable::GetBroker())); |
260 cachedSlice->image_.reset(Orthanc::Image::Clone(message.GetFrame())); | 259 cachedSlice->image_.reset(Orthanc::Image::Clone(message.GetFrame())); |
261 cachedSlice->effectiveQuality_ = message.GetImageQuality(); | 260 cachedSlice->effectiveQuality_ = message.GetImageQuality(); |
262 cachedSlice->slice_.reset(message.GetSlice().Clone()); | 261 cachedSlice->slice_.reset(message.GetSlice().Clone()); |
263 cachedSlice->status_ = CachedSliceStatus_ImageLoaded; | 262 cachedSlice->status_ = CachedSliceStatus_ImageLoaded; |
264 | 263 |