| | function this = subsasgn(this, subs, A) |
| | |
| | |
| | |
| |
|
| | |
| | |
| |
|
| | switch subs(1).type |
| | case '.' |
| | if ~ismember(subs(1).subs, ... |
| | {'vertices' 'faces' 'normals' 'cdata','mat','indices','private'}) |
| | error('Reference to non-existent field ''%s''.',subs(1).subs); |
| | end |
| | |
| | [i,n] = isintent(this,subs(1).subs); |
| | if isempty(i) && ~strcmp(subs(1).subs,'private') |
| | n = length(this.data) + 1; |
| | if n==1, this.data = {}; end |
| | |
| | this.data{n}.metadata = struct([]); |
| | this.data{n}.space = []; |
| | this.data{n}.attributes.Dim = size(A); |
| | |
| | this.data{n}.data = []; |
| | switch subs(1).subs |
| | case {'vertices','mat'} |
| | in = 'NIFTI_INTENT_POINTSET'; |
| | dt = 'NIFTI_TYPE_FLOAT32'; |
| | this.data{n}.space.DataSpace = 'NIFTI_XFORM_UNKNOWN'; |
| | this.data{n}.space.TransformedSpace = 'NIFTI_XFORM_UNKNOWN'; |
| | this.data{n}.space.MatrixData = eye(4); |
| | case 'faces' |
| | in = 'NIFTI_INTENT_TRIANGLE'; |
| | dt = 'NIFTI_TYPE_INT32'; |
| | case 'indices' |
| | in = 'NIFTI_INTENT_NODE_INDEX'; |
| | dt = 'NIFTI_TYPE_INT32'; |
| | case 'normals' |
| | in = 'NIFTI_INTENT_VECTOR'; |
| | dt = 'NIFTI_TYPE_FLOAT32'; |
| | case 'cdata' |
| | in = 'NIFTI_INTENT_NONE'; |
| | dt = 'NIFTI_TYPE_FLOAT32'; |
| | otherwise |
| | error('This should not happen.'); |
| | end |
| | this.data{n}.attributes.Intent = in; |
| | this.data{n}.attributes.DataType = dt; |
| | end |
| | |
| | switch subs(1).subs |
| | |
| | |
| | case 'private' |
| | this = builtin('subsasgn',this,subs(2:end),A); |
| | |
| | |
| | |
| | case 'mat' |
| | if length(subs) > 1 |
| | this.data{n}.space(1).MatrixData = builtin('subsasgn',... |
| | this.data{n}.space(1).MatrixData,subs(2:end),A); |
| | else |
| | if ~isequal(size(A),[4 4]) |
| | error('Invalid Coordinate System Transform Matrix.'); |
| | end |
| | this.data{n}.space(1).MatrixData = A; |
| | end |
| | |
| | |
| | |
| | case 'faces' |
| | if length(subs) > 1 |
| | this.data{n}.data = int32(builtin('subsasgn',this.data{n}.data,subs(2:end),A-1)); |
| | else |
| | this.data{n}.data = int32(A - 1); |
| | this.data{n}.attributes.Dim = size(A); |
| | end |
| | |
| | |
| | |
| | case 'indices' |
| | if n ~= 1 |
| | this.data = this.data([n setdiff(1:numel(this.data),n)]); |
| | n = 1; |
| | end |
| | if length(subs) > 1 |
| | this.data{n}.data = int32(builtin('subsasgn',this.data{n}.data,subs(2:end),A-1)); |
| | else |
| | A = A(:); |
| | this.data{n}.data = int32(A - 1); |
| | this.data{n}.attributes.Dim = size(A); |
| | end |
| | |
| | |
| | |
| | otherwise |
| | if length(subs) > 1 |
| | if numel(n) == 1 |
| | this.data{n}.data = single(builtin('subsasgn',this.data{n}.data,subs(2:end),A)); |
| | this.data{n}.attributes.Dim = size(this.data{n}.data); |
| | else |
| | if numel(subs(2).subs) == 1 |
| | error('Linear indexing not supported: use multiple subscripts.'); |
| | end |
| | idx = subs(2).subs{2}; |
| | if isequal(idx,':'), idx = 1:numel(this.data); end |
| | for k=1:numel(idx) |
| | s = subs(2); |
| | s.subs{2} = 1; |
| | if numel(A) == 1 |
| | this.data{idx(k)}.data = single(builtin('subsasgn',this.data{idx(k)}.data,s,A)); |
| | else |
| | this.data{idx(k)}.data = single(builtin('subsasgn',this.data{idx(k)}.data,s,A(:,k))); |
| | end |
| | this.data{idx(k)}.attributes.Dim = size(this.data{idx(k)}.data); |
| | end |
| | end |
| | else |
| | if numel(n) == 1 |
| | if isa(A,'file_array') |
| | this.data{n}.data = A; |
| | this.data{n}.attributes.Dim = A.dim; |
| | else |
| | this.data{n}.data = single(A); |
| | this.data{n}.attributes.Dim = size(A); |
| | end |
| | else |
| | error('Syntax not implemented.'); |
| | end |
| | end |
| | end |
| | |
| | case '()' |
| | case '{}' |
| | otherwise |
| | error('This should not happen.'); |
| | end |
| |
|