四、ObjectARX 修改对象的属性

来源:互联网 发布:淘宝默认付款是几天 编辑:程序博客网 时间:2024/06/10 12:55

环境:vs2008+ObjectARX 2010  +CAD2010 64位

上个博客中,如果在最后一行(close函数之前)添加上pLine->setColorIndex(1);

我们所创立的直线就会变成红色。

但是那是在对象关闭之前进行创建的,这一次,我们通过对象的ID号,进行改变我们对象的颜色的程序。

*******************************************************************************

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

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

第一个参数返回指向图形数据库实体的指针;

第二个参数输入了要获得的实体的 ID 号;

第三个参数指定了打开该实体的方式,如果仅是查询该实体的特性用“读”模式打开即可,
要修改实体的特性就必须用“写”模式打开;

第四个参数指定是否允许访问一个已经被删除
的实体。

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




改变的步骤如下:

利用向导创建一个ObjectARX工程

在入口点函数:


中AcrxEntryPoint.cpp中插入 创建一个新的命令行,所有的参数跟之前一样,名字为ChangeColor

将上一张博客里面的CreateLine 做一下修改如下:

static AcDbObjectId CHAP2CreateLine(void){// Add your code for command CHAP2.CreateLine hereAcGePoint3d ptStart(0,0,0);//创建一个3d空间的点AcGePoint3d ptEnd(100,100,0);AcDbLine *pLine = new AcDbLine(ptStart,ptEnd);//这个类代表了CAD里面的线实体,起始点终结点//获取指向块表的指针AcDbBlockTable *pBlockTable;acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlockTable,AcDb::kForRead);//acdbHostApplicationServices()->workingDataBase()->getBlockTable(pBlockTable,AcDb::kForRead);AcDbBlockTableRecord *pBlockTableRecord;pBlockTable->getAt(ACDB_MODEL_SPACE,pBlockTableRecord,AcDb::kForWrite);AcDbObjectId lineld;pBlockTableRecord->appendAcDbEntity(lineld,pLine);//设置颜色//pLine->setColorIndex(1);pBlockTable->close();pBlockTableRecord->close();pLine->close(); return lineld;}

在 这个APP类之外重新添加一段函数代码如下:

Acad::ErrorStatus ChangeColor(AcDbObjectId entId,Adesk::UInt16 colorIndex){AcDbEntity *pEntity;acdbOpenObject(pEntity,entId,AcDb::kForWrite);pEntity->setColorIndex(colorIndex);pEntity->close();return Acad::eOk;}


配置好环境之后,点击运行测试。

结果:




0 0
原创粉丝点击