Open CASCADE学习|统计形状拓扑数量

边界表示法(Boundary Representation,简称B-Rep)是几何造型中最成熟、无二义的表示法。它主要用于描述物体的几何信息和拓扑信息。在边界表示法中,一个实体(Solid)由一组封闭的面(Face)组成,而每个面又由其所在的曲面定义加上其边界来表示。面的边界是边的并集,而边又是由点来表示的。

边界表示法中的拓扑信息描述形体上的顶点(Vertex)、边(Edge)、面(Face)的连接关系,形成物体边界表示的“骨架”。拓扑的目的在于描述对象的局限性和连接关系,比如物体的边界以及对象之间的连接(通过公共边界)。例如,相交、相邻、相切、垂直、平行等关系都属于拓扑信息。

TopAbs 包含了 TopAbs_ShapeEnum 枚举类型,列举了不同的拓扑种类,包括COMPOUND(一组任意类型的拓扑物体)、COMPSOLID(复合刚体)、SOLID(由壳限制的空间的一部分)、SHELL(由边相连的面集)、FACE(在2D它是一个平面的一部分;在3D它是一个曲面的一部分)、WIRE(由顶点连接的边的集合)、EDGE(一个与被约束的曲线对应的拓扑元素)以及VERTEX(一个与一个点对应的拓扑元素)。这些拓扑类型形成了一个从复杂到简单的层次结构,因为复杂的物体在其表述中可以包含更简单的物体。

