Тема: getGeomExtents и readDwgFile
Проблема следующая:
не работает метод getGeomExtents() у примитивов, принадлежащих базе, открытой с помощью readDwgFile()
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форумы CADUser → Программирование → ObjectARX → getGeomExtents и readDwgFile
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Проблема следующая:
не работает метод getGeomExtents() у примитивов, принадлежащих базе, открытой с помощью readDwgFile()
Странно. У меня работает. Уточни версию AutoCAD, для какого примитива вызываешь getGeomExtents() (для блоков, собственных примитивов и примитивов ADT, LDDT и т.д. может и не работать).
Вот элементарный пример, который у меня нормально работает. Проверок на ошибки - минимум. Нужно знать метку примитива (handle), для которого проверяется getGeomExtents().
static void GetExtents(void) { resbuf *result = NULL; result = acutNewRb(RTSTR); result->resval.rstring = NULL; Acad::ErrorStatus es = Acad::eOk; char *fname = NULL; if (acedGetFileD("Select file:", NULL, "dwg", 0, result) == RTNORM) { fname = strdup(result->resval.rstring); acutRelRb(result); } else { acutRelRb(result); return; } AcDbDatabase *db = new AcDbDatabase(); if ((es = db->readDwgFile(fname,_SH_DENYNO)) != Acad::eOk) { acutPrintf("\nError open database <%s> with error %s!",fname, acadErrorStatusText(es)); delete db; return; } free(fname); char handle[512]; if (acedGetString(0,"\nSelect entity handle: ", handle) == RTNORM) { __int64 iHandle = 0; sscanf(handle,"%I64x",&iHandle); AcDbHandle handle(iHandle); AcDbObjectId objId; if ((es = db->getAcDbObjectId(objId,false,handle)) == Acad::eOk) { AcDbObjectPointer<AcDbEntity> pEnt(objId,AcDb::kForRead); if ((es = pEnt.openStatus()) == Acad::eOk) { AcDbExtents ext; if ((es = pEnt->getGeomExtents(ext)) == Acad::eOk) { acutPrintf("\nExtents: Min=(%g %g) Max=(%g %g)", (ext.minPoint())[X],(ext.minPoint())[Y],(ext.maxPoint())[X],(ext.maxPoint())[Y]); } else { acutPrintf("\nError getGeomExtents: %s", acadErrorStatusText(es)); } } else { char buf[32]; handle.getIntoAsciiBuffer(buf); acutPrintf("\nError getAcDbObjectId <%s>: %s", buf,acadErrorStatusText(es)); } } else { char buf[32]; handle.getIntoAsciiBuffer(buf); acutPrintf("\nError entity <%s>: %s", buf,acadErrorStatusText(es)); } } else { acutPrintf("\nError handle!!!"); } delete db; }
У меня последовательность действий такая:
1. Открываю чертеж на чтение/запись через readDwgFile
2. Копирую туда блок
3. Вставляю в модель ссылку на этот блок
4. Добавляю атрибуты к этой ссылке
5. Пытаюсь померить эти атрибуты getGeomExtents для дальнейшего форматирования, однако результат нулевой.
Причем, если файл открыт обычным способом (File/Open или через acDocManagerPtr()->appContextOpenDocument) вне зависимости активный это документ или нет, то все отлично работает.
Версия ACAD2005
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форумы CADUser → Программирование → ObjectARX → getGeomExtents и readDwgFile
Форум работает на PunBB, при поддержке Informer Technologies, Inc