Modeling Algorithms Fillets and Chamfers

造型算法——倒圆与倒角

eryar@163.com

一、倒圆Fillet Constructor

1. BRepFilletAPI_MakeFillet

使用类BRepFilletAPI_MakeFillet来为形状添加倒圆。倒圆是用光滑面来代替角边。使用方法如下:

l 首先,给定一个需要倒圆的形状;

l 然后,通过Add方法来添加描述倒圆的参数,倒圆所需的参数包括一个边edge和半径radius。当然,边edge必须由两个面face所共有。倒圆会将原来的边替换成光滑的圆面过渡。

l 最后,通过询问结果来执行倒圆操作。

注:添加一个倒圆两次并不会出错,因为只保留了最后一次添的倒圆。

Figure 1. Filleting two edges using radius r1 and r2

下面给出一个将创建一个倒圆的长方体,其尺寸分别为abc,倒圆半径r

Figure 2. Filleting a box

代码如下所示,创建上图所示的倒圆的长方体的参数分别为:

a = 100b = 60c = 80r = 10

  1. #include <TopoDS_Shape.hxx>
  2. #include <TopoDS.hxx>
  3. #include <BRepPrimAPI_MakeBox.hxx>
  4. #include <TopoDS_Solid.hxx>
  5. #include <BRepFilletAPI_MakeFillet.hxx>
  6. #include <TopExp_Explorer.hxx>
  7.  
  8. TopoDS_Shape FilletedBox(const Standard_Real a,
  9. const Standard_Real b,
  10. const Standard_Real c,
  11. const Standard_Real r)
  12. {
  13. TopoDS_Solid Box = BRepPrimAPI_MakeBox(a,b,c);
  14. BRepFilletAPI_MakeFillet MF(Box);
  15.  
  16. // add all the edges to fillet
  17. TopExp_Explorer ex(Box,TopAbs_EDGE);
  18.  
  19. while (ex.More())
  20. {
  21. MF.Add(r,TopoDS::Edge(ex.Current()));
  22. ex.Next();
  23. }
  24. return MF.Shape();
  25. }

如下图所示为创建一个半径变化的倒圆操作:

Figure 3. Evolutive radius fillet

Figure 4. Evolutive radius fillet a box

程序代码如下所示:

  1. 1: TopoDS_Shape theBox = BRepPrimAPI_MakeBox(200, 200, 200);
  1. 2: BRepFilletAPI_MakeFillet Rake(theBox);
  1. 3: ChFi3d_FilletShape FSH = ChFi3d_Rational;
  1. 4: Rake.SetFilletShape(FSH);
  1. 5:
  1. 6: TColgp_Array1OfPnt2d parAndRad(1, 6);
  1. 7: parAndRad.SetValue(1, gp_Pnt2d(0, 10));
  1. 8: parAndRad.SetValue(2, gp_Pnt2d(50, 20));
  1. 9: parAndRad.SetValue(3, gp_Pnt2d(70, 20));
  1. 10: parAndRad.SetValue(4, gp_Pnt2d(130, 60));
  1. 11: parAndRad.SetValue(5, gp_Pnt2d(160, 30));
  1. 12: parAndRad.SetValue(6, gp_Pnt2d(200, 20));
  1. 13:
  1. 14: TopExp_Explorer ex(theBox, TopAbs_EDGE);
  1. 15: Rake.Add(parAndRad, TopoDS::Edge(ex.Current()));
  1. 16: TopoDS_Shape evolvedBox = Rake.Shape();
  1. 17:

2. BRepFilletAPI_MakeFillet2d

BRepFilletAPI_MakeFillet2d is used to construct fillets and chamfers on planar faces.

我按照示例代码运行了一下程序,结果程序总是崩溃,其操作的效果不得而知,所以也得不到真实的效果图。将其程序代码列出如下所示:

  1. 1: #include BRepPrimAPI_MakeBox.hxx
  1. 2: #include TopoDS_Shape.hxx
  1. 3: #include TopExp_Explorer.hxx
  1. 4: #include BRepFilletAPI_MakeFillet2d.hxx
  1. 5: #include TopoDS.hxx
  1. 6: #include TopoDS_Solid.hxx
  1. 7:
  1. 8: TopoDS_Shape FilletFace(const Standard_Real a,
  1. 9: const Standard_Real b,
  1. 10: const Standard_Real c,
  1. 11: const Standard_Real r)
  1. 12: {
  1. 13: TopoDS_Solid Box = BRepPrimAPI_MakeBox (a,b,c);
  1. 14: TopExp_Explorer ex1(Box,TopAbs_FACE);
  1. 15:
  1. 16: const TopoDS_Face& F = TopoDS::Face(ex1.Current());
  1. 17: BRepFilletAPI_MakeFillet2d MF(F);
  1. 18: TopExp_Explorer ex2(F, TopAbs_VERTEX);
  1. 19:
  1. 20: while (ex2.More())
  1. 21: {
  1. 22: MF.AddFillet(TopoDS::Vertex(ex2.Current()),r);
  1. 23: ex2.Next();
  1. 24: }
  1. 25:
  1. 26: // while...
  1. 27: return MF.Shape();
  1. 28: }
  1. 29:

二、倒角Chamfer Constructor

1BRepFilletAPI_MakeChamfer

BREpFilletAPI_MakeChamfer的使用方法与BRepFilletAPI_MakeFillet大致类似,但稍有不同:

a) The surfaces created are ruled and not smooth;

