(2)修改图形对象的属性——知识准备

(1)打开和关闭图形数据库的对象

        访问图形数据库中对象的特性,必须在该对象被打开(对象创建时也会被打开)的状态下,用对象的指针进行访问,并且在访问结束后要及时关闭该对象,不然就会引起AutoCAD的错误终止。

        创建一个对象,必须在创建之后关闭该对象,那么如何在某个时候再访问该对象﹖这就要用到AcDbObjectId,也就是对象的ID号。在创建对象时,可以将图形数据库分配给该对象的ID保存起来,在需要访问该对象时,根据这个ID从数据库中获得指向该对象的指针,就可以修改或者查询该对象的特性。

        AcDbBlockTableRecord类的appendAcDbEntity 函数能够将一个实体添加到图形数据库中,并且返回分配给该实体的ID,这个函数上一节已经介绍过;全局函数acdbOpenAcDbEntity用于从实体的ID号获得指向图形数据库中实体的指针,其定义为:

Acad:ErrorStatus acdbOpenAcDbEntity(
AcDbEntity*& pEnt,
AcDbObjectld id,
AcDb::OpenMode mode,
bool openErasedEntity = false);

/*第一个参数返回指向图形数据库实体的指针;
第二个参数输入了要获得的实体的ID号;
第三个参数指定了打开该实体的方式,如果仅是查询该实体的特性用“读”模式打开即可,要修改实体的特性就必须用“写”模式打开;
第四个参数指定是否允许访问一个已经被删除的实体。*/

        ObjectARX提供了另外两个全局函数 acdbOpenAcDbObject和 acdbOpenObject 来实现类似的功能,这三个函数的区别在与适用范围:

acdbOpenAcDbEntity:
//适用于打开继承于 AcDbEntity 的数据库常驻对象,这类对象
//一般都能在图形窗口中显示,如直线、圆等。

acdbOpenAcDbObject:
//适用于打开未继承于 AcDbEntity 的数据库常驻对象,这类对
//象不能在图形窗口中显示,如层表、线型表等。

acdbOpenObject:
//如果不知道要打开的对象是否继承于AcDbEntity类,可以使用这个函数。

        打开某个对象之后,使用 close 函数就可以将其关闭。

(2)ID ( AcDbObjectld ) 、指针、句柄( Handle )和ads_name

       访问实体的特性必须通过对象指针,但是一旦你获得了实体的ID、句柄或者ads_name

都能通过ID作中介而获得对象的指针。其中ID是一个桥梁。

        ID、句柄和 ads_name 具有各自的特点:
         ID :在一个 AutoCAD 任务中,可能会加载多个图形数据库,但是所有对象的 ID
本次任务中都是独一无二的。在不同的 AutoCAD 任务中,同一个图形对象的 ID
能不同。
         句柄:在一个 AutoCAD 任务中,不能保证每个对象的句柄都唯一,但是在一个图
形数据库中所有对象的句柄都是唯一的。句柄随 DWG 图形一起保存,在两次任务
期间同一对象的句柄是相同的。
         ads_name :是不稳定的,仅当你在 AutoCAD 的一个特定图形中工作时可以使用,
一旦退出 AutoCAD 或者切换到另一个图形, ads_name 就会丢失。
        具体来说,ID 、指针、句柄和 ads_name 之间具有下面的转换关系(不完全归纳,不常
用的转换并未提及):
 从 ID 到对象指针:通过打开数据库对象的三个函数 acdbOpenAcDbEntity、 acdbOpenAcDbObject 和 acdbOpenObject 中的任何一个。
 从对象指针到 ID:所有的数据库常驻对象都继承自 AcDbObject,而 AcDbObject 类 包含的 objectId 函数能获得所指向对象的 ID。
 从句柄到 ID:使用 AcDbDatabase::getAcDbObjectId 函数。
 从 ID 到句柄:使用 AcDbObjectId::handle 函数。
 从指针到句柄:使用 AcDbObject::getAcDbHandle 函数。
 从 ads_name 到 ID:使用全局函数 acdbGetObjectId。 
 从 ID 到 ads_name:使用全局函数 acdbGetAdsName。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值