C++之STL文件二进制格式转ASCII格式

1 篇文章 0 订阅

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

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值