码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Open Cascade旋转变换平行线


    在本人开发的弯管自动CAM软件中,有一个问题一直没有解决,就是180度平行管路需要做角度微调,以便进行YBC预览。研究了一番后,搞定了这个问题,关键在于采用OCC库实现拓扑变换。

    本文将介绍如何使用OpenCASCADE库来实现平行线的创建与旋转变换,并提供相关代码,供读者参考和实践。

    一、算法流程概述:

    1. 创建平行线:首先,通过设置两个起点和两个终点,创建两条平行线段来模拟两个平行管路。
    2. 创建旋转轴:通过计算两条交叉线段的方向向量,并取其叉乘,得到旋转轴的法向量。再以其中一条线段的起点和旋转轴的法向量作为参数,创建一个旋转轴。
    3. 创建变换对象:设置旋转角度,并通过gp_Trsf类创建一个变换对象,将旋转轴和旋转角度作为参数传入。
    4. 拓扑变换:使用BRepBuilderAPI_Transform类对第二条线段进行旋转变换。这里使用了OpenCASCADE库提供的拓扑操作API,将要进行变换的对象和变换对象作为参数传入,得到变换后的拓扑对象。
    5. 保存结果:将旋转变换后的拓扑对象写入文件,保存结果。

    二、详细算法流程:

    导入必要的头文件:

    1. #include
    2. #include
    3. #include
    4. #include

    创建平行线:

    1. gp_Pnt startPt1(0, 0, 0);
    2. gp_Vec dirVec(1, 1, 0);
    3. gp_Pnt endPt1 = startPt1.Translated(dirVec);
    4. gp_Pnt startPt2 = startPt1.Translated(gp_Vec(0, 10, 0));
    5. gp_Pnt endPt2 = endPt1.Translated(gp_Vec(0, 10, 0));

    将线段写入文件:

    1. char path1[1024] = "..\\SampleData\\edge1.brep";
    2. char path2[1024] = "..\\SampleData\\edge2.brep";
    3. BRepTools::Write(edge1, path1);
    4. BRepTools::Write(edge2, path2);

    创建旋转轴:

    1. gp_Vec vec1(startPt1, endPt1);
    2. gp_Vec vec2(startPt1, endPt2);
    3. gp_Dir normal = (vec1 ^ vec2).Normalized();
    4. gp_Ax1 axis(startPt2, normal);

    创建变换对象:

    1. Standard_Real angle = 5 * M_PI / 180.0;
    2. gp_Trsf rotation;
    3. rotation.SetRotation(axis, angle);

    进行拓扑变换:

    1. BRepBuilderAPI_Transform myBRepTransformation(edge2, rotation, false);
    2. TopoDS_Shape rotatedEdge2 = myBRepTransformation.Shape();

    结果示意图

  • 相关阅读:
    Java基础教程:多线程(3)-----创建线程的第二种方式
    当被问到你使用过iframe吗?有哪些优点和缺点?
    UI和粒子不在同一平面怎么改成在一个平面上
    Redis之Redis集群、持久化到mysql、与mysql数据同步
    Shell脚本限制除了SSH的所有流量
    anzo capital昂首资本:MT4和MT5 EA测试的主要区别
    ICLR24大模型提示(1/11) | BadChain:大型语言模型的后门思维链提示
    Linux中文乱码问题终极解决方法
    javaweb基于ssm的仓库管理系统
    ArcGIS基础:不同方法修改栅格数据像元值
  • 原文地址:https://blog.csdn.net/Hudeyu777/article/details/133521096
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号