Try any of these functions to see if it works on your sample, the AddNewSplit(TopoDS_Shape Stock, gp_Pln plane1) is more efficient than AddNewSplit(TopoDS_Shape Stock, TopoDS_Shape Tool)
you could either do :
TopoDS_Shape result = AddNewSplit(aFace2,aFace1);
or since you already have the plane:
aPlane = GC_MakePlane( gp_Pln( gp_Ax3( gp_XOY() ) ) ).Value()
TopoDS_Shape result = AddNewSplit(aFace2,aPlane);
-----------------------------------------------------------------------------
// split stock with tool
TopoDS_Shape AddNewSplit(TopoDS_Shape Stock, TopoDS_Shape Tool)
{
TopoDS_Shape nullshape;
BRepAlgoAPI_Section asect(Stock, Tool,Standard_False);
asect.ComputePCurveOn1(Standard_True);
asect.Approximation(Standard_True);
asect.Build();
TopoDS_Shape R = asect.Shape();
if (!asect.ErrorStatus()== 0) return nullshape;
BRepFeat_SplitShape asplit(Stock);
for (TopExp_Explorer Ex(R,TopAbs_EDGE); Ex.More(); Ex.Next()) {
TopoDS_Shape anEdge = Ex.Current();
TopoDS_Shape aFace;
if (asect.HasAncestorFaceOn1(anEdge,aFace)) {
TopoDS_Face F = TopoDS::Face(aFace);
TopoDS_Edge E = TopoDS::Edge(anEdge);
asplit.Add(E,F);
}
}
try
{
asplit.Build();
}
catch(...)
{
return nullshape;
}
if(!asplit.Shape().IsNull())
{
return asplit.Shape();
} else {
return nullshape;
}
}
// split stock with plane
TopoDS_Shape AddNewSplit(TopoDS_Shape Stock, gp_Pln plane1)
{
TopoDS_Shape nullshape;
BRepAlgoAPI_Section asect(Stock,plane1,Standard_False);
asect.ComputePCurveOn1(Standard_True);
asect.Approximation(Standard_True);
asect.Build();
TopoDS_Shape R = asect.Shape();
if (!asect.ErrorStatus()== 0) return nullshape;
BRepFeat_SplitShape asplit(Stock);
for (TopExp_Explorer Ex(R,TopAbs_EDGE); Ex.More(); Ex.Next()) {
TopoDS_Shape anEdge = Ex.Current();
TopoDS_Shape aFace;
if (asect.HasAncestorFaceOn1(anEdge,aFace)) {
TopoDS_Face F = TopoDS::Face(aFace);
TopoDS_Edge E = TopoDS::Edge(anEdge);
asplit.Add(E,F);
}
}
try
{
asplit.Build();
}
catch(...)
{
return nullshape;
}
if(!asplit.Shape().IsNull())
{
return asplit.Shape();
} else {
return nullshape;
}
}