如何用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即可.
随机推荐
- jquery 一键复制文本到剪切板
<a id="copy" data-clipboard-text="123456">复制文本</a> $(function(){ var ...
- Python 标准库笔记(1) — String模块
原文出处: j_hao104 String模块包含大量实用常量和类,以及一些过时的遗留功能,并还可用作字符串操作. 1. 常用方法 常用方法 描述 str.capitalize() 把字符串的首字母大 ...
- caffe实现年龄及性别预测
一.相关代码及训练好的模型 eveningglow/age-and-gender-classification: Age and Gender Classification using Convolu ...
- C#用反射实现两个类的对象之间相同属性的值的复制
在进行实体转换操作的时候如果需要在对两个实体之间两个属性字段差不多相同的类要进行一个互相的转换,我们要把a对象的所有字段的值都复制给b对象,我们只能用b.属性=a.属性来写,如果属性字段太多的话,就要 ...
- 记录一次MyEclipse打开jsp文件出现Error的解决办法
今天正在忙着写项目,在打开一个项目内的jsp文件时发现我亲爱的代码消失了. 最后从网上找到了解决办法,希望可以帮到有需要的人,也作为个人记录 第一步:找到安装路径MyEclipse\configura ...
- USD在CentOS7.0操作系统下的安装方法
最近Pixar的开源USD软件很火,官方在Introduce中明确讲到这个软件的设计开发目标是增强艺术家协作,减少不确定因素,最大化资产版本迭代效率,追求更大的承载能力. 当今行业中传统的线性的制作方 ...
- Hello 2019
2019也要创造价值! 热爱生活!
- Python连接Oracle数据查询导出结果
python连接oracle,需用用到模块cx_oracle,可以直接pip安装,如网络不好,可下载离线后本地安装 cx_oracle项目地址:https://pypi.org/project/cx_ ...
- Ubuntu 15.10 下Scala 操作Redis Cluster
1 前言 Redis Standalone,Redis Cluster的安装在前面介绍过,地址:http://www.cnblogs.com/liuchangchun/p/5063477.html,这 ...
- LeetCode【110. 平衡二叉树】
对于平衡二叉树,就是左右深度相差1 就可以另外弄一个函数,计算深度,然后, 在原函数上进行比较深度是否相差1,再输出true or false. 至于迭代就可以,比较完左右节点,再比较各自的左右节点. ...