diff Framework/dev.h @ 136:a06ad9d7406e wasm

ISlicedVolume::NotifyVolumeReady
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 16 Jan 2018 12:49:54 +0100
parents e2fe9352f240
children 77c4fef7f4a5
line wrap: on
line diff
--- a/Framework/dev.h	Tue Jan 02 09:56:08 2018 +0100
+++ b/Framework/dev.h	Tue Jan 16 12:49:54 2018 +0100
@@ -39,6 +39,7 @@
 
 namespace OrthancStone
 {
+  // TODO: Handle errors while loading
   class OrthancVolumeImage : 
     public SlicedVolumeBase,
     private OrthancSlicesLoader::ICallback
@@ -48,6 +49,7 @@
     std::auto_ptr<ImageBuffer3D>  image_;
     std::auto_ptr<DownloadStack>  downloadStack_;
     bool                          computeRange_;
+    size_t                        pendingSlices_;
     
     void ScheduleSliceDownload()
     {
@@ -158,6 +160,7 @@
       image_->Clear();
       
       downloadStack_.reset(new DownloadStack(loader.GetSliceCount()));
+      pendingSlices_ = loader.GetSliceCount();
 
       for (unsigned int i = 0; i < 4; i++)  // Limit to 4 simultaneous downloads
       {
@@ -186,7 +189,17 @@
         Orthanc::ImageProcessing::Copy(writer.GetAccessor(), *image);
       }
 
-      SlicedVolumeBase::NotifySliceChange(sliceIndex, slice);
+      SlicedVolumeBase::NotifySliceChange(sliceIndex, slice);     
+
+      if (pendingSlices_ == 1)
+      {
+        SlicedVolumeBase::NotifyVolumeReady();
+        pendingSlices_ = 0;
+      }
+      else if (pendingSlices_ > 1)
+      {
+        pendingSlices_ -= 1;
+      }
 
       ScheduleSliceDownload();
     }
@@ -204,7 +217,8 @@
     OrthancVolumeImage(IWebService& orthanc,
                        bool computeRange) : 
       loader_(*this, orthanc),
-      computeRange_(computeRange)
+      computeRange_(computeRange),
+      pendingSlices_(0)
     {
     }