This works for me (OCCT 6.5.1, VS2010, x86):
// face
gp_Pnt center(0,0,0);
gp_Circ circ(gp_Ax2(center, gp::DZ()), 100.0);
TopoDS_Edge edge = BRepBuilderAPI_MakeEdge(circ);
BRepBuilderAPI_MakeWire mkWire;
mkWire.Add(edge);
TopoDS_Face face = BRepBuilderAPI_MakeFace(mkWire.Wire());
addToView(face);
// triangulation
BRep_Builder builder;
TopoDS_Compound compound;
builder.MakeCompound(compound);
TopLoc_Location L; //= TopLoc_Location();
Handle(Poly_Triangulation) triangulation = BRep_Tool::Triangulation(face, L);
// check result
if (!triangulation.IsNull())
{
int nbTriangles = triangulation->NbTriangles();
const Poly_Array1OfTriangle & triangles = triangulation->Triangles();
const TColgp_Array1OfPnt & nodes = triangulation->Nodes();
for (int i = 1; i <= nbTriangles; i++)
{
Poly_Triangle triangle = triangles(i);
Standard_Integer node1,node2,node3;
triangle.Get(node1, node2, node3);
gp_Pnt v1 = nodes(node1);
gp_Pnt v2 = nodes(node2);
gp_Pnt v3 = nodes(node3);
TopoDS_Edge e1 = BRepBuilderAPI_MakeEdge(v1,v2);
TopoDS_Edge e2 = BRepBuilderAPI_MakeEdge(v2,v3);
TopoDS_Edge e3 = BRepBuilderAPI_MakeEdge(v3,v1);
TopoDS_Wire w = BRepBuilderAPI_MakeWire(e1, e2, e3);
TopoDS_Face fTriangle = BRepBuilderAPI_MakeFace(w);
builder.Add(compound, fTriangle);
}
if (nbTriangles > 0)
{
Handle_AIS_Shape aisShape = new AIS_Shape(compound);
context->Display(aisShape);
}
}