OCC 创建方管(拉伸操作)

news2024/9/21 14:34:58

目录

 一、OCC 拉伸操作

二、例子

1、使BRepBuilderAPI_MakeFace

2、使用BRepPrimAPI_MakeRevol

3、垂直路径扫掠


 一、OCC 拉伸操作

BRepPrimAPI_MakeSweep Class Reference - Open CASCADE Technology Documentation

OCC提供几种图形的构建是由基本图形的旋转,拉伸等方式形成的。进行拉伸操作的 时候,最场景这三个派生类。

还有另外一个比较少见。

二、例子

1、使BRepBuilderAPI_MakeFace

#include <TopoDS.hxx>
#include <TopoDS_Shape.hxx>
#include <TopoDS_Face.hxx>
#include <TopoDS_Wire.hxx>
#include <BRepBuilderAPI_MakeFace.hxx>
#include <BRepBuilderAPI_MakeWire.hxx>
#include <BRepPrimAPI_MakePrism.hxx>
#include <gp_Pnt.hxx>
#include <gp_Dir.hxx>
#include <gp_Vec.hxx>
#include <BRepBuilderAPI_MakeEdge.hxx>
#include <BRepOffsetAPI_MakePipe.hxx>
int main() {
	// 定义路径的点,形成一个带有拐角的路径
	gp_Pnt p1(0, 0, 0);
	gp_Pnt p2(100, 0, 0);
	gp_Pnt p3(100, 100, 0);
	gp_Pnt p4(200, 100, 0);

	// 创建路径的边
	TopoDS_Edge edge1 = BRepBuilderAPI_MakeEdge(p1, p2);
	TopoDS_Edge edge2 = BRepBuilderAPI_MakeEdge(p2, p3);
	TopoDS_Edge edge3 = BRepBuilderAPI_MakeEdge(p3, p4);

	// 创建路径的线框
	TopoDS_Wire wire = BRepBuilderAPI_MakeWire(edge1, edge2, edge3);

	// 创建矩形的四个顶点
	gp_Pnt q1(-5, -5, 0);
	gp_Pnt q2(5, -5, 0);
	gp_Pnt q3(5, 0, 5);
	gp_Pnt q4(-5, 0, 5);

	// 创建矩形的边
	TopoDS_Edge rectEdge1 = BRepBuilderAPI_MakeEdge(q1, q2);
	TopoDS_Edge rectEdge2 = BRepBuilderAPI_MakeEdge(q2, q3);
	TopoDS_Edge rectEdge3 = BRepBuilderAPI_MakeEdge(q3, q4);
	TopoDS_Edge rectEdge4 = BRepBuilderAPI_MakeEdge(q4, q1);

	// 创建矩形的线框
	TopoDS_Wire rectWire = BRepBuilderAPI_MakeWire(rectEdge1, rectEdge2, rectEdge3, rectEdge4);

	// 创建矩形面
	TopoDS_Face rectFace = BRepBuilderAPI_MakeFace(rectWire);

	// 创建管道,沿着路径拉伸矩形截面
	BRepOffsetAPI_MakePipe pipe(wire, rectFace);

	// 构建最终形状
	TopoDS_Shape pipeShape = pipe.Shape();

	VTKRenderWindow(pipeShape);
	return 0;
}

备注:利用面拉伸时候,在拐角处会出现面与路径平行的情况,因此扫掠出来的不是一个体,还是一个面。

2、使用BRepPrimAPI_MakeRevol

// 定义路径的点,形成一个带有拐角的路径
	gp_Pnt p1(0, 0, 0);
	gp_Pnt p2(100, 0, 0);
	gp_Pnt p3(100, 100, 0);
	gp_Pnt p4(200, 100, 0);

	// 创建路径的边
	TopoDS_Edge edge1 = BRepBuilderAPI_MakeEdge(p1, p2);
	TopoDS_Edge edge2 = BRepBuilderAPI_MakeEdge(p2, p3);
	TopoDS_Edge edge3 = BRepBuilderAPI_MakeEdge(p3, p4);

	// 创建路径的线框
	TopoDS_Wire wire = BRepBuilderAPI_MakeWire(edge1, edge2, edge3);

	// 创建矩形的四个顶点
	gp_Pnt q1(-5, -5, 0);
	gp_Pnt q2(5, -5, 0);
	gp_Pnt q3(5, -5, 5);
	gp_Pnt q4(-5, -5, 5);

	// 创建矩形的边
	TopoDS_Edge rectEdge1 = BRepBuilderAPI_MakeEdge(q1, q2);
	TopoDS_Edge rectEdge2 = BRepBuilderAPI_MakeEdge(q2, q3);
	TopoDS_Edge rectEdge3 = BRepBuilderAPI_MakeEdge(q3, q4);
	TopoDS_Edge rectEdge4 = BRepBuilderAPI_MakeEdge(q4, q1);

	// 创建矩形的线框
	TopoDS_Wire rectWire = BRepBuilderAPI_MakeWire(rectEdge1, rectEdge2, rectEdge3, rectEdge4);

	// 创建矩形面
	TopoDS_Face rectFace = BRepBuilderAPI_MakeFace(rectWire);

	gp_Ax1 anAxis;
	anAxis.SetLocation(gp_Pnt(30.0, 70.0, 0.0));
	anAxis.SetDirection(gp::DZ());
	TopoDS_Shape aRevolEllipse = BRepPrimAPI_MakeRevol(rectFace, anAxis, M_PI_4);

 可见,扫掠的时候,不是沿着路径垂直方向进行扫掠的。如果要实现沿着垂直路径的方向进行扫掠,还需要经过计算。

