社区
图形处理/算法
帖子详情
请教关于cad的dxf实体的数据存储(再现等)请大家帮忙
lizilily
2004-09-22 02:20:27
我想存储dxf文件中的线,园,椭圆等实体,这些实体的数据有些不同,线只需要记录起始点和结束点坐标,圆弧记录圆心、半径、起始角和结束角,椭圆则记录圆心、长轴坐标,短轴相对长抽比例,我想知道我怎么设计结构用于存储这些值,因为我在随后的程序中还要用这些值去画图,请大家帮忙。谢谢!
...全文
518
11
打赏
收藏
请教关于cad的dxf实体的数据存储(再现等)请大家帮忙
我想存储dxf文件中的线,园,椭圆等实体,这些实体的数据有些不同,线只需要记录起始点和结束点坐标,圆弧记录圆心、半径、起始角和结束角,椭圆则记录圆心、长轴坐标,短轴相对长抽比例,我想知道我怎么设计结构用于存储这些值,因为我在随后的程序中还要用这些值去画图,请大家帮忙。谢谢!
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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
(Drawing Exchange Format)文件,这是一种用于交流二维绘图
数据
的标准格式。
DXF
文件通常包含线条、弧线、文字等图形元素,是许多工程和设计软件之间交换
数据
的首选格式。...
CAD
DXF
读取
数据
MFC C++
在本文中,我们将深入探讨如何使用MFC(Microsoft Foundation Classes)和C++在Visual Studio 2008环境下开发一个程序来读取和显示
CAD
(计算机辅助设计)
DXF
(Drawing Exchange Format)文件中的
数据
。
DXF
是一种广泛...
C++ 读取auto
cad
DXF
文件
6. **错误处理**:在解析过程中,可能出现格式错误、无效
数据
等问题,需要有适当的错误处理机制,确保程序的健壮性。 7. **优化与性能**:对于大型
DXF
文件,高效的内存管理和流式读取策略是必要的,以避免一次性...
C读
DXF
源程序及Auto
CAD
中的
DXF
参考文件
DXF
(Drawing Exchange Format)是Auto
CAD
开发的一种用于二维绘图
数据
交换的文件格式,它允许用户在不同的
CAD
软件之间交换设计
数据
。本资源包含一个C语言编写的程序,用于读取
DXF
文件,以及相关的Auto
CAD
DXF
参考...
用java解析
DXF
文件中的
实体
信息
在本主题中,我们关注的是如何利用Java解析
DXF
(Drawing Exchange Format)文件,这是一种由Auto
CAD
软件生成的二进制或ASCII格式的文件,用于
存储
二维图形
数据
。
DXF
文件通常包含各种几何
实体
,如圆(circle)、椭圆...
图形处理/算法
19,472
社区成员
50,678
社区内容
发帖
与我相关
我的任务
图形处理/算法
VC/MFC 图形处理/算法
复制链接
扫一扫
分享
社区描述
VC/MFC 图形处理/算法
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章