社区
图形处理/算法
帖子详情
请教关于cad的dxf实体的数据存储(再现等)请大家帮忙
lizilily
2004-09-22 02:20:27
我想存储dxf文件中的线,园,椭圆等实体,这些实体的数据有些不同,线只需要记录起始点和结束点坐标,圆弧记录圆心、半径、起始角和结束角,椭圆则记录圆心、长轴坐标,短轴相对长抽比例,我想知道我怎么设计结构用于存储这些值,因为我在随后的程序中还要用这些值去画图,请大家帮忙。谢谢!
...全文
443
11
打赏
收藏
请教关于cad的dxf实体的数据存储(再现等)请大家帮忙
我想存储dxf文件中的线,园,椭圆等实体,这些实体的数据有些不同,线只需要记录起始点和结束点坐标,圆弧记录圆心、半径、起始角和结束角,椭圆则记录圆心、长轴坐标,短轴相对长抽比例,我想知道我怎么设计结构用于存储这些值,因为我在随后的程序中还要用这些值去画图,请大家帮忙。谢谢!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
asd123yx
2004-12-15
打赏
举报
回复
DXF数据接口
每个CAD系统都有自己的数据文件,数据文件分图形数据文件、几何模型文件和产品模型文件几种。数据文件的格式与每个CAD系统自己的内部数据模式密切相关,而每个CAD系统自己内部的数据模式一般是不公开的,也是各不相同的。由于用户使用的需要,就有数据交换文件概念的出现。
DXF为AutoCAD系统的图形数据文件,DXF虽然不是标准,但由于AutoCAD系统的普遍应用,使得DXF成为事实上的数据交换标准。DXF是具有专门格式的ASCII码文本文件,它易于被其它程序处理,主要用于实现高级语言编写的程序与AutoCAD系统的连接,或其它CAD系统与AutoCAD系统交换图形文件。
1 DXF文件结构
一个完整的DXF文件是由四个段和一个文件结尾组成的。其顺序如下:
(1)标题段,记录AutoCAD系统的所有标题变量的当前值或当前状态。这些标题变量记录了AutoCAD系统的当前工作环境。例如,AutoCAD版本号、插入基点、绘图界限、SNAP捕捉的当前状态、珊格间距、式样、当前图层名、当前线型和当前颜色等;
(2)表段,包含了四个表,每个表又包含可变数目的表项。按照这些表在文件中出现的顺序,它们依次为线型表、图层表、字样表和视图表;
(3)块段,记录定义每一块时的块名、当前图层名、块的种类、块的插入基点及组成该块的所有成员。块的种类分为图形块、带有属性的块和无名块三种。无名块包括用HATCH命令生成的剖面线和用DIM命令完成的尺寸标注;
(4)元素段,记录了每个几何元素的名称、所在图层的名称、线型名、颜色号、基面高度、厚度以及有关几何数据;
(5)文件结束,标识文件结束。
DXF文件每个段由若干个组构成,每个组在DXF文件中占有两行。组的第一行为组代码,它是一个非零的正整数,相当于数据类型代码,每个组代码的含义是由AutoCAD系统约定好的,以FORTRAN “I3”格式(即向右对齐并且用三字符字段填满空格的输出格式)输出。组的第二行为组值,相当于数据的值,采用的格式取决于组代码指定的组的类型。组代码和组值合起来表示一个数据的含义和它的值。组代码范围见下表。需要注意的是,在AutoCAD系统中组代码既用于指出如下表所示的组值的类型,又用来指出组的一般应用。组代码的具体含义取决于实际变量、表项或元素描述,但“固定”的组代码总具有相同的含义,如组代码“8”总表示图层名。
组代码范围 跟随值的类型
0-9 串
10-59 浮点
60-79 整数
210-239 浮点
999 注释
1000-1009 串
1010-1059 浮点
1060-1079 整数
表6.3 组代码范围
一个DXF文件的框架如下:
0 ......段开始
SECTION
2
HEADER ......该段为标题段
9
$ACADVER ......下面依次描述所有标题变量
1
AC1003
.
.
.
0
ENDSEC ......标题段结束
0
SECTION ......段开始
2
TABLES ......该段为表段
0
TABLE ......表开始
2
LTYPE ......该表为线型表
.
.
.
0
ENDTAB ......线型表结束
0
TABLE
2
LAYER ......图层表开始
.
.
.
0
ENDTAB ......图层表结束
0
TABLE
2
STYLE ......字样表开始
.
.
.
0
ENDTAB ......字样表开始
0
TABLE
2
VIEW ......视图表开始
.
.
.
0
ENDTAB ......视图表结束
0
ENDSEC ......表段结束
0
SECTION
2
BLOCKS ......块段开始
0
BLOCK ......块开始
.
.
.
ENDBLK ......块结束
.
.
.
0
ENDSEC ......块段结束
0
SECTION
2
ENTITIES ......元素表开始
0
xxxxxxx ......开始的元素
.
.
.
0
xxxxxxx ......又一个元素开始
.
.
.
0
ENDSEC ......元素段结束
0
EOF ......文件结束
2 DXF文件接口程序设计
DXF文件格式的设计充分考虑了接口程序的需要,它能够容易地跳过没有必要关心的信息,同时又能方便地提取所需要的信息。只要记住按何顺序处理各个组并跳过不关心的组即可。但编写一个输出DXF文件的程序是比较困难的,因为必须保持图形的一致性以使AutoCAD系统接受它。AutoCAD系统允许在一个DXF文件中省略许多项并且仍可获得一个合法的图形。如果不需要设置任何标题变量,那么整个HEADER段都可以省略。在TABLES段中的任何一个表,在不需要时也可以略去,并且事实上如果对它不作任何处理时,整个表段也可以去掉。如果在LTYPE表中定义了线型,则该表必须在LAYER表之前出现。如果图中没有使用块定义,则可以省略BLOCKS段。如果有,那么它必须出现在ENTITIES段之前。EOF必须出现在文件的末尾。
3 DXF文件格式存在的问题
(1)由于DXF文件制定的较早,存在很多的不足。不能完整地描述产品信息模型,产品的公差、材料等信息根本没有涉及。即使产品的几何模型,由于仅仅保留了原有系统数据结构中的几何和部分属性信息,大量的拓扑信息已不复存在,也是不完整的;
(2)DXF文件格式也不合理,文件过于冗长,使得文件的处理、存放、传递和交换不方便。另外,复杂的文件格式也使得编写一个读、写完整的DXF数据文件的程序接口是件不容易的工作。
随着CAD/CAM技术的发展和CAD/CAM系统应用的日益广泛,不同系统和系统不同子系统间的数据交换问题变得重要和迫切了,直接推动国家或国际上通用的数据交换文件标准的制定。
asd123yx
2004-12-15
打赏
举报
回复
我刚找到的:大家先看看做好了
告诉我一声
我也正准备做这个!!
yanxiuxiaofei@126.com
我们使用 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;
sdwalnut1
2004-09-25
打赏
举报
回复
dxf的文件格式,可以在autocad的帮助中或明经通道、网上其他地方很多的。
你说的这些存储方式,dxf早就采用了。
比如一条线:
你存储的时候可以按照下面的方式:
类型:直线
线型:实线
线宽:10
起始点:x,y
。。。
类型:圆
圆心:x,y
...
读的时候,读出类型,然后根据类型,逐个解析下面的内容。基本就是这样了。
syy64
2004-09-23
打赏
举报
回复
程序应该是这样的:
定义
typedef CTypedPtrList<CPtrList, Cline*> ClineList;
ClineList lineList;
CDXF* pData=new CLine;
lineList.AddTail(pData);
....
取:
POSITION pos;
m = lineList.GetCount();
for(i=0;i<m;i++)
{
pos = listList.FindIndex(i);
pData = listList.GetAt(pos);
}
syy64
2004-09-22
打赏
举报
回复
dxf变成图像,采取矢量数据栅格化。
lizilily
2004-09-22
打赏
举报
回复
当然了,我就是要做这种格式的图像文件读取数据,不然合什么有关,我们已经做过bmp的,想开发新的图形格式
xiaonian_3654
2004-09-22
打赏
举报
回复
这和dxf有什么关系?
lizilily
2004-09-22
打赏
举报
回复
我用vc做程序,我是用坐标值控制电机运行,就是得到这些数据然后我做插补(拟合)控制电机运动,画出图形
xiaonian_3654
2004-09-22
打赏
举报
回复
你在那里画 呀?
lizilily
2004-09-22
打赏
举报
回复
对亚
xiaonian_3654
2004-09-22
打赏
举报
回复
dxf文件是ASCII文件
C# 读取Auto
cad
DXF
文件图形
数据
C# 读取Auto
cad
DXF
文件图形
数据
导出excel
数据
可以查看
Auto
CAD
绘图交换文件
DXF
实体
对象说明
DXF
文件为Auto
CAD
的绘图交换文件格式,文件可以用记事本打开,本压缩文件包含
DXF
格式官方文档,和作者在开发过程中关于点、线、圆弧、圆、图层、线型以及文字等
DXF
实体
对象的示例文件以及注释文件,希望能够对于相关开发人员有一点帮助。
易语言-深入了解
数据
类型
易语言-深入了解
数据
类型各种
数据
类型在内存中的
存储
情况通过实战游戏对游戏进行读写功能CALL的调用加深理解01.简介02.准备工作03.字节型04.短整数型05.整数型06.长整数型07.小数型08.双精度小数型09.逻辑型10.日期时间型11.文本型12.字节集13.
DXF
小练习-喇叭公告14.
DXF
小练习-透明无敌
服装
CAD
DXF
转换软件 AAMA格式互转完美破解版 可以打开格博、力克、富怡多款
CAD
文件,并且转换出标准的
DXF
或AAMA(特别推荐珍藏版)
服装
CAD
DXF
转换软件 AAMA格式互转完美破解版 可以打开格博、力克、富怡多款
CAD
文件,并且转换出标准的
DXF
或AAMA(特别推荐珍藏版)
Auto
CAD
DXF
文件官方文档
自己收集的
dxf
的官方文档,非常详细的解释了
dxf
的结构,可以作为开发相应的
dxf
文件处理软件的参考,由于我做过这方面的工作,所以大家对于
dxf
文件的结构有什么疑问,或许我可以帮上忙。QQ:291402127
图形处理/算法
19,468
社区成员
50,698
社区内容
发帖
与我相关
我的任务
图形处理/算法
VC/MFC 图形处理/算法
复制链接
扫一扫
分享
社区描述
VC/MFC 图形处理/算法
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章