[MATLAB学习笔记]MATLAB读取UG三维模型数据

UG完成三维建模之后,导出STL格式的外形数据。

[MATLAB学习笔记]MATLAB读取UG三维模型数据_第1张图片

missile.txt文件网盘链接 

https://pan.baidu.com/s/1HAsXYD8bz-5MA2an6P-skg  密码: ttbx


STL格式规定模型由三个顶点组成的小三角形面片,多个面片构成了各种形状的曲面。每个面片的数据采用以下格式给出

facet normal +9.9645872E-01 +8.4050291E-02 -2.3582236E-03
    outer loop      
      vertex   +1.2993712E+03 +1.1196447E+01 +0.0000000E+00
      vertex   +1.2998426E+03 +5.6070447E+00 +0.0000000E+00
      vertex   +1.2998426E+03 +5.5982238E+00 -3.1438950E-01
    endloop

  endfacet

根据这一格式可以利用MATLAB读取模型的外形数据。

clear
clc

fid = fopen('missile.txt','r');

strline = cell(1,1);
counter = 1;
while ~feof(fid)
    strline{counter,1} = fgetl(fid);
    counter = counter + 1;
end
fclose(fid);
counterf = 1;
counterv = 1;
facetN = zeros(1,1);
vertex = zeros(1,1);
for n = 1:length(strline)
    if length(strline{n}) == 59
        if strcmp(strline{n}(3:14),'facet normal')
            facetN(counterf,1) = str2double(strline{n}(16:29));
            facetN(counterf,2)  = str2double(strline{n}(31:44));
            facetN(counterf,3)  = str2double(strline{n}(46:59));
            counterf = counterf + 1;
        elseif strcmp(strline{n}(7:12),'vertex')
            vertex(counterv,1) = str2double(strline{n}(16:29));
            vertex(counterv,2) = str2double(strline{n}(31:44));
            vertex(counterv,3) = str2double(strline{n}(46:59));
            counterv = counterv + 1;
        end
    end
end
figure
hold on
for n = 1:length(facetN)
    fill3(vertex(3*n-2:3*n,1),vertex(3*n-2:3*n,2),vertex(3*n-2:3*n,3),'y',...
       'EdgeAlpha',0.5)
end
axis equal
box on

以某一导弹模型为例

UG中模型显示如图

[MATLAB学习笔记]MATLAB读取UG三维模型数据_第2张图片

导出STL格式的missile.txt的外形数据,利用MATLAB读取显示

[MATLAB学习笔记]MATLAB读取UG三维模型数据_第3张图片

你可能感兴趣的:([MATLAB学习笔记]MATLAB读取UG三维模型数据)