千家信息网

如何利用正则表达式提取出由三维软件导出的STL文件中的顶点数据

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这篇文章主要为大家展示了"如何利用正则表达式提取出由三维软件导出的STL文件中的顶点数据",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"如何利用正则表达式提
千家信息网最后更新 2026年10月31日如何利用正则表达式提取出由三维软件导出的STL文件中的顶点数据

这篇文章主要为大家展示了"如何利用正则表达式提取出由三维软件导出的STL文件中的顶点数据",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"如何利用正则表达式提取出由三维软件导出的STL文件中的顶点数据"这篇文章吧。

先简单介绍matlab中的正则吧

(不全说,只讲我下面要用到的)

regexpi(String, pattern)   % 忽略大小写
这个将返回pattern在String中出现的所有位置,如果为空则表示String中没有patern

match = regexpi(String, pattern, 'match') % 忽略大小写
这个将返回在String中出现的所有的pattern, 返回值是一个cell,
所有出现的pattern都作为单独的一个元素放在这个cell中了
如果没有匹配到pattern则match为空



下面说一下这个pattern

如果pattern = 'vertex',那么之后将在String中找和'vertex'一模一样的位置
也就是:如果pattern是一个已知的字符串(只有一种可能),那么就是在String中寻找这个已知的字符串

如果pattern是一个并不确定的字符串(有多种可能),那么就要自己定义这个模式了。
\+ 表示'+'号
\- 表示'-'号
[] 表示一个字符集,[\+\-]表示这一个位置可以是'+'号也可以是'-'号,(只能表示一个字符)
\d 表示一个数字
* 表示'*'号前的那个字符可以重复任意次,\d* 表示任意长度的数字

好了只要知道以上这些就可以完成本篇推文中所需要的模式了

那么下面来分析一下要筛选出STL文件中的顶点坐标需要怎样的规则:

stl文件如下:

1. 每一个顶点数据都是以vertex打头的(忽略空格)

2. 那么只要这一行中存在'vertex',那么就存在顶点坐标

3. 判断'vertex'是否存在在某行中可以用如下的方法:

if ~isempty(regexpi(line, 'vertex'))

4. 那么接下来分析这个顶点坐标的字符串

每个方向的坐标值前要么是+号,要么是-号:

[\+\-]

加减号之后就是一串数字:

\d*

再之后就到点号了 '.'

\.

再之后又是一串数字

\d*

再之后到 'E'

E

再之后到+号或-号

[\+\-]

之后再到一串数字

\d*

5. 那么连起来就是:

'[\+\-]\d*\.\d*E[\+\-]\d*'

6. 通过regexpi来获取坐标点

xyz_str_cell = regexpi(line, '[\+\-]\d*\.\d*E[\+\-]\d*', 'match');

接下来就就好整了:

clc
clear

file = fopen('palne_stl.txt', 'r');

f = @(c) str2num(c);
vertexs = []; % 三列(x, y, z),n行,每三行作为一组
while ~feof(file)
line = fgetl(file);
if ~isempty(regexpi(line, 'vertex'))
xyz_str_cell = regexpi(line, '[\+\-]\d*\.\d*E[\+\-]\d*', 'match');
xyz_cell = cellfun(f, xyz_str_cell, 'UniformOutput', false);
xyz = cell2mat(xyz_cell);
vertexs = [vertexs; xyz];
end
end
fclose(file)
% len = length(vertexs) 绝对是3的整数倍,不然就是文件有误

for i = 1 : length(vertexs)
if ~rem(i, 3)
point1 = vertexs(i-2, :);
point2 = vertexs(i-1, :);
point3 = vertexs(i, :);
x = [point1(1), point2(1), point3(1)];
y = [point1(2), point2(2), point3(2)];
z = [point1(3), point2(3), point3(3)];
patch(x, y, z, 'r')
end
end

xyz_str_cell中的每一个元素都是一个数字字符串,所以需要用str2num来转换一下,为了避免循环,采用cellfun。

经过cellfun转换后,虽然由字符串变成了数字,但是整个还是一个cell,所以用cell2mat转换一下。

fopen配合fgetl一次可以获取文件中的一行。

这样顶点数据就保存起来了

之后就利用patch把每一片给画出来,每三组顶点为一片。

最后整个就完成了,即有了stl2matlab的功能,同时也能直接画出原模型

可以修改patch的属性达到你自己想要的结果。我在上面没有进行修改。

可以把这个脚本封装成一个函数,取个名字,添加到路径,以后就能直接用了。

最后附上最后的模型把:

以上是"如何利用正则表达式提取出由三维软件导出的STL文件中的顶点数据"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

顶点 字符 文件 数字 字符串 数据 正则 就是 表达式 软件 三维 位置 内容 坐标 篇文章 接下来 一行 元素 大小 模型 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 深圳九邦互联网科技有限公司 美国互联网科技巨头监管 广州宏创互联网科技 互联网科技论文 顺玮阁互联网科技 科技伦理 互联网公司 深圳互联网科技怎么样 互联网科技公司招聘 汉立互联网科技有限公司联系电话 广州优美互联网科技 宝灵互联网科技有限公司 速维有品互联网信息科技(苏州)有限公司 天津腾达互联网科技有限公司 中国互联网有什么科技 35岁以上互联网科技行业 西安有哪些互联网高科技企业 世界互联网科技成果奖 互联网科技手机排行榜 亚光科技低轨卫星互联网 重庆科技产业互联网有哪些 狮子座互联网科技 互联网科技视频素材 福州新华互联网科技学校 知乎 新兴科技互联网创新大赛颁奖典礼 互联网科技包装股 上海乐五互联网科技有限公司 互联网高科技行业有哪些企业 互联网公司属于科技吗 易租星互联网科技有限公司 恒生互联网科技趋势
0