Александр, спасибо, но там вероятно код для поздней версии ObjectARX. Что-то не срабатывает. Окружность добавляется из немодального окна, текст в центр, даже вроде со штриховкой более ли менее понятно как ее описать. Конкретный вопрос, как эту штриховку связать с окружностью?
Спасибо.
int fUzel()
{
AcDbObjectIdArray dbObjIds;
ads_point pt;
acedGetPoint(NULL,_T("\nУкажите точку"),pt);
masUzel[countUzel].X=pt[0];
masUzel[countUzel].Y=pt[1];
// Признак ошибки (целое число)
Acad::ErrorStatus es;
// Подготовительная работа с таблицей блоков
// Указатель на таблицу блоков (инициализируем нулем)
AcDbBlockTable* pBlockTbl = NULL;
// Открываем БД текущего рисунка и получаем указатель на таблицу блоков
if ((es =
acdbHostApplicationServices()->workingDatabase()->getBlockTable
(pBlockTbl, AcDb::kForRead)) != Acad::eOk )
{
acutPrintf (_T("\nНе открыть таблицу блоков! ")) ;
return (RSRSLT);
}
// Указатель на запись таблицы блоков
AcDbBlockTableRecord *pMS = NULL;
// Получаем указатель на пространство модели как блок ACDB_MODEL_SPACE
//и открываем его для записи
pBlockTbl->getAt(ACDB_MODEL_SPACE, pMS, AcDb::kForWrite);
if (pMS == NULL)
{
acutPrintf (_T("\nНет доступа к блоку *Model_Space. ")) ;
return (RSRSLT);
}
// Построение окружности
//=======================
// Создание объекта - трехмерной точки
AcGePoint3d center(pt[0], pt[1], 0);
// AcGeVector3d::kZAxis - стандартный вектор нормали (0, 0, 1)
// Создание окружности по точке центра, вектору нормали и радиусу
AcDbHatch *pHatch = new AcDbHatch;
// Установим нормаль штриховки
AcGeVector3d normal(0.0, 0.0, 1.0);
// Установим уровень штриховки
pHatch->setElevation(0.0);
// Установим шаблон штриховки
pHatch->setPattern(AcDbHatch::kPreDefined, _T("ANSI31"));
// Установим ассоциативность
pHatch->setAssociative(Adesk::kTrue);
AcDbObjectId cirId;
AcDbCircle* pCircle = new AcDbCircle(center, AcGeVector3d::kZAxis, 50.0);
// Добавление к БД рисунка окружности
if ((es = pMS->appendAcDbEntity(pCircle)) != Acad::eOk)
{
acutPrintf (_T("\nОшибка добавления к БД окружности. ")) ;
return (RSRSLT);
};
pHatch->appendLoop(AcDbHatch::kExternal, dbObjIds);
pMS->appendAcDbEntity(pHatch);
// Обработка контуров штриховки
pHatch->evaluateHatch();
AcDbObjectPointer<AcDbEntity> pEnt(cirId,AcDb::kForWrite);
pEnt.openStatus();
//pCircle->pHatch;
pCircle->close();
AcDbText* pText = new AcDbText (center,masUzel[countUzel].Name,0,10,0);
if ((es = pMS->appendAcDbEntity(pText)) != Acad::eOk)
{
acutPrintf (_T("\nОшибка добавления к БД текста. ")) ;
return (RSRSLT);
};
pText->close();
pMS->close();
pBlockTbl->close();
countUzel++;
// TODO: Replace the following line by your returned value if any
acedRetVoid () ;
return (RSRSLT) ;
}