b) The Add syntax for selecting edges requires one or two distances, one edge and one face(contiguous to the edge);

Add(dist, E, F);

Add(d1, d2, E, F); with d1 on the face F.

Figure 5. Creating a chamfer

Figure 6. The box with chamfers

程序代码如下所示:

  1. 1: TopoDS_Shape theBox = BRepPrimAPI_MakeBox(130,200,170);
  1. 2: BRepFilletAPI_MakeChamfer MC(theBox);
  1. 3: TopTools_IndexedDataMapOfShapeListOfShape M;
  1. 4: TopExp::MapShapesAndAncestors(theBox,TopAbs_EDGE,TopAbs_FACE,M);
  1. 5:
  1. 6: for (Standar1d_Integer i;i<M.Extent();i++)
  1. 7: {
  1. 8: TopoDS_Edge E = TopoDS::Edge(M.FindKey(i));
  1. 9: TopoDS_Face F = TopoDS::Face(M.FindFromIndex(i).First());
  1. 10: MC.Add(15,15,E,F);
  1. 11: }
  1. 12:
  1. 13: TopoDS_Shape ChanfrenedBox = MC.Shape();
  1. 14:

OpenCascade Modeling Algorithms Fillets and Chamfers的更多相关文章

  1. OpenCascade Modeling Algorithms Boolean Operations

    Modeling Algorithms Boolean Operations of Opencascade eryar@163.com 布尔操作(Boolean Operations)是通过两个形状( ...

  2. OpenCASCADE Hidden Line Removal

    OpenCASCADE Hidden Line Removal eryar@163.com Abstract. To provide the precision required in industr ...

  3. OpenCascade Sweep Algorithm

    OpenCascade Sweep Algorithm eryar@163.com Abstract. Sweeps are the objects you obtain by sweeping a ...

  4. Overview of OpenCascade Library

    Overview of OpenCascade Library eryar@163.com 摘要Abstract:对OpenCascade库的功能及其实现做简要介绍. 关键字Key Words:Ope ...

  5. OpenCascade简介

    OpenCascade简介   Overview of OpenCascade Library eryar@163.com 摘要Abstract:对OpenCascade库的功能及其实现做简要介绍. ...

  6. A Simple OpenCASCADE Qt Demo-occQt

    A Simple OpenCASCADE Qt Demo-occQt eryar@163.com Abstract. OpenCASCADE have provided the Qt samples ...

  7. Building OpenCascade on Windows with Visual Studio

    Building OpenCascade on Windows with Visual Studio eryar@163.com 摘要Abstract:详细说明OpenCascade的编译配置过程,希 ...

  8. The Installation and Compilation of OpenCASCADE

    OpenCASCADE的编译 The Installation and Compilation of OpenCASCADE eryar@163.com 一. 安装OpenCASCADE 可以从Ope ...

  9. OpenCascade Primitives BRep - Box

    OpenCascade Primitives BRep - Box eryar@163.com Abstract. BRep is short for Boundary Representation. ...

随机推荐

  1. JBOSS内存参数详解

    JAVA_OPTS="$JAVA_OPTS -server -Xms1024m -Xmx1024m -Xss512k -XX:PermSize=128m -XX:MaxPermSize=25 ...

  2. java入门(1)

    今天开始了java的学习,是同学给的一个说是外面培训的视频,因为我个人的专业是硬件,对软件开发其实也蛮有兴趣,不过确实有跟风的嫌疑哈,因为大家都说现在的主流就是java,所以就跟软件的人要了它的资料, ...

  3. jdbc 4.0新特性

    来自网络 在 Java SE 6 所提供的诸多新特性和改进中,值得一提的是为 Java 程序提供数据库访问机制的 JDBC 版本升级到了 4.0, 这个以 JSR-221 为代号的版本 , 提供了更加 ...

  4. redis持久化以及主从服务器的配置

    作者:silenceper 日期:2013-10-03 原文地址:http://silenceper.com/archives/959.html redis 与memcached 最大的一个区别就是R ...

  5. 使用Spring注解来简化ssh框架的代码编写

     目的:主要是通过使用Spring注解的方式来简化ssh框架的代码编写. 首先:我们浏览一下原始的applicationContext.xml文件中的部分配置. <bean id="m ...

  6. EBS excel模板xml publisher开发

    前提: BI publisher下载地址: http://www.oracle.com/technetwork/middleware/bi-publisher/downloads/index.html ...

  7. 如何编写 Cloud9 JavaScript IDE 的功能扩展

    上周末我们在JSConf.eu发布了 Cloud9 IDE ,同时发布了对应的GitHub项目.在4天时间里该项目得到340个人的关注和将近50个fork.Cloud9的口号是由"由Java ...

  8. ASP.NET 开发必备知识点(1):如何让Asp.net网站运行在自定义的Web服务器上

    一.前言 大家都知道,在之前,我们Asp.net 的网站都只能部署在IIS上,并且IIS也只存在于Windows上,这样Asp.net开发的网站就难以做到跨平台.由于微软的各项技术的开源,所以微软自然 ...

  9. 【Win10】UAP/UWP/通用 开发之 RelativePanel

    [Some information relates to pre-released product which may be substantially modified before it's co ...

  10. 基于uploadify.js实现多文件上传和上传进度条的显示

    uploadify是JQuery的一个插件,主要实现文件的异步上传功能,可以自定义文件大小限制.文件类型.是否自动上传等属性,可以显示上传的进度条.官网地址是http://www.uploadify. ...