Open CASCADE学习|创建旋转体

旋转体是一个几何概念,指的是通过旋转一个平面图形得到的立体图形。具体来说,一个平面图形绕着它所在的平面内的一条定直线旋转一周所形成的曲面,这个曲面会围成一个几何体,这个几何体就叫做旋转体。这条定直线被称为旋转体的轴。

常见的旋转体有圆柱、圆锥、圆台等。例如,将矩形绕其一条边旋转一周,就可以得到一个圆柱;将直角三角形绕其一条直角边旋转一周,就可以得到一个圆锥。

以下是创建旋转体的一般步骤:

**创建二维图形:**使用绘图工具创建一个二维图形,这将是旋转体的基础。例如,你可以创建一个圆、矩形、多边形或任何自定义形状。

**确定旋转轴:**指定一条直线作为旋转轴。在许多情况下,这条轴是二维图形的某条边或穿过图形中心的垂直线。

**应用旋转命令:**选择这个命令,并按照提示操作。通常,你需要选择二维图形和旋转轴。

**设置旋转参数:**​设置旋转的角度(通常是360度以创建完整的旋转体)和其他可能的参数,如旋转方向。

**完成旋转体:**应用旋转命令后,将围绕指定的轴旋转二维图形,生成一个三维的旋转体。

cpp 复制代码
#include <gp_Circ.hxx>
#include <TopoDS_Shape.hxx>
#include <BRepBuilderAPI_MakeVertex.hxx>
#include <BRepBuilderAPI_MakeEdge.hxx>
#include <BRepBuilderAPI_MakeFace.hxx>
#include <BRepBuilderAPI_MakeWire.hxx>
#include <BRepPrimAPI_MakeRevol.hxx>
​
#include <AIS_Shape.hxx>
#include <V3d_View.hxx>
#include <V3d_Viewer.hxx>
#include <AIS_InteractiveContext.hxx>
#include <V3d_View.hxx>
#include "Viewer.h"
#define PI180 M_PI/180
​
int main()
{
    //--- Revol of a vertex -> result is an edge ---
    TopoDS_Vertex V1 = BRepBuilderAPI_MakeVertex(gp_Pnt(-200., -200., 0.));
    gp_Ax1 axe = gp_Ax1(gp_Pnt(-170., -170., 0.), gp_Dir(0., 0., 1.));
    TopoDS_Shape S1 = BRepPrimAPI_MakeRevol(V1, axe);
    //--- Revol of an edge -> result is a face --- 
    TopoDS_Edge E = BRepBuilderAPI_MakeEdge(gp_Pnt(-120., -120, 0.), gp_Pnt(-120., -120, 100.));
    axe = gp_Ax1(gp_Pnt(-100., -100., 0.), gp_Dir(0., 0., 1.));
    TopoDS_Shape S2 = BRepPrimAPI_MakeRevol(E, axe);
    //--- Revol of a wire -> result is a shell ---
    TopoDS_Edge E1 = BRepBuilderAPI_MakeEdge(gp_Pnt(0., 0., 0.), gp_Pnt(50., 0., 0.));
    TopoDS_Edge E2 = BRepBuilderAPI_MakeEdge(gp_Pnt(50., 0., 0.), gp_Pnt(50., 50., 0.));
    TopoDS_Edge E3 = BRepBuilderAPI_MakeEdge(gp_Pnt(50., 50., 0.), gp_Pnt(0., 0., 0.));
    TopoDS_Wire W = BRepBuilderAPI_MakeWire(E1, E2, E3);
    axe = gp_Ax1(gp_Pnt(0., 0., 30.), gp_Dir(0., 1., 0.));
    TopoDS_Shape S3 = BRepPrimAPI_MakeRevol(W, axe, 210. * PI180);
    //--- Revol of a face -> result is a solid --- 
    gp_Circ c = gp_Circ(gp_Ax2(gp_Pnt(200., 200., 0.), gp_Dir(0., 0., 1.)), 80.);
    TopoDS_Edge Ec = BRepBuilderAPI_MakeEdge(c);
    TopoDS_Wire Wc = BRepBuilderAPI_MakeWire(Ec);
    TopoDS_Face F = BRepBuilderAPI_MakeFace(gp_Pln(gp::XOY()), Wc);
    axe = gp_Ax1(gp_Pnt(290, 290., 0.), gp_Dir(0., 1, 0.));
    TopoDS_Shape S4 = BRepPrimAPI_MakeRevol(F, axe, 90. * PI180);
    Viewer vout(50, 50, 500, 500);
    vout << S1;
    vout << S2;
    vout << S3;
    vout << S4;
    vout.StartMessageLoop();
    return 0;
​
}
​
相关推荐
西岸行者12 小时前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
哇哈哈202113 小时前
信号量和信号
linux·c++
多恩Stone13 小时前
【C++入门扫盲1】C++ 与 Python:类型、编译器/解释器与 CPU 的关系
开发语言·c++·人工智能·python·算法·3d·aigc
蜡笔小马13 小时前
21.Boost.Geometry disjoint、distance、envelope、equals、expand和for_each算法接口详解
c++·算法·boost
悠哉悠哉愿意13 小时前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
超级大福宝14 小时前
N皇后问题:经典回溯算法的一些分析
数据结构·c++·算法·leetcode
别催小唐敲代码15 小时前
嵌入式学习路线
学习
weiabc15 小时前
printf(“%lf“, ys) 和 cout << ys 输出的浮点数格式存在细微差异
数据结构·c++·算法
问好眼15 小时前
《算法竞赛进阶指南》0x01 位运算-3.64位整数乘法
c++·算法·位运算·信息学奥赛
yyjtx15 小时前
DHU上机打卡D31
开发语言·c++·算法