导航:首页 > 文件教程 > dxf文件组码操作手册

dxf文件组码操作手册

发布时间:2023-06-10 05:47:29

A. DXF文件结构(在线等!!!!)

DXF文件实际上是ASCII编码文件,可以用记事本打开。

DXF 文件本质上由代码及关联值对组成。 代码(通常称为组码)表明其后的值的类型。 使用这些组码和值对,可以将 DXF 文件组织到由记录组成的区域中,这些记录由组码和数据项目组成。 在 DXF 文件中,每个组码和值都各占一行。

DXF 文件由多个段组成,每段都以一个0和后跟字符串 SECTION 的组码开始, 其后是组码 2 和表示该段名称的字符串(例如,HEADER)。 每段都由定义其元素的组码和值组成。 每段都以一个0和后跟字符串 ENDSEC 的组码结束。

完整的结构如下:

HEADER 段。 包含图形的基本信息。 它由 AutoCAD 数据库版本号和一些系统变量组成。 每个参数都包含一个变量名称及其关联的值。
CLASSES 段。包含应用程序定义的类的信息,这些类的实例出现在数据库的 BLOCKS、ENTITIES 和 OBJECTS 段中。 类定义在类的层次结构中是固定不变的。
TABLES 段。包含以下符号表的定义:
APPID(应用程序标识表)

BLOCK_RECORD(块参照表)

DIMSTYLE(标注样式表)

LAYER(图层表)

LTYPE(线型表)

STYLE(文字样式表)

UCS(用户坐标系表)

VIEW(视图表)

VPORT(视口配置表)

BLOCKS 段。包含构成图形中每个块参照的块定义和图形图元。
ENTITIES 段。包含图形中的图形对象(图元),其中包括块参照(插入图元)。一般屏幕上显示的图形对像如直线,圆,弧等都在ENTITIES 段
OBJECTS 段。包含图形中的非图形对象。 除图元、符号表记录以及符号表以外的所有对象都存储在此段。 OBJECTS 段中的条目样例是包含多线样式和组的词典。
THUMBNAILIMAGE 段。包含图形的预览图像数据。 此段为可选

你所问的是立体(3DSOLID),它的编码比较复杂,建议你先把平面图元的DXF格式搞明白,再研究三维图元的格式,以下是一个500*150的矩形ENTITIES 段代码:

0
SECTION 段
2 段名称
ENTITIES 实体段
0 图元名称
LWPOLYLINE 优化多段线
5 图元名柄
B51
330
1F
100 子类标记
AcDbEntity
8 图层名
0
100 子类标记
AcDbPolyline
90 顶点数
4
70 多段线标志(按位编码);默认值为 0。1 = 闭合;128 = Plinegen

1
43 固定宽度(可选;默认值 = 0)。

0.0
10 顶点坐标X值(在 OCS 中),多个条目;每个顶点一个条目
134.0867442224547
20 顶点坐标Y值
111.6472309466625
10
634.0867442224547
20
111.6472309466625
10
634.0867442224547
20
-38.35276905333746
10
134.0867442224547
20
-38.35276905333746
0 段结束标记
ENDSEC
上面4组10,20的值分别是矩形的4个顶点的X和Y坐标

3DSOLID 三维实体组码

组码
说明

100
子类标记 (AcDbModelerGeometry)

70
建模格式版本号(当前值 = 1)

1
所有权数据(多行,每行 < 255 个字符)

3
所有权数据的附加行(如果前一个组 1 的字符串长度大于 255 个字符)(可选)

下面的是500*150*10的长方体ENTITIES 段代码,可能难看懂了,呵呵

