IGES文件解析1——几何图元(更新中...)

IGES文件解析1——几何图元

  • 文件格式
    • 开始段
    • 全局段
    • 数据索引段DE
    • 数据参数PD
    • 结束段
  • 几何图元
    • 圆弧(100型)
    • 复合曲线(102型)
    • 圆锥曲线(104型)
    • 大量数据(类型 106)
    • 平面(108型)
    • 线(110型)
    • 参数样条曲线(112型)
    • 参数样条曲面(114型)
    • 点(类型 116)
    • 直纹面(118型)
    • 旋转表面(120型)
    • 柱状面(122型)
    • 方向(123型)
    • 变换矩阵(124型)
    • 有理B样条曲线(126型)
    • 有理B样条曲面(128型)
    • 偏移曲线(130型)
    • 偏移曲面(140型)
    • 边界(141型)
    • 参数曲面上的曲线(142型 )
    • 边界曲面(143型)
    • 裁剪曲面(144型)
    • 块(150型)
    • 直角楔体(152型)
    • 正圆柱(154型)
    • 正圆台(156型)
    • 球体(158型)
    • 圆环(160型)
    • 旋转实体(162型)
    • 线性拉伸实体(164型)
    • 椭球体(168型)
    • 布尔树(类型 180)
    • B-Rep流形实体(186型)
    • 平曲面(190型)
    • 正圆柱曲面(192型)
    • 正圆台曲面(194型)
    • 球面(196型)
    • 环形曲面(198型)
    • 子图定义(308型)
    • 颜色定义(314型)
    • 奇异子图实例(408型)
    • 顶点列表(类型 502 形式 1)
    • 边列表(类型 504 表格 1)
    • 循环(508 型)
    • 面(510型)
    • 壳体(514型)


文件格式

IGES文件是基于 ASCII 文本的格式,每行正好有 80 个字符长。分为五个部分,由第 73 列中的特定大写字母表示。分别是:

  • 开始段(S)
  • 全局段(G)
  • 数据索引段(D)
  • 参数数据段§
  • 结束段(T)
    “数据索引”和“数据参数”部分通常分别写为 DE 和 PD。

开始段

“开始”部分必须至少有 1 行,可以为空。如下所示。

                                                                        S      1

全局段

“全局”部分包含有关文件名及其源、“参数数据”部分的分隔符、文件作者以及其他常规信息的基本信息。起始字段包含文件的基本描述,在第 1-72 列中有任何字符,该行以段标志和段行号结尾。全局部分包含预处理器数据。它还必须存在于文件中,并以 G000000# 格式结尾。例如,以下IGES文件中的“开始”和“全局”部分:

1H,,1H;,4HSLOT,37H$1$DUA2:[IGESLIB.BDRAFT.B2I]SLOT.IGS;,                G      1
17HBravo3 BravoDRAFT,31HBravo3->IGES V3.002 (02-Oct-87),32,38,6,38,15,  G      2
4HSLOT,1.,1,4HINCH,8,0.08,13H871006.192927,1.E-06,6.,                   G      3
31HD. A. Harrod, Tel. 313/995-6333,24HAPPLICON - Ann Arbor, MI,4,0;     G      4

注意,字符串以 Hollerith 格式表示,这意味着每个字符串都有它包含的字符数,后跟其前面的 H。例如,字符串 IGES 将是 4HIGES。

数据索引段DE

“数据索引”和“数据参数”部分包含有关 IGES 文件格式的基本数据的信息:它是实体。IGES 中大约有 150 种不同的已定义图元(包括某些图元类型的不同“形式”)。实体在“数据索引”部分中描述,如下所示:

     116       1       0       1       0       0       0       0       1D      1
     116       1       5       1       0                               0D      2

首先,该文件列出了它在“数据索引”部分中包含的所有实体。此部分由第 73 列中的 D 指定,并列出有关它所描述的实体的属性。索引段中的每一行被拆分为 10 个 8 个字符的字段,每个实体都有该部分的两行。这表示每个实体在“数据索引”部分中都有 20 个字段,这些字段通常是右对齐的。这些字段映射到以下属性:

