26/05/2014
Создание твердых тел выдавливанием полилинии
Примитив твердого тела может быть получен выдавливанием объекта область. Таким образом мы можем создать временную область, ограниченную существующей полилинией. Здесь мы расчленяем полилинию на отдельные кривые, составляющие границу, а затем создаем область из этих кривых.
Посмотрите на следующий пример кода:
Код - C++: [Выделить]
- void CreateExtrude()
- {
- Acad::ErrorStatus es;
- ads_name polyName;
- ads_point ptres;
- // Выбор полилинии
- if( acedEntSel(L"\nВыберите полилинию: ", polyName, ptres) != RTNORM)
- {
- acutPrintf(L"Ошибка при выборе полилинии");
- return;
- }
- // Получение границ из полилинии
- AcDbObjectId idPoly;
- acdbGetObjectId(idPoly, polyName);
- AcDbEntity *pEntity = NULL;
- if(acdbOpenAcDbEntity(pEntity, idPoly, AcDb::kForRead) != Acad::eOk)
- {
- return;
- }
- AcDbPolyline *pPoly = AcDbPolyline::cast(pEntity);
- if(pPoly == NULL)
- {
- pEntity->close();
- return;
- }
- AcDbVoidPtrArray lines;
- pPoly->explode(lines);
- pPoly->close();
- // Создаем область из набора кривых.
- AcDbVoidPtrArray regions;
- es = AcDbRegion::createFromCurves(lines, regions);
- if(Acad::eOk != es)
- {
- pPoly->close();
- acutPrintf(L"\nОшибка при создании области");
- return;
- }
- AcDbRegion *pRegion = AcDbRegion::cast((AcRxObject*)regions[0]);
- // Выдавливаем область для получения тела.
- AcDb3dSolid *pSolid = new AcDb3dSolid();
- es = pSolid->extrude(pRegion, 10.0, 0.0);
- for (int i = 0; i < lines.length(); i++)
- {
- delete (AcRxObject*)lines[i];
- }
- for (int ii = 0; ii < regions.length(); ii++)
- {
- delete (AcRxObject*)regions[ii];
- }
- AcDbObjectId savedExtrusionId = AcDbObjectId::kNull;
- if(Acad::eOk == es)
- {
- AcDbDatabase *pDb = curDoc()->database();
- AcDbObjectId modelId;
- modelId = acdbSymUtil()->blockModelSpaceId(pDb);
- AcDbBlockTableRecord *pBlockTableRecord;
- acdbOpenAcDbObject((AcDbObject*&)pBlockTableRecord,
- modelId, AcDb::kForWrite);
- pBlockTableRecord->appendAcDbEntity(pSolid);
- pBlockTableRecord->close();
- pSolid->close();
- }
- else
- {
- delete pSolid;
- }
- }
Источник: http://adndevblog.typepad.com/autocad/2012/08/create-3d-solid-by-extruding-a-polyline.html
Обсуждение: http://adn-cis.org/forum/index.php?topic=751
Опубликовано 26.05.2014Отредактировано 28.05.2014 в 16:52:44