• 大小: 3KB
    文件类型: .m
    金币: 1
    下载: 0 次
    发布日期: 2021-05-13
  • 语言: Matlab
  • 标签: MATLAB  STL文件  

资源简介

此程序可以焊好的读取STL文件,可以输出F(面数),V(顶点),N(三角面片的法向量)等,可以稳定输出

资源截图

代码片段和文件信息

function varargout = stlread(file)

% 读取STL模型
    if ~exist(file‘file‘)%判断文件是否存在
        error([‘File ‘‘%s‘‘ not found. If the file is not on MATLAB‘‘s path‘ ...
               ‘ be sure to specify the full path to the file.‘] file);
    end
    
    fid = fopen(file‘r‘);    
    if ~isempty(ferror(fid))
        error(lasterror); %#ok
    end  
    M = fread(fidinf‘uint8=>uint8‘);%进行读取
    fclose(fid);
    [fvn] = stlbinary(M);
    %if( isbinary(M) )
    %    [fvn] = stlbinary(M);
    %else
    %    [fvn] = stlascii(M);
    %end
    
    varargout = cell(1nargout);%函数输出
    switch nargout        
        case 2
            varargout{1} = f;%f为面(face)
            varargout{2} = v;%v为顶点坐标(vertices)
        case 3
            varargout{1} = f;
            varargout{2} = v;
            varargout{3} = n;%为面的法向量
        otherwise
            varargout{1} = struct(‘faces‘f‘vertices‘v);
    end

end

function [FVN] = stlbinary(M)

    F = [];
    V = [];
    N = [];
    
    if length(M) < 84
        error(‘MATLAB:stlread:incorrectFormat‘ ...
              ‘Incomplete header information in binary STL file.‘);
    end
    
    % 字节81-84为一个无符号的32位整数,用于指定后面的面数。
    numFaces = typecast(M(81:84)‘uint32‘);
    %numFaces = double(numFaces);
    if numFaces == 0 %判断STL模型中的面熟
        warning(‘MATLAB:stlread:nodata‘‘No data in STL file.‘);
        return
    end
    
    T = M(85:end);
    F = NaN(numFaces3);
    V = NaN(3*numFaces3);%一个三角面片三个顶点,顶点数为面数的

评论

共有 条评论