opencascade如何用一个面裁剪另外一个面
void trim_plane_by_plane_2(TopoDS_Shape aS1, TopoDS_Shape aS2)
{
BRepAlgoAPI_Section sec(aS1, aS2, false);
sec.ComputePCurveOn1(true);
sec.Approximation(true);
sec.Build();
TopoDS_Shape aInterCurve = sec.Shape();
TopoDS_Face aFace = TopoDS::Face(aS1);
BRepFeat_SplitShape ssplit(aS1);
TopExp_Explorer ex;
for (ex.Init(aInterCurve, TopAbs_EDGE, TopAbs_SHAPE); ex.More(); ex.Next())
{
TopoDS_Edge aE = TopoDS::Edge(ex.Current());
TopoDS_Shape aF;
if (sec.HasAncestorFaceOn1(aE, aF))
{
TopoDS_Face aAncFace = TopoDS::Face(aF);
if (aAncFace.IsSame(aFace))
ssplit.Add(aE, aFace);
}
}
ssplit.Build();
TopTools_ListOfShape shapeList = ssplit.Modified(aFace);
TopTools_ListIteratorOfListOfShape ite(shapeList);
for (; ite.More(); ite.Next())
{
TopoDS_Shape aS = ite.Value();
Handle(AIS_Shape) aiss = new AIS_Shape(aS);
m_context->Display(aiss, true);
}
}