原文: Open Cascade造型算法——倒圆与倒角

造型算法——倒圆与倒角

Modeling Algorithms Fillets and Chamfers

eryar@163.com

一、倒圆Fillet Constructor

1. BRepFilletAPI_MakeFillet

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

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

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

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

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

Figure 1Filleting two edges using radius r1 and r2

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

Figure 2Filleting a box

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

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

#include <TopoDS_Shape.hxx>
#include <TopoDS.hxx>
#include <BRepPrimAPI_MakeBox.hxx>
#include <TopoDS_Solid.hxx>
#include <BRepFilletAPI_MakeFillet.hxx>
#include <TopExp_Explorer.hxx> TopoDS_Shape FilletedBox(const Standard_Real a, const Standard_Real b, const Standard_Real c, const Standard_Real r)
{ TopoDS_Solid Box = BRepPrimAPI_MakeBox(a,b,c); BRepFilletAPI_MakeFillet MF(Box); // add all the edges to fillet TopExp_Explorer ex(Box,TopAbs_EDGE); while (ex.More()) { MF.Add(r,TopoDS::Edge(ex.Current())); ex.Next(); }return MF.Shape();
} 

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

Figure 3Evolutive radius fillet

Figure 4Evolutive radius fillet a box

程序代码如下所示:

TopoDS_Shape theBox = BRepPrimAPI_MakeBox(200, 200, 200);
BRepFilletAPI_MakeFillet Rake(theBox);
ChFi3d_FilletShape FSH = ChFi3d_Rational;
Rake.SetFilletShape(FSH);

TColgp_Array1OfPnt2d parAndRad(1, 6);
parAndRad.SetValue(1, gp_Pnt2d(0, 10));
parAndRad.SetValue(2, gp_Pnt2d(50, 20));
parAndRad.SetValue(3, gp_Pnt2d(70, 20));
parAndRad.SetValue(4, gp_Pnt2d(130, 60));
parAndRad.SetValue(5, gp_Pnt2d(160, 30));
parAndRad.SetValue(6, gp_Pnt2d(200, 20));TopExp_Explorer ex(theBox, TopAbs_EDGE);
Rake.Add(parAndRad, TopoDS::Edge(ex.Current()));
TopoDS_Shape evolvedBox = Rake.Shape();

2. BRepFilletAPI_MakeFillet2d

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

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

PS:我想应该是TopExp_Explorer的问题吧,顶点构成边时共享使用了多次,改用TopExp::MapShapes(srcFace,TopAbs_VERTEX,mapVertex);即可。

#include “BRepPrimAPI_MakeBox.hxx”
#include “TopoDS_Shape.hxx”
#include “TopExp_Explorer.hxx”
#include “BRepFilletAPI_MakeFillet2d.hxx”
#include “TopoDS.hxx”
#include “TopoDS_Solid.hxx” TopoDS_Shape FilletFace(const Standard_Real a, const Standard_Real b, const Standard_Real c, const Standard_Real r) { TopoDS_Solid Box = BRepPrimAPI_MakeBox (a,b,c); TopExp_Explorer ex1(Box,TopAbs_FACE); const TopoDS_Face& F = TopoDS::Face(ex1.Current()); BRepFilletAPI_MakeFillet2d MF(F); TopExp_Explorer ex2(F, TopAbs_VERTEX); while (ex2.More()) { MF.AddFillet(TopoDS::Vertex(ex2.Current()),r); ex2.Next(); } // while... return MF.Shape(); }

二、倒角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 distancesone edge and one face(contiguous to the edge);

Add(distEF);

Add(d1d2EF); with d1 on the face F.

Figure 5Creating a chamfer

Figure 6The box with chamfers

程序代码如下所示:

TopoDS_Shape theBox = BRepPrimAPI_MakeBox(130,200,170);
BRepFilletAPI_MakeChamfer MC(theBox);
TopTools_IndexedDataMapOfShapeListOfShape M;
TopExp::MapShapesAndAncestors(theBox,TopAbs_EDGE,TopAbs_FACE,M); for (Standar1d_Integer i;i<M.Extent();i++)
{ TopoDS_Edge E = TopoDS::Edge(M.FindKey(i)); TopoDS_Face F = TopoDS::Face(M.FindFromIndex(i).First()); MC.Add(15,15,E,F);
} TopoDS_Shape ChanfrenedBox = MC.Shape();  

