+ myErrorStatus=0;
+ //
+ Standard_Integer j, aNbNodes, aIndex, aNb;
+ Handle(Poly_PolygonOnTriangulation) aPTE;
+ Handle(Poly_Triangulation) aTRE;
+ TopLoc_Location aLoc;
+ gp_Pnt aP;
+ //
+ aLP.Clear();
+ BRep_Tool::PolygonOnTriangulation(aE, aPTE, aTRE, aLoc);
+ if (aTRE.IsNull() || aPTE.IsNull()) {
+ Handle(Poly_Polygon3D) aPE = BRep_Tool::Polygon3D(aE, aLoc);
+ if (aPE.IsNull()) {
+ if (!GEOMAlgo_FinderShapeOn::BuildTriangulation(aE)) {
+ myErrorStatus=20; // no triangulation found
+ return;
+ }
+ aPE = BRep_Tool::Polygon3D(aE, aLoc);
+ }
+ const gp_Trsf& aTrsf=aLoc.Transformation();
+ const TColgp_Array1OfPnt& aNodes=aPE->Nodes();
+ //
+ aNbNodes=aPE->NbNodes();
+ Standard_Integer low = aNodes.Lower(), up = aNodes.Upper();
+ for (j=low+1; j<up; ++j) {
+ aP=aNodes(j).Transformed(aTrsf);
+ aLP.Append(aP);
+ }