首页 > 技术文章 > ObjectARX开发教程(转)——第2课:AutoCAD数据库

ztcad 2020-12-10 14:24 原文

第2课:AutoCAD数据库
介绍

AutoCAD数据库的结构
每个AutoCAD图形代表一个存储在几种对象中的数据库结构。打开工程图时,AutoCAD会自己创建一个有组织的高效数据库。该数据库包含用于创建基本工程图的最少数据。

最少的数据量由诸如图层,线型,文本样式等对象表示。这样,您将获得第0层,标准字体,连续样式等。
在AutoCAD 2000版中,您可以与MDI环境同时使用多个图形。此功能提供了极大的灵活性,但在处理多个图纸时也有些麻烦。在本课程中,我们将不讨论MDI方面,但是ObjectARX应用程序可能会要求它。
数据如何存储
数据库维护需要绘图的每种对象。这些对象存储在容器(容器)中,这些容器是为管理相同类型的对象而创建的特殊对象。这样,我们就可以使用适当的存储方法和过程来存储实体,类,版式等。

存储在数据库中的每个对象都接收一个称为ObjectId的标识符。该标识符在同一AutoCAD会话中是唯一的,并且在每个对象的整个生命周期内有效。 ObjectId由其数据库生成,因此您不必关心它是如何创建的。

在ObjectARX内部,我们有3种基本类型的对象:
实体:图形对象(直线,圆弧,文本等);
容器(隔间):用于存储和管理对象集(图层表,轮廓表等)的特殊对象;
对象集:非图形对象(组,布局等)。
创建对象
要使用ObjectARX创建对象,我们有一些基于对象类型和要存储对象的公式(大多数情况下,我们需要将对象存储在自己的隔间中)。基本上,您将执行以下操作:
将指针包含在要创建的对象中,并将其称为new运算符;
使用此指针,调用对象的适当方法以更改其属性;
获取指向您要在其中创建对象的数据库的指针(通常是当前数据库);
打开一个存储数据的容器;
通过其指针精确调用对象存储方法;
获取对象的标识符(ObjectId)(由容器自动生成);
完成所有对象集(包括隔离专区和刚刚创建的对象)的关闭过程。
显然,您可以巧妙地创建一些使流程自动化的对象(类),因为它们是统一的且易于重用。主要思想是创建一种数据库实用程序函数,例如:Addlayer,AddLine,AddTextStyle等。

*重要的是不要忘记关闭对象集,因为这将导致AutoCAD立即停止工作。
创建线段(AcDbLine)的简单示例
以下代码显示了如何在2点之间创建一条线。在这个简单的过程中,代码不会捕获错误,但是主要目的是使您熟悉这些概念。它需要嵌入到ObjectARX应用程序的结构中才能工作。稍微注意打开和关闭订单。
//首先,我们必须声明一对点
AcGePoint3d startPt(1.0,1.0,0.0);
AcGePoint3d endPt(10.0,10.0,0.0);
//现在我们将初始化一个AcDbLine指针
//在这种情况下,构造函数允许2点
AcDbLine * pLine =新的AcDbLine(startPt,endPt);
//我们将在BlockTable中打开相应的隔离专区
AcDbBlockTable * pBlockTable = NULL;
//首先,获取当前数据库,然后获取BlockTable
AcDbDatabase * pDB = acdbHostApplicationServices()-> workingDatabase();
pDB-> getSymbolTable(pBlockTable,AcDb :: kForRead);
//在BlockTable中,打开ModelSpace
AcDbBlockTableRecord * pBlockTableRecord = NULL;
pBlockTable-> getAt(ACDB_MODEL_SPACE,pBlockTableRecord,AcDb :: kForWrite);
//在拥有ModelSpace之后,我们可以关闭BlockTable
pBlockTable-> close();
//使用ModelSpace光标,我们可以添加新行
AcDbObjectId lineId = AcDbObjectId :: kNull;
pBlockTableRecord-> appendAcDbEntity(lineId,pLine);
//要完成此过程,请关闭ModelSpace和创建的实体
pBlockTableRecord-> close();
pLine-> close();

推荐阅读