|
|
function this = gifti(varargin) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
switch nargin |
|
|
|
|
|
case 0 |
|
|
this = giftistruct; |
|
|
this = class(this,'gifti'); |
|
|
|
|
|
case 1 |
|
|
if isa(varargin{1},'gifti') |
|
|
this = varargin{1}; |
|
|
|
|
|
elseif isstruct(varargin{1}) |
|
|
f = {'faces', 'face', 'tri' 'vertices', 'vert', 'pnt', 'cdata', 'indices'}; |
|
|
ff = {'faces', 'faces', 'faces', 'vertices', 'vertices', 'vertices', 'cdata', 'indices'}; |
|
|
[c, ia] = intersect(f,fieldnames(varargin{1})); |
|
|
if ~isempty(c) |
|
|
this = gifti; |
|
|
for i=1:length(c) |
|
|
this = subsasgn(this,... |
|
|
struct('type','.','subs',ff{ia(i)}),... |
|
|
varargin{1}.(c{i})); |
|
|
end |
|
|
elseif isempty(setxor(fieldnames(varargin{1}),... |
|
|
{'metadata','label','data'})) |
|
|
this = class(varargin{1},'gifti'); |
|
|
else |
|
|
error('[GIFTI] Invalid structure.'); |
|
|
end |
|
|
|
|
|
elseif ishandle(varargin{1}) |
|
|
this = struct('vertices',get(varargin{1},'Vertices'), ... |
|
|
'faces', get(varargin{1},'Faces')); |
|
|
if ~isempty(get(varargin{1},'FaceVertexCData')); |
|
|
this.cdata = get(varargin{1},'FaceVertexCData'); |
|
|
end |
|
|
this = gifti(this); |
|
|
|
|
|
elseif isnumeric(varargin{1}) |
|
|
this = gifti; |
|
|
this = subsasgn(this,... |
|
|
struct('type','.','subs','cdata'),... |
|
|
varargin{1}); |
|
|
|
|
|
elseif ischar(varargin{1}) |
|
|
if size(varargin{1},1)>1 |
|
|
this = gifti(cellstr(varargin{1})); |
|
|
return; |
|
|
end |
|
|
[p,n,e] = fileparts(varargin{1}); |
|
|
if strcmpi(e,'.mat') |
|
|
try |
|
|
this = gifti(load(varargin{1})); |
|
|
catch |
|
|
error('[GIFTI] Loading of file %s failed.', varargin{1}); |
|
|
end |
|
|
elseif strcmpi(e,'.asc') || strcmpi(e,'.srf') |
|
|
this = read_freesurfer_file(varargin{1}); |
|
|
this = gifti(this); |
|
|
else |
|
|
this = read_gifti_file_standalone(varargin{1},giftistruct); |
|
|
this = class(this,'gifti'); |
|
|
end |
|
|
|
|
|
elseif iscellstr(varargin{1}) |
|
|
fnames = varargin{1}; |
|
|
this(numel(fnames)) = giftistruct; |
|
|
this = class(this,'gifti'); |
|
|
for i=1:numel(fnames) |
|
|
this(i) = gifti(fnames{i}); |
|
|
end |
|
|
|
|
|
else |
|
|
error('[GIFTI] Invalid object construction.'); |
|
|
end |
|
|
|
|
|
otherwise |
|
|
error('[GIFTI] Invalid object construction.'); |
|
|
end |
|
|
|
|
|
|
|
|
function s = giftistruct |
|
|
s = struct(... |
|
|
'metadata', ... |
|
|
struct(... |
|
|
'name', {}, ... |
|
|
'value', {} ... |
|
|
), ... |
|
|
'label', ... |
|
|
struct(... |
|
|
'name', {}, ... |
|
|
'index', {} ... |
|
|
), ... |
|
|
'data', ... |
|
|
struct(... |
|
|
'attributes', {}, ... |
|
|
'metadata', struct('name',{}, 'value',{}), ... |
|
|
'space', {}, ... |
|
|
'data', {} ... |
|
|
) ... |
|
|
); |
|
|
|