I use this code to create an indexed mesh:
m_vertscount = 0;
m_triscount = 0;
//counting vertices and triangles
for (TopExp_Explorer ex(topoShape, TopAbs_FACE) ; ex.More(); ex.Next())
{
F = TopoDS::Face(ex.Current());
facing = BRep_Tool::Triangulation(F,L);
if(facing.IsNull() == Standard_False)
{
m_triscount += facing->NbTriangles();
m_vertscount += facing->NbNodes();
}
else
{
TraceDebugFormattedStr("Creating model - GeoEntityTopo [","%i","] - failed to process a face.",entityIdentifier);
}
}
if(m_tris != NULL)
delete [] m_tris;
if(m_verts != NULL)
delete [] m_verts;
m_tris = new IndexedTriangle[m_triscount];
m_verts = new Point[m_vertscount];
int triscount = 0;
int vertscount = 0;
//assigning
for (TopExp_Explorer ex(topoShape, TopAbs_FACE) ; ex.More(); ex.Next()) {
F = TopoDS::Face(ex.Current());
facing = BRep_Tool::Triangulation(F,L);
if(facing.IsNull() == Standard_False)
{
int nbtris = facing->NbTriangles();
Poly_Array1OfTriangle tris(1, nbtris);
tris = facing->Triangles();
for (int i = 1; i <= nbtris; i++)
{
Poly_Triangle tri = tris.Value(i);
Standard_Integer index0, index1, index2;
tri.Get(index0, index1, index2);
m_tris[triscount] = IndexedTriangle(index0 + vertscount - 1, index1 + vertscount - 1, index2 + vertscount - 1 );
triscount += 1;
}
int nbnodes = facing->NbNodes();
TColgp_Array1OfPnt nodes(1, nbnodes);
nodes = facing->Nodes();
for (int i = 1; i <= nbnodes; i++)
{
gp_Pnt node = nodes.Value(i);
m_verts[vertscount] = Point((float)node.X(), (float)node.Y(), (float)node.Z());
vertscount += 1;
}
}
You have to leave out some variables that reference to not-OC objects (TraceDebug, etc.), but generally this code works.
Regards
Commenter-1