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

Open CASCADE学习| ​提取曲面的PCurve

PCurve这个概念,字面上来理解就是参数曲线(Parametric Curve)。参数空间曲线是在参数曲面的双参数空间中的二维样条曲线。

二维曲线定义的目的只有一个:pCurve,参数曲线。OCC采用参数法构建几何结构,所有的三维曲线(面的边界)都对应于二维参数曲线pCurve。二维参数曲线pCurve上的二维点对应实际曲线上的三维点。如下代码,我们遍历一个Topo_Face的Edge,然后求得Edge对应的pCurve。并显示Face的二维参数面。

​
// OpenCascade library.
#define WNT
#include <TopoDS.hxx>
#include <TopExp.hxx>
#include <TopExp_Explorer.hxx>
#include <BRepPrimAPI_MakeSphere.hxx>
#include <BRepBuilderAPI_MakeWire.hxx>
#include <BRep_Tool.hxx>
#include <BRepBuilderAPI_MakeEdge2d.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")
​
​
int main(int argc, char* argv[])
{TopoDS_Face face = BRepPrimAPI_MakeSphere(1.0);TopExp_Explorer aWireExp(face, TopAbs_WIRE);for (aWireExp; aWireExp.More(); aWireExp.Next()) {//获取每条wireBRepBuilderAPI_MakeWire wire2d;TopoDS_Wire aTempWire = TopoDS::Wire(aWireExp.Current());//获取EdgeTopExp_Explorer aEdgeExp(aTempWire, TopAbs_EDGE);for (aEdgeExp; aEdgeExp.More(); aEdgeExp.Next()) {TopoDS_Edge aTempEdge = TopoDS::Edge(aEdgeExp.Current());
​//获取PCurveStandard_Real aPFirst, aPLast;Handle(Geom2d_Curve) aPCurve = BRep_Tool::CurveOnSurface(aTempEdge, face, aPFirst, aPLast);//获取此时PCurve的端点坐标,即UV值。gp_Pnt2d pStart, pEnd;aPCurve->D0(aPFirst, pStart);aPCurve->D0(aPLast, pEnd);std::cout << "\n";std::cout << "         起始点坐标:[" << pStart.X() << "," << pStart.Y() << "]\n";std::cout << "         终止点坐标:[" << pEnd.X() << "," << pEnd.Y() << "]\n";TopoDS_Edge aEdge2d = BRepBuilderAPI_MakeEdge2d(aPCurve, aPFirst, aPLast);wire2d.Add(aEdge2d);
​}}
​return 0;
}

  起始点坐标:[0,1.5708]

         终止点坐标:[6.28319,1.5708]

         起始点坐标:[6.28319,-1.5708]

         终止点坐标:[6.28319,1.5708]

         起始点坐标:[0,-1.5708]

         终止点坐标:[6.28319,-1.5708]

         起始点坐标:[0,-1.5708]

         终止点坐标:[0,1.5708]

http://www.lryc.cn/news/290099.html

相关文章:

  • GMS测试BTSfail-CVE-2022-20451
  • Vue学习笔记12--Vue3之setup/ref函数/reactive函数/Vue3响应式原理/reactive对比ref
  • 座位预约|座位预约小程序|基于微信小程序的图书馆自习室座位预约管理系统设计与实现(源码+数据库+文档)
  • 03 Redis之命令(基本命令+Key命令+String型Value命令与应用场景)
  • go语言函数进阶
  • Python编程技巧 – 函数参数
  • python222网站实战(SpringBoot+SpringSecurity+MybatisPlus+thymeleaf+layui)-帖子管理实现
  • LabVIEW扫频阻抗测试系统
  • C语言——指针进阶(四)
  • Django介绍
  • 【idea】几个不错的idea插件让我码速又快了
  • LabVIEW直流电机转速检测与控制
  • ༺༽༾ཊ—Unity之-05-抽象工厂模式—ཏ༿༼༻
  • 力扣面试题02.07-链表相交
  • Java集合-ArrayList
  • 数据结构·单链表经典例题
  • Linux常用指令的整合
  • 阿里云centos安装mysql,并修改初始密码
  • 【JavaScript基础入门】04 JavaScript基础语法(二)
  • 标准库中的string类(下)——“C++”
  • 如何使用Docker部署火狐浏览器并实现无公网ip远程访问
  • 瑞_数据结构与算法_AVL树
  • BGP同步规则
  • Linux命令-apt-key命令(管理Debian Linux系统中的软件包密钥)
  • Python根据Excel表进行文件重命名
  • 【UVM源码】UVM Config_db机制使用总结与源码解析
  • 群辉开启WebDav服务+cpolar内网穿透实现移动端ES文件浏览器远程访问本地NAS文件
  • 通过mybatis拦截器给sql执行加一个耗时监控
  • 构建知识图谱:从技术到实战的完整指南
  • STM32的分类和选型