//////////////////////////////////////////////////////////////////////////
// Функция удаляет по ключу запись в словаре AcDbDictionary,
// Словарь передается как AcDbObjectId, а ключ как строка.
//////////////////////////////////////////////////////////////////////////
static Acad::ErrorStatus DelSubkey(AcDbObjectId dictId, const ACHAR * key)
{
Acad::ErrorStatus es = Acad::eOk;
AcDbObjectId keyId;
{
AcDbObjectPointer<AcDbDictionary> pDict(dictId, AcDb::kForRead);
if ((es = pDict.openStatus()) != Acad::eOk)
return es;
if ((es = pDict->getAt(key, keyId)) != Acad::eOk)
return es;
}
if (!keyId.isNull())
{
AcDbObjectPointer<AcDbObject> pObj(keyId, AcDb::kForWrite);
if ((es = pObj.openStatus()) != Acad::eOk)
return es;
return pObj->erase();
}
return es;
}
//////////////////////////////////////////////////////////////////////////
// Пример использования DelSubkey
//////////////////////////////////////////////////////////////////////////
static void RivilisDelXrec () {
Acad::ErrorStatus es = Acad::eOk;
ads_name en; ads_point p;
if (acedEntSel(ACRX_T("\nВыберите примитив: "), en, p) == RTNORM)
{
ACHAR buf[512];
if (acedGetString(TRUE, ACRX_T("\nУкажите ключ в ExtDict: "), buf) == RTNORM)
{
AcDbObjectId extDictId;
AcDbObjectId id; acdbGetObjectId(id, en);
{
AcDbEntityPointer pEnt(id, AcDb::kForRead);
if ((es = pEnt.openStatus()) != Acad::eOk)
{
acutPrintf(ACRX_T("\nОшибка: %s"), acadErrorStatusText(es));
return;
}
extDictId = pEnt->extensionDictionary();
}
if (!extDictId.isNull())
{
if ((es = DelSubkey(extDictId, buf)) != Acad::eOk)
{
acutPrintf(ACRX_T("\nОшибка: %s"), acadErrorStatusText(es));
return;
}
}
else
{
acutPrintf(ACRX_T("\nУ выбранного примитива нет ExtDict!"));
}
}
}
}