Open CASCADE学习|遍历曲面的边

目录

1、球面的Brep数据

2、C++遍历球面的边


​这里以球面为例来说明如何遍历曲面的边。

1、球面的Brep数据

使用Tcl命令在Draw Test Harness中生成的球面并到出Brep数据如下:

pload ALL

psphere asphere 1

dump asphere

结果如下:

*********** Dump of asphere *************

Shape : 9, FORWARD

Dump of 9 TShapes

-----------------

Flags : Free, Modified, Checked, Orientable, Closed, Infinite, Convex, Locked

TShape # 1 : SOLID     11000000 0000018AE4364B70

    +2

TShape # 2 : SHELL     01011000 0000018AE43648F0

    +3

TShape # 3 : FACE      01110000 0000018AE420C530

    +4

    Tolerance : 1e-07

    - Surface : 1

TShape # 4 : WIRE      01011000 0000018AE4364270

    -8 +6 +5 -6

TShape # 5 : EDGE      01010000 0000018AE3048880

    +7 -7

    Tolerance : 1e-07

     same parametrisation of curves

     same range on curves

     degenerated

    - PCurve : 4 on surface 1, range : 0 6.28318530717959

  UV Points : 0, -1.5707963267949 6.28318530717959, -1.5707963267949

TShape # 6 : EDGE      01010000 0000018AE3049CC0

    -9 +7

    Tolerance : 1e-07

     same parametrisation of curves

     same range on curves

    - Curve 3D : 1, range : 4.71238898038469 7.85398163397448

    - PCurve : 2, 3 (CN) on surface 1, range : 4.71238898038469 7.85398163397448

  UV Points : 6.28318530717959, -1.5707963267949 6.28318530717959, 1.5707963267949

  UV Points : 0, -1.5707963267949 0, 1.5707963267949

TShape # 7 : VERTEX    01011010 0000018AE420C6D0

    Tolerance : 1e-07

    - Point 3D : 6.12323399573677e-17, -1.49975978266186e-32, -1

TShape # 8 : EDGE      01010000 0000018AE3049C00

    +9 -9

    Tolerance : 1e-07

     same parametrisation of curves

     same range on curves

     degenerated

    - PCurve : 1 on surface 1, range : 0 6.28318530717959

  UV Points : 0, 1.5707963267949 6.28318530717959, 1.5707963267949

TShape # 9 : VERTEX    01011010 0000018AE420C600

    Tolerance : 1e-07

    - Point 3D : 6.12323399573677e-17, -1.49975978266186e-32, 1

 -------

Dump of 4 Curve2ds

 -------

   1 : Line

  Origin :0, 1.5707963267949

  Axis   :1, 0

   2 : Line

  Origin :6.28318530717959, -6.28318530717959

  Axis   :0, 1

   3 : Line

  Origin :0, -6.28318530717959

  Axis   :0, 1

   4 : Line

  Origin :0, -1.5707963267949

  Axis   :1, 0

 -------

Dump of 1 Curves

 -------

   1 : Circle

  Center :0, 0, 0

  Axis   :-2.44929359829471e-16, -1, 0

  XAxis  :1, -2.44929359829471e-16, 0

  YAxis  :0, 0, 1

  Radius :1

 -------

Dump of 0 Polygon3Ds

 -------

 -------

Dump of 0 PolygonOnTriangulations

 -------

 -------

Dump of 1 surfaces

 -------

   1 : SphericalSurface

  Center :0, 0, 0

  Axis   :0, 0, 1

  XAxis  :1, 0, -0

  YAxis  :-0, 1, 0

  Radius :1

 -------

Dump of 0 Triangulations

 -------

 -------

 Dump of 0 Locations

 -------

可见,球面的数据中有3条边

2、C++遍历球面的边

下面通过C++来读取所有边的参数范围,并判断边是否退化为点。