3、垂直路径扫掠

实现步骤:

1、在拐角地方定义拐角半径,利用圆进行插值

2、在每个插值位置重新进行扫掠面坐标

3、把每个单独扫掠的对象进行合并

// 创建几个形状
TopoDS_Shape box = BRepPrimAPI_MakeBox(10, 10, 10).Shape();
TopoDS_Shape sphere = BRepPrimAPI_MakeSphere(15).Shape();

// 创建一个复合体
TopoDS_Compound compound;
BRep_Builder builder;
builder.MakeCompound(compound);
    
// 将形状添加到复合体中
builder.Add(compound, box);
builder.Add(compound, sphere);

有更好实现的小伙伴 分享一下知识 ~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1941112.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用Python快速比较和替换键值对

问题背景 您需要在多个文件中替换所有特定字符串的实例。例如&#xff0c;您有一个包含 60728 个键值对的映射词典&#xff0c;需要处理多达 50 个文件&#xff0c;每个文件大约有 250000 行&#xff0c;并且需要在每行中替换多个键。 解决方案 方法一&#xff1a;使用正则表…

【区块链 + 智慧政务】山东荣成:区块链政务诚信管理系统 | FISCO BCOS应用案例

2018 年 9 月&#xff0c;荣成市政府与山东观海数据技术有限公司合作&#xff0c;基于 FISCO BCOS 区块链技术推动智慧城市建设&#xff0c; 其中&#xff0c;信用管理是智慧城市核心之一。 荣成市区块链政务诚信管理系统&#xff0c;建设信用信息征集、评价、披露和应用于一体…

CloudCampus的三种部署模式

CloudCampus的三种部署模式 本地部署 客户购买控制器 自己运营 软件永久license sns &#xff0c;将软件补丁、软件升级&#xff08;含升级版本的新特性&#xff09;、远程支持等打包在一起组成SnS年费 msp自建云部署 msp 购买控制器 msp运营 …

美业SaaS门店收银系统怎么管理订单?博弈美业系统App实操|美业系统Java源码

- 打开博弈美业 - 首页点击订单管理 - 选择想查询的相应订单即可 美业门店管理系统Java源码、美业店务系统演示视频请私信

HTTP协议详解:从零开始的Web通信之旅

文章目录 一、引言&#xff1a;Web通信的基石 - HTTP协议二、HTTP请求方法2.1 OPTIONS2.2 HEAD2.3 GET2.4 POST2.5 PUT2.6 DELETE2.7 TRACE2.8 CONNECT2.9 注意 三、HTTP工作原理四、HTTP 请求/响应流程4.1、客户端连接到web服务器4.2、发送HTTP请求4.3、服务器接受请求并返回H…

【C++】学习笔记——红黑树

文章目录 十七、红黑树1.红黑树的概念红黑树的性质 2.红黑树节点的定义3.红黑树的插入4.红黑树的验证5.完整代码结果演示6.红黑树与AVL树的比较 未完待续 十七、红黑树 1.红黑树的概念 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一个存储位表示结点的…

XXL-JOB 定时任务在AI大模型中的应用

目录 1. 应用场景 2. 部署 XXL-JOB 3. SpringBoot 集成 XXL-JOB 定时任务代码示例 3.1 添加依赖 3.2 添加配置 3.3 添加执行器到Ioc容器 3.4 添加定时任务 3.5 控制台新增执行器 3.6 控制台添加任务 3.7 控制台开启任务 1. 应用场景 AI 大模型的调用往往是一个高资源…

在 Linux 系统上安装 GCC 编译器(不同发行版)

GCC&#xff08;GNU Compiler Collection&#xff09;是一个功能强大的开源编译器&#xff0c;支持多种编程语言&#xff0c;如 C、C、Fortran 等。在这篇博客中&#xff0c;我们将介绍如何在不同的 Linux 发行版上安装 GCC 编译器。 一、在 Ubuntu 上安装 GCC 1. 更新软件包…

