当前位置: 首页 > news >正文

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的理解。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • js 只读对象
  • CSRF+XSS组合攻击实战
  • MySQL1.试建产品库
  • 网友提问:display:flex和display:box有什么区别?
  • k8s核心操作_存储抽象_K8S中使用Secret功能来存储密码_使用免密拉取镜像_k8s核心实战总结---分布式云原生部署架构搭建033
  • Android 记录锁屏的上层相关源码以及debug WindowManager
  • 大数据环境下的房地产数据分析与预测研究的设计与实现
  • 5 webSocket
  • 1个Xpath定位可以在Web页面查找到多个元素Selenium
  • Nginx部署前端项目尝试 - windows版
  • git commit报错: pre-commit hook failed (add --no-verify to bypass)
  • ceph log内容解析
  • 针对【module_or_function】的单元测试,全面覆盖可能的【edge_cases】
  • 云计算实训10——frp服务的搭建、ftp服务的搭建
  • Elasticsearch 使用terms对long类型日期统计按月销售
  • 「译」Node.js Streams 基础
  • 【跃迁之路】【735天】程序员高效学习方法论探索系列(实验阶段492-2019.2.25)...
  • Android Studio:GIT提交项目到远程仓库
  • - C#编程大幅提高OUTLOOK的邮件搜索能力!
  • el-input获取焦点 input输入框为空时高亮 el-input值非法时
  • extjs4学习之配置
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • OSS Web直传 (文件图片)
  • PhantomJS 安装
  • PHP CLI应用的调试原理
  • Python实现BT种子转化为磁力链接【实战】
  • Spark RDD学习: aggregate函数
  • 融云开发漫谈:你是否了解Go语言并发编程的第一要义?
  • 如何学习JavaEE,项目又该如何做?
  • 算法系列——算法入门之递归分而治之思想的实现
  • 阿里云ACE认证学习知识点梳理
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • (1)svelte 教程:hello world
  • (2020)Java后端开发----(面试题和笔试题)
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
  • (不用互三)AI绘画:科技赋能艺术的崭新时代
  • (二开)Flink 修改源码拓展 SQL 语法
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (回溯) LeetCode 77. 组合
  • (论文阅读40-45)图像描述1
  • (学习日记)2024.02.29:UCOSIII第二节
  • .DFS.
  • .FileZilla的使用和主动模式被动模式介绍
  • .net core 微服务_.NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端
  • .net oracle 连接超时_Mysql连接数据库异常汇总【必收藏】
  • .NET Windows:删除文件夹后立即判断,有可能依然存在
  • .net 获取url的方法
  • .net 使用$.ajax实现从前台调用后台方法(包含静态方法和非静态方法调用)
  • .net 提取注释生成API文档 帮助文档
  • .net(C#)中String.Format如何使用
  • .net2005怎么读string形的xml,不是xml文件。