C++读取STL模型文件

本文介绍了C++如何读取STL模型文件,包括二进制和ASCII两种数据格式。内容涉及二进制STL文件的结构,如固定字节数的文件头、三角面片的数量、每个面片的几何信息,以及ASCII格式的描述。通过示例代码展示了如何识别文件格式并存储三角面信息到vector中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据格式

二进制的数据格式:

二进制STL文件用固定的字节数来给出三角面片的几何信息。

  • 【80】80个字节的文件头,用于存贮文件名
  • 【4】 4 个字节的int描述模型的三角面片个数(小端存储)
  • 【50*n】一个三角面片占用固定的50个字节(小端存储),依次是:
    • 【12】3个4字节浮点数(角面片的法矢量)
    • 【12】3个4字节浮点数(1个顶点的坐标)
    • 【12】3个4字节浮点数(2个顶点的坐标)
    • 【12】3个4字节浮点数(3个顶点的坐标)个
    • 【2】三角面片的最后2个字节用来描述三角面片的属性信息。

一个完整二进制STL文件的大小为三角形面片数乘以 50再加上84个字节。

ASCII的数据格式

solid name 

//一个三角面
facet normal ni nj nk
    outer loop
        vertex v1x v1y v1z
        vertex v2x v2y v2z
        vertex v3x v3y v3z
    endloop
endfacet

//更多三角面···

endsolid name

例子

此处将完整展示将一个二进制格式STL文件导入到程序中的过程。

利用solidworks建立了一个10X10mm²的方形面片,并将其导出为二进制STL

这里写图片描述

利用notepad++的HEX-Editor插件查看二进制文件

这里写图片描述

选中的二进制段落就是第一个三角面的全部信息

这里写图片描述

STL中的浮点数格式符合IEEE制定的float格式,并且是小端存储,在x86系统中编译可以直接利用memcpy函数拷贝到C++的float中

这里写图片描述这里写图片描述

在线浮点数转换

表1 三角面1

表项 X Y Z 坐标
法向量 00000000 00000000 3f800000 (0,0,1)
点1 00000000 00000000 00000000 (0,0,0)
点2 41200000 00000000 00
评论 61
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值