diff --git a/fsl/data/model.py b/fsl/data/model.py index 542ed38d65a4ad900823f198ca304d1ae417b056..1598f73db4169aaaf6734f7cac3bb256af15c72c 100644 --- a/fsl/data/model.py +++ b/fsl/data/model.py @@ -54,7 +54,6 @@ def loadVTKPolydataFile(infile): indexOffset += polygonLengths[i] - return vertices, polygonLengths, indices @@ -84,6 +83,9 @@ class Model(object): self.vertices = np.array(data, dtype=np.float32) self.indices = indices + self.__loBounds = self.vertices.min(axis=0) + self.__hiBounds = self.vertices.max(axis=0) + log.memory('{}.init ({})'.format(type(self).__name__, id(self))) @@ -101,5 +103,4 @@ class Model(object): def getBounds(self): - return (self.vertices.min(axis=0), - self.vertices.max(axis=0)) + return (self.__loBounds, self.__hiBounds) diff --git a/fsl/fslview/displaycontext/modelopts.py b/fsl/fslview/displaycontext/modelopts.py index b8089fb202db66933f65a3d96eb05d60e442feaf..78fd622b49f97c9502ba1c9523a29e24bd4d4ef9 100644 --- a/fsl/fslview/displaycontext/modelopts.py +++ b/fsl/fslview/displaycontext/modelopts.py @@ -95,10 +95,8 @@ class ModelOpts(fsldisplay.DisplayOpts): def getCoordSpaceTransform(self): - if self.refImage == 'none': - return None - - if self.coordSpace == self.transform: + if self.refImage == 'none' or \ + self.coordSpace == self.transform: return None opts = self.displayCtx.getOpts(self.refImage) @@ -147,7 +145,7 @@ class ModelOpts(fsldisplay.DisplayOpts): if self.refImage != 'none': refOpts = self.displayCtx.getOpts(self.refImage) - newLoc = refOpts.transformDisplayLocation(propName, oldLoc) + newLoc = refOpts.transformDisplayLocation(oldLoc) return newLoc @@ -167,7 +165,7 @@ class ModelOpts(fsldisplay.DisplayOpts): self.__lastPropChanged = 'refImage' if self.__oldRefImage != 'none' and \ - self.__oldRefImage in self._overlayList: + self.__oldRefImage in self.overlayList: opts = self.displayCtx.getOpts(self.__oldRefImage) self.unbindProps('transform', opts) @@ -192,7 +190,9 @@ class ModelOpts(fsldisplay.DisplayOpts): xform = self.getCoordSpaceTransform() if xform is not None: - lohi = transform.transform([lo, hi], xform) + + lohi = transform.transform([lo, hi], xform) + lohi.sort(axis=0) lo, hi = lohi[0, :], lohi[1, :] self.bounds = [lo[0], hi[0], lo[1], hi[1], lo[2], hi[2]] diff --git a/fsl/fslview/displaycontext/volumeopts.py b/fsl/fslview/displaycontext/volumeopts.py index bed9dcf7722d00b937f07511e25a40d78460102a..ce63af66b6a7661c4c800a4c58bf61ecb73a3267 100644 --- a/fsl/fslview/displaycontext/volumeopts.py +++ b/fsl/fslview/displaycontext/volumeopts.py @@ -184,6 +184,9 @@ class ImageOpts(fsldisplay.DisplayOpts): def transformDisplayLocation(self, oldLoc): lastVal = self.getLastValue('transform') + + if lastVal is None: + lastVal = self.transform # Calculate the image world location using the # old display<-> world transform, then transform diff --git a/fsl/fslview/gl/glmodel.py b/fsl/fslview/gl/glmodel.py index 187667583afecec287a9e8e759196457ea57d382..75b9be84225ad1a33528c79840f9c3dadc6e1dae 100644 --- a/fsl/fslview/gl/glmodel.py +++ b/fsl/fslview/gl/glmodel.py @@ -229,8 +229,9 @@ class GLModel(globject.GLObject): # the cross-section mask will not be created # correctly. direction = [gl.GL_INCR, gl.GL_DECR] - if np.any(hi < lo): faceOrder = [gl.GL_FRONT, gl.GL_BACK] - else: faceOrder = [gl.GL_BACK, gl.GL_FRONT] + + if np.any(np.array(hi) < 0.0): faceOrder = [gl.GL_FRONT, gl.GL_BACK] + else: faceOrder = [gl.GL_BACK, gl.GL_FRONT] for face, direction in zip(faceOrder, direction):