OCC 创建点线面体

目录

一、利用封装已有算法实现

1、盒子建模算法封装

 2、可视化

二、利用OCC 点线面实现

1、实现过程

 2、实现一个面

 3、拉伸面生成体

4、旋转面生成体

三、总结


一、利用封装已有算法实现

1、盒子建模算法封装

BRepPrimAPI_MakeBox box(2, 2, 2);

 2、可视化

void VTKRenderWindow(const TopoDS_Shape& shape)
{vtkNew<vtkRenderWindow> renderWindow; //创建一个vtk窗口vtkNew<vtkRenderer> render; //创建一个vtk渲染器renderWindow->AddRenderer(render.GetPointer()); //在窗口中加入渲染器vtkNew<vtkRenderWindowInteractor> iren; //创建一个vtk交互器vtkNew<vtkInteractorStyleTrackballCamera> istyle; //创建vtk相机交互器样式iren->SetRenderWindow(renderWindow.GetPointer()); //设置渲染窗口iren->SetInteractorStyle(istyle.GetPointer()); //设置交互器样式vtkNew<IVtkTools_ShapeDataSource> occSource; //创建一个可以被VTK使用的OCC数据源occSource->SetShape(new IVtkOCC_Shape(shape)); //将shape添加到数据源中vtkNew<vtkPolyDataMapper> mapper; //创建一个VTK数据类型mapper->SetInputConnection(occSource->GetOutputPort()); //创建一个管道,将occ数据导入到VTK数据中vtkNew<vtkActor> actor; //创建一个vtk actoractor->SetMapper(mapper.GetPointer()); //将vtk数据交给actorrender->AddActor(actor.GetPointer()); //在渲染器中加入vtk actoriren->Initialize(); //初始化交互器iren->Start(); //开始运行交互器
}

二、利用OCC 点线面实现

1、实现过程

  • 创建四个顶点,定义一个矩形的四个角。
  • 使用这些顶点创建四条边。
  • 将这些边连接成一个封闭的线框 (wire)。
  • 使用这个线框创建一个面 (face)。
  • 定义一个拉伸方向和距离,这里是沿 Z 轴方向拉伸 10 个单位长度。
  • 使用 BRepPrimAPI_MakePrism 类将这个面拉伸成一个体(solid)

 2、实现一个面

