Тема: Как найти соответствующий объекту Xrecord?

Можно ли, зная идентификатор объекта(AcDbObjectId) найти соотвествую ему Xrecord запись, незная ее ключа?

Re: Как найти соответствующий объекту Xrecord?

> Andrey
А если к объекту "прикреплена" не одна Xrecord?

Re: Как найти соответствующий объекту Xrecord?

Тогда прочитать все Хrecord`s относящиеся к этому объекту.

Re: Как найти соответствующий объекту Xrecord?

> Andrey

//////////////////////////////////////////////////////////////////////////
// Функция возвращает в ids массив AcDbObjectId для всех AcDbXrecord
// для переданного id объекта и возвращает Acad::eOk если всё нормально
//////////////////////////////////////////////////////////////////////////
static Acad::ErrorStatus GetAllXrecordsConnectedToObject(AcDbObjectId &id, AcDbObjectIdArray &ids)
{
  ids.setLogicalLength(0);
  Acad::ErrorStatus es;
  AcDbObjectPointer<AcDbObject> pObj(id,AcDb::kForRead);
  AcDbObjectId idExtDict;
  if ((es = pObj.openStatus()) != Acad::eOk || ((idExtDict=pObj->extensionDictionary())==AcDbObjectId::kNull))
    return es;
  AcDbDictionaryPointer pExtDict(idExtDict,AcDb::kForRead);
  if ((es = pExtDict.openStatus()) != Acad::eOk)
    return es;
  // Создаем итератор для прохода по всей AcDbDictionary.
  AcDbDictionaryIterator *pIter = pExtDict->newIterator();
  if (pIter) {
    for (;!pIter->done(); pIter->next()) {
      // Проверяем AcDbXrecord ли это.
      AcDbObjectPointer<AcDbXrecord> pXrecord(pIter->objectId(),AcDb::kForRead);
      if (pXrecord.openStatus() == Acad::eOk) {
        ids.append(pIter->objectId());
      }
    }
    delete pIter;
  }
  return es;
}

Re: Как найти соответствующий объекту Xrecord?

> Александр Ривилис
Большое спасибо.