如何用MATLAB读stl并显示点云文件

时间:2022-09-02 16:13:13
function [VertexData,FVCD,isBinary]=stl2matlab(stlfile)
% STL2MATLAB reads STL-file, ASCII or binary format, into Matlab
%
% Usage:
%
% [VertexData, FVCD]=stl2matlab(stlfile)
%
% Input:
%
% stlfile - STL-file
%
% Output:
%
% VertexData - Cellarray containing matrices with vertices
% FVCD - FaceVertexColorData
% isBinary - Flag with STL-file information
%
% To plot the STL-object use plotSTL(VertexData) or plotSTL(VertexData,FVCD)
%
% m-file can be downloaded at
% http://www.mathworks.com/matlabcentral/fileexchange/13253-iges-toolbox
%
% written by Per Bergstrm --
% if nargin ==
warning('No STL-file is specified');
end VertexData=cell(,); try % Try to read an STL ASCII file
[VertexData{}, VertexData{}, VertexData{}, FVCD] = stlAread(stlfile);
isBinary=false; catch try % Try to read an STL binary file
[VertexData{}, VertexData{}, VertexData{}, FVCD] = stlBread(stlfile);
isBinary=true; catch error('File could not be read!') end end function [X, Y, Z, FVCD] = stlAread(stlfile)
% Reads an STL ASCII file fid=fopen(stlfile,'r'); fileTitle=sscanf(fgetl(fid),'%*s %s'); vnum=;
fclr=;
testASCII=true;
lineCount=; while feof(fid) ==
stlLine=fgetl(fid);
keyWord=sscanf(stlLine,'%s');
if strncmpi(keyWord,'c',) == ;
fclr=sscanf(stlLine,'%*s %f %f %f');
elseif strncmpi(keyWord,'v',) == ;
vnum=vnum+;
vertex(:,vnum)=sscanf(stlLine,'%*s %f %f %f');
clr(:,vnum)=fclr;
elseif testASCII
lineCount=lineCount+;
if lineCount>
if vnum>
testASCII=false;
else
error('File is not an STL ASCII file!')
end
end
end
end X=[vertex(,::end);vertex(,::end);vertex(,::end)];
Y=[vertex(,::end);vertex(,::end);vertex(,::end)];
Z=[vertex(,::end);vertex(,::end);vertex(,::end)]; FVCD=reshape(clr,,vnum/); fclose(fid); function [X, Y, Z, FVCD] = stlBread(stlfile)
% Reads an STL binary file fid=fopen(stlfile,'r'); fileTitle=fread(fid,,'uchar=>schar');
fnum=fread(fid,,'int32'); X=zeros(,fnum);
Y=zeros(,fnum);
Z=zeros(,fnum); FVCD=uint8(zeros(,fnum)); for i=:fnum,
normal=fread(fid,,'float32');
vertex1=fread(fid,,'float32');
vertex2=fread(fid,,'float32');
vertex3=fread(fid,,'float32');
clr=fread(fid,,'uint16');
if bitget(clr,)==
rd=bitshift(bitand(,clr),-);
grn=bitshift(bitand(,clr),-);
bl=bitand(,clr);
FVCD(:,i)=[rd;grn;bl];
end
X(:,i)=[vertex1(); vertex2(); vertex3()];
Y(:,i)=[vertex1(); vertex2(); vertex3()];
Z(:,i)=[vertex1(); vertex2(); vertex3()];
end fclose(fid);

把这个函数放到Matlab中去,然后

b = figure();
model = stl2matlab('rawmodel-983.stl');
patch(model{},model{},model{},'b');
axis equal;
view(,);
mesh(x, y,z);
title('topographie map')

具体什么原理不太懂,反正这样真的可以

就是图丑了一点2333333333333333333

