Тема: Как удалить extension dictionary ?

Создал одному объекту словарь, добавил туда много записей, теперь не могу понять как можно удалить этот словарь. Был бы очень признателен, если кто-нибудь ответил бы.

Re: Как удалить extension dictionary ?

AcDbObject::releaseExtensionDictionary() - это?

Re: Как удалить extension dictionary ?

Да, но к сожалению не удаляет непустые словари, а когда в словаре много записей, довольно сложно удалять все. Я думал есть методы, позволяющие удалить непустой словарь.

Re: Как удалить extension dictionary ?

> Костя
Можно конечно сделать AcDbDictonary::erase(), а затем AcDbObject::releaseExtensionDictionary(), но это не вполне корректно. Так будет лучше:

static void DelExtDict(void)
{
  Acad::ErrorStatus es;
  ads_name en;
  ads_point p;
  if (acedEntSel(_T("\nУкажите примитив для удаления Extension Dictionary: "),en,p) != RTNORM)
    return;
  AcDbObjectId eId; acdbGetObjectId(eId,en);
  AcDbEntityPointer pEnt(eId,AcDb::kForWrite);
  if ((es = pEnt.openStatus()) != Acad::eOk) {
    acutPrintf(_T("\npEnt.openStatus()=%s"),acadErrorStatusText(es));
    return;
  }
  AcDbObjectId eExtId = pEnt->extensionDictionary();
  if (eExtId.isNull()) return;
  {
    AcDbDictionaryPointer pExtDict(eExtId,AcDb::kForWrite);
    if ((es = pExtDict.openStatus()) != Acad::eOk) {
      acutPrintf(_T("\npExtDict.openStatus()=%s"),acadErrorStatusText(es));
      return;
    }
    AcDbDictionaryIterator *pIter = pExtDict->newIterator();
    if (!pIter) return;
    for (;!pIter->done(); pIter->next()) {
      if ((es = pExtDict->remove(pIter->name())) != Acad::eOk) {
        acutPrintf(_T("\npEnt->pExtDict->remove(pIter->name())=%s"),acadErrorStatusText(es));
      }
    }
    delete pIter;
  }
  if ((es = pEnt->releaseExtensionDictionary()) != Acad::eOk) {
    acutPrintf(_T("\npEnt->releaseExtensionDictionary()=%s"),acadErrorStatusText(es));
    return;
  }
}

Re: Как удалить extension dictionary ?

Спасибо, Вы мне очень помогли.