Open Cascade造型算法——倒圆与倒角相关推荐

  1. 论文阅读笔记 | 目标检测算法——Cascade R-CNN算法

    如有错误,恳请指出. 文章目录 1. Introduction 2 Related Work 2.1 iterative bounding box regression 2.2 Integral Lo ...

  2. opencascade造型引擎功能介绍

    opencascade造型引擎功能介绍 现今的CAD 系统大多通常都基于CAD 系统提供的二次开发包,用户根据要求定制符合自己要求的功能.AutoCAD就提供了AutoLISP.ADS 等都是比较通用 ...

  3. 落地扇的三维造型与运动仿真

    目 录 摘 要 I Abstract II 目 录 III 1 绪论 1 1.1 选题背景及意义 1 1.2研究现状 1 1.4 研究主要内容 2 2 基于UG的落地扇造型设计 4 2.1 设计思路 ...

  4. Cascade RPN,结构的艺术带来极致提升 | NeurIPS 2019

    作者 | VincentLee 来源 | 晓飞的算法工程笔记(ID: gh_084c810bc839) 导读:论文提出Cascade RPN算法来提升RPN模块的性能,该算法重点解决了RPN在迭代时a ...

  5. 【CV】大盘点 | 性能最强的目标检测算法

    前言 去年7月,Amusi 曾做过一篇整理:大盘点 | 性能最强的目标检测算法,那时收集的情况是:改进后的 Cascade R-CNN 算法是截止(2019.07.07)目标检测方向性能最强的算法,其 ...

  6. 推荐CVer的总结 | 性能最强的目标检测算法

    前言 趁最近目标检测(Object Detection)方向的论文更新较少,Amusi 赶紧做个"最强目标检测算法"大盘点. https://github.com/amusi/aw ...

  7. Cascade R-CNN升级!目标检测制霸COCO,实例分割超越Mask R-CNN

    点击我爱计算机视觉标星,更快获取CVML新技术 前天,arxiv上新出一篇论文<Cascade R-CNN: High Quality Object Detection and Instance ...

  8. CVPR2018 目标检测算法总览(最新的目标检测论文)

    CVPR2018上关于目标检测(object detection)的论文比去年要多很多,而且大部分都有亮点.从其中挑了几篇非常有意思的文章,特来分享,每篇文章都有详细的博客笔记,可以点击链接阅读. 1 ...

  9. tensorflow 人面关键点识别_人工智能算法-图像识别项目

    电缆缺陷检测 各省市电网,需要建立一套完善的电缆线部件缺陷检测的平台,为各省市的电缆线部件 缺陷提供智能化的解决方案,进一步确保电网系统的安全运行.现在有些省市的电网缺陷部 件的检测仍采用人工查缺的方 ...

最新文章

  1. 功能点分析:商品类目表
  2. java extjs如何使用_ExtJS初探:在项目中使用ExtJS
  3. Asp组件中级入门与精通系列之三
  4. ubuntu mysql5.7配置_ubuntu系统mysql5.7忘记/设置root的坑
  5. 阿波罗配置中心(apollo)的个人看法
  6. Node.js「二」—— fs 模块 / async 与 await
  7. 2012年十大项目月度得分榜
  8. 3. file、inode结构体及chardevs数组等相关知识解析
  9. 摩游世纪CEO宋啸飞:Html5增长趋势已可见
  10. Java实现过滤敏感词汇
  11. uniapp app端根据支付宝qr链接 直接打开支付宝app支付页面
  12. Ping值和带宽之间关系
  13. iOS微信第三方登录实现
  14. 数据挖掘思维和实战20 Apriori 与 FP-Growth:不得不再说一遍啤酒与尿布的故事
  15. Ajaxfileupload上传多张图片
  16. PHP 获取当天凌晨时间戳
  17. PLC高精度定时器(T法测速功能块)
  18. 源代码静态检测分析技术浅析
  19. 1-3 laravel C R U D=(数据验证)
  20. spring+springboot认识

热门文章

  1. 2020年2月17日 林大OJ习题 map
  2. linux复制jar文件,linux如何将界面上的一个JAR文件拷贝到ROOT下啊
  3. Linux下TC使用说明
  4. 痞子衡嵌入式:实测i.MXRT1010上的普通GPIO与高速GPIO极限翻转频率
  5. ArcFace/InsightFace使用自己数据训练/验证过程(1)
  6. 4_获取影像像元数据
  7. YII2 with的使用
  8. 读取没开计算机硬盘,电脑开不了机读取不了硬盘。
  9. 人工智能给敏捷项目管理带来的九大好处
  10. 系统权限设计 - 基本概念和思路