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