#include <Geom_CylindricalSurface.hxx>
#include <gp_Ax3.hxx>
#include <GeomAPI_Interpolate.hxx>
#include <BRepAdaptor_Curve.hxx>
#include <BRepBuilderAPI_MakeEdge.hxx>
#include <Geom2d_TrimmedCurve.hxx>
#include <GCE2d_MakeSegment.hxx>#include <GeomAPI_PointsToBSpline.hxx>
#include <BRepBuilderAPI_MakeFace.hxx>
#include <GC_MakeCircle.hxx>
#include <BRepBuilderAPI_MakeWire.hxx>
#include <BRepOffsetAPI_MakePipe.hxx>
#include <GC_MakeArcOfCircle.hxx>
#include <BRepAlgoAPI_Fuse.hxx>
#include <TopExp_Explorer.hxx>
#include <gp_GTrsf.hxx>
#include <BRepBuilderAPI_Transform.hxx>
#include <GC_MakeSegment.hxx>
#include <IntAna2d_AnaIntersection.hxx>
#include <TopoDS.hxx>
#include <BRepPrimAPI_MakeRevol.hxx>#include"Viewer.h"TopoDS_Shape createGrindingwheel2()
{Standard_Real Line1_angle = 280 * M_PI / 180;Standard_Real Line1_length = 0.5031;Standard_Real Line2_angle = 236 * M_PI / 180;Standard_Real Line2_length = 0.5925;Standard_Real Arc1_r = 0.112;Standard_Real Arc1_angle = (180 + 10 + 50) * M_PI / 180;gp_Pnt Line1_p1(-0.6822 / 2, 0, 0);gp_Pnt Line2_p1(0.6822 / 2, 0, 0);gp_Lin Line1(Line1_p1, gp_Dir(cos(Line1_angle), sin(Line1_angle), 0.));gp_Lin Line2(Line2_p1, gp_Dir(cos(Line2_angle), sin(Line2_angle), 0.));Handle(Geom_TrimmedCurve) L1 = GC_MakeSegment(Line1, 0., Line1_length);TopoDS_Edge L1e = BRepBuilderAPI_MakeEdge(L1);Handle(Geom_TrimmedCurve) L2 = GC_MakeSegment(Line2, 0., Line2_length);TopoDS_Edge L2e = BRepBuilderAPI_MakeEdge(L2);gp_Pnt l1end = L1->EndPoint();gp_Pnt l2end = L2->EndPoint();gp_Lin Line1v(l1end, gp_Dir(cos(Line1_angle + M_PI_2), sin(Line1_angle + M_PI_2), 0.));gp_Lin2d Line2v(gp_Pnt2d(l2end.X(), l2end.Y()), gp_Dir2d(cos(Line2_angle - M_PI_2), sin(Line2_angle - M_PI_2)));gp_Lin Line2v3d(l2end, gp_Dir(cos(Line2_angle - M_PI_2), sin(Line2_angle - M_PI_2), 0.));Handle(Geom_TrimmedCurve) L1v = GC_MakeSegment(Line1v, 0., Arc1_r);gp_Pnt l1vend = L1v->EndPoint();gp_Circ c1(gp_Ax2(l1vend, gp_Dir(0, 0, 1)), Arc1_r);Handle(Geom_TrimmedCurve) c1c = GC_MakeArcOfCircle(c1, l1end, Arc1_angle, 1);gp_Pnt c1end = c1c->EndPoint();gp_Lin2d Line3(gp_Pnt2d(c1end.X(), c1end.Y()), gp_Dir2d(l2end.X() - c1end.X(), l2end.Y() - c1end.Y()));gp_Lin2d Line3v = Line3.Normal(gp_Pnt2d((l2end.X() + c1end.X()) / 2, (l2end.Y() + c1end.Y()) / 2));IntAna2d_AnaIntersection aIntAna;aIntAna.Perform(Line2v, Line3v);IntAna2d_IntPoint aIntPoint = aIntAna.Point(1);gp_Pnt o2(aIntPoint.Value().X(), aIntPoint.Value().Y(), 0.);Handle(Geom_TrimmedCurve) L2v = GC_MakeSegment(Line2v3d, l2end, o2);Standard_Real r2 = L2v->LastParameter();gp_Circ c2(gp_Ax2(o2, gp_Dir(0, 0, 1)), r2);Handle(Geom_TrimmedCurve) c2c = GC_MakeArcOfCircle(c2, c1end, l2end, 0);gp_Pnt c2low = c2c->Value(M_PI_2);TopoDS_Edge c1ce = BRepBuilderAPI_MakeEdge(c1c);TopoDS_Edge L1ev = BRepBuilderAPI_MakeEdge(L1v);TopoDS_Edge c2ce = BRepBuilderAPI_MakeEdge(c2c);gp_Pnt Line1_up(-0.9832 / 2, 5, 0);gp_Pnt Line2_up(0.9832 / 2, 5, 0);TopoDS_Edge anEdge1 = BRepBuilderAPI_MakeEdge(Line1_p1, Line1_up);TopoDS_Edge anEdge2 = BRepBuilderAPI_MakeEdge(Line1_up, Line2_up);TopoDS_Edge anEdge3 = BRepBuilderAPI_MakeEdge(Line2_up, Line2_p1);TopTools_ListOfShape listEdge;listEdge.Append(anEdge1);listEdge.Append(anEdge2);listEdge.Append(anEdge3);listEdge.Append(L1e);listEdge.Append(c1ce);listEdge.Append(c2ce);listEdge.Append(L2e);BRepBuilderAPI_MakeWire mw;mw.Add(listEdge);mw.Build();TopoDS_Shape gwheel = BRepPrimAPI_MakeRevol(mw, gp_Ax1(gp_Pnt(0, 5, 0), gp_Dir(1, 0, 0)), 2 * M_PI);//平移:gp_Trsf theTransformation1;gp_Vec theVectorOfTranslation1(-c2low.X(), -c2low.Y(), 0.);theTransformation1.SetTranslation(theVectorOfTranslation1);BRepBuilderAPI_Transform myBRepTransformation1(gwheel, theTransformation1);TopoDS_Shape outzero = myBRepTransformation1.Shape();gp_Trsf theTransformation2;gp_Vec theVectorOfTranslation2(0., 0.125 / 2, 0.);theTransformation2.SetTranslation(theVectorOfTranslation2);//绕一个轴旋转:gp_Trsf theTransformation3;gp_Ax1 axez = gp_Ax1(gp_Pnt(0, 0, 0), gp_Dir(0., 0., 1.));theTransformation3.SetRotation(axez, -90 * M_PI / 180);gp_Trsf theTransformation4;gp_Ax1 axex = gp_Ax1(gp_Pnt(0, 0, 0), gp_Dir(1., 0., 0.));theTransformation4.SetRotation(axex, -50 * M_PI / 180);BRepBuilderAPI_Transform myBRepTransformation(outzero, theTransformation4 * theTransformation3 * theTransformation2);TopoDS_Shape TransformedShape = myBRepTransformation.Shape();return TransformedShape;
}int main(int argc, char* argv[])
{gp_Dir  Z(0.0, 0.0, 1.0);gp_Pnt center(0, 0, 0.0);gp_Pnt xr(0.5, 0, 0.0);gp_Pnt yr(0.0, 1.0, 0.0);gp_Pnt zr(0.0, 0.0, 7.0);gp_Ax2  wb(center, Z);gp_Circ  wbcircle(wb, 0.125 / 2);TopoDS_Edge wbe = BRepBuilderAPI_MakeEdge(wbcircle);TopoDS_Edge xline = BRepBuilderAPI_MakeEdge(center, xr);TopoDS_Edge yline = BRepBuilderAPI_MakeEdge(center, yr);TopoDS_Edge zline = BRepBuilderAPI_MakeEdge(center, zr);//creat a profile of gringing wheelTopoDS_Shape gw = createGrindingwheel2();TopExp_Explorer anExp1(gw, TopAbs_SOLID);TopExp_Explorer anExp2(gw, TopAbs_SHELL);TopExp_Explorer anExp3(gw, TopAbs_FACE);TopExp_Explorer anExp4(gw, TopAbs_WIRE);TopExp_Explorer anExp5(gw, TopAbs_EDGE);int i = 0;Viewer vout(50, 50, 500, 500);for (; anExp1.More(); anExp1.Next()){TopoDS_Solid anSolid = TopoDS::Solid(anExp1.Current());i++;}std::cout << "numbers of TopoDS_Solid:" << i << std::endl;i = 0;for (; anExp2.More(); anExp2.Next()){TopoDS_Shell anShell = TopoDS::Shell(anExp2.Current());i++;}std::cout << "numbers of TopoDS_Shell:" << i << std::endl;i = 0;for (; anExp3.More(); anExp3.Next()){TopoDS_Face anFace = TopoDS::Face(anExp3.Current());i++;}std::cout << "numbers of TopoDS_Face:" <<i<< std::endl;i = 0;for (; anExp4.More(); anExp4.Next()){TopoDS_Wire anWire = TopoDS::Wire(anExp4.Current());i++;}std::cout << "numbers of TopoDS_Wire:" << i << std::endl;i = 0;for (; anExp5.More(); anExp5.Next()){TopoDS_Edge anEdge = TopoDS::Edge(anExp5.Current());i++;}std::cout << "numbers of TopoDS_Edge:" << i << std::endl;vout << wbe;vout << xline;vout << yline;vout << zline;vout << gw;vout.StartMessageLoop();return 0;
}

