Тема: Компиляция без ошибок, но в АКАДЕ изображения нет
Здравствуйте, уважаемые программисты. Очень недавно начал учить ObjectARX. Купил книгу Н.Н.Полещука. Книга классная, но написана под АКАД2006. Я юзаю VC 2005, Object 2008 и АКАД 2008. С программной совместимостью проблем не возникает. Файл ARX создается и загружается в АКАД без ошибок и предупреждений, однако программа ничего не рисует
хотя должна. Ниже представлен фрагмент кода. Единственное что пришлось изменить это все строки переписать в виде _T("строка")) иначе ошибка (почему кстати?) в приведенном фрагменте этих исправлений нет. Вопрос: почему ничего не рисуется?
// Н.Н.Полещук, Глава 05\Book08\acrxEntryPoint.cpp
// В книге "AutoCAD: разработка приложений, настройка и адаптация"
// (издательство "БХВ-Петербург", 2006)
//
// ----- ads_book08 symbol (do not rename)
static int ads_book08(void)
{
// Признак ошибки (целое число)
Acad::ErrorStatus es;
// Подготовительная работа с таблицей блоков
// Указатель на таблицу блоков (инициализируем нулем)
AcDbBlockTable* pBlockTbl = NULL;
// Открываем БД текущего рисунка и получаем указатель на таблицу блоков
if ((es =
acdbHostApplicationServices()->workingDatabase()->getBlockTable
(pBlockTbl, AcDb::kForRead)) != Acad::eOk )
{
acutPrintf ("\nНе открыть таблицу блоков! ") ;
return (RSRSLT);
}
// Указатель на запись таблицы блоков
AcDbBlockTableRecord *pMS = NULL;
// Получаем указатель на пространство модели как блок ACDB_MODEL_SPACE
//и открываем его для записи
pBlockTbl->getAt(ACDB_MODEL_SPACE, pMS, AcDb::kForWrite);
if (pMS == NULL)
{
acutPrintf ("\nНет доступа к блоку *Model_Space. ") ;
return (RSRSLT);
}
// Построение отрезка
//====================
AcGePoint3d startPt(32,112.5,0); // 1-я точка в МСК
AcGePoint3d endPt(161.2,140.8,0); // 2-я точка в МСК
// Создание нового объекта класса AcDbLine
// с динамическим выделением для него памяти
AcDbLine* pLine = new AcDbLine(startPt,endPt);
// Можно изменить слой построенного отрезка (если слой существует)
// pLine->setLayer ("LayerForLines");
// Добавление к БД рисунка отрезка
if ((es = pMS->appendAcDbEntity(pLine)) != Acad::eOk)
{
acutPrintf ("\nОшибка добавления к БД отрезка. ") ;
return (RSRSLT);
};
// Закрытие доступа к объекту
pLine->close();
// Построение сплайна
//====================
// Массив трехмерных точек
AcGePoint3d pts[4]={AcGePoint3d(15.0,12.0,0.0),
AcGePoint3d(38.9,8.8,0.0), AcGePoint3d(79.3,9.0,0.0),
AcGePoint3d(145.0,19.3,0.0)};
AcGePoint3dArray points;
// Заполнение массива точек
for(int i=0; i<4; i++) points.append(pts[i]);
// Создание нового объекта класса AcDbSpline
// с динамическим выделением для него памяти
AcDbSpline* pSpline = new AcDbSpline(points);
// Добавление к рисунку сплайна
if ((es = pMS->appendAcDbEntity(pSpline)) != Acad::eOk)
{
acutPrintf ("\nОшибка добавления к БД сплайна. ") ;
return (RSRSLT);
};
pSpline->close();
// Построение окружности
//=======================
// Создание объекта - трехмерной точки
AcGePoint3d center(44, 99.9, 0);
// AcGeVector3d::kZAxis - стандартный вектор нормали (0, 0, 1)
// Создание окружности по точке центра, вектору нормали и радиусу
AcDbCircle* pCircle = new AcDbCircle(center, AcGeVector3d::kZAxis, 50.0);
// Добавление к БД рисунка окружности
if ((es = pMS->appendAcDbEntity(pCircle)) != Acad::eOk)
{
acutPrintf ("\nОшибка добавления к БД окружности. ") ;
return (RSRSLT);
};
pCircle->close();
// Закрытие блока *Model_Space
pMS->close();
// Закрытие таблицы блоков
pBlockTbl->close();
// TODO: Replace the following line by your returned value if any
acedRetVoid () ;
return (RSRSLT) ;
}
} ;
//-----------------------------------------------------------------------------
IMPLEMENT_ARX_ENTRYPOINT(CBook08App)
ACED_ADSSYMBOL_ENTRY_AUTO(CBook08App, book08, true)