ADN Open CIS
Сообщество программистов Autodesk в СНГ

31/08/2016

Создание простой полигональной сети

Это пример создания простой полигональной сети при помощи ObjectARX. Если используется конструктор AcDbPolygonMesh() без каких-либо параметров, необъодимо явно задать количество вершин в направлениях M и N, а также открыта или закрыта полигональная сеть в направлениях M и N: 

Код - C++: [Выделить]
  1. void createSimplePolygonMesh()
  2. {
  3.   // Создаём полилинию
  4.   AcGePoint3dArray ptArr;
  5.   ptArr.setLogicalLength(4);
  6.   for (int i = 0; i < 4; i++)
  7.   {
  8.     ptArr[i].set((double)(i/2), (double)(i%2), 0.0);
  9.   }
  10.   AcDb2dPolyline *pNewPline =
  11.     new AcDb2dPolyline( AcDb::k2dSimplePoly, ptArr, 0.0, Adesk::kTrue);
  12.   pNewPline->setColorIndex(3);
  13.  
  14.   // Используем конструктор полигональной сети без параметров
  15.   AcDbPolygonMesh *pMesh = new AcDbPolygonMesh();
  16.   pMesh->setMSize(1);
  17.   pMesh->setNSize(4);
  18.   pMesh->makeMClosed();
  19.   pMesh->makeNClosed();
  20.  
  21.   AcDbVoidPtrArray arr;
  22.   arr.append(pMesh);
  23.  
  24.   AcDbBlockTable *pBlockTable;
  25.   acdbHostApplicationServices()->workingDatabase()->
  26.     getSymbolTable(pBlockTable, AcDb::kForRead);
  27.  
  28.   AcDbBlockTableRecord *pBlockTableRecord;
  29.   pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord,AcDb::kForWrite);
  30.   pBlockTable->close();
  31.  
  32.   AcDbObjectId plineObjId;
  33.   pBlockTableRecord->appendAcDbEntity(plineObjId,pNewPline);
  34.  
  35.   AcDbObjectIterator *pVertIter= pNewPline->vertexIterator();
  36.   AcDb2dVertex *pVertex;
  37.   AcGePoint3d location;
  38.   AcDbObjectId vertexObjId;
  39.   for (int vertexNumber = 0; !pVertIter->done();
  40.     vertexNumber++, pVertIter->step())
  41.   {
  42.     vertexObjId = pVertIter->objectId();
  43.     acdbOpenObject(pVertex, vertexObjId,
  44.       AcDb::kForRead);
  45.     location = pVertex->position();
  46.     pVertex->close();
  47.     AcDbPolygonMeshVertex* polyVertex =
  48.       new AcDbPolygonMeshVertex(pVertex->position());
  49.     pMesh->appendVertex(polyVertex);
  50.     polyVertex->close();
  51.   }
  52.   delete pVertIter;
  53.  
  54.   pBlockTableRecord->appendAcDbEntity(pMesh);
  55.   pBlockTableRecord->close();
  56.   pNewPline->close();
  57.   pMesh->close();
  58. }

 

Источник: http://adndevblog.typepad.com/autocad/2016/08/creating-a-simple-polygon-mesh.html

Автор перевода: Александр Ривилис

Обсуждение: http://adn-cis.org/forum/index.php?topic=7302

Опубликовано 31.08.2016