Open Cascade造型算法——倒圆与倒角
原文: 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 1. Filleting two edges using radius r1 and r2
下面给出一个将创建一个倒圆的长方体,其尺寸分别为a,b,c,倒圆半径r。
Figure 2. Filleting a box
代码如下所示,创建上图所示的倒圆的长方体的参数分别为:
a = 100,b = 60,c = 80,r = 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 3. Evolutive radius fillet
Figure 4. Evolutive 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
1.BRepFilletAPI_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
程序代码如下所示:
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造型算法——倒圆与倒角相关推荐
- 论文阅读笔记 | 目标检测算法——Cascade R-CNN算法
如有错误,恳请指出. 文章目录 1. Introduction 2 Related Work 2.1 iterative bounding box regression 2.2 Integral Lo ...
- opencascade造型引擎功能介绍
opencascade造型引擎功能介绍 现今的CAD 系统大多通常都基于CAD 系统提供的二次开发包,用户根据要求定制符合自己要求的功能.AutoCAD就提供了AutoLISP.ADS 等都是比较通用 ...
- 落地扇的三维造型与运动仿真
目 录 摘 要 I Abstract II 目 录 III 1 绪论 1 1.1 选题背景及意义 1 1.2研究现状 1 1.4 研究主要内容 2 2 基于UG的落地扇造型设计 4 2.1 设计思路 ...
- Cascade RPN,结构的艺术带来极致提升 | NeurIPS 2019
作者 | VincentLee 来源 | 晓飞的算法工程笔记(ID: gh_084c810bc839) 导读:论文提出Cascade RPN算法来提升RPN模块的性能,该算法重点解决了RPN在迭代时a ...
- 【CV】大盘点 | 性能最强的目标检测算法
前言 去年7月,Amusi 曾做过一篇整理:大盘点 | 性能最强的目标检测算法,那时收集的情况是:改进后的 Cascade R-CNN 算法是截止(2019.07.07)目标检测方向性能最强的算法,其 ...
- 推荐CVer的总结 | 性能最强的目标检测算法
前言 趁最近目标检测(Object Detection)方向的论文更新较少,Amusi 赶紧做个"最强目标检测算法"大盘点. https://github.com/amusi/aw ...
- Cascade R-CNN升级!目标检测制霸COCO,实例分割超越Mask R-CNN
点击我爱计算机视觉标星,更快获取CVML新技术 前天,arxiv上新出一篇论文<Cascade R-CNN: High Quality Object Detection and Instance ...
- CVPR2018 目标检测算法总览(最新的目标检测论文)
CVPR2018上关于目标检测(object detection)的论文比去年要多很多,而且大部分都有亮点.从其中挑了几篇非常有意思的文章,特来分享,每篇文章都有详细的博客笔记,可以点击链接阅读. 1 ...
- tensorflow 人面关键点识别_人工智能算法-图像识别项目
电缆缺陷检测 各省市电网,需要建立一套完善的电缆线部件缺陷检测的平台,为各省市的电缆线部件 缺陷提供智能化的解决方案,进一步确保电网系统的安全运行.现在有些省市的电网缺陷部 件的检测仍采用人工查缺的方 ...
最新文章
- 功能点分析:商品类目表
- java extjs如何使用_ExtJS初探:在项目中使用ExtJS
- Asp组件中级入门与精通系列之三
- ubuntu mysql5.7配置_ubuntu系统mysql5.7忘记/设置root的坑
- 阿波罗配置中心(apollo)的个人看法
- Node.js「二」—— fs 模块 / async 与 await
- 2012年十大项目月度得分榜
- 3. file、inode结构体及chardevs数组等相关知识解析
- 摩游世纪CEO宋啸飞:Html5增长趋势已可见
- Java实现过滤敏感词汇
- uniapp app端根据支付宝qr链接 直接打开支付宝app支付页面
- Ping值和带宽之间关系
- iOS微信第三方登录实现
- 数据挖掘思维和实战20 Apriori 与 FP-Growth:不得不再说一遍啤酒与尿布的故事
- Ajaxfileupload上传多张图片
- PHP 获取当天凌晨时间戳
- PLC高精度定时器(T法测速功能块)
- 源代码静态检测分析技术浅析
- 1-3 laravel C R U D=(数据验证)
- spring+springboot认识