Тема: Связь между AcDbEntity и IAcadEntity

Существует указатель на абстрактный геомметрический обект (отрезок, окружность, дуга и т.д.) и в разные моменты реальные типы, на которые он указывает, могут отличаться.
AcDbEntity *subEnt;
Его нужно передать в VBA
Sub test()
Dim subEnt as AcadEntity
Dim  myObj  as  MyObjectComWrapper
Set myObj = ThisDrawing.ModelSpace.AddCustomObject("MyObject")
Set subEnt = myObj.getSubEnt() ‘ Тут и нужно добраться до AcDbEntity *subEnt;
‘Или так   status = myObj.getSubEnt(subEnt)
End sub
Тогда в ObjectARX функция getSubEnt() выглядит примерно так
STDMETHODIMP CMyObjectComWrapper::getSubEnt(IAcadEntity *ent)
{
    try {
        AcAxObjectRefPtr<MyObject> pRef(&m_objRef, AcDb::kForRead);
        es = pRef.openStatus(); if ( es != Acad::eOk) throw es;
        AcDbEntity *subEnt = pRef->mySubEnt;
        // И теперь как-то subEnt привести к возвращаемому ent
    }
    catch {…}
    return S_OK;
}

Re: Связь между AcDbEntity и IAcadEntity

> Юрий
Если я правильно понял вопрос:

IAcadEntity *l_base = 0;
// Где-то здесь инициализация l_base
AcDbObjectId  id;
long l_long = 0; l_base->get_ObjectID(&l_long); id.setFromOldId(l_long);
// А здесь по id можно уже получить AcDbEntity *pEnt

Re: Связь между AcDbEntity и IAcadEntity

Только наоборот есть AcDbEntity *pEnt
А получить надо IAcadEntity *l_base
Нашел я такую штуку AcAxGetIUnknownOfObject и так думаю, что это именно то чего надо. Или я ошибаюсь. И вот еще интересно, а если объект не database-resident

Re: Связь между AcDbEntity и IAcadEntity

Думаешь правильно. IAcadEntity бывает только database-resident:

IAcadEntity
Exposes all common properties and methods that apply to every entity in the database. (Applicable only for AcDbEntity-derived classes.)