// OpenCascade library.
#define WNT
#include <TopoDS.hxx>
#include <TopExp.hxx>
#include <TopExp_Explorer.hxx>
#include <BRepPrimAPI_MakeSphere.hxx>
​
#include <TopTools_ListIteratorOfListOfShape.hxx>
#include <TopTools_IndexedDataMapOfShapeListOfShape.hxx>
​
#pragma comment(lib, "TKernel.lib")
#pragma comment(lib, "TKMath.lib")
#pragma comment(lib, "TKBRep.lib")
#pragma comment(lib, "TKTopAlgo.lib")
#pragma comment(lib, "TKPrim.lib")
​
/**
* @breif Find the face for the given edge, i.e the face which the given edge is on it.
*/
TopoDS_Face FindFaceOfEdge(const TopoDS_Shape& theShape, const TopoDS_Edge& theEdge)
{TopoDS_Face theFace;
​TopTools_IndexedDataMapOfShapeListOfShape theMap;TopExp::MapShapesAndAncestors(theShape, TopAbs_EDGE, TopAbs_FACE, theMap);
​const TopTools_ListOfShape& theFaces = theMap.FindFromKey(theEdge);TopTools_ListIteratorOfListOfShape theIterator(theFaces);
​for (theIterator.Initialize(theFaces); theIterator.More(); theIterator.Next()){theFace = TopoDS::Face(theIterator.Value());}
​return theFace;
}
​
void TestSingularity(void)
{TopoDS_Shape theSphere = BRepPrimAPI_MakeSphere(1.0);
​for (TopExp_Explorer edgeExp(theSphere, TopAbs_EDGE); edgeExp.More(); edgeExp.Next()){const TopoDS_Edge anEdge = TopoDS::Edge(edgeExp.Current());
​Standard_Real aFirst = 0.0;Standard_Real aLast = 0.0;
​gp_Pnt2d U1V1;gp_Pnt2d U2V2;
​Standard_Boolean IsDegenerated = BRep_Tool::Degenerated(anEdge);
​BRep_Tool::Range(anEdge, aFirst, aLast);BRep_Tool::UVPoints(anEdge, FindFaceOfEdge(theSphere, anEdge), U1V1, U2V2);
​std::cout << "Edge is Degenerated: " << (IsDegenerated ? "True" : "False") << std::endl;std::cout << "Edge parameters on face: " << std::endl;std::cout << "  (" << U1V1.X() << ", " << U1V1.Y() << ")" << std::endl;std::cout << "  (" << U2V2.X() << ", " << U2V2.Y() << ")" << std::endl;std::cout << std::endl;}
}
​
int main(int argc, char* argv[])
{TestSingularity();
​return 0;
}

Edge is Degenerated: True

Edge parameters on face:

  (0, 1.5708)

  (6.28319, 1.5708)

Edge is Degenerated: False

Edge parameters on face:

  (6.28319, -1.5708)

  (6.28319, 1.5708)

Edge is Degenerated: True

Edge parameters on face:

  (0, -1.5708)

  (6.28319, -1.5708)

Edge is Degenerated: False

Edge parameters on face:

  (0, -1.5708)

  (0, 1.5708)

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

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

相关文章

构建高效外卖系统:利用Spring Boot框架实现

在当今快节奏的生活中&#xff0c;外卖系统已经成为人们生活中不可或缺的一部分。为了构建一个高效、可靠的外卖系统&#xff0c;我们可以利用Spring Boot框架来实现。本文将介绍如何利用Spring Boot框架构建一个简单但功能完善的外卖系统&#xff0c;并提供相关的技术代码示例…

C++ std::thread 的基本使用方法Linux强制结束进程

std::thread 是 C11 中的一个多线程库&#xff0c;用于创建和管理线程。使用 std::thread&#xff0c;可以将一个函数或可调用对象作为参数&#xff0c;创建一个新的线程来运行该函数或对象。 下面是 std::thread 的基本用法&#xff1a; 包含头文件#include < thread >…

Qt SQLite3数据库加密 QtCipherSqlitePlugin

在客户端软件开发过程中&#xff0c;基本都会涉及到数据库的开发。QT支持的数据库也有好几种&#xff08;QSQLITE, QODBC, QODBC3, QPSQL, QPSQL7&#xff09;&#xff0c;SQLite就是其中之一&#xff0c;但这个 SQLite 是官方提供的开源版本&#xff0c;没有加密功能的。如果对…

ElasticSearch 8.x 版本如何使用 SearchRequestBuilder 检索

ElasticSearch 1、ElasticSearch学习随笔之基础介绍 2、ElasticSearch学习随笔之简单操作 3、ElasticSearch学习随笔之java api 操作 4、ElasticSearch学习随笔之SpringBoot Starter 操作 5、ElasticSearch学习随笔之嵌套操作 6、ElasticSearch学习随笔之分词算法 7、ElasticS…

安全小记-sqli-labs闯关

1.安装靶场 介绍&#xff1a; SQLI&#xff0c;sql injection&#xff0c;我们称之为sql注入。何为sql&#xff0c;英文&#xff1a;Structured Query Language&#xff0c;叫做结构化查询语言。常见的结构化数据库有MySQL&#xff0c;MS SQL ,Oracle以及Postgresql。Sql语言…

Python笔记16-实战小游戏飞机大战(下)

文章目录 play按钮重置游戏提高等级游戏完成 我们会添加一个Play按钮&#xff0c;用于根据需要启动游戏以及在游戏结束后重启游戏&#xff0c;还会修改这个游戏&#xff0c;使其随玩家等级提高而加快节奏。 play按钮 添加一个Play按钮&#xff0c;它在游戏开始前出现&#xff…

【Spark系列4】Task的执行

一、Task的执行流程 1.1、Task执行流程 DAGScheduler将Stage生成TaskSet之后&#xff0c;会将Task交给TaskScheduler进行处理&#xff0c;TaskScheduler负责将Task提交到集群中运行&#xff0c;并负责失败重试&#xff0c;为DAGScheduler返回事件信息等&#xff0c;整体如流程…

OpenGL ES 渲染 NV21、NV12 格式图像有哪些“姿势”?

