1372826956:AAFe2Py65GSQkfGiRnXuOQ-eD9yXcwMv988

AutoLISP Kullanarak Basit bir Poligonal Izgara Yaratma

sekil-01

Site kullanıcılarımızdan gelen istek üzerine bu makalemde sizlere AutoCAD’de polygonal ızgaralar ve AutoLISP kullanarak bu polygonal ızgaraları yaratma konusunu anlatacağım.

Öncelikle polygonal ızgaraların ne olduğunu açıklayalım:

Poligonal ızgaralar “Polygon mesh” 3 boyutlu 3B “3D” bilgisayar grafiklerinde ve katı modellemede bir polyhedral nesnenin şeklini tanımlayan köşeler “vertice”, kenarlar “edge” ve yüzler “face” koleksiyonudur Yüzler “Face” genelde sıvama “render” işlemini kolaylaştırdığı için, üçgenler “triangle” (üçgensel ızgaralar “triangle mesh”), dörtgensel “quadrilateral” veya diğer basit dışbükey poligonları “polygon” içermekte olup; deliklerle birlikte genel dışbükey poligonlardan da meydana gelebilirler.

Poligonal ızgaralar konusu bilgisayar grafiklerinin ve geometrik modellemenin büyük bir alt alanıdır. Poligonal ızgaraların farklı sunumları farklı uygulamalar ve amaçlar için kullanılmaktadır. Poligonal ızgaralar üzerindeki işlemler Boolean mantık işlemlerini, yumuşatma işlemlerini, basitleştirme işlemlerini ve daha birçok diğer işlemi içermektedir. Poligonal ızgaralar kesin olarak sadece yüzeyleri oluştururlarken, hacimsel ızgaralar poligonal ızgaralardan farklı olup; hem yüzeyleri hem de hacimleri oluştururlar. Poligonal ızgaralar yaygın olarak bilgisayar grafiklerinde, poligonal ızgaraların ışın izleme, çakışma tespit ve katı cisim dinamikleri algoritmalarında kullanılmaktadırlar.

sekil-02

İşte aşağıda ObjectARX kullanarak bu tür bir poligonal ızgara yaratan örnek bir kod bulacaksınız. AcDbPolygonMesh() teşkil edici parametresiz kullanılacağı zaman, M ve N yönlerindeki köşe “vertex” sayısının açıkça ayarlanması ve poligon ızgaranın M ve N yönlerinde açık mı kapalı mı olacağının belirlenmesi gerekmektedir.

void createSimplePolygonMesh() {  // polyline creation  AcGePoint3dArray ptArr;  ptArr.setLogicalLength(4);  for (int i = 0; i < 4; i++)  {  ptArr[i].set((double)(i/2), (double)(i%2), 0.0);  }  AcDb2dPolyline *pNewPline = new AcDb2dPolyline( AcDb::k2dSimplePoly, ptArr, 0.0, Adesk::kTrue);  pNewPline->setColorIndex(3);

 

//polygon mesh constructor without any parameter  AcDbPolygonMesh *pMesh = new AcDbPolygonMesh();  pMesh->setMSize(1);  pMesh->setNSize(4);  pMesh->makeMClosed();  pMesh->makeNClosed();

 

AcDbVoidPtrArray arr;  arr.append(pMesh);

 

AcDbBlockTable *pBlockTable;  acdbHostApplicationServices()->workingDatabase()->getSymbolTable(pBlockTable, AcDb::kForRead);

 

AcDbBlockTableRecord *pBlockTableRecord;  pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord,AcDb::kForWrite);  pBlockTable->close();

 

AcDbObjectId plineObjId;  pBlockTableRecord->appendAcDbEntity(plineObjId,pNewPline);

 

AcDbObjectIterator *pVertIter= pNewPline->vertexIterator();  AcDb2dVertex *pVertex;  AcGePoint3d location;  AcDbObjectId vertexObjId;  for (int vertexNumber = 0; !pVertIter->done();  vertexNumber++, pVertIter->step())  {  vertexObjId = pVertIter->objectId();  acdbOpenObject(pVertex, vertexObjId,  AcDb::kForRead);  location = pVertex->position();  pVertex->close();  AcDbPolygonMeshVertex* polyVertex = new AcDbPolygonMeshVertex(pVertex->position());  pMesh->appendVertex(polyVertex);  polyVertex->close();  }  delete pVertIter;

 

pBlockTableRecord->appendAcDbEntity(pMesh);  pBlockTableRecord->close();  pNewPline->close();  pMesh->close(); }

sekil-03

Hakkında Sertan Türkan

AutoCAD Beyni

Bunu da Kontrol edin

Revitte Altlıklar “Underlay” Hakkında

Revit’te koordinasyon ve inşaat için farklı kotlardaki bileşenlerin ilişkisini anlamanız gerektiğinde Altlıklar “Underlays” yararlıdırlar. Video: …

Bir cevap yazın

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Yardıma mı ihtiyacınız var? Chat with us
Bir görüşme başlatmak için lütfen önce gizlilik politikamızı kabul edin.