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);