numpy(史上最全)

目录 numpy简介 性能对比 ndarray属性 numpy中的数组&#xff1a; 几个创建的函数&#xff1a; 1) np.ones(shape, dtypeNone, orderC) shape: 形状&#xff0c;使用元组表示 2) np.zeros(shape, dtypefloat, orderC) 3) np.full(shape, fill_value, dtypeNone, orderC)…

阿里国际站运营工具 :一键提升你的全球竞争力!

在当今全球化的商业环境中&#xff0c;阿里巴巴国际站作为全球知名的B2B电子商务平台&#xff0c;为无数企业提供了一个展示产品、拓展国际市场的重要渠道。随着越来越多的企业加入到这个平台&#xff0c;如何在激烈的竞争中脱颖而出&#xff0c;成为了每个外贸人员必须面对的挑…

【BUG】已解决:ModuleNotFoundError: No module named ‘requests‘

ModuleNotFoundError: No module named ‘requests‘ 目录 ModuleNotFoundError: No module named ‘requests‘ 【常见模块错误】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰&#xff0c;211科班出身&a…

java-selenium 截取界面验证码图片并对图片文本进行识别

参考链接 1、需要下载Tesseract工具并配置环境变量&#xff0c;步骤如下 Tesseract-OCR 下载安装和使用_tesseract-ocr下载-CSDN博客 2、需要在IDEA中导入tess4j 包&#xff1b;在pom.xml文件中输入如下内容 <!--导入Tesseract 用于识别验证码--><dependency>&l…

SpringSecurity通用权限管理系统

1、介绍 权限管理是所有后台系统都会涉及的一个重要组成部分&#xff0c;而权限管理的核心流程是相似的&#xff0c;如果每个后台单独开发一套权限管理系统&#xff0c;就是重复造轮子&#xff0c;是人力的极大浪费&#xff0c;本项目就是针对这个问题&#xff0c;提供了一套通…

堆的相关特点

一.建堆的两种方法 给定一个数组&#xff0c;其中数组里面的元素个数是n个如何能够把这个数组建立成为一个堆&#xff0c;今天探讨两种方法&#xff0c;分别是向上调整法和向下调整法&#xff0c;分别探讨他们的时间复杂度 向上调整法&#xff08;以小堆为例&#xff09; 回…

【好玩的经典游戏】Docker环境下部署赛车小游戏

【好玩的经典游戏】Docker环境下部署赛车小游戏 一、小游戏介绍1.1 小游戏简介1.2 项目预览二、本次实践介绍2.1 本地环境规划2.2 本次实践介绍三、本地环境检查3.1 安装Docker环境3.2 检查Docker服务状态3.3 检查Docker版本3.4 检查docker compose 版本四、构建容器镜像4.1 下…

解决Visual studio内报错信息:MSB8036:找不到 Windows SDK 版本问题

问题描述&#xff1a; 找不到WindowsSDK版本&#xff0c;请安装所需版本的Windows SDK&#xff0c;或者在项目属性页中通过右键单击解决方案并选择“重定解决方案目标”来更改SDK版本。 首先&#xff0c;如果你尝试了以下两种方法&#xff1a; &#xff08;1&#xff09;重新…

深入理解Java 8的流式API:简化代码,提升效率

文章目录 深入理解Java 8的流式API&#xff1a;简化代码&#xff0c;提升效率一、流 Stream二、Int | Long | Double Stream三、收集器 Collectors 深入理解Java 8的流式API&#xff1a;简化代码&#xff0c;提升效率 Java 8引入了Stream API&#xff0c;它提供了一种新的抽象&…

String 和StringBuilder字符串操作快慢的举例比较

System.currentTimeMillis(); //当前时间与1970年1月1日午夜UTC之间的毫秒差。public class HelloWorld {public static void main(String[] args) {String s1 "";StringBuilder s2 new StringBuilder("");long time System.currentTimeMillis();long s…

Django Web框架~后台美化

1、执行命令 pip install django-simpleui 2、注册simpleui到项目中 3、访问http://127.0.0.1/admin/ 4、设置中文 5、收集admin静态文件 python manage.py collectstatic

Zookeeper入门篇,了解ZK存储特点

Zookeeper入门篇&#xff0c;了解ZK存储特点 前言一、为什么要用 Zookeeper&#xff1f;二、Zookeeper存储特色1. 树状结构2. 节点类型 三、存储位置1. 内存存储1. DataTree2. DataNode 2. 硬盘存储1. 事务日志2. 快照 前言 继上次说完 Zookeeper 的安装后&#xff0c;已经过去…