C++之STL文件二进制格式转ASCII格式
1、STL文件
STL文件是一种用许多空间小三角形面片逼近三维实体表面的数据模型,STL模型的数据通过给出组成三角形法向量的3个分量(用于确定三角面片的正反方向)及三角形的3个顶点坐标来实现,一个完整的STL文件记载了组成实体模型的所有三角形面片的法向量数据和顶点坐标数据信息。目前的STL文件格式包括二进制文件(BINARY)和文本文件(ASCII)两种。
1.1、STL的二进制格式
文件起始的80个字节是文件头,用于存贮零件名;紧接着用4个字节的整数来描述模型的三角面片个数,后面逐个给出每个三角面片的几何信息。每个三角面片占用固定的50个字节,依次是3个4字节浮点数(角面片的法矢量),3个4字节浮点数(1个顶点的坐标),3个4字节浮点数(2个顶点的坐标),3个4字节浮点数(3个顶点的坐标),最后2个字节用来描述三角面片的属性信息。一个完整二进制STL文件的大小为三角形面片数乘以50再加上84个字节,总共1 34个字节。
UINT8[80] - Header
UINT32 - Number of triangles
foreach triangle
REAL32[3] - Normal vector
REAL32[3] - Vertex 1
REAL32[3] - Vertex 2
REAL32[3] - Vertex 3
UINT16 - Attribute byte count
end
1.2、STL的ASCII文件格式
ASCII码格式的STL文件逐行给出三角面片的几何信息,每一行以1个或2个关键字开头。在STL文件中的三角面片的信息单元facet是一个带矢量方向的三角面片,STL三维模型就是由一系列这样的三角面片构成。整个STL文件的首行给出了文件路径及文件名。在一个STL文件中,每一个facet由7行数据组成,facetnormal是三角面片指向实体外部的法矢量坐标,outer loop说明随后的3行数据分别是三角面片的3个顶点坐标,3顶点沿指向实体外部的法矢量方向逆时针排列。
2、转换代码
完整代码需要下载,仅在此处附上部分代码,感觉用的上的人请去下载完整代码!!!
//二进制文件转ASCII
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include <iostream>
#include <fstream>
#include <ostream>
using namespace std;
//文件头,共84字节
struct Head
{
char partName[80];//零件名称
int faceNum;//面的数目
};
//点,三个float类型的,大小为12字节
struct Point
{
float x;
float y;
float z;
};
//法线
struct Normal
{
float i;
float j;
float k;
};
//三角面,由一个法线,三个点,和一个两字节的保留项,一共50字节
struct Face
{
Normal normal;//法线结构体占12个字节
Point p1;//三角面第一个点结构体占12个字节
Point p2;//三角面第二个点结构体占12个字节
Point p3;//三角面第三个点结构体占12个字节
char info[2];//保留数据,可以不用管
};
int main()
{
Head head;
Normal normal;
ifstream fileIn; //定义输入流fileIn
ofstream fileOut;//定义输出流fileOut
//char fileName[128];
//.........
//.........
3、完整代码下载地址
STL文件二进制转ASCII