如何用MATLAB读stl并显示点云文件
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并显示点云文件的更多相关文章
- Java使用FileReader(file)、readLine()读取文件,以行为单位,一次读一行,一直读到null时结束,每读一行都显示行号。
//Java使用FileReader(file).readLine()读取文件,以行为单位,一次读一行,一直读到null时结束,每读一行都显示行号. public static void readFi ...
- 如何解决 Matlab 画图时中文显示乱码的问题?
使用的是win10系统,从前几个月某一天,我的matlab的figure里的中文都变成了口口.很是郁闷,还以为是动到了什么配置引起的. 前几天更新了matlab 2018b,发现还有这个问题.就觉得不 ...
- matlab中的输出显示函数
matlab中的输出显示函数 在matlab中使用的显示函数有disp.sprintf.fprintf比较常用.下面来介绍一下他们的用法. 1.disp()函数: disp(x)主要是用来输出变量x的 ...
- Matlab 用fread、fwrite实现大文件读写
最近在分析一个35G的大数据文件,猛一看,是不是很吓人啊,不过还好,师兄写文件的格式非常规范,读取数据来也就很方便了,主要是使用了读写文件的两个函数fread和fwrite,下面用matlab简单尝试 ...
- Matlab中调用VS编译的exe文件并传递变量 的方法
经历::在网上找了很多方法,都没有实现在matlab中调用vs的exe文件并且能够传递变量参数,一些小细节花费了自己很多时间,比喻忽略了一些空格! 网上很多的方法都是纯粹复制别人的方法,自己都没有去 ...
- Visual Studio 打开解决方案后 弹出框显示 "正在打开文件..." 迟迟没反应 的解决方法
Visual Studio 打开解决方案后 弹出框显示 "正在打开文件...",任务管理器的devenv进程又很正常,不会显示"未响应". 而IDE的左下角有个 ...
- vim——打开多个文件、同时显示多个文件、在文件之间切换
打开多个文件: 1.vim还没有启动的时候: 在终端里输入 vim file1 file2 ... filen便可以打开所有想要打开的文件 2.vim已经启动 输入 :open file 可以再打开 ...
- PCL Show Point Cloud 显示点云
在使用PCL库的时候,经常需要显示点云,可以用下面这段代码: #include <pcl/visualization/cloud_viewer.h> pcl::PointCloud< ...
- 在xcode运行编译时,编译成功,但项目中显示缺少该文件,这是只要关闭重启xcode即可。
在xcode运行编译时,编译成功,但项目中显示缺少该文件,这是只要关闭重启xcode即可.
随机推荐
- [delphi]在DLL中多线程同步Synchronize卡死问题
在dll中多线程同步调用Synchronize不可以,会出现假死卡住的现象.可通过Sendmessage实现. 转网上其他文章解释: Application.Initialize; begin ...
- Ignite(三): Ignite VS Spark
参考:https://www.itcodemonkey.com/article/9613.html gnite 和 Spark,如果笼统归类,都可以归于内存计算平台,然而两者功能上虽然有交集,并且 I ...
- PHP swoole实现redis订阅和发布
前戏:实现用户下单,服务器通知后台接收订单...类似美团外卖 1.首先要实现一个订阅程序 $result = $client->connect('127.0.0.1', 6379, functi ...
- 记录一次mongodb因网络问题导致shard节点异常
现象: 机房反馈9点左右,机房交换机故障,导致网络出现问题 业务人员反馈某个接口超时 初查:通过业务日志查看分析发现,在连接mongo的某个collections时候,报错错误如下: 在写入数据的时候 ...
- 工控随笔_17_西门子_WinCC的VBS脚本_06_过程和函数
和其他语言一样,vbs提供了过程和函数机制,通过函数和过程可以优化代码结构和实现代码复用, 减少代码的编写量. 一.代码 具体不再多说,看实例代码. ' vbs的函数和过程 '1.过程式编程是一大编程 ...
- ES - dynamic field mapping
Dynamic field mapping 1.我们向es提交一个json对象进行索引,es会对json字段和索引字段进行字段类型适配. 规则如下: 2.string字段的转换规则 当date det ...
- ajax(读取json数据)
ajax知识点: 语法:$.ajax(路由,请求方式,返回的数据类型,数据参数,回调函数) url: "路由", type:"",默认get请求(get或pos ...
- 分布式-JOB(XXL-Job)
为什么使用xxl-job,不使用qz: 缺少补偿机制 不支持集群 不支持路由策略 统计任务执行 平台管理 监控,报警邮箱 幂等性:一次请求和多次请求得到相同的结果,不会因为多次的请求,导致最后的数据不 ...
- sql查询统计
SELECT TOP 50 (select text from sys.dm_exec_sql_text(sql_handle)) as [SQL], CAST( ((qs.total_elapsed ...
- Linq to SQL -- 入门篇
一.什么是Linq Linq是语言集成查询(Language Integrated Query)的简称,是visual Studio 2008和.NET Framework 3.5版本中一项突破性的创 ...