列 1-8 列 9-16 列 17-24 列 25-32 列 33-40 列 41-48 列 49-56 列 57-64 列 65-72 列 73-80
Entity Type PD pointer Structure Line Font Pattern Level View Transformation matrix pointer Label Display Associativity Status Number Section Code and Sequence Number
Entity Type Line Weight Number Color Number Parameter Line Count Form Number Reserved Reserved Entity Label Entity Subscript Number Section Code and Sequence Number

数据参数PD

“数据参数”部分紧跟在“数据索引”之后,并列出了每个相应条目的数据。典型的条目如下所示:

126,1,1,1,0,1,0,-5.,-5.,5.,5.,1.,1.,10.,0.,0.,10.,10.,0.,-5.,5.,       3P      3
0.,0.,1.;                                                              3P      4

相应的数据索引:

    126       3       0       0       0       0       0       000010501D      3
    126       0       0       2       0       0       0               0D      4

参数数据部分使用“全局”部分中指定的分隔符列出实体的参数。这些分隔符通常是用于分隔参数的逗号和用于结束列表的分号。参数数据部分列表以实体类型开头,后跟第 4-64 列中的参数数据。第 65 列到第 72 列包含数据输入指针编号,该指针编号提供此实体的数据条目列表的索引(必须是奇数,因为偶数包含数据输入的另一半)。最后一列 73-80 包含序列号(P#),类似于“数据输入”部分。

结束段

结束段只有一行,在前32个字符里,分别用8个字符记录了开始段、全局段、元素索引段和参数数据段的段码和每段的总行数。第33~72个字符没有用到。最后8个字符为结束段的段码和行数。

几何图元

圆弧(100型)

Z:XT,YT 平面上的 z 位移
X:中心坐标x
Y:中心坐标y
X1:起始点x坐标
Y1:起始点y坐标
X2:终止点x坐标
Y2:终止点y坐标

复合曲线(102型)

N:构成此图元的曲线数
DE(1):指向第一条曲线的索引
...
DE(N):指向最后一条曲线的索引

圆锥曲线(104型)

在这里插入代码片

大量数据(类型 106)

“大量数据”实体定义一组点。 根据第一个参数,有三种不同的解释。它是一个 INT,可以是 1、2 或 3。1 表示点是2维(x,y),2 表示点是3维 (x,y,z),3 表示点是六个数 (x,y,z,i,j,k)。如果格式为 1,则后面的第一个参数给出有序 xy 对的公共 Z 值。

Type:123
Z/XP1:如果是1,共用的Z值;如果是23,是第一个x值
YPN/ZPN/KPN:最后一个点的最后一个值

平面(108型)

通过 Ax + By +Cz = D 定义平面,以及为平面提供边界的曲线指针。还给出了指定顶点和指定大小的显示符号。

A:x 的系数
B:y 的系数
C:z 的系数
D:标量系数
Bounding:标量系数
X:显示符号的 x 坐标
Y:显示符号的 y 坐标
Z:显示符号的 z 坐标
Size:显示符号的大小

线(110型)

X1	起点x 坐标
Y1	起点的 y 坐标
Z1	起点的Z坐标
X2	终点 x 坐标
Y2	终点的 y 坐标
Z2	终点的Z坐标

参数样条曲线(112型)

参数样条曲面(114型)

点(类型 116)

X	x 点坐标
Y	点的 y 坐标
Z	点的 z 坐标
P	指向子图形实体的指针,指定显示符号

直纹面(118型)

直纹面是通过扫描定义曲线之间的区域而形成的曲面。扫描可以通过连接弧长相等或参数值相等的点(形式 1)的线来完成。有效曲线包括点、直线、圆、圆锥、参数样条、有理 B 样条、复合曲线或任何参数曲线。

P1:指向第一条曲线的指针
P2:指向第二条曲线的指针
DirFlag:方向,0=从第一个到第一个,从最后一个到最后一个;1=第一个到最后一个,最后一个到第一个
DevFlag:可展开的,0=不是,1=

直纹面的实例有平面,圆柱体或锥体的曲面,具有椭圆形矩阵的圆锥形表面,右旋锥体,螺旋体和切线可在空间中平滑曲线展开。

旋转表面(120型)

该实体是通过在指定轴上旋转边界并记录其通过的区域而形成的曲面。

Axis:描述旋转轴的指向线的指针
Surface:指向通用实体的指针
SA:起始角度(弧度)
EA:终止角度(弧度)

柱状面(122型)

由沿着一条准线的曲线平行移动而形成的。曲线可以是直线、圆弧、圆锥弧、参数样条曲线或有理b样条曲线中的任意一条。

Curve	指向曲线的指针
Lx	线端的 x 坐标
Ly	线端的 y 坐标
Lz	线端的 z 坐标

方向(123型)

给出三维方向,其中 x^2 + y^2 + z^2 > 0

X1	x 分量
Y1	y 分量
Z1	Z 分量

变换矩阵(124型)

通过矩阵乘法和向量加法转换实体以给出变换,如下所示:

           | R11  R12  R13 |          | T1 |              
       R=  | R21  R22  R23 |     T =  | T2 |        ET = RE + T, where E is the entity coordinate 
           | R31  R32  R33 |          | T3 |           
R11:第一行第一个
R12:..
R13:..
T1:T向量第一个值
R21:第二行第一个
...
T3:第三个 T 向量值

有理B样条曲线(126型)

K:控制点个数
M:基函数阶数	
Flag1:0=非平面,1=平面
Flag2:0=开曲线,1=闭曲线
Flag3:0=有理数,1=多项式
Flag4:0=非周期性,1=周期性
T1:节点序列的第一个值
...
T(1 + K + M)]:结序列的最后一个值
W0:第一个控制点的权重
...
WK:最后一个控制点的 z
X0:第一个控制点的 x
ZK:最后一个控制点的 z
V0:起始参数值
V1:结束参数值
XN:单位法向 x(如果是平面)
YN:单位法向 y(如果是平面)
ZN:单位法向 z(如果是平面)

