16/09/2015
Как удалить профиль вращения после создания тела вращения
Иногда я получаю запросы от партнеров ADN о том что:“После использования AcDb3dSolid::createRevolvedSolid() образующая кривая вращения видна в твердом теле.”
Профиль используемый для вращения виден в твёрдом теле как показано на картинке.
Он может быть удалён при помощи метода cleanBody класса AcDb3dSolid, который удаляет все грани и ребра, которые не нужны для поддержки топологии твердого тела:
Код - C++: [Выделить]
- void createSolid()
- {
- double PI_VALUE = 4.0 * atan(1.0);
- AcGePoint2dArray pointArray;
- pointArray.append(AcGePoint2d(10.0, 0.0));
- pointArray.append(AcGePoint2d(15.0, 0.0));
- pointArray.append(AcGePoint2d(16.0, 2.0));
- pointArray.append(AcGePoint2d(16.0, 10.0));
- pointArray.append(AcGePoint2d(10.0, 10.0));
- pointArray.append(AcGePoint2d(10.0, 0.0));
- AcDbPolyline* pPline = new AcDbPolyline();
- for (int i = 0; i < pointArray.length(); i++)
- {
- pPline->addVertexAt(i, pointArray[i]);
- }
- AcDbRevolveOptions revolveOptions;
- AcDb3dSolid* pSolid = new AcDb3dSolid();
- if (eOkVerify(pSolid->createRevolvedSolid(pPline,
- AcGePoint3d::kOrigin,
- AcGeVector3d::kYAxis,
- 2.0 * PI_VALUE,
- 0.0, revolveOptions)))
- {
- /* Удаляем все ребра и грани, которые не нужны для поддержки
- топологии этого твердого тела. */
- if(eOkVerify(pSolid->cleanBody()))
- {
- AcDbObjectId objId;
- AcDbDatabase* pcurDb = acdbHostApplicationServices()->workingDatabase();
- postToDatabase(pcurDb, pSolid, objId);
- }
- }
- delete pSolid;
- pSolid = NULL;
- return;
- }
Автор перевода: Александр Ривилис
Обсуждение: http://adn-cis.org/forum/index.php?topic=3022
Опубликовано 16.09.2015