如图多边形的四个拐角均有缺口,无法生成wire从而无法生成一个面.
为解决上述问题 本人的思路操作如下
//创建8个点
gp_Pnt p1(0.0, 0.0 ,0.0);
gp_Pnt p2(10.0, 0.0, 0.0);
gp_Pnt p3(10.1, 0.1, 0.0);
gp_Pnt p4(10.1, 10., 0.0);
gp_Pnt p5(10.1, 10.1, 0.0);
gp_Pnt p6(0.0, 10.1, 0.0);
gp_Pnt p7(-0.1, 10, 0.0);
gp_Pnt p8(-0.1, 0.1, 0.0);
//构造4条边
TopoDS_Edge edge1 = BRepBuilderAPI_MakeEdge(p1, p2);
TopoDS_Edge edge2 = BRepBuilderAPI_MakeEdge(p3, p4);
TopoDS_Edge edge3 = BRepBuilderAPI_MakeEdge(p5, p6);
TopoDS_Edge edge4 = BRepBuilderAPI_MakeEdge(p7, p8);
//显示
Display(edge1);
Display(edge2);
Display(edge3);
Display(edge4);
//进行并运算
BRepAlgoAPI_Fuse fuse(edge1, edge2);
fuse.SetFuzzyValue(1); //设置精度
fuse.Build(); //执行一下
BRepAlgoAPI_Fuse fuse2 = BRepAlgoAPI_Fuse(fuse, edge3);
fuse2.SetFuzzyValue(1);
fuse2.Build();
BRepAlgoAPI_Fuse fuse3 = BRepAlgoAPI_Fuse(fuse2, edge4);
fuse3.SetFuzzyValue(1);
fuse3.Build();
//fuse3.SimplifyResult();
//并结果shape
TopoDS_Shape fuseShape = fuse3.Shape();
TopTools_ListOfShape edgeList; //存并完之后的所有的边
//遍历提取所有的边
for(TopExp_Explorer itE(fuseShape, TopAbs_EDGE); itE.More(); itE.Next())
{
TopoDS_Edge edge = TopoDS::Edge(itE.Current());
edgeList.Append(edge);
//Display(edge);
//Standard_Real first, last;
//Handle(Geom_Curve) curve = BRep_Tool::Curve(edge, first, last);
//qDebug() << curve->Value(first).X() << curve->Value(first).Y();
//qDebug() << curve->Value(last).X() << curve->Value(last).Y();
}
//构建wire
BRepBuilderAPI_MakeWire wire;
wire.Add(edgeList);
//Display(wire);
//构建face
BRepBuilderAPI_MakeFace face(wire);
//Display(face);
通过布尔并运算并设置布尔并运算的精度,让缺口处自动连接.
结果图