|
操作图形数据库:
AcDbDatabase类代表 AutoCAD 图形文件,每个 AcDbDatabase 对象都包含许多系统变量、符号表、符号表记录、实体和组成图形的其他对象。
AcDbDatabase 类提供了如下的几类成员函数:
访问所有符号表。
读写 DWG 文件。
获得和设置数据库的特性。
执行多种数据库层的操作,例如写块和深层克隆。
获得和设置系统变量。
一定要将图形数据库(AcDbDatabase )和文档( AcApDocument )区分开,前者代表了 AutoCAD 图形文件,后者仅仅是为了实现 MDI (多文档用户界面)而提供的一个接口而已。
每个打开的图形都有一个关联的 AcApDocument 对象, AcApDocument 对象包含了一些信息,例如文件名称、MFC 文档对象、当前数据库和当前图形的保存格式等。除了这些方面之外,在其他的任何情况下,请忘记 AcApDocument 。
本篇要介绍的是与 AcDbDatabase 有关的操作,例如创建图形数据库和访问图形数据库内容,通过写块、插入数据库实现两个图形数据库的内容传递,长事务处理实现在位编辑,以及读写图形的摘要信息等。
1. 说明
本篇的实例创建一个新的图形数据库,添加两个圆并将其保存在 AutoCAD 的安装目录下(以帮助系统中的 createDwg 函数为基础改写而成);局部加载该图形文件,显示加载的所有实体的类名称(例如 AcDbLine 、 AcDbCircle 等)。
需要注意的是,本节所介绍的实例均不能在图形窗口中显示创建或打开的图形数据库,如果要新建或打开一个图形文件并在图形窗口中显示,应该查看第 11 章(多文档界面)中的相关内容。
2. 思路
(1) 图形数据库的基本操作
可以使用下面的语句
// 新建一个图形数据库:
AcDbDatabase *pDb = new AcDbDatabase();
AcDbDatabase 类的构造函数为:
// AcDbDatabase 类的构造函数为:
AcDbDatabase(bool buildDefaultDrawing = true, //buildDefaultDrawing 指出是否创建一个空的图形数据库,也就是是否包含图形数
// 据库的初始内容(默认的符号表、命名对象字典和一组系统变量)
bool noDocument = false); //noDocument 指出新建的图形数据库是否与当前文档相关联。
saveAs 函数用于保存图形数据库,在指定文件名称时必须包含 dwg 扩展名。 readDwgFile 函数
//将一个已经存在的图形文件的内容读入到当前图形数据库
AcDbDatabase *pDb = new AcDbDatabase(Adesk::kFalse);
(2) 获得 AutoCAD 的安装路径
读取注册表计算\HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD\R20.0\ACAD-E001:804项中AcadLocation键的键值,如图 7.1所示。其中,对应于不同的AutoCAD版本,R20.0\ACAD-E001:804 的内容不同。
(3) 局部加载
要实现图形的局部加载,应该在调用 readDwgFile 函数之后执行 AcDbDatabase 类的applyPartialOpenFilters 函数,最后还要执行 closeInput 函数。
//applyPartialOpenFilters 函数的定义为:
Acad::ErrorStatus applyPartialOpenFilters(
const AcDbSpatialFilter* pSpatialFilter, //pSpatialFilter 指定了模型空间中的一个三维区域进行空间过滤
const AcDbLayerFilter* pLayerFilter); //pLayerFilter 则指定了所要进行过滤的图层
3. 步骤
|
|