Тема: превью чертежа
В общем если не вдаваться в подробности, то ситуация такая.
есть DWG файлы с кучей значков, мне нада для конкретного значка из конкретного файла сделать иконку, потом создать кнопочку и т.д.
Ну во-первых, стандартная иконка блока никуда не годится, т.к. размер у нее 32х32, а нада больше, чтоб пользователь гарантированно не промазал и чтоб у него не было нервного срыва, когда он смотрит на кучу мелких кнопочек :)
Но сейчас не об этом. Сделал я сначала вариант 32х32. Посмотрел на картинку внимательно и заметил, что если у полилинии есть глобальная ширина, то на картинке блочка только контурная часть этой самой полилинии рисуется. Не понравилось :)
Еще есть вариант делать превью чертежа (ну вернее базы чертежа), и для этих целей нужна пустая база в которую я копирую свой блочек. исходник этого ниже.
/*pBlockDatabase - это AcDbDatabase, где лежит блок pBlock - это запись в AcDbBlockTable pOut - это создаваемая мной база для получения скриншота значка. setBitmap() - вычленяем картинку из мусора, переданного акадом :). если кому будет интересно, кину исходник */ //... тут всякие разные инициализации и поиск нужного блочка AcDbDatabase* pOut; if (pBlockDatabase->wblock(pOut,pBlock->objectId())!=Acad::eOk) { delete [] pBlockDatabase; return NULL; } if (acrxLoadApp(_T("AcadBlock"))) { HINSTANCE hInst; if ((hInst = LoadLibrary(_T("acblock.arx")))!=NULL) { MakePreviewFuncType makePreviewFunc; if ((makePreviewFunc = (MakePreviewFuncType)GetProcAddress(hInst,(LPCSTR)"acdbMakeDrawingPreview"))!=NULL) if (makePreviewFunc(pOut,false)==Acad::eOk) setBitmap((BYTE*)pOut->thumbnailBitmap()); FreeLibrary(hInst); } acrxUnloadModule(_T("acblock.arx")); } delete pOut; //... y и так далее
Но как ни смешно, и в этом случае получается только контурная отрисовка полилиний с глобальной шириной. НО, если вставить
if (pOut->saveAs(_T("C:\\test.dwg"))==Acad::eOk){ ; }
то мы сохраняем нашу базу. При ее открытии превью тоже корявое, но вот если сохранить документ то при повторном открытии картинка превью получается красивая :)
Так вот вопрос, как получить красивую картинку средствами ObjectARX сразу.