#include "BRepBuilderAPI_MakeVertex.hxx"
#include "BRepBuilderAPI_MakeEdge.hxx"
#include "BRepBuilderAPI_MakeWire.hxx"
#include "BRepBuilderAPI_MakeFace.hxx"
#include <gp_Pnt.hxx>
#include <gp_Dir.hxx>
#include "Standard_Real.hxx"
int main()
{//创建面
#pragma region MyRegion// 创建四个顶点gp_Pnt p1(0, 0, 0);gp_Pnt p2(10, 0, 0);gp_Pnt p3(10, 10, 0);gp_Pnt p4(0, 10, 0);// 使用顶点创建边,注意线框闭合TopoDS_Edge edge1 = BRepBuilderAPI_MakeEdge(p1, p2);TopoDS_Edge edge2 = BRepBuilderAPI_MakeEdge(p2, p3);TopoDS_Edge edge3 = BRepBuilderAPI_MakeEdge(p3, p4);TopoDS_Edge edge4 = BRepBuilderAPI_MakeEdge(p4, p1);// 将边连接成一个线框BRepBuilderAPI_MakeWire wireBuilder;wireBuilder.Add(edge1);wireBuilder.Add(edge2);wireBuilder.Add(edge3);wireBuilder.Add(edge4);TopoDS_Wire wire = wireBuilder.Wire();// 使用线框创建面BRepBuilderAPI_MakeFace faceBuilder(wire);TopoDS_Face face = faceBuilder.Face();
#pragma endregionVTKRenderWindow(face);}

 3、拉伸面生成体

#include "BRepBuilderAPI_MakeVertex.hxx"
#include "BRepBuilderAPI_MakeEdge.hxx"
#include "BRepBuilderAPI_MakeWire.hxx"
#include "BRepBuilderAPI_MakeFace.hxx"
#include "BRepPrimAPI_MakePrism.hxx"
#include <gp_Pnt.hxx>
#include <gp_Dir.hxx>
#include "Standard_Real.hxx"
int main()
{//创建面
#pragma region MyRegion// 创建四个顶点gp_Pnt p1(0, 0, 0);gp_Pnt p2(10, 0, 0);gp_Pnt p3(10, 10, 0);gp_Pnt p4(0, 10, 0);// 使用顶点创建边,注意线框闭合TopoDS_Edge edge1 = BRepBuilderAPI_MakeEdge(p1, p2);TopoDS_Edge edge2 = BRepBuilderAPI_MakeEdge(p2, p3);TopoDS_Edge edge3 = BRepBuilderAPI_MakeEdge(p3, p4);TopoDS_Edge edge4 = BRepBuilderAPI_MakeEdge(p4, p1);// 将边连接成一个线框BRepBuilderAPI_MakeWire wireBuilder;wireBuilder.Add(edge1);wireBuilder.Add(edge2);wireBuilder.Add(edge3);wireBuilder.Add(edge4);TopoDS_Wire wire = wireBuilder.Wire();// 使用线框创建面BRepBuilderAPI_MakeFace faceBuilder(wire);TopoDS_Face face = faceBuilder.Face();// 定义拉伸方向和距离gp_Vec prismVec(0, 0, 10);// 拉伸面形成体BRepPrimAPI_MakePrism prismMaker(face, prismVec);TopoDS_Shape solid = prismMaker;
#pragma endregionVTKRenderWindow(solid);}

4、旋转面生成体

#include "BRepBuilderAPI_MakeVertex.hxx"
#include "BRepBuilderAPI_MakeEdge.hxx"
#include "BRepBuilderAPI_MakeWire.hxx"
#include "BRepBuilderAPI_MakeFace.hxx"
#include "BRepPrimAPI_MakePrism.hxx"
#include "BRepPrimAPI_MakeRevol.hxx"
#include <gp_Pnt.hxx>
#include <gp_Dir.hxx>
#include "Standard_Real.hxx"
int main()
{//创建面
#pragma region MyRegion// 创建四个顶点gp_Pnt p1(0, 0, 0);gp_Pnt p2(10, 0, 0);gp_Pnt p3(10, 10, 0);gp_Pnt p4(0, 10, 0);// 使用顶点创建边,注意线框闭合TopoDS_Edge edge1 = BRepBuilderAPI_MakeEdge(p1, p2);TopoDS_Edge edge2 = BRepBuilderAPI_MakeEdge(p2, p3);TopoDS_Edge edge3 = BRepBuilderAPI_MakeEdge(p3, p4);TopoDS_Edge edge4 = BRepBuilderAPI_MakeEdge(p4, p1);// 将边连接成一个线框BRepBuilderAPI_MakeWire wireBuilder;wireBuilder.Add(edge1);wireBuilder.Add(edge2);wireBuilder.Add(edge3);wireBuilder.Add(edge4);TopoDS_Wire wire = wireBuilder.Wire();// 使用线框创建面BRepBuilderAPI_MakeFace faceBuilder(wire);TopoDS_Face face = faceBuilder.Face();// 定义拉伸方向和距离gp_Vec prismVec(0, 0, 10);// 拉伸面形成体/*BRepPrimAPI_MakePrism prismMaker(face, prismVec);TopoDS_Shape solid = prismMaker;*/// 定义旋转轴gp_Ax1 axis(gp_Pnt(0, 0, 0), gp_Dir(0, 1, 0));// 旋转面形成圆柱BRepPrimAPI_MakeRevol revolMaker(face, axis);TopoDS_Shape cylinder = revolMaker;
#pragma endregionVTKRenderWindow(cylinder);}

三、总结

OCC中帮我们封装了大量的几何图元,我们可以利用已经封装好的图元进行快速拓展自己的模型,建议多看看开发文档,多看看代码,不断深化自己对OCC的理解。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于上下文自适应可变长熵编码 CAVLC 原理详细分析

CAVLC CAVLC&#xff0c;即Context-Adaptive Variable-Length Coding&#xff0c;是一种用于视频压缩的编码技术&#xff0c;特别是在MPEG-4视频编码标准中使用。CAVLC是一种熵编码方法&#xff0c;它根据视频数据的上下文信息来调整编码长度&#xff0c;以实现更有效的数据压…

Stable Diffusion 使用详解(2)---- 图生图原理,操作,参数

目录 背景 图生图原理 基本原理 1. 扩散模型基础 2. 图生图的具体流程 3. 关键技术点 4. 应用实例 CLIP 原理 1.基本概念 2. 核心特点 使用及参数 随机种子 重绘幅度 图像宽高 采样方法 1. DPM&#xff08;扩散概率模型&#xff09; 2. SDE&#xff08;随机微…

5G mmWave PAAM 开发平台

Avnet-Fujikura-AMD 5G 毫米波相控阵天线模块开发平台 Avnet 和 Fujikura 为毫米波频段创建了一个领先的 5G FR2 相控阵天线开发平台。该平台使开发人员能够使用 AMD Xilinx 的 Zynq UltraScale™ RFSoC Gen3 和 Fujikura 的 FutureAcess™ 相控阵天线模块 (PAAM) 快速创建和制…

【项目】星辰博客介绍

目录 一、项目背景 二、项目功能 1. 登录功能&#xff1a; 2. 列表页面&#xff1a; 3. 详情页面&#xff1a; 4. 写博客&#xff1a; 三、技术实现 四、功能页面展示 1. 用户登录 2. 博客列表页 3. 博客编辑更新页 4.博客发表页 5. 博客详情页 五.系统亮点 1.强…

【AI学习】LLaMA 系列模型的进化(二)

在前面LLaMA 系列模型的进化&#xff08;一&#xff09;中学习了LLama模型的总体进化发展&#xff0c;再来看看其中涉及的一些重要技术。 PreLayerNorm Layer Norm有Pre-LN和Post-LN两种。Layer Normalization&#xff08;LN&#xff09;在Transformer架构中的放置位置对模型…

使用Java -jar运行就jar包时报异常:org.yaml.snakeyaml.error.YAMLException异常

Java运行就 .jar包时出现的 YAMLException 异常 我在本地环境测试时&#xff0c;使用 java -jar 命令运行 Java 可执行 .jar 包时&#xff0c;遇到了 org.yaml.snakeyaml.error.YAMLException: java.nio.charset.MalformedInputException: Input length 1 异常&#xff1b;这…

windows USB 设备驱动开发-开发Type C接口的驱动程序(一)

如果 USB Type-C 系统未实现 PD 状态机&#xff0c;或者它实现了状态机&#xff0c;但不支持通过非 ACPI 传输 UCSI&#xff0c;则需要为连接器编写驱动程序。 如果存在&#xff0c;可以加载 Microsoft 提供的 UCSI 驱动程序。 建议的解决方案 下表建议基于硬件或固件功能的解…

在vs code中用npm run serve运行项目报错

在vs code中用npm run serve运行项目报错 报错为&#xff1a; npm ERR! code ENOENT npm ERR! syscall open npm ERR! path C:\Users\Administrator\Desktop\project_shop/package.json npm ERR! errno -4058 npm ERR! enoent ENOENT: no such file or directory, open ‘C:\Us…

sourcetree中常用功能使用方法及gitlab冲突解决

添加至缓存&#xff1a;等于git add 提交&#xff1a;等于git commit 拉取/获取&#xff1a;等于git pull ,在每次要新增代码或者提交代码前需要先拉取一遍服务器中最新的代码&#xff0c;防止服务器有其他人更新了代码&#xff0c;但我们自己本地的代码在我们更新前跟服务器不…

docker应用:搭建云手机

简介&#xff1a;近来慵懒&#xff0c;身体懈怠良多&#xff0c;思来想去随手看点小攻略以宽慰不懈怠的心。云手机Cloudphone&#xff0c;就是将云计算技术运用于网络终端服务&#xff0c;通过云服务器实现云服务的手机。其实就是深度结合了网络服务的智能手机&#xff0c;这类…

使用Python的Turtle库绘制太极,用turtle演绎中国风!

引言 在编程领域&#xff0c;图形绘制是一项既实用又有趣的技能。Python的turtle模块以其易用性和可视化特性成为了入门级图形编程的理想选择。本文将介绍如何使用turtle模块结合多线程技术&#xff0c;同时绘制一个太极&#xff0c;以此来探索图形绘制和并发编程的概念。 Tu…

Java实战中如何使用多线程(线程池)及其为什么使用?

这个话题在入行之前就想过很多次&#xff0c;很多8古文或者你搜索的结果都是告诉你什么提高高并发或者是一些很高大上的话&#xff0c;既没有案例也没有什么公式去证明&#xff0c;但是面试中总是被问到&#xff0c;也没有实战经历&#xff0c;所以面试时一问到多线程的东西就无…

PACS-医学影像信息管理系统,全影像科室PACS源码,内置包括MPR、CMPR、VR等三维处理功能

PACS系统可以覆盖医院现有放射、CT、MR、核医学、超声、内镜、病理、心电等绝大部分DICOM和非DICOM检查设备&#xff0c;支持从科室级、全院机、集团医院级乃至到区域PACS的平滑扩展&#xff0c;能够与医院HIS、集成平台的有效集成和融合&#xff0c;帮助医院实现了全院医学影像…

分布式 I/O 系统 BL200 Modbus TCP 耦合器

BL200 耦合器是一个数据采集和控制系统&#xff0c;基于强大的 32 位微处理器设计&#xff0c;采用 Linux 操作系统&#xff0c;支持 Modbus 协议&#xff0c;可以快速接入现场 PLC、SCADA 以及 ERP 系统&#xff0c; 内置逻辑控制、边缘计算应用&#xff0c;适用于 IIoT 和工业…

Github 2024-07-20 Rust开源项目日报 Top10

根据Github Trendings的统计,今日(2024-07-20统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10TypeScript项目1Rust: 构建可靠高效软件的开源项目 创建周期:5064 天开发语言:Rust协议类型:OtherStar数量:92978 个Fork数量:1…

【漏洞复现】Next.js框架存在SSRF漏洞(CVE-2024-34351)

0x01 产品简介 ZEIT Next.js是ZEIT公司的一款基于Vue.js、Node.js、Webpack和Babel.js的开源Web应用框架。 0x02 漏洞概述 ZEIT Next.js 13.4版本至14.1.1之前版本存在代码问题漏洞&#xff0c;该漏洞源于存在服务器端请求伪造 (SSRF) 漏洞 0x03 搜索引擎 body"/_nex…

【BUG】已解决:xlrd.biffh.XLRDError: Excel xlsx file; not supported

已解决&#xff1a;xlrd.biffh.XLRDError: Excel xlsx file&#xff1b; not supported 目录 已解决&#xff1a;xlrd.biffh.XLRDError: Excel xlsx file&#xff1b; not supported 【常见模块错误】 错误原因 解决办法&#xff1a; 欢迎来到英杰社区https://bbs.csdn.net/…

MyBatis框架学习笔记(四):动态SQL语句、映射关系和缓存

1 动态 SQL 语句-更复杂的查询业务需求 1.1 动态 SQL-官方文档 &#xff08;1&#xff09;文档地址: mybatis – MyBatis 3 | 动态 SQL &#xff08;2&#xff09;为什么需要动态 SQL 动态 SQL 是 MyBatis 的强大特性之一 使用 JDBC 或其它类似的框架&#xff0c;根据不同条…

【瑞吉外卖 | day07】移动端菜品展示、购物车、下单

文章目录 瑞吉外卖 — day71. 导入用户地址簿相关功能代码1.1 需求分析1.2 数据模型1.3 代码开发 2. 菜品展示2.1 需求分析2.2 代码开发 3. 购物车3.1 需求分析3.2 数据模型3.3 代码开发 4. 下单4.1 需求分析4.2 数据模型4.3 代码开发 瑞吉外卖 — day7 移动端相关业务功能 —…

华为USG6000V防火墙NAT智能选举

目录 一、拓扑图 二、要求 三、配置思路及方法 要求1&#xff1a;通过多对多的NAT实现上网功能 思路&#xff1a;基础IP地址配置按照之前的进行配置&#xff0c;接着在策略里配置多对多的NAT 要求2&#xff1a;分公司设备可以通过总公司的移动链路和电信链路访问到Dmz区的…