0
SECTION
2
ENTITIES
0
3DSOLID
5
B51
330
1F
100
AcDbEntity
8
0
100
AcDbModelerGeometry
70
1
1
mogoo gi m o
1
ni ^ *+0;:,4 ^ *+0\^ [ nh ^ LR iqoqjqhook QK mk L*1 [:< mg nkekgeln moog
1
n fqfffffffffffffffj:rooh n:rono
1
>,27:>;:- {rn rn _nm mogqoqjqhook |
1
=0;& {rn rn {rn {m {rn {rn |
1
3*2/ {rn rn {rn {rn {l {n |
1
,7:33 {rn rn {rn {rn {rn {k {rn {m |
1
9><: {rn rn {rn {j {i {l {rn {h 90-(>-; ,6183: |
1
9><: {rn rn {rn {g {f {l {rn {no -:):-,:; ,6183: |
1
300/ {rn rn {rn {rn {nn {k |
1
/3>1:r,*-9><: {rn rn {rn mjkqjlknojiglkjmij flqnkggiklojhohlm no o o n n o o 90-(>-;@) V V V V |
1
9><: {rn rn {rn {nm {nl {l {rn {nk -:):-,:; ,6183: |
1
300/ {rn rn {rn {rn {nj {j |
1
/3>1:r,*-9><: {rn rn {rn mjkqjlknojiglkjmij flqnkggiklojhohlm o o o n n o o 90-(>-;@) V V V V |
1
<0:;8: {rn rn {rn {ni {nh {ng {nf 90-(>-; {i {rn |
1
9><: {rn rn {rn {mo {mn {l {rn {mm -:):-,:; ,6183: |
1
300/ {rn rn {rn {rn {ml {g |
1
/3>1:r,*-9><: {rn rn {rn mjkqjlknojiglkjmij ngqnkggiklojhohlm j o n o o o n 90-(>-;@) V V V V |
1
<0:;8: {rn rn {rn {mk {mj {mi {mh 90-(>-; {f {rn |
1
<0:;8: {rn rn {rn {mg {nn {mf {lo 90-(>-; {i {rn |
1
<0:;8: {rn rn {rn {nn {mg {ln {lm 90-(>-; {i {rn |
1
<0:;8: {rn rn {rn {ll {lk {nn {nf -:):-,:; {lj {rn |
1
:;8: {rn rn {rn {li rhj {lh hj {ng {lg 90-(>-; _h *1410(1 |
1
9><: {rn rn {rn {lf {ko {l {rn {kn -:):-,:; ,6183: |
1
300/ {rn rn {rn {rn {km {nm |
1
/3>1:r,*-9><: {rn rn {rn kqjlknojiglkjmijnm flqnkggiklojhohlm j n o o o o rn 90-(>-;@) V V V V |
1
<0:;8: {rn rn {rn {kl {ln {kk {kj 90-(>-; {nl {rn |
1
<0:;8: {rn rn {rn {ki {nj {kl {kh 90-(>-; {f {rn |
1
<0:;8: {rn rn {rn {nj {ki {kg {kf 90-(>-; {f {rn |
1
<0:;8: {rn rn {rn {lk {ll {nj {mh -:):-,:; {lj {rn |
1
:;8: {rn rn {rn {jo rhj {jn hj {mi {jm 90-(>-; _h *1410(1 |
1
<0:;8: {rn rn {rn {nh {ni {jl {jk 90-(>-; {i {rn |
1
<0:;8: {rn rn {rn {jj {ji {ni {lo -:):-,:; {ko {rn |
1
:;8: {rn rn {rn {lh rmjo {jh mjo {mf {jg 90-(>-; _h *1410(1 |
1
<0:;8: {rn rn {rn {ml {jf {nh {lm -:):-,:; {nl {rn |
1
:;8: {rn rn {rn {io rmjo {li mjo {ln {in 90-(>-; _h *1410(1 |
1
<0:;8: {rn rn {rn {mi {ng {jf {im 90-(>-; {lj {rn |
1
<0:;8: {rn rn {rn {ng {mi {jj {il -:):-,:; {lj {rn |
1
300/ {rn rn {rn {rn {ll {lf |
1
):-+:' {rn rn {rn {nf {ik |
1
):-+:' {rn rn {rn {nf {ij |
1
,+->687+r<*-): {rn rn {rn jokqjlknojiglkjmij flqnkggiklojhohlm no o n o V V |
1
9><: {rn rn {rn {rn {lj {l {rn {ii -:):-,:; ,6183: |
1
300/ {rn rn {rn {rn {jj {mo |
1
/3>1:r,*-9><: {rn rn {rn mjkqjlknojiglkjmij nigqnkggiklojhohlm j o rn o o o rn 90-(>-;@) V V V V |
1
<0:;8: {rn rn {rn {ih {jl {ji {ig 90-(>-; {mn {rn |
1
<0:;8: {rn rn {rn {jf {ml {mk {kh -:):-,:; {nl {rn |
1
<0:;8: {rn rn {rn {jl {ih {ml {kj -:):-,:; {mn {rn |
1
:;8: {rn rn {rn {io rj {if j {kk {ho 90-(>-; _h *1410(1 |
1
<0:;8: {rn rn {rn {mj {mk {ih {hn 90-(>-; {f {rn |
1
:;8: {rn rn {rn {jn rmjo {if mjo {kl {hm 90-(>-; _h *1410(1 |
1
<0:;8: {rn rn {rn {ji {jj {mj {kf -:):-,:; {ko {rn |
1
:;8: {rn rn {rn {hl rmjo {jo mjo {kg {hk 90-(>-; _h *1410(1 |
1
):-+:' {rn rn {rn {mh {hj |
1
):-+:' {rn rn {rn {im {hi |
1
,+->687+r<*-): {rn rn {rn jokqjlknojiglkjmij flqnkggiklojhohlm o o rn o V V |
1
<0:;8: {rn rn {rn {km {kk {mg {jk -:):-,:; {mn {rn |
1
:;8: {rn rn {rn {jh rhj {io hj {jl {hh 90-(>-; _h *1410(1 |
1
<0:;8: {rn rn {rn {kg {mf {lk {il 90-(>-; {ko {rn |
1
<0:;8: {rn rn {rn {mf {kg {km {ig -:):-,:; {ko {rn |
1
):-+:' {rn rn {rn {lo {hg |
1
,+->687+r<*-): {rn rn {rn mjkqjlknojiglkjmij nigqnkggiklojhohlm no rn o o V V |
1
<0:;8: {rn rn {rn {ln {kl {ll {im -:):-,:; {nl {rn |
1
):-+:' {rn rn {rn {jk {hf |
1
,+->687+r<*-): {rn rn {rn mjkqjlknojiglkjmij ngqnkggiklojhohlm no n o o V V |
1
:;8: {rn rn {rn {li rj {jn j {ll {go 90-(>-; _h *1410(1 |
1
:;8: {rn rn {rn {lh rj {jo j {lk {gn 90-(>-; _h *1410(1 |
1
/061+ {rn rn {rn jokqjlknojiglkjmij ngqnkggiklojhohlm no |
1
/061+ {rn rn {rn jokqjlknojiglkjmij nigqnkggiklojhohlm no |
1
/3>1:r,*-9><: {rn rn {rn jokqjlknojiglkjmij flqnkggiklojhohlm j rn o o o o n 90-(>-;@) V V V V |
1
<0:;8: {rn rn {rn {kk {km {ki {hn -:):-,:; {mn {rn |
1
:;8: {rn rn {rn {jh rj {hl j {ji {gm 90-(>-; _h *1410(1 |
1
):-+:' {rn rn {rn {hn {gl |
1
,+->687+r<*-): {rn rn {rn kqjlknojiglkjmijnm ngqnkggiklojhohlm j o o rn V V |
1
:;8: {rn rn {rn {if rhj {hl hj {ih {gk 90-(>-; _h *1410(1 |
1
,+->687+r<*-): {rn rn {rn mjkqjlknojiglkjmij ngqnkggiklojhohlm o rn o o V V |
1
):-+:' {rn rn {rn {kf {gj |
1
,+->687+r<*-): {rn rn {rn mjkqjlknojiglkjmij nigqnkggiklojhohlm o n o o V V |
1
/061+ {rn rn {rn jokqjlknojiglkjmij nigqnkggiklojhohlm o |
1
/061+ {rn rn {rn jokqjlknojiglkjmij ngqnkggiklojhohlm o |
1
,+->687+r<*-): {rn rn {rn kqjlknojiglkjmijnm flqnkggiklojhohlm no o rn o V V |
1
/061+ {rn rn {rn kqjlknojiglkjmijnm nigqnkggiklojhohlm no |
1
/061+ {rn rn {rn kqjlknojiglkjmijnm ngqnkggiklojhohlm no |
1
,+->687+r<*-): {rn rn {rn jokqjlknojiglkjmij ngqnkggiklojhohlm j o o rn V V |
1
,+->687+r<*-): {rn rn {rn jokqjlknojiglkjmij nigqnkggiklojhohlm j o o rn V V |
1
,+->687+r<*-): {rn rn {rn kqjlknojiglkjmijnm nigqnkggiklojhohlm j o o rn V V |
1
/061+ {rn rn {rn kqjlknojiglkjmijnm ngqnkggiklojhohlm o |
1
,+->687+r<*-): {rn rn {rn kqjlknojiglkjmijnm flqnkggiklojhohlm o o n o V V |
1
/061+ {rn rn {rn kqjlknojiglkjmijnm nigqnkggiklojhohlm o |
0
ENDSEC

B. dxf文件格式详解

dxf最初是Autodesk公司开发的用于AutoCAD与其它软件之间进行CAD数据交换的文件格式,是一种开源的CAD数据文件格式。dxf文件是一种矢量图像文件,是以二进制格式保存的,分为ASCII格式和二进制格式。两者格式区别就是占用空间大小的区别。
dxf文件是一个2D转换的格式,它是是由很多的“代码”和“值”组成的“数据对”构造而成,这里的代码称为“组码”,指定其后的值的类型和用途。每个组码和值必须为单独的一行的。
dxf文件使用任何制图软件都可以打开,方法就是(文件--导入),注意不是用打开的方式而是导入!ASCII格式的dxf文件可以用文本编辑器进行查看,比如DWG/DWF/DXF查看器,Free DWG Viewer。

C. DXF格式详细说明

DXF文件的结构很清楚,具体如下:
1. 标题段(HEADER )
有关图形的一般信息都可以DXF 文件的这一节找到,每一个参数具有一个变量名和一个相关值。
2. 表段
这一段包含的指定项的定义,它包括:
a、
线形表(LTYPE)
b、
层表(LYER)
c、
字体表(STYLE)
d、
视图表(VIEW)
e、
用户坐标系统表(UCS)
f、
视窗配置表(VPORT)
g、
标注字体表(DIMSTYLE)
h、
申请符号表(APPID)
3. 块段(BLOCKS)
这一段含有块定义实体,这些实体描述了图形种组成每个块的实体。
4. 实体段(ENTITIES )
这一段含有实体,包括任何块的调用。
5. END OF FILE(文件结束)

下面是对DXF的基本结构举一实例进行说明:
0 0 后接SECTION
SECTION 表明这是一个段的开始
2 2 后接的是段名
HEADER 说明该段是HEADER 段(标题段)
9
$ACADVER 文件是由AUTOCAD 产生的
1
AC1008
9 9 后接 $UCSORG
$UCSORG 用户坐标系原点在世界坐标系中的坐标
10 10 对应 X
0.0 X 的值
20 20 对应 Y
0.0 Y 的值
30 30 对应 Z
0.0 Z 的值
9
$UCSXDIR 这是一段不太相关的部分,略去
10
1.0
... ....
9 9 后接 $EXTMIN
$EXTMIN 说明三维实体模型在世界坐标系中的最小值
10 10 对应 X
-163.925293 X 的值
20 20 对应 Y
-18.5415860.0 Y 的值
30 30 对应 Z
78.350945 Z 的值
9 9 后接 $EXTMAN
$EXTMAX 说明三维实体模型在世界坐标系中的最大值
10 10 对应 X
202.492279 X 的值
20 20 对应 Y
112.634300 Y 的值
30 30 对应 Z
169.945602 Z 的值
0 0 后接 ENDSEC
ENDSEC 说明这一段结束了
0 0 后接SECTION
SECTION 表明这是一个段的开始
2 2 后接的是段名
TABLES 说明该段是TABLES 段(表段)
... ... ... ... 该段对我们不太相关,此处略去不进行说明
0 0 后接 ENDSEC
ENDSEC 说明这一段结束了
0 0 后接SECTION
SECTION 表明这是一个段的开始
2 2 后接的是段名
ENTITIES 说明该段是ENTITIES 段(实体段)这是我
0 们要详细说明的段,该段包含了所有实体的
POLYLINE 点的坐标和组成面的点序。0后接POLYLINE
8 表明以下数据是对于一个新的实体;
OBJECT01 8后接的字符串是这个实体的名称
66
1
70 从66 1 到70 64
64 说明该实体是由许多小平面组成的
71
38 71 38说明该实体共有38 个点
72
72 72 72 说明该实体由72 个三角形构成
0 0 VERTEX
VERTEX 表明后面紧跟着的是实体的数据
8
OBJECT01
10 对应X 坐标
-163.925293 X 的值
20 对应Y 坐标
-17.772665 Y 的值
30 对应Z 坐标
128.929947 Z 的值
70 70 192
192 表明上面的数据信息是点的坐标
0 每一个从0 VERTEX 到70 192 之间
VERTEX 的一小段是点的坐标
... ... ...
70
192
0
VERTEX
8
OBJECT01
10
0
20
0
30
0 当70 后跟128 时,表明该实体的每个点的坐标数据已经记录
70 完了,下面紧跟着的是记录这些点是以什么样的方式组合成各
128 个三角形。
71 71、72、73 后面跟着的值表明某一个三角形是第二个、第
2 一个、第四个点构成的,点的顺序是按照记入DXF 文件的顺
72 序。当某一值为负数时,则表明该点到下一点的线不要画出,
1 如果要画三维实体的线型图,就必须使用这一特性,否则线条
73 将会出现紊乱。
-4
0
VERTEX
... ... ... ...
0 0 后接SEQEND 表明该实体的数据已经全部记录完了
SEQEND
8
OBJECT01
0
POLYLINE 0 后接POLYLINE 表明以下又是一个新的实体
... ... ... ...
0
ENDSEC 0 后接ENDSEC 表明这是该段的结尾
0
EOF 0后接EOF 表明这个DXF 文件结束了

在 DXF文件中,我们最关心的是如何得到模型上各个点的坐标,并且用这些点连成许多个三用形,构成面,进而绘制出整个模型。在DXF文件的结构中,我们已经看到,DXF文件先叙述实体上各个点的坐标,然后叙述实体上有多少个面,每个面由哪些点构成。这样,我们至少需要2个数组来存储一个实体的信息,一个用于存储点的坐标,一个用于存储点序,我们可以把这2个数组放到一个结构中,如果模型中实体的数目不止一个是,我们就用这个结构来定义一个数组。在本文中,我们使用 Visual C++ 6.0 来写一个读取DXF文件的小程序。
在实际应用中,模型中实体的数目以及实体中点和面的数目都是不定的,为了有效地利用内存,我们选择MFC类库中的聚合类CobArray类所创建的对象vertex, sequence来存储和管理实体的点坐标和点序。
CObArray类是一个用来存放数组类的聚合类,它能根据要存进来的数组(或结构)多少自动进行自身大小的高速,而且这个类本身具有的成员函数使得我们对它的对象的操作更加方便、快捷,用它编的程序也易于读懂。
三维实体模型的模型信息中的一部分信息可以在标题段中读出,通过读取变量名为$UCSORG的三个变量,可以得到三维实体在世界坐标系中自身所定义的用户坐标系原点的三维坐标。通过读取$EXTMAX,$EXTMIN可以获知三维实体在世界坐标系中的范围,而其它部分的信息只有读完了全部DXF文件后才可以通过计算确定。对于三维实体模型的全部点坐标、点序,可以在实体段中按照前面介绍的DXF文件基本结构读出。现在我们开始写这个程序。
先建立一个头文件HEAD.H定义如下的结构:VERTEX, SEQUENCE和类CVertex, Csequence。
typedef struct {
float x,y,z;
}VERTEX; 结构VERTEX用来存储点的坐标

typedef struct {
int a,b,c;
}SEQUENCE; 结构SEQUENCE用来存储实体的面的组成

typedef struct {
char obName[20]; 定义结构myVertex来存储实体的名字,点的坐标以及面的组成,
CObArray Vertex; 其中,点的坐标和面的组成是由聚合类CObArray定义的对象来
CObArray Sequence; 在存储的,我们可以把VERTEX结构和SEQUENCE结构加入到
}myVertex; 这两个对象中保存

class CVertex : public CObject
{ 因为CObArray类的对象中只能加入由CObject派生的对象,所以
protected: 我们还需要建立一个由CObject类派生的CVertex类。在CVertex类
CVertex(); 中有一个VERTEX结构的变量:m_vertex,信息实际上是存储在这
DECLARE_DYNCREATE(CVertex) 个变量中的。
virtual ~CVertex();

// Attributes
public: 我们还需要建立一个由CObject类派生的CVertex类。在CVertex类
CVertex(VERTEX& ver); 中有一个VERTEX结构的变量:m_vertex,信息实际上是存储在这个变量中的,函数CVertex(VERTEX& ver)把VERTEX结构的变量
VERTEX m_vertex; 存入CObArray对象中。

};

class CSequence : public CObject
{ 这也是一个由CObject类派生的类,作用和刚才CVertex类一样,
protected: 只不过Csequence类是用来存储实体中面的组成(点序)的。
CSequence();
DECLARE_DYNCREATE(CSequence)
virtual ~CSequence();

public:
CSequence(SEQUENCE& sequ);
SEQUENCE m_sequence;
};

声明好结构与类后,我们还需要建立一个.CPP文件,来定义几个函数。
IMPLEMENT_DYNCREATE(CVertex,CObject)
CVertex::CVertex()
{
}

CVertex::~CVertex() 构造函数和销毁函数都是空的
{
}

CVertex::CVertex(VERTEX& ver)
{ 这个函数的作用是:把一个VERTEX结构的数据存入变量m_vertex中
m_vertex = ver; 它是这个类中最重要的一环。
}

IMPLEMENT_DYNCREATE(CSequence,CObject)
CSequence::CSequence()
{
} Csequence类的定义与CVertex类的定义差不多,只是其中的参数
m_sequence的类型和CVertex类中的参数my_vertex的类型不一样
CSequence::~CSequence()
{
}

CSequence::CSequence(SEQUENCE& sequ)
{
m_sequence=sequ;
}

然后用结构myVertex(如前所定义)定义一个指针*myData,目的在于根据模型中实体的多少来给指针分配合适的内存,使之成为结构数组。
定义一个函数,用于确定模型中有多少个实体,函数的返回值就是实体的个数。
int CJupiterView::getObjectNumber()
{
char str1[10],str2[10];
char name[]="theFirst";
int num;

num=0;

FILE* fp;
fp=fopen("data.dxf","r"); 打开DXF文件,data.dxf
while(! feof(fp) && ! ferror(fp)) 这个函数是根据实体的名字来判断实体的个数的
{ 所以函数只读取实体的名字,一旦出现新的实体名字,
fscanf(fp,"%s\n",str1); 实体数就加一。
if(strcmp(str1,"VERTEX")==0)
{
fscanf(fp,"%s\n",str2); 打开DXF文件,data.dxf
fscanf(fp,"%s\n",str2) ;这个函数是根据实体的名字来判断实体的个数的
if(strcmp(name,str2) != 0) 所以函数只读取实体的名字,一旦出现新的实体名字,
{实体数就加一。
strcpy(name,str2);
num++;
}
}
}
fclose(fp);

return num;
}

以下是读取实体点的坐标以及点序的程序代码,在这个程序中,读取了模型中点的坐标的最大值与最小值、实体的名字、点的坐标,以及点序。
void CJupiterView::OnFileInput()
{
// TODO: Add your command handler code here
FILE* fp,*fp2;
int i,k,j;
float tempX,tempY,tempZ;

float xMin,yMin,zMin,xMax,yMax,zMax,Max;
int lab;
char str1[20],str2[20],str[20],HT;
char myName[20];
int myNumber;
VERTEX tempVertex;
SEQUENCE tempSequence;

typedef struct {
float x,y,z,max;
}MAX;

MAX max;
HT=9;

objectNumber=getObjectNumber();
myData=new myVertex[objectNumber];

fp=fopen(FileName,"r");

i=0;
j=0;
k=0;

myNumber=-1;
strcpy(myName,"ObjectName");

while(! feof(fp) && ! ferror(fp))
{
fscanf(fp,"%s\n",str);

if(strcmp(str,"$EXTMIN")==0)
{
fscanf(fp,"%s\n",str1);
fscanf(fp,"%f\n",&xMin);

fscanf(fp,"%s\n",str1);
fscanf(fp,"%f\n",&yMin);

fscanf(fp,"%s\n",str1);
fscanf(fp,"%f\n",&zMin);
}

if(strcmp(str,"$EXTMAX")==0)
{
fscanf(fp,"%s\n",str1);
fscanf(fp,"%f\n",&xMax);

fscanf(fp,"%s\n",str1);
fscanf(fp,"%f\n",&yMax);

fscanf(fp,"%s\n",str1);
fscanf(fp,"%f\n",&zMax);

max.x=max(abs(xMax),abs(xMin));
max.y=max(abs(yMax),abs(yMin));
max.z=max(abs(zMax),abs(zMin));
max.max=max(max.x,max.y);
max.max=max(max.max,max.z);

}

if(strcmp(str,"VERTEX") ==0)
{
fscanf(fp,"%s\n",str1);
fscanf(fp,"%s\n",str1);

if(strcmp(myName,str1) != 0)
{
myNumber++;
strcpy(myName,str1);
strcpy((myData+myNumber)->obName,myName);
}

fscanf(fp,"%s\n",str2);
fscanf(fp,"%f\n",&tempX);

fscanf(fp,"%s\n",str2);
fscanf(fp,"%f\n",&tempY);

fscanf(fp,"%s\n",str2);
fscanf(fp,"%f\n",&tempZ);

fscanf(fp,"%d\n",&lab);
fscanf(fp,"%d\n",&lab);

if(lab == 192)
{
tempVertex.x=tempX / max.max;
tempVertex.y=tempY / max.max;
tempVertex.z=tempZ / max.max;
(myData+myNumber)->Vertex.Add(new CVertex(tempVertex));

}

if(lab == 128)
{
fscanf(fp,"%s\n",str1);
fscanf(fp,"%f\n",&tempX);

fscanf(fp,"%s\n",str1);
fscanf(fp,"%f\n",&tempY);

fscanf(fp,"%s\n",str1);
fscanf(fp,"%f\n",&tempZ);

tempSequence.a=abs(tempX);
tempSequence.b=abs(tempY);
tempSequence.c=abs(tempZ);

(myData+myNumber)->Sequence.Add(new CSequence(tempSequence));

}

}
}
fclose(fp);
}

D. dxf文件怎么打开

dxf文件是一个2D转换的格式,它是是由很多的“代码”和“值”组成的“数据对”构造而成,这里的代码称为“组码”,指定其后的值的类型和用途。每个组码和值必须为单独的一行的。下面和我一起看看吧!

使用autocad软件打开

1dxf文件默认打开方式为autocad。可在autocad中执行命令:dxfin,即可打开dxf文件。

使用caxa电子图版打开

方法一:点击文件按钮,在下拉菜单中点击打开,在打开的对话框中选择dxf文件,双击打开即可。

方法二:直接双击dxf文件,在打开方式里选择其他程序,找到“caxa电子图版”后双击,即可打开dxf文件了。

相关阅读:什么是dxf文件

DXF是Autodesk(欧特克)公司开发的用于AutoCAD与其它软件之间进行CAD数据交换的CAD数据文件格式,DXF文件打开的具体操作步骤如下:

1、首先我们打开电脑里的`浏览器在网络中搜索下载CAD编辑器,选择任意一款CAD编辑器进行下载及安装。

2、安装并打开任意一款CAD编辑器工具,点击“打开”按钮以选择相应的DXF图纸文档进行打开。

3、待打开DXF图纸文档后,我们可能更喜欢在黑色背景下进行编辑操作,对此切换到“查看器”选项卡,点击“黑色背景”按钮即可。

4、有时为了对DXF图纸的细节部分进行编辑操作,我们可以在“位置”列表中选择相应的“区域缩放”工具,对图纸细节部分进行放大。

5、之后切换到“编辑器”选项卡,开启“捕捉”功能后,点击图纸对象进行选中操作,就可以对其参数进行修改了。

6、选中DXF的图形的情况下,就可以在其“属性”窗口中对“线条颜色”和“线条宽度”进行设置了。

7、当然,也可以对DXF的图形进行填充操作,点击“绘图”列表中的“填充图案”按钮,即可对封闭区域进行填充。

dxf文件怎么转换成dwg

1、将风云CAD转换器安装在电脑上之后(可以在浏览器或软件管家中搜索找到),点开主界面,点击“DWG DXF互转”。

2、点击进入之后,点击界面证件的“添加文件”,也可以通过点击左下方的“添加文件夹”将文件批量导入(如果需要批量转换可以这样操作)。

3、将需要转换的dxf文件导入之后,设置输出目录,保持默认设置就可以了,这样比较方便找到。

4、就可以点击右下角“开始转换”,稍等几秒钟,转换就会完成啦!

5、转换完成之后,点击“打开文件”,就可以看到转换完成的文件。

6、可以在原文件夹找到转换之后变成dwg格式的文件。

E. DXF是什么格式 DXF文件用什么软件打开

DXF是AutoCAD的绘图交换文件,可以用迅捷CAD编辑器打开。请参照以下步骤。

1、首先在电版脑上双击迅捷CAD编辑器软件快权捷方式,打开软件。

F. dxf文件读取

dxf是AutoCAD ® DXFTM (Drawing eXchange Format) 向量抄图型文件。
JPEG 是 JPEG 工作组的 图像 文件 格式。
Opengl 可以读取 SGI 图像文件 和 BMP 图像文件,不直接支持 dxf和JPEG。
你需要自己写程序。

dxf文件是 ASCII, 可识别,例如 读 Arc (弧)和弧线参数,然后你用Opengl画弧线,读 Spline (样条曲线),和样条曲线参数,然后你用Opengl画曲线,读 3DLine,然后你用Opengl画三维线,。。。。

工作量很大。不如买现成软件。

G. DXF格式文件数据提取

图元信息提取:

下面具体介绍该工程中读取的几种图元。

对图元信息的提取需要结合DXF参考手册以及库文件(主要涉及【dl_entities.h】和【dl_dxf.cpp】),选取实际所需数据进行自定义图元信息构造,比如说绘制二维平面图形,则不需要z轴坐标,此时只需要读取data中x,y值即可,而在绘制ARC时,需要考虑到OCS到WCS的变化,而库文件读取的data中没有涉及到拉伸方向的读取,所以此时需要对库文件进行一定修改,也主要是修改前面提及到的两个文件(这一点将在介绍绘制ARC时进行具体介绍)

首先在库文件【dl_entities.h】中可以看到每一种图元信息数据格式的定义,每一个数据代表的具体信息在【dl_dxf.cpp】中可以看到它的组码,再结合DXF参考手册,就可以理解数据含义并进行绘制。

【POINT】

void MyDXFReader::addPoint(const DL_PointData & data)

{

}

点的构造非常简单,只需要data.x, data.y

【LINE】

void MyDXFReader::addLine(const DL_LineData & data)

{

}

线的构造也非常简单,直接读取开始点和结束点,组成一条线,data.x1, data.y1; data.x2, data.y2

【CIRCLE】

void MyDXFReader::addCircle(const DL_CircleData & data)

{

}

圆的构造需要圆心和半径。读取data.cx, data.cy,data.radius

【ELLIPSE】

void MyDXFReader::addEllipse(const DL_EllipseData & data)

{

}

椭圆的构造需要中心点,相对于中心点的主轴点,起始角和终止角(非整椭圆)所以读取的参数有data.cx, data.cy,data.mx, data.my,data.angle1, data.angle2

【ARC】

void MyDXFReader::addArc(const DL_ArcData& data)

{

}

圆弧所需数据主要有圆心,半径,起始角,终止角以及三个方向的拉伸方向值。因为其中心点是在OCS中表示的坐标值,而在绘制时应该使用WCS,所以此时需要根据拉伸方向进行坐标转换。对于拉伸方向的值原dxflib库并没有进行提取,直接认为使用的是默认值。所以需要自行在DL_ArcData构造函数和读取函数中进行值的添加。

【文档参考】

【OCS与WCS介绍】

http://bbs.xdcad.net/forum.php?mod=viewthread&tid=667490&highlight=trans

【OCS到WCS的具体转换】

文献:潘晓. 基于CAD图的提取运动控制信息方法的研究与实现[D]. 燕山大学, 2006.(重要)

参考上述文献中的算法就能够进行坐标的转换。

【POLYLINE 和 LWPOLYLINE】

void MyDXFReader::addPolyline(const DL_PolylineData& data)

{

}

void MyDXFReader::addVertex(const DL_VertexData& data)

{

}

在dxflib库中多段线图元和优化多段线图元均是通过这两者读出,首先在addPolyline(const DL_PolylineData& data)中获得点数(data.number)和标志位(data.flags),其中点数表示了addVertex中的点数,而标志位则表示了该多段线的闭合。需要注意的是在读写LWPOLYLINE时所构成的点需要考虑点的凸度,如果凸度不为0,则需要进行弧的绘制。查看参考手册可知,此时也需要考虑坐标点OCS到WCS的转换。

【文档参考】

【DXF文件中将多段线凸度转换成圆弧】

https://blog.csdn.net/eickandy/article/details/48317855

【DIMENSION】

DXF文件中有多种标注。根据DXF参考手册可以为每种标注构造相应结构。标注的绘制主要是得到插入点与插入值,然后再结合标注点绘制出标注信息。

比如对齐标注。

void MyDXFReader:: addDimAlign(const DL_DimensionData & data1,

const DL_DimAlignedData & data2)

{

}

由DXF参考手册可知其标注插入点为data1.dpx, data1.dpy,插入值的中点为data1.mpx,data1.mpy。再由data2得到标注点信息data2.epx1, data2.epy1和data2.epx2, data2.epy2。再根据DXF参考手册该页面最下面提供给的标注图形参考,既可绘制出标注信息。其他几个标注类似于此进行添加。

【TEXT和MTEXT】

对于文本信息的添加,TEXT指单行文本,MTEXT指多行文本。在本工程中只读出了文本内容并显示在所指定处,并不设定其相应文本样式。下面简单介绍添加多行文本。

void MyDXFReader::addMText(const DL_MTextData & data)

{

}

主要读取插入点data.ipx, data.ipy以及文本内容data.text。然后将文本显示在指定点附近。

【INSERT】

对于插入块的读取,需要借助于Block段的读取,即将所有的Block进行存储,在插入块时,遍历存储的Block,找到对应名字的块进行插入,因为块中的图元与实体段中的图元种类类似,所以本工程将实体段中的图元与块段中的图元进行分别存储,只有插入块的图元能够被绘制,而实体段中所有的图元都将被绘制。

void MyDXFReader::addInsert(const DL_InsertData & data)

{

}

void MyDXFReader:: addBlock(const DL_BlockData & data)

{

}

选取data.name,遍历存储的Block,找到需要插入的块。

阅读全文

与dxf文件组码操作手册相关的资料

热点内容
盲盒开箱app有哪些 浏览:422
win10激活脚本之家 浏览:191
魔鬼作坊工具包 浏览:185
ae源文件下载 浏览:520
如何将照片内容转换成pdf文件 浏览:137
浙里办app如何更换手机号码 浏览:244
电子资料文件有哪些 浏览:241
猥琐猫表情教程 浏览:599
android音频文件格式 浏览:458
漫画脸app哪里可以下载 浏览:959
购买欢乐升级欢乐豆 浏览:282
学习智能机器人用什么编程最好 浏览:655
苹果手机如何管控app 浏览:633
mn文件夹 浏览:590
安卓平板通用刷机包下载 浏览:751
安卓获取内部存储路径 浏览:880
写代码两台显示器 浏览:327
unitypackage压缩文件 浏览:493
奕心安卓 浏览:563
使用土地的有关证明文件包含哪些 浏览:493

友情链接