0001 function [ surf, ab ] = SurfStatReadSurf1( filename, ab, numfields );
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020 if nargin<2
0021 ab='a';
0022 end
0023 if nargin<3
0024 numfields=4;
0025 end
0026
0027 [pathstr,name,ext] = fileparts(filename);
0028 if strcmp(ext,'.obj')
0029
0030 if ab(1)=='a'
0031 fid=fopen(filename);
0032 FirstChar=fscanf(fid,'%1s',1);
0033 if FirstChar=='P'
0034 fscanf(fid,'%f',5);
0035 v=fscanf(fid,'%f',1);
0036 surf.coord=fscanf(fid,'%f',[3,v]);
0037 if numfields>=2
0038 surf.normal=fscanf(fid,'%f',[3,v]);
0039 if numfields>=3
0040 ntri=fscanf(fid,'%f',1);
0041 ind=fscanf(fid,'%f',1);
0042 if ind==0
0043 surf.colr=fscanf(fid,'%f',4);
0044 else
0045 surf.colr=fscanf(fid,'%f',[4,v]);
0046 end
0047 if numfields>=4
0048 fscanf(fid,'%f',ntri);
0049 surf.tri=fscanf(fid,'%f',[3,ntri])'+1;
0050 end
0051 end
0052 end
0053 fclose(fid);
0054 else
0055 fclose(fid);
0056 fid=fopen(filename,'r','b');
0057 FirstChar=fread(fid,1);
0058 if FirstChar==uint8(112)
0059 fread(fid,5,'float');
0060 v=fread(fid,1,'int');
0061 surf.coord=fread(fid,[3,v],'float');
0062 if numfields>=2
0063 surf.normal=fread(fid,[3,v],'float');
0064 if numfields>=3
0065 ntri=fread(fid,1,'int');
0066 ind=fread(fid,1,'int');
0067 if ind==0
0068 surf.colr=uint8(fread(fid,4,'uint8'));
0069 else
0070 surf.colr=uint8(fread(fid,[4,v],'uint8'));
0071 end
0072 if numfields>=4
0073 fread(fid,ntri,'int');
0074 surf.tri=fread(fid,[3,ntri],'int')'+1;
0075 end
0076 end
0077 end
0078 fclose(fid);
0079 ab='b';
0080 else
0081 fprintf(1,'%s\n',['Unable to read ' filename ', first character ' char(FirstChar)]);
0082 end
0083 end
0084 else
0085 fid=fopen(filename,'r','b');
0086 FirstChar=fread(fid,1);
0087 if FirstChar==uint8(112)
0088 fread(fid,5,'float');
0089 v=fread(fid,1,'int');
0090 surf.coord=fread(fid,[3,v],'float');
0091 if numfields>=2
0092 surf.normal=fread(fid,[3,v],'float');
0093 if numfields>=3
0094 ntri=fread(fid,1,'int');
0095 ind=fread(fid,1,'int');
0096 if ind==0
0097 surf.colr=uint8(fread(fid,4,'uint8'));
0098 else
0099 surf.colr=uint8(fread(fid,[4,v],'uint8'));
0100 end
0101 if numfields>=4
0102 fread(fid,ntri,'int');
0103 surf.tri=fread(fid,[3,ntri],'int')'+1;
0104 end
0105 end
0106 end
0107 fclose(fid);
0108 else
0109 fclose(fid);
0110 fid=fopen(filename);
0111 FirstChar=fscanf(fid,'%1s',1);
0112 if FirstChar=='P'
0113 fscanf(fid,'%f',5);
0114 v=fscanf(fid,'%f',1);
0115 surf.coord=fscanf(fid,'%f',[3,v]);
0116 if numfields>=2
0117 surf.normal=fscanf(fid,'%f',[3,v]);
0118 if numfields>=3
0119 ntri=fscanf(fid,'%f',1);
0120 ind=fscanf(fid,'%f',1);
0121 if ind==0
0122 surf.colr=fscanf(fid,'%f',4);
0123 else
0124 surf.colr=fscanf(fid,'%f',[4,v]);
0125 end
0126 if numfields>=4
0127 fscanf(fid,'%f',ntri);
0128 surf.tri=fscanf(fid,'%f',[3,ntri])'+1;
0129 end
0130 end
0131 end
0132 fclose(fid);
0133 ab='a';
0134 else
0135 fprintf(1,'%s\n',['Unable to read ' filename ', first character ' char(FirstChar)]);
0136 end
0137 end
0138 end
0139 else
0140
0141 fid = fopen(filename, 'rb', 'b') ;
0142 b1 = fread(fid, 1, 'uchar') ;
0143 b2 = fread(fid, 1, 'uchar') ;
0144 b3 = fread(fid, 1, 'uchar') ;
0145 magic = bitshift(b1, 16) + bitshift(b2,8) + b3 ;
0146 if magic==16777214
0147 fgets(fid);
0148 fgets(fid);
0149 v = fread(fid, 1, 'int32') ;
0150 t = fread(fid, 1, 'int32') ;
0151 surf.coord = fread(fid, [3 v], 'float32') ;
0152 if numfields==4
0153 surf.tri = fread(fid, [3 t], 'int32')' + 1 ;
0154 end
0155 fclose(fid) ;
0156 else
0157 fprintf(1,'%s\n',['Unable to read ' filename ', magic = ' num2str(magic)]);
0158 end
0159 ab='b';
0160 end
0161
0162 return
0163 end
0164