您的位置:首页 > 移动开发 > Objective-C

四、ObjectARX 修改对象的属性

2015-11-11 10:34 441 查看
环境: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 here
AcGePoint3d 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;
}

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

结果:



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  AutoCAD C++ Arx ObjectARX 2010