numbers of TopoDS_Solid:0

numbers of TopoDS_Shell:1

numbers of TopoDS_Face:6

numbers of TopoDS_Wire:6

numbers of TopoDS_Edge:24

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

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

相关文章

easyExcel - 按模板导出

目录 前言一、情景介绍二、文档介绍2.1 读取模板2.2 填充模板 三、代码示例3.1 案例一&#xff1a;工资表3.2 案例二&#xff1a;报价单 四、我所遇到的问题 前言 Java-easyExcel入门教程&#xff1a;https://blog.csdn.net/xhmico/article/details/134714025 之前有介绍过如…

VSCode配置AI自动补全插件Tabnine

面向软件开发人员的 AI 助手 使用 AI 代码完成更快地编写代码 什么是Tabnine Tabnine 是一款 AI 代码助手&#xff0c;可让您成为更好的开发人员。Tabnine 将通过所有最流行的编码语言和 IDE 的实时代码完成、聊天和代码生成来提高您的开发速度。 无论您将其称为 IntelliSens…

一文读懂CSS中的阴影:box-shadow,text-shadow,drop-shadow的区别与使用方式

一、区别 box-shadow 应用于元素&#xff0c;为元素本身添加阴影效果。 text-shadow 应用于文本&#xff0c;为文本内容添加阴影效果。 drop-shadow 是filter属性的一部分&#xff0c;通常用于图像&#xff0c;为其添加阴影效果。 二、box-shadow box-shadow属性用于为元素&…

