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;
​
}
​
相关推荐
another heaven1 分钟前
【C/C++ C++ 面向对象架构的五大特点与能力场景:封装、继承、多态、抽象与 RAII(含实战案例)】
c语言·c++·架构
叶子野格2 分钟前
《JAVA学习:前置知识》
学习
小猪佩奇TONY29 分钟前
Linux 内核学习(19) --- linux swap 机制
linux·学习·swap·kswapd
努力努力再努力wz38 分钟前
【C++ 高阶系列】C++ 高性能网络编程:当 Reactor 遇见协程:从 epoll 回调到异步 MySQL,彻底打通任务挂起与恢复
网络·c++·mysql
andrsted1 小时前
企业培训时间难统一?练题簿让在线免费刷题与培训考核更好安排
学习·微信小程序·小程序·学习方法·刷题
李航19831 小时前
虚拟盖房子,在游戏中学习房子的建造过程
人工智能·学习·游戏·计算机视觉·ai编程
霍霍的袁1 小时前
【C++11】左值右值引用与移动语义详细笔记(左值右值、右值引用、移动构造、移动赋值、引用折叠、万能转发)
c++·笔记·学习·visual studio
布莱克6051 小时前
C++ 中 unordered_set 与 unordered_map 有什么不同?一篇讲透
开发语言·c++·哈希
外收内放1 小时前
FastAPI猜字谜实战(6):日志与异常
开发语言·python·学习·fastapi
鶴哥只手遮天2 小时前
AFSIM 2.9.0 深度解析:架构、原理与工程实践-第 1 章 项目全景与代码地图
c++