有理B样条曲面(128型)

K1:第一方向上的控制点个数;
K2:第二方向上的控制点个数;
M1:第一方向基函数的阶数;
M2:第二方向基函数的阶数;
Flag1:0 = 第一方向关闭,1 = 未关闭
Flag2:0 = 第二方向闭合,1 = 未闭合
Flag3:0 = 有理数,1 = 多项式
Flag4:0 = 第一方向非周期,1 = 周期性
Flag5:0 = 第二方向上的非周期性,1 = 周期性
T1(0):第一方向上结序列的第一个值
...
T1(1 + K1 + M1):第一方向上结序列的最后一个值
...
T2(0):第二方向上结序列的第一个值
...
T2(1 + K2 + M2):第二方向上结序列的最后一个值
W(0, 0):第一个控制点权重
...
W(K1, K2):最后一个控制点权重
X(0, 0):第一个控制点
K(K1)(K2):最后一个控制点
U0:开始第一个参数值
U1:结束第一个参数值
V0:开始第二个参数值
V1:结束第二个参数值

偏移曲线(130型)

Curve		要偏移的曲线
Flag1		偏移距离 
				1=单值偏移 
				2=偏移距离线性变化
				3=偏移距离作为函数
Offset		指向描述偏移的曲线的指针 (Flag1=3)
Dim			要使用的偏移曲线坐标 (Flag1=3)
Flag2		锥形偏移类型:
				1=弧长函数 
				2=参数函数(Flag1=23)
D1			第一偏移距离(Flag1=12)
TD1			弧长/参数值 (Flag1=2)
D2			第二偏移距离
TD2			第二个弧长/参数值(Flag1=2)
X			法向量的 X 值
Y			法向量的 Y 值
Z			法向量的 Z 值
TT1			偏移曲线起始参数值
TT2			偏移曲线端部参数值

偏移曲面(140型)

NX		偏移指示器的X 坐标
NY		偏移指示器的Y坐标
Nz		偏移指示器的Z坐标
D		表面与指示器偏移的距离
Surface	指向要偏移的表面的指针

边界(141型)

标识由位于曲面上的曲线组成的曲面边界。

