From 78ff0e696e2f67e4f04ef2da49a5dcea5ff8c15d Mon Sep 17 00:00:00 2001
From: Malte Kuhlmann <malte-kuhlmann@web.de>
Date: Wed, 16 Nov 2016 22:50:13 +0100
Subject: [PATCH] fixed the frame number problems for functional images.

---
 vviewer/Image4D.py |  5 +++--
 vviewer/vviewer.py | 38 +++++++++++++++++++-------------------
 2 files changed, 22 insertions(+), 21 deletions(-)

diff --git a/vviewer/Image4D.py b/vviewer/Image4D.py
index aba596a..62fb327 100644
--- a/vviewer/Image4D.py
+++ b/vviewer/Image4D.py
@@ -75,7 +75,8 @@ class Image4D(Image):
         self.image = img
 
         self.image_res = img.get_data()[:,:,:,self.frame]
-        self.time_dim = img.get_data().shape[3]-1 # set beginning from zero.
+        self.time_dim = img.get_data().shape[3] # set beginning from zero.
+        print(self.time_dim)
 
         self.extremum[0] = img.get_data().min()
         self.extremum[1] = img.get_data().max()
@@ -107,10 +108,10 @@ class Image4D(Image):
         return self.image_res.shape[0:3]
 
     def getTimeDim(self):
-        """ Return index of time beginning from zero. """
         return self.time_dim
 
     def getFrame(self):
+        """ Return index of time beginning from zero. """
         return self.frame
 
     def setFrame(self, new_frame=0):
diff --git a/vviewer/vviewer.py b/vviewer/vviewer.py
index f72b4c5..ac357cd 100755
--- a/vviewer/vviewer.py
+++ b/vviewer/vviewer.py
@@ -102,8 +102,8 @@ class vviewer(QtGui.QMainWindow):
         # within the image.
         self.img_dims = [0, 0, 0]
         # 'time_dim' is the number of frames of the time series data.
-        # For images this is 0.
-        self.time_dim = 0
+        # For images this is 1.
+        self.time_dim = 1
         # 'cursor_coord' is a list for the current cursor position.
         self.cursor_coord = [0, 0, 0]
         # 'affine' contains a numpy array for keeping track of what
@@ -833,7 +833,7 @@ class vviewer(QtGui.QMainWindow):
             if img.type_d() == "4D":
                 if img.getTimeDim() > self.time_dim:
                     self.time_dim = img.getTimeDim()
-                    self.frame_sld.setMaximum(self.time_dim)
+                    self.frame_sld.setMaximum(self.time_dim-1)
 
             # Images are always inserted at the beginning.
             self.images.insert(0, img)
@@ -942,7 +942,7 @@ class vviewer(QtGui.QMainWindow):
         if img.type_d() == "4D":
             if img.getTimeDim() > self.time_dim:
                 self.time_dim = img.getTimeDim()
-                self.frame_sld.setMaximum(self.time_dim)
+                self.frame_sld.setMaximum(self.time_dim-1)
             if img.frame_time == 0:
                 QtGui.QMessageBox.warning(
                     self, "Warning",
@@ -1016,7 +1016,7 @@ class vviewer(QtGui.QMainWindow):
         if img.type_d() == "4D":
             if img.getTimeDim() > self.time_dim:
                 self.time_dim = img.getTimeDim()
-                self.frame_sld.setMaximum(self.time_dim)
+                self.frame_sld.setMaximum(self.time_dim-1)
             if img.frame_time == 0:
                 QtGui.QMessageBox.warning(
                     self, "Warning",
@@ -2385,8 +2385,8 @@ class vviewer(QtGui.QMainWindow):
             self.enableFuncView()
         else:
             self.disableFuncView()
-            self.frame = 0 #1
-            self.time_dim = 0 #1
+            self.frame = 0
+            self.time_dim = 1
             self.setFrameToBox()
             self.setFrameToSlider()
 
@@ -2420,7 +2420,7 @@ class vviewer(QtGui.QMainWindow):
         """
         Goes to the last frame.
         """
-        self.frame = self.time_dim
+        self.frame = self.time_dim - 1
         self.setSliceStateOn()
         self.setFrame()
         self.setFrameToBox()
@@ -2431,8 +2431,8 @@ class vviewer(QtGui.QMainWindow):
         Goes to the next frame.
         """
         self.frame = self.frame+1
-        if self.frame > self.time_dim:
-            self.frame = self.time_dim
+        if self.frame >= self.time_dim:
+            self.frame = self.time_dim - 1
         else:
             self.setSliceStateOn()
             self.setFrame()
@@ -2444,8 +2444,8 @@ class vviewer(QtGui.QMainWindow):
         Goes to the previous frame.
         """
         self.frame = self.frame-1
-        if self.frame < 1:
-            self.frame = 1
+        if self.frame < 0:
+            self.frame = 0
         else:
             self.setSliceStateOn()
             self.setFrame()
@@ -2519,8 +2519,8 @@ class vviewer(QtGui.QMainWindow):
         """
         if self.playstate == True:
             try:
-                if self.frame == self.time_dim:
-                    self.frame = 0
+                if self.frame == self.time_dim-1:
+                    self.frame = -1
                 self.nextFrame()
             finally:
                 self.timer.singleShot(self.playrate, self.playingFunc)
@@ -2555,13 +2555,13 @@ class vviewer(QtGui.QMainWindow):
         # Index for histogram update.
         index = self.imagelist.currentRow()
         # Move the frame number within the possible range.
-        if self.frame > self.time_dim:
-            self.frame = self.time_dim
-        if self.frame < 1:
-            self.frame = 0 #1
+        if self.frame >= self.time_dim:
+            self.frame = self.time_dim - 1
+        if self.frame < 0:
+            self.frame = 0
         for i in range(len(self.images)):
             if self.images[i].type_d() == "4D":
-                self.images[i].setFrame(self.frame-1) # only set the variable
+                self.images[i].setFrame(self.frame) # only set the variable
                 if self.playstate or self.slicestate:
                     # resample only slices
                     self.images[i].resample_slice(
-- 
GitLab