From 6a287f7bb38651eb67a5c90b40ab66fbe5285dd6 Mon Sep 17 00:00:00 2001
From: Paul McCarthy <pauldmccarthy@gmail.com>
Date: Fri, 19 Jan 2018 18:09:58 +0000
Subject: [PATCH] Added deprecated TriangleMesh class.

---
 fsl/data/mesh.py | 118 +++++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 114 insertions(+), 4 deletions(-)

diff --git a/fsl/data/mesh.py b/fsl/data/mesh.py
index 3017b5db0..454b3fb09 100644
--- a/fsl/data/mesh.py
+++ b/fsl/data/mesh.py
@@ -40,8 +40,7 @@ import fsl.utils.meta      as meta
 import fsl.utils.notifier  as notifier
 import fsl.utils.memoize   as memoize
 import fsl.utils.transform as transform
-
-from . import image as fslimage
+import fsl.data.image      as fslimage
 
 
 log = logging.getLogger(__name__)
@@ -186,6 +185,19 @@ class Mesh(notifier.Notifier, meta.Meta):
         self.__trimesh = collections.OrderedDict()
 
 
+    def __repr__(self):
+        """Returns a string representation of this ``Mesh`` instance. """
+        return '{}({}, {})'.format(type(self).__name__,
+                                   self.name,
+                                   self.dataSource)
+
+
+    def __str__(self):
+        """Returns a string representation of this ``Mesh`` instance.
+        """
+        return self.__repr__()
+
+
     @property
     def name(self):
         """Returns the name of this ``Mesh``. """
@@ -204,7 +216,7 @@ class Mesh(notifier.Notifier, meta.Meta):
         return self.__vertices[self.__selected]
 
 
-    @property.setter
+    @vertices.setter
     def vertices(self, key):
         """Select the current vertex set - a ``KeyError`` is raised
         if no vertex set with the specified ``key`` has been added.
@@ -215,11 +227,13 @@ class Mesh(notifier.Notifier, meta.Meta):
         self.__vertices[key]
         self.__selected = key
 
+        self.notify(topic='vertices')
+
 
     @property
     def indices(self):
         """The ``(M, 3)`` triangles of this mesh. """
-        return self.__indices[self.__selected]
+        return self.__indices
 
 
     @property
@@ -258,6 +272,14 @@ class Mesh(notifier.Notifier, meta.Meta):
         return vnormals
 
 
+    @deprecation.deprecated(deprecated_in='1.6.0',
+                            removed_in='2.0.0',
+                            details='Use bounds instead')
+    def getBounds(self):
+        """Deprecated - use :meth:`bounds` instead. """
+        return self.bounds
+
+
     @property
     def bounds(self):
         """Returns a tuple of values which define a minimal bounding box that
@@ -595,3 +617,91 @@ def needsFixing(vertices, indices, fnormals, loBounds, hiBounds):
     # If it isn't, we need to flip the
     # triangle winding order.
     return np.dot(n, transform.normalise(camera - vert)) < 0
+
+
+class TriangleMesh(Mesh):
+    """Deprecated - use :class:`fsl.data.mesh.Mesh`, or one 'of its sub-classes
+    instead.
+    """
+
+
+    @deprecation.deprecated(deprecated_in='1.6.0',
+                            removed_in='2.0.0',
+                            details='Use fsl.data.mesh.Mesh, or one '
+                                    'of its sub-classes instead')
+    def __init__(self, data, indices=None, fixWinding=False):
+
+        import fsl.data.vtk as fslvtk
+
+        if isinstance(data, six.string_types):
+            name       = op.basename(data)
+            dataSource = data
+            mesh       = fslvtk.VTKMesh(data, fixWinding=False)
+            vertices   = mesh.vertices
+            indices    = mesh.indices
+
+        else:
+            name       = 'TriangleMesh'
+            dataSource = None
+            vertices   = data
+
+        Mesh.__init__(self, indices, name=name, dataSource=dataSource)
+        self.addVertices(vertices, 'default', fixWinding=fixWinding)
+
+
+    @deprecation.deprecated(deprecated_in='1.6.0',
+                            removed_in='2.0.0',
+                            details='Use the Mesh class instead')
+    def loadVertexData(self, dataSource, vertexData=None):
+
+        nvertices = self.vertices.shape[0]
+
+        # Currently only white-space delimited
+        # text files are supported
+        if vertexData is None:
+            vertexData = np.loadtxt(dataSource)
+            vertexData.reshape(nvertices, -1)
+
+        if vertexData.shape[0] != nvertices:
+            raise ValueError('Incompatible size: {}'.format(dataSource))
+
+        self.addVertexData(dataSource, vertexData)
+
+        return vertexData
+
+
+    @deprecation.deprecated(deprecated_in='1.6.0',
+                            removed_in='2.0.0',
+                            details='Use the Mesh class instead')
+    def getVertexData(self, dataSource):
+        try:
+            return Mesh.getVertexData(self, dataSource)
+        except KeyError:
+            return self.loadVertexData(dataSource)
+
+
+@deprecation.deprecated(deprecated_in='1.6.0',
+                        removed_in='2.0.0',
+                        details='Use fsl.data.vtk.loadVTKPolydataFile instead')
+def loadVTKPolydataFile(*args, **kwargs):
+    """Deprecated - use :func:`fsl.data.vtk.loadVTKPolydataFile` instead. """
+    import fsl.data.vtk as fslvtk
+    return fslvtk.loadVTKPolydataFile(*args, **kwargs)
+
+
+@deprecation.deprecated(deprecated_in='1.6.0',
+                        removed_in='2.0.0',
+                        details='Use fsl.data.vtk.getFIRSTPrefix instead')
+def getFIRSTPrefix(*args, **kwargs):
+    """Deprecated - use :func:`fsl.data.vtk.getFIRSTPrefix` instead. """
+    import fsl.data.vtk as fslvtk
+    return fslvtk.getFIRSTPrefix(*args, **kwargs)
+
+
+@deprecation.deprecated(deprecated_in='1.6.0',
+                        removed_in='2.0.0',
+                        details='Use fsl.data.vtk.findReferenceImage instead')
+def findReferenceImage(*args, **kwargs):
+    """Deprecated - use :func:`fsl.data.vtk.findReferenceImage` instead. """
+    import fsl.data.vtk as fslvtk
+    return fslvtk.findReferenceImage(*args, **kwargs)
-- 
GitLab