Type	:所表示的边界类型 0=实体参考模型空间曲线,1=实体参考模型空间曲线和关联的参数空间曲线
Pref	:修剪曲线的首选表示形式。0 = 未指定,1 = 模型空间, 2 = 参数空间,3 = 相等
Surface	:要绑定的未修剪曲面
N		:边界中的曲线数
MC1		:指向第一条模型空间曲线的指针
Flag1	:方向标志:0 = 无反转,1 = 需要反转
K1		:此模型曲线有多少条参数曲线
PC(11):模型曲线 1 的第一参数曲线
...     
PC(1,K1):模型曲线 1 的最后一个参数曲线
MC2		:模型曲线 2
...	
PC(N,KN):模型曲线 N 的最后一个参数曲线

参数曲面上的曲线(142型 )

Flag1:指示曲线的创建方式:0 = 未指定,1 = 投影,2 = 曲面相交,3 = 等参数曲线;
Surface:曲线所在曲面的元素索引位置;
Curve:参数域上边界曲线的元素索引位置;
Mapping:空间域上边界曲线的元素索引位置;???
Representation:曲线的首选表示形式:0 = 未指定,1 = S(B(t))2 = C(t)3 = 两者相等

边界曲面(143型)

Type		所表示的边界类型 
				0=实体参考模型空间曲线
				1=实体参考模型空间曲线和关联的参数空间曲线
Surface		指向无界曲面
Number 		边界实体数量
B1			指向第一个边界实体的指针
BN			指向最后一个边界实体的指针

裁剪曲面(144型)

Surface:要修剪的曲面图元索引;
Flag:0=边界是曲面的边界,1=边界不是曲面边界;
N:构成内边界的闭合曲线数;
OuterBound:指向外边界的参数化曲面(类型 142)图元上的曲线索引;
Inner1:指向第一个内边界曲线索引;
...
InnerN:指向最后一个内边界曲线索引;

块(150型)

定义一个CSG Block对象

LX:沿 x 轴的边长
LY:沿 y 轴的边长
LZ:沿 z 轴的边长
X:角 x 坐标
Y:角 y 坐标
Z:角 z 坐标
Xi:沿 x 方向的单位向量i分量
Xj
Xk
Zi:沿 z 方向的单位矢量i分量
Zj
Zk

直角楔体(152型)

定义一个CSG直角楔体

LX:x方向的尺寸
LY:y方向的尺寸
LZ:z方向的尺寸
TLX:距局部x轴LY的距离
X:角点坐标
Y:	
Z:	
Xi:x轴法向量
Xj:	
Xk:	
Zi:z轴法向量
Zj:	
Zk:

正圆柱(154型)

定义一个CSG圆柱体

H:高
R:半径
X:底面中心x
Y:底面中心y
Z:底面中心z
i:圆柱轴的方向i分量
j	
k	

正圆台(156型)

定义CSG正圆台

H	高
R1	大半径
R2	小半径
X	大面中心点x分量
Y	大面中心点y分量
Z	大面中心点z分量
i	从大面到小面的方向向量i分量
j	
k	

球体(158型)

R:半径
X:中心点
Y:
Z:

圆环(160型)

定义CSG Torus原始类型

R1:圆环的半径
R2:圆环的厚度
X:圆环的中心点
Y:
Z:
i:圆环的法向
j:
k:

旋转实体(162型)

描述通过绕轴旋转曲线而形成的固体。

C:曲线
F:全部旋转因子
X:旋转轴的点
Y:
Z:
i:旋转轴的方向
j:
k:

线性拉伸实体(164型)

描述通过平面曲线平移区域而形成的实体。

C:曲线
L:拉伸距离
i:拉伸方向
j
k

椭球体(168型)

定义由曲线定义的CSG椭球原始类型:
X^2/ LX^2 + Y^2/ LY^2 + Z^2/ LZ^2 = 1

LX:x距离
LY:y距离
LZ:z距离
X:中心点
Y:
Z:
i1:x轴长轴的单位向量
j1:
k1:
i2:z轴短轴的单位向量
j2:
k2

布尔树(类型 180)

提供一个CSG布尔树结构,用于构造CSG几何图形。
它接受的三种类型的操作用一个整数表示:
1 =并集
2 =交集
3 =差集
数据以后序表示法提供,给出操作对象和运算类型数。

N:操作对象和运算类型数的和
P1:操作对象1
P2:操作对象2
P3/O1:第三个操作对象或者第一个运算类型
...
ON:最后一个运算类型

