Mercurial > hg > orthanc-stone
comparison Framework/dev.h @ 247:3d523c9a8f0d am
trying to use boost::signals2 even more.
author | am@osimis.io |
---|---|
date | Mon, 02 Jul 2018 12:32:02 +0200 |
parents | c4ea26865975 |
children |
comparison
equal
deleted
inserted
replaced
246:5470b15f7cf2 | 247:3d523c9a8f0d |
---|---|
41 namespace OrthancStone | 41 namespace OrthancStone |
42 { | 42 { |
43 // TODO: Handle errors while loading | 43 // TODO: Handle errors while loading |
44 class OrthancVolumeImage : | 44 class OrthancVolumeImage : |
45 public SlicedVolumeBase, | 45 public SlicedVolumeBase, |
46 private OrthancSlicesLoader::ICallback | 46 public OrthancSlicesLoader::IObserver |
47 { | 47 { |
48 private: | 48 private: |
49 OrthancSlicesLoader loader_; | 49 boost::shared_ptr<OrthancSlicesLoader> loader_; |
50 std::auto_ptr<ImageBuffer3D> image_; | 50 std::auto_ptr<ImageBuffer3D> image_; |
51 std::auto_ptr<DownloadStack> downloadStack_; | 51 std::auto_ptr<DownloadStack> downloadStack_; |
52 bool computeRange_; | 52 bool computeRange_; |
53 size_t pendingSlices_; | 53 size_t pendingSlices_; |
54 | 54 |
57 assert(downloadStack_.get() != NULL); | 57 assert(downloadStack_.get() != NULL); |
58 | 58 |
59 unsigned int slice; | 59 unsigned int slice; |
60 if (downloadStack_->Pop(slice)) | 60 if (downloadStack_->Pop(slice)) |
61 { | 61 { |
62 loader_.ScheduleLoadSliceImage(slice, SliceImageQuality_Jpeg90); | 62 loader_->ScheduleLoadSliceImage(loader_, slice, SliceImageQuality_Jpeg90); |
63 } | 63 } |
64 } | 64 } |
65 | 65 |
66 | 66 |
67 static bool IsCompatible(const Slice& a, | 67 static bool IsCompatible(const Slice& a, |
215 } | 215 } |
216 | 216 |
217 public: | 217 public: |
218 OrthancVolumeImage(IWebService& orthanc, | 218 OrthancVolumeImage(IWebService& orthanc, |
219 bool computeRange) : | 219 bool computeRange) : |
220 loader_(*this, orthanc), | |
221 computeRange_(computeRange), | 220 computeRange_(computeRange), |
222 pendingSlices_(0) | 221 pendingSlices_(0) |
223 { | 222 { |
223 loader_.reset(new OrthancSlicesLoader(boost::shared_ptr<OrthancSlicesLoader::IObserver>(this), orthanc)); | |
224 } | 224 } |
225 | 225 |
226 void ScheduleLoadSeries(const std::string& seriesId) | 226 void ScheduleLoadSeries(const std::string& seriesId) |
227 { | 227 { |
228 loader_.ScheduleLoadSeries(seriesId); | 228 loader_->ScheduleLoadSeries(loader_, seriesId); |
229 } | 229 } |
230 | 230 |
231 void ScheduleLoadInstance(const std::string& instanceId) | 231 void ScheduleLoadInstance(const std::string& instanceId) |
232 { | 232 { |
233 loader_.ScheduleLoadInstance(instanceId); | 233 loader_->ScheduleLoadInstance(loader_, instanceId); |
234 } | 234 } |
235 | 235 |
236 void ScheduleLoadFrame(const std::string& instanceId, | 236 void ScheduleLoadFrame(const std::string& instanceId, |
237 unsigned int frame) | 237 unsigned int frame) |
238 { | 238 { |
239 loader_.ScheduleLoadFrame(instanceId, frame); | 239 loader_->ScheduleLoadFrame(loader_, instanceId, frame); |
240 } | 240 } |
241 | 241 |
242 virtual size_t GetSliceCount() const | 242 virtual size_t GetSliceCount() const |
243 { | 243 { |
244 return loader_.GetSliceCount(); | 244 return loader_->GetSliceCount(); |
245 } | 245 } |
246 | 246 |
247 virtual const Slice& GetSlice(size_t index) const | 247 virtual const Slice& GetSlice(size_t index) const |
248 { | 248 { |
249 return loader_.GetSlice(index); | 249 return loader_->GetSlice(index); |
250 } | 250 } |
251 | 251 |
252 ImageBuffer3D& GetImage() const | 252 ImageBuffer3D& GetImage() const |
253 { | 253 { |
254 if (image_.get() == NULL) | 254 if (image_.get() == NULL) |
627 // TODO Transfer ownership if non-axial, to avoid memcpy | 627 // TODO Transfer ownership if non-axial, to avoid memcpy |
628 frame.reset(Orthanc::Image::Clone(reader.GetAccessor())); | 628 frame.reset(Orthanc::Image::Clone(reader.GetAccessor())); |
629 } | 629 } |
630 | 630 |
631 std::auto_ptr<Slice> slice(geometry.GetSlice(closest)); | 631 std::auto_ptr<Slice> slice(geometry.GetSlice(closest)); |
632 LayerSourceBase::NotifyLayerReady( | 632 LayerSourceBase::NotifyLayerReady(boost::shared_ptr<ILayerRenderer>( |
633 FrameRenderer::CreateRenderer(frame.release(), *slice, isFullQuality), | 633 FrameRenderer::CreateRenderer(frame.release(), *slice, isFullQuality)), |
634 //new SliceOutlineRenderer(slice), | 634 //new SliceOutlineRenderer(slice), |
635 slice->GetGeometry(), false); | 635 slice->GetGeometry(), false); |
636 return; | 636 return; |
637 } | 637 } |
638 } | 638 } |
853 if (GeometryToolbox::ClipLineToRectangle(x1, y1, x2, y2, | 853 if (GeometryToolbox::ClipLineToRectangle(x1, y1, x2, y2, |
854 x1, y1, x2, y2, | 854 x1, y1, x2, y2, |
855 extent.GetX1(), extent.GetY1(), | 855 extent.GetX1(), extent.GetY1(), |
856 extent.GetX2(), extent.GetY2())) | 856 extent.GetX2(), extent.GetY2())) |
857 { | 857 { |
858 NotifyLayerReady(new LineLayerRenderer(x1, y1, x2, y2, slice), reference.GetGeometry(), false); | 858 NotifyLayerReady(boost::shared_ptr<ILayerRenderer>(new LineLayerRenderer(x1, y1, x2, y2, slice)), reference.GetGeometry(), false); |
859 } | 859 } |
860 else | 860 else |
861 { | 861 { |
862 // Parallel slices | 862 // Parallel slices |
863 NotifyLayerReady(NULL, reference.GetGeometry(), false); | 863 NotifyLayerReady(NULL, reference.GetGeometry(), false); |