matlab读取stl文件并显示

读取stl文件

matlab已经包含一个函数stlread()专门用于读入stl文件。相关帮助如下:
stlread
从 STL 文件创建三角剖分全页折叠
语法
TR = stlread(filename)
[TR,fileformat,attributes,solidID] = stlread(filename)
说明
示例
TR = stlread(filename) 返回 triangulation 对象 TR,其中包含 STL 文件中定义的三角形。

[TR,fileformat,attributes,solidID] = stlread(filename) 返回 filename 的文件格式、属性(文件为二进制时)以及实体标识号(文件为文本时)。

示例
全部折叠
从 STL 文本文件中读取三角剖分
根据文件 tristltext.stl 中包含的数据创建并绘制 triangulation 对象。

TR = stlread('tristltext.stl');
triplot(TR)

输入参数
全部折叠
filename - STL 文件名
字符向量 | 标量 string
STL 文件名,指定为字符向量或标量 string。文件名必须以 .stl 或 .STL 扩展名结尾。如果文件包含退化三角形,则 stlread 会自动删除它们。

示例: 'stltextfile.stl'

输出参数
全部折叠
TR - 三角剖分
triangulation 对象
三角剖分,以 triangulation 对象形式返回。

fileformat - 文件格式
'binary' | 'text'
文件格式,以 'binary' 或 'text' 返回。

attributes - 二进制属性
uint16 向量
二进制属性,以 uint16 向量形式返回。当输入文件是二进制时,attributes 包含有关三角形的编码信息。它的长度等于三角剖分中的三角形数量。如果输入文件是文本文件,则 attributes 是空数组。

solidID - 实体分组索引
向量
实体分组索引,以标识号的向量形式返回。当输入文件是文本文件时,标识号将每个三角形分配到三角剖分中的一个三角形分组中。当输入文件是二进制时,solidID 包含所有文件。solidID 的长度等于三角剖分中的三角形数。

数据类型: double

另请参阅
triangulation

在 R2018b 中推出

显示stl文件内容

stlread函数的返回结果包含两部分内容:

  1. 所有点三维坐标,是一个n行3列矩阵。
  2. 三角剖分的三角面顶点序号,每个序号对应第一部分中的一个点。

这两部分刚好和patch函数直接对接,因此显示stl文件的内容就使用patch了
具体为:
patch('Faces',F,'Vertices',V) 创建一个或多个多边形,其中 V 指定顶点的值,F 定义要连接的顶点。当有多个多边形时,仅指定唯一顶点及其连接矩阵可以减小数据大小。为 V 中的每个行指定一个顶点。要创建一个多边形,请将 F 指定为向量。要创建多个多边形,请将 F 指定为矩阵,其中一行对应于一个多边形。不要求每个面都具有相同的顶点数。要指定不同数量的顶点,请以 NaN 值填充 F。

指定面和顶点
通过指定每个唯一顶点的坐标和定义如何连接这些顶点的矩阵,创建一个多边形。然后,继续将两个多边形添加到图窗中。

创建一个红色正方形,四个角分别位于 (0,0)、(1,0)、(1,1) 和 (0,1)。指定 v 以使每行定义一个顶点的 (x,y) 坐标。然后,将 f 指定为要连接的顶点。通过指定 FaceColor 属性来设置颜色。

v = [0 0; 1 0; 1 1; 0 1];
f = [1 2 3 4];
patch('Faces',f,'Vertices',v,'FaceColor','red')

通过将 f 指定为两行矩阵来创建两个多边形。每一行定义一个补片的面。

v2 = [2 4; 2 8; 8 4; 5 0; 5 2; 8 0];
f2 = [1 2 3;
4 5 6];
patch('Faces',f2,'Vertices',v2,'FaceColor','green')

小结

利用matlab的stlread函数读入stl文件,利用patch函数显示stl文件。
遗憾的是stl文件没有颜色,必须自己指定。