使用2个纹理实现 NV21 格式图像渲染 前文提到渲染 NV21 格式图像需要使用 2 个纹理,分别用于保存 Y plane 和 UV plane 的数据,然后在片段着色器中分别对 2 个纹理进行采样,转换成 RGB 数据。 OpenGLES 渲染 NV21或 NV12 格式图像需要用到 GL_LUMINANCE 和 GL_LUMINANCE_A…

http和https的区别是什么?https有什么优缺点?

HTTP&#xff08;Hypertext Transfer Protocol&#xff0c;超文本传输协议&#xff09;是一个简单的请求-响应协议&#xff0c;它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。这个简单模型是早期Web成功的有功之臣&#xff0c;因为它…

The following untracked working tree files would be overwritten by merge问题的解决

作者&#xff1a;朱金灿 来源&#xff1a;clever101的专栏 为什么大多数人学不会人工智能编程&#xff1f;>>> 在更新git仓库时出现了一个The following untracked working tree files would be overwritten by merge的错误&#xff0c;具体如下图&#xff1a; 分析…

windows下安装Linux虚拟机

一、 一般情况使用VMware虚拟机&#xff08;个人习惯&#xff0c;也可以使用红帽&#xff09; 下载VMware Workstation 虚拟机&#xff0c; 网址&#xff1a;https://vmware-workstation.en.softonic.com/ 二、 下载CentOS镜像文件&#xff0c; 网址&#xff1a;https://ww…

ES 分词器

概述 分词器的主要作用将用户输入的一段文本&#xff0c;按照一定逻辑&#xff0c;分析成多个词语的一种工具 什么是分词器 顾名思义&#xff0c;文本分析就是把全文本转换成一系列单词&#xff08;term/token&#xff09;的过程&#xff0c;也叫分词。在 ES 中&#xff0c;Ana…

深入理解vue相关的底层原理

keep-alive 组件的作用及原理 keep-alive 是 Vue 提供的一个内置组件&#xff0c;在组件切换过程中将状态保留在内存中&#xff0c;防止重复渲染 DOM。 如果为一个组件包裹了 keep-alive&#xff0c;那么它会多出两个生命周期&#xff1a;deactivated、activated。同时&#…

代码随想录算法训练营Day38|动态规划理论基础、509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯

目录 动态规划理论基础 什么是动态规划 动态规划的解题步骤 动态规划的debug 509. 斐波那契数 前言 思路 算法实现 方法一&#xff1a;动态规划 方法二&#xff1a;递归法 70. 爬楼梯 前言 思路 算法实现 拓展 746. 使用最小花费爬楼梯 算法实现 总结 动态规划…

2024年新提出的算法:(凤头豪猪优化器)冠豪猪优化算法Crested Porcupine Optimizer(附Matlab代码)

本次介绍一种新的自然启发式元启发式算法——凤头豪猪优化器(Crested Porcupine Optimizer&#xff0c;CPO)。该成果于2024年1月发表在中科院1区SCI top期刊Knowledge-Based Systems&#xff08;IF 8.8&#xff09;上。 1、简介 受到凤头豪猪&#xff08;CP&#xff09;各种…

iOS 自动打包如何配置配置打包证书和profile provision文件【脚本方式配置】

iOS 最新Jenkins自动化打包总结 本文主要内容&#xff1a; 1.Xcode和Jenkins的相关设置&#xff0c;以及环境切换 2.通过shell脚本将证书和描述文件拷贝到自动化打包的机器&#xff0c;并archive导出ipa包 3.上传到蒲公英 4.解决Swift不支持use_frameworks!的问题 开搞&…

【开源】SpringBoot框架开发天然气工程业务管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、使用角色3.1 施工人员3.2 管理员 四、数据库设计4.1 用户表4.2 分公司表4.3 角色表4.4 数据字典表4.5 工程项目表4.6 使用材料表4.7 使用材料领用表4.8 整体E-R图 五、系统展示六、核心代码6.1 查询工程项目6.2 工程物资…

[Grafana]ES数据源Alert告警发送

简单的记录一下使用es作为数据源&#xff0c;如何在发送告警是带上相关字段 目录 前言 一、邮件配置 二、配置 1.Query 2.Alerts 总结 前言 ES作为数据源&#xff0c;算是Grafana中比较常见的&#xff0c;Alerts告警是我近期刚接触&#xff0c;有一个需求是当表空间大于…

如何使用ssh key免密码登录服务器?

以下是使用密钥对免密码登录服务器的具体指令操作步骤&#xff1a; 步骤一&#xff1a;生成密钥对 在本地电脑上打开终端或命令提示符&#xff0c;运行以下命令生成密钥对&#xff1a; ssh-keygen -t rsa -C "your_emailexample.com" 该命令会提示您选择保存密钥…

flutter实现:使用三方组件syncfusion_flutter_datagrid

Syncfusion Flutter DataGrid 是一个用于 Flutter 的数据网格组件&#xff0c;它提供了丰富的功能来显示和编辑数据。这个组件提供了灵活的配置选项&#xff0c;使得开发者能够根据需要定制数据的显示和编辑方式。 项目中有两个需求&#xff0c;一是在列表中要使用可变高度&am…