如何用MATLAB读stl并显示点云文件的更多相关文章

  1. Java使用FileReader(file)、readLine()读取文件,以行为单位,一次读一行,一直读到null时结束,每读一行都显示行号。

    //Java使用FileReader(file).readLine()读取文件,以行为单位,一次读一行,一直读到null时结束,每读一行都显示行号. public static void readFi ...

  2. 如何解决 Matlab 画图时中文显示乱码的问题?

    使用的是win10系统,从前几个月某一天,我的matlab的figure里的中文都变成了口口.很是郁闷,还以为是动到了什么配置引起的. 前几天更新了matlab 2018b,发现还有这个问题.就觉得不 ...

  3. matlab中的输出显示函数

    matlab中的输出显示函数 在matlab中使用的显示函数有disp.sprintf.fprintf比较常用.下面来介绍一下他们的用法. 1.disp()函数: disp(x)主要是用来输出变量x的 ...

  4. Matlab 用fread、fwrite实现大文件读写

    最近在分析一个35G的大数据文件,猛一看,是不是很吓人啊,不过还好,师兄写文件的格式非常规范,读取数据来也就很方便了,主要是使用了读写文件的两个函数fread和fwrite,下面用matlab简单尝试 ...

  5. Matlab中调用VS编译的exe文件并传递变量 的方法

    经历::在网上找了很多方法,都没有实现在matlab中调用vs的exe文件并且能够传递变量参数,一些小细节花费了自己很多时间,比喻忽略了一些空格!  网上很多的方法都是纯粹复制别人的方法,自己都没有去 ...

  6. Visual Studio 打开解决方案后 弹出框显示 "正在打开文件..." 迟迟没反应 的解决方法

    Visual Studio 打开解决方案后 弹出框显示 "正在打开文件...",任务管理器的devenv进程又很正常,不会显示"未响应". 而IDE的左下角有个 ...

  7. vim——打开多个文件、同时显示多个文件、在文件之间切换

    打开多个文件: 1.vim还没有启动的时候: 在终端里输入  vim file1 file2 ... filen便可以打开所有想要打开的文件 2.vim已经启动 输入 :open file 可以再打开 ...

  8. PCL Show Point Cloud 显示点云

    在使用PCL库的时候,经常需要显示点云,可以用下面这段代码: #include <pcl/visualization/cloud_viewer.h> pcl::PointCloud< ...

  9. 在xcode运行编译时,编译成功,但项目中显示缺少该文件,这是只要关闭重启xcode即可。

    在xcode运行编译时,编译成功,但项目中显示缺少该文件,这是只要关闭重启xcode即可.

随机推荐

  1. 基本linux命令

    1.mkdir mkdir 创建目录   mkdir -p 循环创建目录 2.cd     切换目录 3.pwd   查看当前路径 4.mkdir 删除一个空的目录 5.cp 复制文件/目录  -r用 ...

  2. Raspberry Pi无线路由器篇

    RaspberryPi可以折腾的方法很多,我将会吧自己的折腾经验与大家分享.   作为无线路由器,需要提供dhcp的功能和无线ap的能力,我们分别通过isc-dhcp-server和hostapd这两 ...

  3. iOS开发——高级技术&amp&semi;密码锁功能的实现

    密码锁功能的实现 一个ios手势密码功能实现 ipad/iphone 都可以用 没有使用图片,里面可以通过view自己添加 keychain做的数据持久化,利用苹果官方KeychainItemWrap ...

  4. 关于SWT中的GridLayout布局方式

    GridLayout 布局的功能非常强大,也是笔者常用的一种布局方式.GridLayout是网格式布局,它把父组件分成一个表格,默认情况下每个子组件占据一个单元格的空间,每个子组件按添加到父组件的顺序 ...

  5. javascript获取链接参数

    var url = "http://test.cn/index.php?class=9&id=2&key=88"; function parseQueryStrin ...

  6. django----注意事项

    不用带参数 必须要带参数:

  7. HTTP协议中GET和POST方法的区别

    转载 通常的理解 w3schools关于这个问题的解答:HTTP 方法:GET 对比 POST 列出了一般的理解: 方法 GET POST 后退按钮/刷新 无害 数据会被重新提交(浏览器应该告知用户数 ...

  8. GitHub注册和Git安装

    一.注册GitHub GitHub官方地址:https://github.com. 在浏览器中打开GitHub网址,通过首页进行注册,如下图所示. 二.安装Git Git官方下载地址:http://g ...

  9. AdvStringGrid使用小结

    结合最近自己做的一些工作,用到了第三方控件AdvStringGrid,这里就常用的一些技巧做个小小的总结 (1)如何设置表格固定的列数,如下图所示: 这里固定的列数为3列,通过设置下面属性来改变固定的 ...

  10. Python--matplotlib 绘图可视化练手--折线图&sol;条形图

    最近学习matplotlib绘图可视化,感觉知识点比较多,边学习边记录. 对于数据可视化,个人建议Jupyter Notebook. 1.首先导包,设置环境 import pandas as pd i ...