Mercurial > hg > orthanc-stone
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 } |