CAD开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

ObjectARX 开发指南

查找 AutoCAD 对象的特性

2022-12-31 10:40| 发布者: admin| 查看: 275| 评论: 0|来自: AutoCAD

从 AutoCAD 对象的指针查找所有适用的接口需要几个步骤,如以下过程中所述。IPropertyManagerIUnknown

查找 AutoCAD 实体的 IPropertyManager 界面的步骤

查询接口的对象:IAcadBaseObject

IAcadBaseObject* pBase = NULL;
if (FAILED(pObjUnkArray[i]->QueryInterface(IID_IAcadBaseObject,
    reinterpret_cast<LPVOID*>(&pBase))))
return E_FAIL;

使用指针获取对象 ID:IAcadBaseObject

AcDbObjectId objectID = NULL;
if (FAILED(pBase->GetObjectId(&objectID))) {
pBase->Release();
return E_FAIL;
}

打开对象表示的 AutoCAD 实体:

AcDbEntity* pEnt = NULL;
if (Acad::eOk != acadbOpenAcDbEntity(pEnt, objectID,
    AcDb::kForRead, Adesk::kTrue))
return E_FAIL;

通过调用实体指针来获取实体:AcRxClassAcRxObject::isA()

AcRxClass* pClass = pEnt->isA();

声明一个新对象以包含指针和索引变量:COleSafeArray

COleSafeArray PropMgrArray;
long n;

其余步骤在遍历对象的类层次结构的循环中进行迭代。以下代码提供了循环的框架:

do {
// perform steps 6-9
} while ((pClass = pClass->myParent()) != NULL);

获取指向以下各项的 OPM 协议扩展的指针:AcRxClass

OPMPropertyExtension* pExtension = NULL;
pExtension = 
GET_OPMEXTENSION_CREATE_PROTOCOL()
    ->CreateOPMObjectProtocol(pClass);

使用步骤 5 中返回的指针获取属性管理器:

IPropertyManager* pManager = NULL;
pManager = pExtension->GetPropertyManager();

将属性管理器指针强制转换为:IUnknown*

VARIANT vUnk = CComVariant(static_cast<IUnknown*>(pManager);

将属性管理器的指针添加到数组:IUnknown

PropMgrArray.PutElement(&n, &vUnk);
n++;

应应用类似于步骤 6–9 的过程来获取每个实例的属性源,如以下伪代码所示:

COleSafeArray PropSrcArray;
VARIANT vUnk;
OPMPerInstancePropertyExt* pPiPex = NULL;
pPiPex = GET_OPM_PERINSTANCE_CREATE_PROTOCOL()->
CreateOPMPerInstancePropertyExtension(pClass->name());
VARIANT* pNames;
pPiPex->GetObjectPropertySourceNames(pNames);
IPropertySource* pPropSrc = NULL;
for (int i = 0; NULL != pNames[i]; i++) {
pPropSrc = GET_OPM_PERINSTANCE_SOURCES()->
    GetPropertySourceAt(pNames[i]);
vUnk = CComVariant(static_cast<IUnknown*>(pPropSrc);
PropSrcArray.PutElement(&n, &vUnk);
n++;
}

找到应用于某个对象的所有属性管理器和属性源后,将其指针添加到单个对象。然后,将其添加到作为方法的第二个参数传递的数组中。IUnknownSAFEARRAYSAFEARRAYReset()


路过

雷人

握手

鲜花

鸡蛋

最新评论

QQ|Archiver|CAD开发者社区 ( 苏ICP备2022047690号-1 )

GMT+8, 2024-5-19 14:39

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部