B-Rep流形实体(186型)

通过枚举边界在R^3中定义一个封闭的、固体的、有限的体积。

Shell	指向壳部件514的指针
FLAG	方向标志- True = shell与faces一致
N:		有效壳的数量
VShell1	:第一个有效的壳
VFLAG1:VShell1的方向标志
...
VFLAGN:VShellN的方向标志

平曲面(190型)

平面曲面由平面上的一点和法线构成。作为Face实体使用。

Point:指向点类型116的指针
Normal:指向方向类型123的法向
Ref:指向方向实体的指针(类型123),给出参考方向,只适用于格式一

正圆柱曲面(192型)

定义一个正圆柱曲面,用作面实体。

Point:指向点类型116的轴上的点
Axis:指向方向类型123类型的轴向
R:半径
Ref:指向方向实体的指针(类型123),给出参考方向,只适用于格式一

正圆台曲面(194型)

定义一个正圆台曲面,作为面实体。

Point:指向点类型116的轴上的点
Axis:指向方向类型123类型的轴向
R:半径
ANG:轴与圆台面的夹角
Ref:指向方向实体的指针(类型123),给出参考方向,只适用于格式一

球面(196型)

定义一个球面,作为面实体。

Point:指向点类型116的轴上的点
Axis:指向方向类型123类型的轴向
R:半径
Ref:指向方向实体的指针(类型123),给出参考方向,只适用于格式一

环形曲面(198型)

定义一个环形曲面,作为面实体。

Point:指向点类型116的轴上的点
Axis:指向方向类型123类型的轴向
R1:大半径
R2:半小径
Ref:指向方向实体的指针(类型123),给出参考方向,只适用于格式一

子图定义(308型)

将其他实体定义合并为一个实体。

Depth:子图深度(含嵌套)
Name:子图的名称
N:子图数量
E1:关联的实体1
...
EN:关联的实体N

颜色定义(314型)

用于在RGB颜色空间中为其他实体提供自定义颜色。

RED:红,0-100
GREEN:绿,0-100
BLUE:蓝,0-100
Name:可选的颜色名

奇异子图实例(408型)

为子图定义实体提供已定义的子图。

SD:子图定义实体(类型308)
X:x方向平移
Y:
Z:
S:缩放因子

顶点列表(类型 502 形式 1)

提供用于指定B-Rep几何图形的顶点列表。

N:点列表数量
X1:第一个点坐标
Y1:
Z1:
...
XN:第N个点坐标
YN:
ZN:

边列表(类型 504 表格 1)

提供由顶点组成的边列表,用于指定B-Rep几何图形。

N:边列表数量
Curve1:第一个模型空间曲线
SVL1:点列表的第一个点
S1:SVL1的索引
EVL1:点列表的最后一个点
E1:EVL1的索引
...
CurveN:最后一个模型空间曲线
SVLN:点列表的第一个点
SN:SVLN的索引
EVLN:点列表的最后一个点
EN:EVLN的索引

循环(508 型)

为B-Rep Geometries定义一个循环,指定一个有界面。

N:循环中边的数量
Type1:第一个边的类型,0=Edge,1=Vertex
E1:第一个边列表或点列表
Index1:E1中边/顶点的索引
Flag1:方向标志- True =与模型曲线一致
K1:参数空间曲线的数量
ISO(1,1):第一个参数空间曲线的等参数标志
PSC(1,1):E1的第一个参数空间曲线
...
PSC(1,K1):E1的最后一个参数空间曲线
Type2:第二个边的类型

面(510型)

用有限区域定义三维空间(R^3)的限定部分。用于构造B-Rep几何图形。

Surface:基础曲面
N:循环的数量
Flag:外循环标志:True表示Loop1为外环。False表示没有外循环。
Loop1:指向第一个面的循环
...
LoopN:指向最后一个面的循环

壳体(514型)

定义用于定义B-Rep几何图形的边连接面集。

N:面的数量
Face1:指向第一个面
Flag1:第一个面方向标志。True表示表面与表面一致
...
FaceN:指向第N个面
FlagN:第N个面方向标志。

你可能感兴趣的:(计算机图像学,算法,c++,图形渲染)