OpenCASCADE 7.7.0 完全教程(三):建模算法实战
# OpenCASCADE 7.7.0 完全教程(三):建模算法实战
布尔运算
布尔运算是 CAD 建模中最常用的操作。
三种基本运算
| 运算 | 说明 | API |
|---|---|---|
| Common | 交集(共同部分) | BRepAlgoAPI_Common |
| Fuse | 并集(合并) | BRepAlgoAPI_Fuse |
| Cut | 差集(切除) | BRepAlgoAPI_Cut |
代码示例
#include <BRepPrimAPI_MakeBox.hxx>
#include <BRepPrimAPI_MakeSphere.hxx>
#include <BRepAlgoAPI_Fuse.hxx>
#include <BRepAlgoAPI_Cut.hxx>
#include <BRepAlgoAPI_Common.hxx>
// 创建立方体和球体
TopoDS_Solid box = BRepPrimAPI_MakeBox(50, 50, 50);
TopoDS_Solid sphere = BRepPrimAPI_MakeSphere(gp_Pnt(25, 25, 25), 30);
// 并集:合并两个形状
TopoDS_Shape fused = BRepAlgoAPI_Fuse(box, sphere);
// 差集:从立方体中切除球体
TopoDS_Shape cut = BRepAlgoAPI_Cut(box, sphere);
// 交集:取共同部分
TopoDS_Shape common = BRepAlgoAPI_Common(box, sphere);
扫掠操作
拉伸(Extrusion)
#include <BRepPrimAPI_MakePrism.hxx>
#include <gp_Vec.hxx>
// 创建面
TopoDS_Face face = ...;
// 沿 Z 轴拉伸 30
gp_Vec dir(0, 0, 30);
TopoDS_Shape prism = BRepPrimAPI_MakePrism(face, dir);
旋转(Revolution)
#include <BRepPrimAPI_MakeRevol.hxx>
#include <gp_Ax1.hxx>
// 创建轮廓
TopoDS_Face profile = ...;
// 绕 Z 轴旋转 360 度
gp_Ax1 axis(gp_Pnt(0, 0, 0), gp_Dir(0, 0, 1));
TopoDS_Shape revol = BRepPrimAPI_MakeRevol(profile, axis);
管道(Pipe)
#include <BRepOffsetAPI_MakePipe.hxx>
// 创建轮廓和路径
TopoDS_Wire profile = ...;
TopoDS_Wire path = ...;
// 沿路径扫掠
TopoDS_Shape pipe = BRepOffsetAPI_MakePipe(path, profile);
倒角和圆角
等半径圆角
#include <BRepFilletAPI_MakeFillet.hxx>
BRepFilletAPI_MakeFillet fillet(box);
TopExp_Explorer exp(box, TopAbs_EDGE);
while (exp.More()) {
fillet.Add(2.0, TopoDS::Edge(exp.Current()));
exp.Next();
}
TopoDS_Shape result = fillet.Shape();
变半径圆角
BRepFilletAPI_MakeFillet fillet(box);
TopoDS_Edge edge = ...;
// 在边的不同位置设置不同半径
fillet.Add(edge, 1.0, 0.0); // 起点半径 1.0
fillet.Add(edge, 3.0, 0.5); // 中点半径 3.0
fillet.Add(edge, 1.0, 1.0); // 终点半径 1.0
TopoDS_Shape result = fillet.Shape();
倒角
#include <BRepFilletAPI_MakeChamfer.hxx>
BRepFilletAPI_MakeChamfer chamfer(box);
chamfer.Add(2.0, edge); // 2mm 倒角
TopoDS_Shape result = chamfer.Shape();
抽壳(Shelling)
#include <BRepOffsetAPI_MakeThickSolid.hxx>
// 选择要移除的面
TopTools_ListOfShape removed;
removed.Append(bottomFace);
// 创建壁厚 2mm 的薄壳
BRepOffsetAPI_MakeThickSolid shell(box, removed, 2.0, 0.01);
TopoDS_Shape result = shell.Shape();
放样(Lofting)
#include <BRepOffsetAPI_ThruSections.hxx>
BRepOffsetAPI_ThruSections loft(true, false);
// 添加多个截面
loft.AddSection(profile1);
loft.AddSection(profile2);
loft.AddSection(profile3);
loft.CheckCompatibility(Standard_False);
TopoDS_Shape result = loft.Shape();
偏移(Offset)
#include <BRepOffsetAPI_MakeOffsetShape.hxx>
// 将形状表面偏移 5mm
BRepOffsetAPI_MakeOffsetShape offset(shape, 5.0, 0.01);
TopoDS_Shape result = offset.Shape();
常见建模流程
// 1. 创建基础形状
TopoDS_Solid base = BRepPrimAPI_MakeBox(100, 80, 60);
// 2. 切除特征
TopoDS_Solid cutter = BRepPrimAPI_MakeCylinder(10, 60);
TopoDS_Shape withHole = BRepAlgoAPI_Cut(base, cutter);
// 3. 添加圆角
BRepFilletAPI_MakeFillet fillet(withHole);
// ... 添加边
TopoDS_Shape filleted = fillet.Shape();
// 4. 抽壳
TopTools_ListOfShape removed;
removed.Append(topFace);
BRepOffsetAPI_MakeThickSolid shell(filleted, removed, 3.0, 0.01);
TopoDS_Shape finalPart = shell.Shape();
总结
建模算法是 OCCT 的核心功能,掌握这些算法可以创建复杂的 3D 模型。
字数:约 2000 字 | 分类:OpenCASCADE 教程 | 难度:进阶 | 版本:7.7.0