无线局域网安全协议-WEP,WPA,WAPI,

目录 一、WEP&#xff08;有线等效保密&#xff09; 二、WPA&#xff08;Wi-Fi网络安全接入&#xff09; ​编辑 三、WAPI&#xff08;无线局域网鉴别和保密基础结构&#xff09; WLAN&#xff08;Wireless Local Area Network&#xff09;指应用无线通信技术将计算机设备互…

C语言程序的编译与链接

目录 1.翻译环境和运行环境2.翻译环境2.1 预处理&#xff08;预编译&#xff09;2.2 编译2.3 汇编2.4 链接 3.运行环境 1.翻译环境和运行环境 在ANSI C的任何一种实现中&#xff0c;存在两个不同的环境。 翻译环境&#xff1a;在这个环境中源代码被转换为可执⾏的机器指令&am…

每日OJ题_两个数组dp⑤_力扣10. 正则表达式匹配

目录 力扣10. 正则表达式匹配 解析代码 力扣10. 正则表达式匹配 10. 正则表达式匹配 难度 困难 给你一个字符串 s 和一个字符规律 p&#xff0c;请你来实现一个支持 . 和 * 的正则表达式匹配。 . 匹配任意单个字符* 匹配零个或多个前面的那一个元素 所谓匹配&#xff0c…

springboot 整合 mybatis(配置版)

