对于一个无法连接成为封闭wire的edge处理方法

如图多边形的四个拐角均有缺口,无法生成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);

通过布尔并运算并设置布尔并运算的精度,让缺口处自动连接.

结果图

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值