Тема: Получение информации о растровых изображениях
Собственно нужно определить пути ко всем растровым изображениям, прикрепленных к чертежу или как можно получить данные из Image Manager.
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форумы CADUser → Программирование → ObjectARX → Получение информации о растровых изображениях
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Собственно нужно определить пути ко всем растровым изображениям, прикрепленных к чертежу или как можно получить данные из Image Manager.
> metod
static void GetImgPathes(void) { Acad::ErrorStatus es; AcDbDatabase *pDb = acdbCurDwg(); AcDbDictionaryPointer pRoot(pDb->namedObjectsDictionaryId(),AcDb::kForRead); if ((es = pRoot.openStatus()) != Acad::eOk) { acutPrintf(_T("\npRoot.openStatus()=%s"),acadErrorStatusText(es)); return; } AcDbObjectId eIdImgDict; if ((es = pRoot->getAt(_T("ACAD_IMAGE_DICT"),eIdImgDict)) != Acad::eOk) { acutPrintf(_T("\npRoot->getAt(...)=%s"),acadErrorStatusText(es)); return; } AcDbDictionaryPointer pImgDict(eIdImgDict,AcDb::kForRead); if ((es = pImgDict.openStatus()) != Acad::eOk) { acutPrintf(_T("\npImgDict.openStatus()=%s"),acadErrorStatusText(es)); return; } AcDbDictionaryIterator *pImgDictIter = pImgDict->newIterator(); if (pImgDictIter) { for (;!pImgDictIter->done();pImgDictIter->next()) { AcDbObjectPointer<AcDbRasterImageDef> pImgDef(pImgDictIter->objectId(),AcDb::kForRead); if ((es = pImgDef.openStatus()) != Acad::eOk) { acutPrintf(_T("\npImgDef.openStatus()=%s"),acadErrorStatusText(es)); continue; } // Печатаем путь к растровому файлу acutPrintf(_T("\npImgDef->activeFileName()=\"%s\""),pImgDef->activeFileName()); acutPrintf(_T("\npImgDef->sourceFileName()=\"%s\""),pImgDef->sourceFileName()); } } delete pImgDictIter; }
Спасибо, все работает!
а еще,а где можно узнать про стринговые константы типа ACAD_IMAGE_DICT
Попробуй при помощи ARXDBG (есть такой пример в ObjectARX SDK). С его помощью можно много чего полезного узнать.
> Александр Ривилис
Пытаясь работать с набором вставленных картинок в AutoCAD 2002 (SKD 2000) столкнулся со следующей проблемой:
AcDbDictionaryPointer не может найти словарь для работы с картинками по ключу "ACAD_IMAGE_DICT":
pRoot->getAt(_T("ACAD_IMAGE_DICT"), eIdImgDict);// acadErrorStatusText="eKeyNotFound"
С SDK 2004 и 2007 такой проблемы нет.
> equilibrium
В классе AcDbRasterImageDef есть две такие статические функции:
static Acad::ErrorStatus createImageDictionary(AcDbDatabase* pDb, AcDbObjectId& dictId); static AcDbObjectId imageDictionary(AcDbDatabase* pDb);
Вот ими и пользуйся для создания/получения словаря.
> Александр Ривилис
При работе с SDK 2000 проблема осталась:
AcDbRasterImageDef* rasterImageDef = new AcDbRasterImageDef(); AcDbObjectId eIdImgDict = rasterImageDef->imageDictionary(acdbCurDwg()); // eIdImgDict{mId=0} delete rasterImageDef; AcDbDictionaryPointer pImgDict(eIdImgDict , AcDb::kForRead); //pImgDict{m_ptr=0x0000000;m_status=eNullObjectId} Acad::ErrorStatus es = pImgDict.openStatus();//eNullObjectId
Не то делаешь.
AcDbObjectId dictID = AcDbRasterImageDef::imageDictionary(acdbCurDwg()); AcDbRasterImageDef::createImageDictionary(acdbCurDwg(), dictID); AcDbDictionaryPointer pImgDict(dictID, AcDb::kForRead); // И т.д.
> Александр Ривилис
К сожалению, при такой реализации похоже заменяется словарь и все растровые изображения "исчезают" (SDK 2000, 2004, 2007).
К сожалению проверить в AutoCAD 2000 не могу. Наверное, более точным должно быть так:
AcDbObjectId dictID = AcDbRasterImageDef::imageDictionary(acdbCurDwg()); if (AcDbObjectId::isNull(dictID)) AcDbRasterImageDef::createImageDictionary(acdbCurDwg(), dictID);
> Александр Ривилис
Да, именно так работает корректно в SDK 2000, 2004, 2007. Разве что AcDbObjectId проверяется на NULL немного иначе - метод вызывается у объекта AcDbObjectId:
... if (dictID.isNull()) ...
В очередной раз
Спасибо за помощь, Александр!
> equilibrium
Да. С isNull() я лопухнулся, так как в VS код не проверял. Все на глазок...
> Александр Ривилис
Так и понял (:
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форумы CADUser → Программирование → ObjectARX → Получение информации о растровых изображениях
Форум работает на PunBB, при поддержке Informer Technologies, Inc