Сеть
Сеть - эффективный способ сохранить 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 - нормали и ориентация.