• lee338
    了解作者
  • matlab
    开发工具
  • 1KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 1
    下载次数
  • 2021-03-15 20:04
    上传日期
读取二进制stl文件,并计算3d模型的体积
stl.zip
  • stlRead.m
    1.9KB
内容介绍
fid=fopen('gongfang.STL','r'); %打开二进制stl文件 fileTitle=fread(fid,80,'uchar=>schar'); fnum=fread(fid,1,'int32'); X=zeros(3,fnum); Y=zeros(3,fnum); Z=zeros(3,fnum); fm=zeros(fnum,3); FVCD=uint8(zeros(3,fnum)); for i=1:fnum, normal=fread(fid,3,'float32'); vertex1=fread(fid,3,'float32'); vertex2=fread(fid,3,'float32'); vertex3=fread(fid,3,'float32'); clr=fread(fid,1,'uint16'); if bitget(clr,16)==1 rd=bitshift(bitand(65535,clr),-10); grn=bitshift(bitand(2047,clr),-5); bl=bitand(63,clr); FVCD(:,i)=[rd;grn;bl]; end X(:,i)=[vertex1(1); vertex2(1); vertex3(1)]; Y(:,i)=[vertex1(2); vertex2(2); vertex3(2)]; Z(:,i)=[vertex1(3); vertex2(3); vertex3(3)]; fm(i,:)=normal'; end fclose(fid); fprintf(' The sum of trangle are: %d.\n',fnum);%输出三角形的数目 %计算STL模型的体积 fmhang=1;vmhang=1;m=1; while(fmhang<=fnum) x1=X(1,fmhang); y1=Y(1,fmhang); z1=Z(1,fmhang); x2=X(2,fmhang); y2=Y(2,fmhang); z2=Z(2,fmhang); x3=X(3,fmhang); y3=Y(3,fmhang); z3=Z(3,fmhang); vmhang=vmhang+3; VF=[1 1 1 1;x1 x2 x3 x2;y1 y2 y3 y2;z1 z2 z3 0];%计算四面体的体积 VS=[1 1 1 1;x1 x1 x2 x3;y1 y1 y2 y3;z1 0 0 z3]; VT=[1 1 1 1;x1 x2 x3 x3;y1 y2 y3 y3;0 0 0 z3]; v1=(1/6)*abs(det(VF)); v2=(1/6)*abs(det(VS)); v3=(1/6)*abs(det(VT)); vds=v1+v2+v3; f=fm(fmhang,:); p=[0,0,1]; s=dot(f,p); if(s>0)%判断三角形的法向量与投影平面的法向量的关系 vdscell(m,1)=vds; end if(s<0) vdscell(m,1)=-vds; end if(s==0) vdscell(m,1)=0; end m=m+1; fmhang=fmhang+1; end vshu=1;vz=0; while(vshu<=fnum) vz=vz+vdscell(vshu,1); %对单独三角形的投影体积进行累加 vshu=vshu+1; end fprintf(' Volumn? is: %fmm3.\n',vz);
评论
    相关推荐