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;
​
}
​
相关推荐
心中有国也有家1 分钟前
cann-recipes-infer:昇腾 NPU 推理的“菜谱集合”
经验分享·笔记·学习·算法
Upsy-Daisy8 分钟前
AI Agent 项目学习笔记(八):Tool Calling 工具调用机制总览
人工智能·笔记·学习
LuminousCPP1 小时前
数据结构 - 线性表第四篇:C 语言通讯录优化升级全记录(踩坑 + 思考)
c语言·开发语言·数据结构·经验分享·笔记·学习
魔法阵维护师2 小时前
从零开发游戏需要学习的c#模块,第十四章(保存和加载)
学习·游戏·c#
张小姐的猫2 小时前
【Linux】多线程 —— 线程互斥
linux·运维·服务器·c++
_李小白2 小时前
【android opencv学习笔记】Day 17: 目标追踪(MeanShift)
android·opencv·学习
一只机电自动化菜鸟3 小时前
一建机电备考笔记(40) 建筑机电施工—排水管道施工(含考频+题型)
经验分享·笔记·学习·职场和发展·课程设计
2301_818730563 小时前
numpy的学习(笔记)
学习·numpy
GHL2842710903 小时前
Logon failed, use ctrl+c to cancel basic credential prompt
学习·prompt
共享家95274 小时前
Langchain的学习(二)
学习·langchain