ObjectARX, AutoCAD. Среда программирования библиотеки C++

       

Сеть


Сеть - эффективный способ сохранить parametrically прямоугольную сетку вершины. Геометрия для сети определена как число строк, число столбцов, и списка вершины, в порядке строки:

virtual Adesk::Boolean

AcGiWorldGeometry::mesh(

const Adesk::UInt32 rows,

const Adesk::UInt32 columns,

const AcGePoint3d* pVertexList,

const AcGiEdgeData* pEdgeData = NULL,

const AcGiFaceData* pFaceData = NULL,

const AcGiVertexData* pVertexData = NULL) const = 0;

Mesh() функция имеет три необязательных параметра для присоединяющихся данных свойства к граням, лицам, или вершине. Для граней в сети, Вы можете прикреплять цвет, уровень, linetype, GS маркер, и свойства видимости. Например, Вы могли использовать AcGiEdgeData:: setColors () чтобы прикрепить различный цвет к каждому краю сети. В цветном списке, сначала перечисляют цвета для всех граней строки, тогда цвета для всех граней столбца. Следующее рисунок показывает упорядочение данных свойства края для типовой сети:

Следующий типовой код создает сеть и назначает цвета, использующие данные края и данные лица. Это создает сеть " четыре четыре " с голубыми строками и зелеными столбцами.

Adesk::Boolean



AsdkMeshSamp::worldDraw(AcGiWorldDraw* pW)

{

Adesk::UInt32 i, j, k;

Adesk::UInt32 numRows = 4;

Adesk::UInt32 numCols = 4;

AcGePoint3d *pVerts =

new AcGePoint3d[numRows * numCols];

for (k = 0, i = 0; i < numRows; i++) {

for (j = 0; j < numCols; j++, k++) {

pVerts[k].x = (double)j;

pVerts[k].y = (double)i;

pVerts[k].z = 0.;

}

}

// Construct an array of colors to be applied to each

// edge of the mesh. In this example, the rows are cyan and

// the columns are green.

//

AcGiEdgeData edgeInfo;

Adesk::UInt32 numRowEdges = numRows * (numCols - 1);

Adesk::UInt32 numColEdges = (numRows - 1) * numCols;

Adesk::UInt32 numEdges = numRowEdges + numColEdges;

short *pEdgeColorArray = new short[numEdges];

for (i = 0; i < numEdges; i++) {

pEdgeColorArray[i] =

i < numRowEdges ? kCyan : kGreen;

}

edgeInfo.setColors(pEdgeColorArray);


// Make the first face transparent and the rest

// different colors.

//

Adesk::UInt32 numFaces = (numRows - 1)

* (numCols - 1);

Adesk::UInt8 *pFaceVisArray =

new Adesk::UInt8[numFaces];

short *pFaceColorArray = new short[numFaces];

AcGiFaceData faceInfo;

faceInfo.setVisibility(pFaceVisArray);

for (i = 0; i < numFaces; i++) {

pFaceVisArray[i] =

i ? kAcGiVisible : kAcGiInvisible;

pFaceColorArray[i] = (short)(i + 1);

}

faceInfo.setColors(pFaceColorArray);

// If the fill type is kAcGiFillAlways, then a shell,

// mesh, or polygon will be interpreted as faces;

// otherwise, they will be interpreted as edges.

//

// Output mesh as faces.

//

pW->subEntityTraits().setFillType(kAcGiFillAlways);

pW->geometry().mesh(numRows, numCols, pVerts, NULL, &faceInfo);

// Output mesh as edges over the faces.

//

pW->subEntityTraits().setFillType(kAcGiFillNever);

pW->geometry().mesh(numRows, numCols, pVerts, &edgeInfo);

delete [] pVerts;

delete [] pEdgeColorArray;

delete [] pFaceColorArray;

delete [] pFaceVisArray;

return Adesk::kTrue;

}

Для лиц в сети, Вы можете прикреплять цвет, уровень, GS маркер, нормаль, и черты видимости. Чтобы назначать свойства на лица в сети, Вы перечисляете значения для лиц в порядке строк, как обозначено следующим рисунком:



Данные Вершины для сети перечислены в том же самом порядке как в списке вершины. Свойства, которые могут быть установлены с AcGiVertexData - нормали и ориентация.


Содержание раздела