Open CASCADE学习|用点分割边

在Open CASCADE Technology(OCCT)中,几何模型是由拓扑(Topology)和几何(Geometry)两部分组成的。拓扑部分描述了形状的拓扑结构,比如边、面、体等,而几何部分则定义了这些拓扑元素的形状。TopoDS_Edge 是拓扑边的一个类,它代表了模型中的一个边界。

TopoDS_Edge 的底层数据是 Geom_Curve,这意味着 TopoDS_Edge 的几何形状是由一个 Geom_Curve 对象来描述的。Geom_Curve 是一个抽象基类,它代表了一个几何曲线,可以是直线、圆弧、二次曲线等。

当你想要截取 TopoDS_Edge 的一部分时,你实际上是在操作其底层的 Geom_Curve。你可以通过指定 Geom_Curve 的参数区间来截取曲线的一部分。参数区间通常是由两个参数值定义的,一个起始参数和一个结束参数,这两个参数都在曲线的参数范围内。曲线的参数范围通常是从0到1,但也可能有不同的范围,具体取决于曲线的类型。

#include <Geom_BezierCurve.hxx>
#include <BRepBuilderAPI_MakeEdge.hxx>
#include <TopoDS_Edge.hxx>
#include <BRep_Tool.hxx>
#include <BRepLib.hxx>
#include <GeomAPI_ProjectPointOnCurve.hxx>
​
#include"Viewer.h"
​
int main(int argc, char* argv[])
{
    //Non Rational B-Spline
​
    gp_Pnt points1[8] = {
    gp_Pnt(0.0,-100.0,0.0),
    gp_Pnt(10.0,10.0,0.0),
    gp_Pnt(30.0,-100.0,0.0),
    gp_Pnt(100.0,0.0,0.0),
    gp_Pnt(150.0,50.0,0.0),
    gp_Pnt(200.0,0.0,0.0),
    gp_Pnt(400.0,200.0,0.0),
    gp_Pnt(450.0,0.0,0.0)
    };
​
    NCollection_Array1<gp_Pnt> points(points1[0], 1, 8);//Control points
    Standard_Real realsWeight[8] = { 1.0,1.0,1.0,1.0,1.0,1.0,10.0,1.0 };
    NCollection_Array1<Standard_Real> weight(realsWeight[0], 1, 8);//权系数,倒数第二个点的权系数是其他的10倍。
    Geom_BezierCurve bezier(points); //Non-Rational
​
    Handle(Geom_BezierCurve) bezier1 = &bezier;
    TopoDS_Edge E = BRepBuilderAPI_MakeEdge(bezier1);
    gp_Pnt pnt = gp_Pnt(150.0, 50.0, 0.0);
    TopoDS_Edge E1, E2;
    Standard_Real startParam(0.), endParam(0.);
    Handle(Geom_Curve) c = BRep_Tool::Curve(E, startParam, endParam);//得到底层曲线
    //有时底层曲线没有创建,要手动创建
    if (c.IsNull())
    {
        BRepLib::BuildCurves3d(E, 1.0e-5, GeomAbs_C1);//创建曲线
        c = BRep_Tool::Curve(E, startParam, endParam);
    }
    if (!c.IsNull())
    {
        //投影点到曲线上,并获取投影点处的参数
        GeomAPI_ProjectPointOnCurve ppc(pnt, c);
        Standard_Real param = ppc.LowerDistanceParameter();
        //如果投影点参数小于起始参数或大于终止参数,则分割失败  
​
        if (startParam - param > 0.00001 || param - endParam > 0.00001)
            return false;
​
        //如果正好等于起始参数或等于终止参数,则一边是原始边,另一边为NULL
        else if (Abs(param - startParam) <= Precision::Confusion())
            E1 = E;
        else if (Abs(param - endParam) <= Precision::Confusion())
            E2 = E;
​
        //处于起始和终止参数中间,则构建两个新边
        else
        {
            E1 = BRepBuilderAPI_MakeEdge(c, startParam, param);
            E1.Orientation(E.Orientation());//同向
            E2 = BRepBuilderAPI_MakeEdge(c, param, endParam);
            E2.Orientation(E.Orientation());//同向
            if (E.Orientation() == TopAbs_REVERSED)
            {
                TopoDS_Edge e = E1;
                E1 = E2;
                E2 = e;
            }
        }
    }
    Viewer vout(50, 50, 500, 500);
    vout << E;
    vout << E1;
    vout << E2;
    vout.StartMessageLoop();
    return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

金蝶云星空——用递归SQL查询物料分组

应用场景&#xff1a; 金蝶物料分组为树形结构&#xff0c;需要根据SQL查询同步到第三方系统中。 技术实现 用递归CTE按照树状结构展开物料分组 with cte as( select 0 as 物料分组层级,t1.FID,case when isnull(t1.FFULLPARENTID,) then .CAST(t1.FID AS VARCHAR(…

裸辞5个月,面试了37家公司,终于找到理想工作了

上半年裁员&#xff0c;下半年裸辞&#xff0c;有不少人高呼裸辞后躺平真的好快乐&#xff01;但也有很多人&#xff0c;裸辞后的生活五味杂陈。 面试37次终于找到心仪工作 因为工作压力大、领导PUA等各种原因&#xff0c;今年2月下旬我从一家互联网小厂裸辞&#xff0c;没想…

LeetCode JS专栏刷题笔记(二)

一、前言 LeetCode - JavaScript 专栏刷题笔记第二篇。 第一篇刷题笔记详见&#xff1a;LeetCode JS专栏刷题笔记&#xff08;一&#xff09; 二、算法题目 1. 复合函数 LeetCode地址&#xff1a;2629. 复合函数 请你编写一个函数&#xff0c;它接收一个函数数组 [f1, f2, …

(2024,自级联扩散,关键点引导的噪声重新调度,时间感知特征上采样器)进行廉价的扩展:用于更高分辨率适应的自级联扩散模型

Make a Cheap Scaling: A Self-Cascade Diffusion Model for Higher-Resolution Adaptation 公和众和号&#xff1a;EDPJ&#xff08;进 Q 交流群&#xff1a;922230617 或加 VX&#xff1a;CV_EDPJ 进 V 交流群&#xff09; 目录 0. 摘要 2. 相关工作 4. 自级联扩散模型 …

【数据结构与算法】手搓JDK底层ArrayList底层 - 动态数组

数组 在介绍数组之前&#xff0c;我们先来看一段chatGPT给出的对于数组描述&#xff1a; 数组&#xff08;Array&#xff09;是一种线性数据结构&#xff0c;它由一组连续的内存空间组成&#xff0c;用来存储相同类型的数据元素。数组具有固定的大小&#xff0c;一旦创建后&a…

【Docker】前后端分离项目 Gin+Vue 容器化部署 | docker-compose 部署 | 部署 nginx 通过域名访问

文章目录 前言前后端不完全独立docker 部署mysqlredisrbac docker compose 部署部署 nginx 前后端独立部署 前言 项目地址&#xff1a;https://gitee.com/Cauchy_AQ/rbac 项目前端使用 vue3 并且由 vite 构建&#xff0c;后端采用 gin 框架&#xff0c;搭建了一个简易的权限管…

计算机设计大赛 深度学习交通车辆流量分析 - 目标检测与跟踪 - python opencv

文章目录 0 前言1 课题背景2 实现效果3 DeepSORT车辆跟踪3.1 Deep SORT多目标跟踪算法3.2 算法流程 4 YOLOV5算法4.1 网络架构图4.2 输入端4.3 基准网络4.4 Neck网络4.5 Head输出层 5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; *…

WildCard:一个因太好用而被迫暂停服务的虚拟信用卡平台,魅力何在?

如果你需要使用Wildcard开通GPT4、Midjourney或是Only方式的话&#xff0c;请点击&#xff1a;WildCard使用教程 参考文章链接&#xff1a;WildCard&#xff1a;一个因太好用而被迫暂停服务的虚拟信用卡平台&#xff0c;魅力何在&#xff1f; 1、Wildcard用户数量激增&#x…

lombok的Getter, Setter报错 cannot find symbol

今天突然发现项目里的lombok失效了&#xff0c;get , set全部报错 java: cannot find symbol 觉得很奇怪&#xff0c;年前放假前都好好的&#xff0c;没改过代码&#xff0c;依赖&#xff0c;注解都正确&#xff0c;突然报这个错。 后来才发现是因为重装过系统&#xff0c;id…

机器人十大前沿技术(2023-2024年)

2023-2024年机器人十大前沿技术 1. 具身智能与垂直大模型 具身智能是指拥有自主感知、交互和行动能力的智能体&#xff0c;能够与环境进行实时互动&#xff0c;从而实现对环境的理解和适应。 “大模型”是指在深度学习和人工智能领域中&#xff0c;使用大量参数和数据进行训…

【Visual Studio】技巧 :自动与活动文档同步

在这里插入图片描述 工具 -> 选项 -> 项目和解决方案 - 勾选上面的 我厉害不&#xff01;&#xff01;&#xff01;

php基础学习之常用系统函数

一&#xff0c;有关输出的语句/函数 echo语句 用于输出一个或多个字符串 print语句 用于输出一个字符串&#xff08;用句点连接的多个字符串本质是一个字符串&#xff09;&#xff0c;与echo类似&#xff0c;但返回值为1 printf()函数 用于格式化输出字符串&#xff0c;类似于C…

东方博宜 1395. 小丽找数?

东方博宜 1395. 小丽找数&#xff1f; #include<iostream> using namespace std; int main() {int x ;cin >> x ;int cnt 0 ;for (int i 1 ; i < x ; i){ int y i ;int sum 0;while(y > 0){sum y%10 ;y / 10 ;}if(sum%5!0 &&sum%2!0)cnt 1 …

莱卡云怎么样?简单测评下莱卡云韩国CN2云服务器

莱卡云服务器厂商&#xff0c;国内持证企业服务器商家&#xff0c;运作着香港、美国、韩国、镇江、日本、绍兴、枣庄、等数据中心的云服务器、独立服务器出租、设备托管、CDN等业务。今天为大家带来的是莱卡云韩国CN2服务器的详细评测&#xff0c;该云服务器的数据中心位于韩国…

网络同步—帧同步和状态同步解析

概述 同步就是要多个客户端表现效果是一致的&#xff0c;而且对于大多数的游戏&#xff0c;不仅仅要表现一致&#xff0c;还要客户端和服务器的数据也是一致的。所以同步是个网络游戏概念&#xff0c;只有网络游戏才需要同步&#xff0c;而单机游戏是不需要同步的。 帧同步和…

在vscode中使用正则表达式删除python的注释

出于一些原因&#xff0c;需要删除所有的注释 vscode中用全文搜索替换的功能 点击红色按钮即可使用正则表达式。 1. 多行注释 [|"][|"][|"](.*\n)*?.*[|"][|"][|"] 里面主要需要注意的就是不要使用贪婪匹配&#xff0c;也就是 *? 的?这里…

并查集,真好用,一次AC不是梦!

文章目录 &#x1f680;前言&#x1f680;并查集&#x1f680;并查集的两个优化✈️路径压缩✈️按秩合并 &#x1f680;并查集代码模板 &#x1f680;前言 大家好啊&#xff01;今天阿辉来给大家介绍一种简洁而优雅的数据结构——并查集&#xff0c;不知道各位是否了解它&…

Paper Digest | 突破个性化推荐数据稀疏性:长尾增强的图对比学习算法研究

00 导读 本文将介绍的论文 Long-tail Augmented Graph Contrastive Learning for Recommendation 已被 ECML/PKDD 2023 Research Track 接收。 论文链接&#xff1a;https://arxiv.org/abs/2309.11177 论文中提到的模型实现&#xff0c;已经完全复现到 OpenAGL 里了&#xff…

186205-33-4,Cyanine2活化酯,可标记各种纳米材料和生物样品

186205-33-4&#xff0c;Cyanine2 NHS Ester&#xff0c;Cy2 NHS&#xff0c;Cy2活化酯&#xff0c;Cyanine2活化酯&#xff0c;可标记各种纳米材料和生物样品 您好&#xff0c;欢迎来到新研之家 文章关键词&#xff1a;186205-33-4&#xff0c;Cyanine2 NHS Ester&#xff0…

基于 Reactive Mode 的 Flink 自动扩容

翻译自 Apache Flink: Scaling Flink automatically with Reactive Mode 简介 流式作业长时间运行过程中常常会经历不同流量负载的情况。流量负载会出现周期性的变化&#xff0c;如&#xff1a;白天与晚上、周末与工作日、节假日与非节假日&#xff0c;这些波动可能是突发事件…