代码及配置整合 创建实体类,与数据库对应 创建 mapper、service 和 controller @AutowiredUserService userService;@ResponseBody@GetMapping("/user")public com.vazquez.bootstudy.model.User getById(@RequestParam("id") Long id) {return userServ…

XC7A35T-2FGG484 嵌入式FPGA现场可编程门阵列 Xilinx

XC7A35T-2FGG484 是一款由Xilinx&#xff08;赛灵思&#xff09;制造的FPGA&#xff08;现场可编程门阵列&#xff09;芯片 以下是XC7A35T-2FGG484 的主要参数&#xff1a; 1. 系列&#xff1a;Artix-7 2. 逻辑单元数量&#xff1a;33280个 3. 工艺技术&#xff1a;28nm 4. …

设计模式之中介者模式讲解

概念&#xff1a;也称为调停者模式。用一个中介者对象封装一系列对象的交互&#xff0c;中介者使各对象不需要显示地相互作用&#xff0c;从而使其耦合松散&#xff0c;而且可以独立地改变它们之间的交互。 抽象中介者&#xff1a;定义中介者的操作。具体中介者&#xff1a;实现…

【HTML】简单制作一个动态变色光束花

目录 前言 开始 HTML部分 效果图 ​编辑​编辑​编辑​编辑总结 前言 无需多言&#xff0c;本文将详细介绍一段代码&#xff0c;具体内容如下&#xff1a; 开始 首先新建文件夹&#xff0c;创建一个文本文档&#xff0c;其中HTML的文件名改为[index.html]&a…

【CTF】rip--堆栈的简单认识

前言 最近在学二进制&#xff0c;准备拿BUUCTF的pwn试试手&#xff0c;还在摸索的阶段&#xff0c;有什么思路出错的地方还请指出。 解题思路 下载文件到kali&#xff0c;查看文件为 64-bit的ELF&#xff08;ELF为Linux下的可执行文件&#xff0c;相当于Windows的exe&#xff0…

python-flask后端知识点

anki 简单介绍&#xff1a; 在当今信息爆炸的时代&#xff0c;学习已经不再仅仅是获取知识&#xff0c;更是一项关于有效性和持续性的挑战。幸运的是&#xff0c;我们有幸生活在一个科技日新月异的时代&#xff0c;而ANKI&#xff08;Anki&#xff09;正是一款旗舰级的学习工具…

GD32F470_GY-68 BMP180 新款 BOSCH温度 代替BMP085 气压传感器模块

2.23 BMP180气压传感器 1BMP180是一款高精度、小体积、低能耗的压力传感器&#xff0c;可以轻松应用在移动设备中.在测量海拔高度时&#xff0c;传统的做法是通过测量某一高度的大气压力&#xff0c;再经过换算才能得到高度数据。BMP180不仅可以实时的测量大气压力&#xff0c…

基于velero和minio实现k8s数据的备份

1.30部署minio rootk8s-harbor:/etc/kubeasz/clusters/k8s-cluster1# docker run \ -d --restartalways -p 9000:9000 -p 9090:9090 –name minio -v /data/minio/data:/data -e “MINIO_ROOT_USERadmin” -e “MINIO_ROOT_PASSWORD12345678” quay.io/minio/minio server…

智慧安防系统EasyCVR视频汇聚平台接入大华设备无法语音对讲的原因排查与解决

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台支持7*24小时实时高清视频监控&#xff0c;能同时播放多路监控视频流&#xff0c;视频画面1、4、9、16个可选&#xff0c;支持自定义视频轮播。EasyCVR平台可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标…

不同的子序列-java

题目描述(力扣题库115): 给你两个字符串 s 和 t &#xff0c;统计并返回在 s 的 子序列 中 t 出现的个数&#xff0c;结果需要对 109 7 取模。 示例 1&#xff1a; 输入&#xff1a;s "rabbbit", t "rabbit"输出&#xff1a;3 解释&#xff1a; 如下所示…

小型企业网络安全指南

许多小型企业刚刚起步&#xff0c;没有大公司所拥有的相同资源来保护其数据。他们不仅可能没有资金来支持多样化的安全计划&#xff0c;而且也可能没有人力或时间。 网络犯罪分子知道小型企业缺乏这些资源&#xff0c;并利用这些资源来谋取利益。遭受网络攻击后&#xff0c;小…

Rust与Go的对比

在各个领域&#xff0c;Rust 都已经成为一流的语言。最近&#xff0c;我们通过将服务的实现从 Go 切换到 Rust&#xff0c;极大地提升了该服务的性能。这里我阐述了重新实现服务为何是有价值的、该过程是如何实现的以及由此带来的性能提升。 Read States 服务 我们从 Go 切换…

01 Php学习:导学篇

Php是什么&#xff1f; PHP 是服务器端脚本语言。 PHP&#xff08;Hypertext Preprocessor&#xff09;是一种通用开源脚本语言&#xff0c;主要用于服务器端开发。PHP脚本在服务器端执行&#xff0c;生成动态网页内容或执行服务器端任务。PHP可以嵌入到HTML中&#xff0c;也…

千视携 NDI 6 轻量化媒体方案亮相北京CCBN展会

展会简介 第30届中国国际广播电视网络技术展览会&#xff08;CCBN&#xff09;将于4月24至26日在北京首钢会展中心举行。此次展会将汇集全球各大数字媒体、广播电视单位以及IT、通信技术厂商。展会重点关注数字化转型、智能媒体、融媒体等主题&#xff0c;并展示最新的5G、4K/8…