1818
1919"""
2020import xml .etree .ElementTree as et
21- from ..caret import CaretMetaData
22- from .. import xmlutils as xml
21+ from urllib .parse import urlparse
22+
23+ import nibabel as nb
24+ from nibabel .caret import CaretMetaData
25+ from nibabel import xmlutils as xml
26+ from nibabel import pointset as ps
2327
2428
2529class CaretSpecDataFile (xml .XmlSerializable ):
@@ -55,6 +59,9 @@ def __init__(self, structure=None, data_file_type=None, selected=None, uri=None)
5559 self .selected = selected
5660 self .uri = uri
5761
62+ if data_file_type == 'SURFACE' :
63+ self .__class__ = SurfaceDataFile
64+
5865 def _to_xml_element (self ):
5966 data_file = xml .Element ('DataFile' )
6067 data_file .attrib ['Structure' ] = str (self .structure )
@@ -67,6 +74,35 @@ def __repr__(self):
6774 return self .to_xml ().decode ()
6875
6976
77+ class SurfaceDataFile (ps .TriangularMesh , CaretSpecDataFile ):
78+ _gifti = None
79+ _coords = None
80+ _triangles = None
81+
82+ def _get_gifti (self ):
83+ if self ._gifti is None :
84+ parts = urlparse (self .uri )
85+ if parts .scheme == "file" :
86+ self ._gifti = nb .load (parts .path )
87+ elif parts .scheme == "" :
88+ self ._gifti = nb .load (self .uri )
89+ else :
90+ self ._gifti = nb .GiftiImage .from_url (self .uri )
91+ return self ._gifti
92+
93+ def get_triangles (self , name = None ):
94+ if self ._triangles is None :
95+ gifti = self ._get_gifti ()
96+ self ._triangles = gifti .agg_data ('triangle' )
97+ return self ._triangles
98+
99+ def get_coords (self , name = None ):
100+ if self ._coords is None :
101+ gifti = self ._get_gifti ()
102+ self ._coords = gifti .agg_data ('pointset' )
103+ return self ._coords
104+
105+
70106class CaretSpecFile (xml .XmlSerializable ):
71107 """ Class for CaretSpecFile XML documents
72108
0 commit comments