首页 > 编程语言 >Opencascad(C++)-建模-创建有界直线段

Opencascad(C++)-建模-创建有界直线段

时间:2023-10-31 10:38:29浏览次数:37  
标签:直线 Opencascad const gp Lin Pnt C++ 建模 theP



文章目录

  • 1、 前言
  • 2、用gp_Lin创建一条直线
  • 2.1 gp_Lin类成员函数
  • 2.2 创建一条直线
  • 2.3 运行结果
  • 3、创建一条有界的直线段
  • 3.1 功能说明
  • 3.2 函数说明
  • 3.2 创建直线段的代码
  • 3.3 测试效果



1、 前言

在Opencascad开发时,经常会遇到创建直线的情况,采用gp_Line创建的直线段是无界的,如果想创建一条直线段,就需要用其他的方法了。本文介绍一种创建直线段的方法。


2、用gp_Lin创建一条直线

描述三维空间中的线条。一条线位于空间中,轴(gp_Ax3对象)为其提供原点和单位向量。直线和轴是相似的对象,因此,我们可以将一个转换为另一个。通过一条线,可以直接访问其定位轴上可用的大多数编辑和查询功能。但是,此外,线还具有用于计算距离和位置的特定功能。另请参阅gce_MakeLin,它为更复杂的线结构提供了函数Geom_Line它提供了用于构造线的附加函数,特别是使用线的参数方程。
其包括的方法有:

2.1 gp_Lin类成员函数

1. gp_Lin ()
创建一条与参照坐标系的 Z 轴对应的线。

2. gp_Lin (常量 gp_Ax1 和 A1)
创建由轴 A1 定义的线。

3. gp_Lin (const gp_Pnt &theP, const gp_Dir &theV)
创建一条穿过点 theP 并平行于矢量 theV 的线(P 和 V 分别是线定位轴的原点和单位矢量)。

4. void Reverse ()

5. gp_Lin Reversed () const
反转直线的方向。

6. void SetDirection (const gp_Dir &theV)
更改线条的方向。

7. void SetLocation (const gp_Pnt &theP)
更改线的位置点(原点)。

8. void SetPosition (const gp_Ax1 &theA1)
完全重新定义生产线。的“位置”点是线的原点。的“方向”是直线的方向。

9. const gp_Dir & Direction () const
返回线条的方向。

10. const gp_Pnt & Location () const
返回线的位置点(原点)。

11. const gp_Ax1 & Position () const
返回与 具有相同位置和方向的一个轴的轴放置。

12. Standard_Real Angle (const gp_Lin &theOther) const
以弧度为单位计算两条线之间的角度。

13. Standard_Boolean Contains (const gp_Pnt &theP, const Standard_Real theLinearTolerance) const
如果此行包含点 theP,即,如果点 theP 和这条线之间的距离小于或等于线性容差,则返回 true。

14. Standard_Real Distance (const gp_Pnt &theP) const
计算 和点 theP 之间的距离。

15. Standard_Real Distance (const gp_Lin &theOther) const
计算两条线之间的距离。

16. Standard_Real SquareDistance (const gp_Pnt &theP) const
计算 和点 theP 之间的平方距离。

17. Standard_Real SquareDistance (const gp_Lin &theOther) const
计算两条线之间的平方距离。

18. gp_Lin Normal (const gp_Pnt &theP) const
计算垂直于 方向的线,穿过点 theP。如果 和点 theP 之间的距离小于或等于 gp 的分辨率,则引发构造误差,因为 3D 空间中存在无限个解。

19. void Mirror (const gp_Pnt &theP)

20. gp_Lin Mirrored (const gp_Pnt &theP) const
执行直线相对于作为对称中心的点 theP 的对称变换。

21. void Mirror (const gp_Ax1 &theA1)

22. gp_Lin Mirrored (const gp_Ax1 &theA1) const
相对于作为对称轴的轴放置执行直线的对称变换。

23. void Mirror (const gp_Ax2 &theA2)

24. gp_Lin Mirrored (const gp_Ax2 &theA2) const
执行直线相对于平面的对称变换。轴放置定位对称平面:(位置,XDirection,YDirection)。

25. void Rotate (const gp_Ax1 &theA1, const Standard_Real theAng)

26. gp_Lin Rotated (const gp_Ax1 &theA1, const Standard_Real theAng) const
旋转线条。A1 是旋转轴。Ang 是以弧度为单位的旋转角度值。

27. void Scale (const gp_Pnt &theP, const Standard_Real theS)

28. gp_Lin Scaled (const gp_Pnt &theP, const Standard_Real theS) const
缩放线条。S 是缩放值。修改线的“位置”点(原点)。如果比例为负,则“方向”反转。

29. void Transform (const gp_Trsf &theT)

30. gp_Lin Transformed (const gp_Trsf &theT) const
使用类 Trsf 的转换转换线。

31. void Translate (const gp_Vec &theV)

32. gp_Lin Translated (const gp_Vec &theV) const
沿向量 theV 的方向平移一条线。平移的大小是矢量的大小。

33. void Translate (const gp_Pnt &theP1, const gp_Pnt &theP2)

34. gp_Lin Translated (const gp_Pnt &theP1, const gp_Pnt &theP2) const
将一条线从点 P1 转换为点 P2。

2.2 创建一条直线

我们采用一个点和轴向来创建一条直线,其代码如下:

//直线通过的点
    gp_Pnt origionPnt(0.0,0.0,0.0);
    //直线矢量采用两个点控制
    gp_Pnt startPnt(0.0,0.0,0.0);
    gp_Pnt endPnt(100,100,100);
    //创建矢量
    gp_Vec vec(startPnt,endPnt);
    //创建轴向
    gp_Dir dir(vec);
    //创建直线
    gp_Lin line(origionPnt,dir);
    //转换直线到边
    TopoDS_Edge edge = BRepBuilderAPI_MakeEdge(line);
    //显示对象
    Handle(AIS_Shape) aisEdge = new AIS_Shape(edge);
    //在视图区中显示对象
    myOccModel->GetAISContext()->Display(aisEdge,true);

2.3 运行结果

在结果中,可以看出,这是一条无线长度的直线

Opencascad(C++)-建模-创建有界直线段_开发语言

3、创建一条有界的直线段

我们采用GC_MakeSegment来实现,首先看GC_MakeSegment的说明。

3.1 功能说明

实现 3D 空间中线段的构造算法。从 2 个点 和 开始制作一段线。结果是一条Geom_TrimmedCurve曲线。

3.2 函数说明

1. GC_MakeSegment (const gp_Pnt &P1, const gp_Pnt &P2)
从 2 个点 和 开始制作一段线。如果和混淆,则返回NullObject。
2. GC_MakeSegment (const gp_Lin &Line, const Standard_Real U1, const Standard_Real U2)
从两个参数 U1 和 U1 之间的行 中生成一段线。如果 等于 ,则返回 NullObject。

3. GC_MakeSegment (const gp_Lin &Line, const gp_Pnt &Point, const Standard_Real Ulast)
从点<点>和参数 Ulast 之间的线 中生成一段线。如果 等于 ,则返回 NullObject。
4. GC_MakeSegment (const gp_Lin &Line, const gp_Pnt &P1, const gp_Pnt &P2)
从两点 和 之间的线 中制作一段线。如果 等于 ,则返回 NullObject。更多。。。

3.2 创建直线段的代码

//    //直线通过的点
//    gp_Pnt origionPnt(0.0,0.0,0.0);
    //直线矢量采用两个点控制
    gp_Pnt startPnt(0.0,0.0,0.0);
    gp_Pnt endPnt(100,100,100);
//    //创建矢量
//    gp_Vec vec(startPnt,endPnt);
//    //创建轴向
//    gp_Dir dir(vec);
//    //创建直线
//    gp_Lin line(origionPnt,dir);
//    //转换直线到边
//    TopoDS_Edge edge = BRepBuilderAPI_MakeEdge(line);
//    //显示对象
//    Handle(AIS_Shape) aisEdge = new AIS_Shape(edge);
//    //在视图区中显示对象
//    myOccModel->GetAISContext()->Display(aisEdge,true);


//    gp_Pnt startPnt(0,0,0);
//    gp_Pnt endPnt(100,100,100);
    Handle(Geom_TrimmedCurve) aSegment =GC_MakeSegment(startPnt, endPnt);
    TopoDS_Edge aEdge = BRepBuilderAPI_MakeEdge(aSegment);

 
    Standard_Real s1 = 0;
    Standard_Real s2= 1;
    Handle(Geom_Curve) curve = BRep_Tool::Curve(aEdge,s1,s2);
    Handle(Geom_Line)line;
    if(curve->IsKind(STANDARD_TYPE(Geom_Line))){
        line = Handle(Geom_Line)::DownCast(curve);
    }

    Handle(AIS_Shape)aisEdge = new AIS_Shape(aEdge);
    myOccModel->GetAISContext()->Display(aisEdge,true);

3.3 测试效果

Opencascad(C++)-建模-创建有界直线段_Real_02


标签:直线,Opencascad,const,gp,Lin,Pnt,C++,建模,theP
From: https://blog.51cto.com/GimiGimmy/8102111

相关文章

  • tdc++.so.6: version `GLIBCXX_3.4.29' not found
     001、python程序报错如下: 002、问题分析a、调用的是python程序b、libstdc++.so.6是c++标准库执行python程序时,需要调用c++标准库,libstdc++.so.6(lib=glib,6表示第6版),版本不匹配报错,无法找到:GLIBCXX_3.4.29。 003、确认调用的哪里的python程序(base)[b20223040......
  • 【ROS2机器人入门到实战】第 8 章 机器人建模
    第8章机器人建模写在前面当前平台文章汇总地址:ROS2机器人从入门到实战获取完整教程及配套资料代码,请关注公众号<鱼香ROS>获取教程配套机器人开发平台:两驱版|四驱版为方便交流,搭建了机器人技术问答社区:地址fishros.org.cn记得小时候,我眼中的机器人一直是钢铁侠那个样子,但后来开......
  • c++ ftp上传下载
    #include<afxinet.h>intmain(){BOOLdRes,pRes;HINTERNEThInternet;HINTERNEThConnect;hInternet=InternetOpen("A3GSSample",INTERNET_OPEN_TYPE_DIRECT,NULL,NULL,INTERNET_FLAG_NO_CACHE_WRITE);if(NULL==hInternet){printf("Inter......
  • 高级数据库建模与设计笔记
    1、需求文档2、数据流图3、数据字典4、概要设计5、逻辑设计(本课程只到这一步) 数据流图:方框里是角色,圆里是动作,箭头是信息的变换,长等号上面是待修改的信息。数据字典:是个列表。它不只说明字段,而是对数据流中各个元素进行说明。 新感悟:设计表时,面对数据流图,应该先看靠近......
  • C++基本输入输出
    C++基本输入输出C++标准库提供了一组丰富的输入/输出功能。C++的I/O操作发生在流中,流是字节序列。如果字节流是从设备(如键盘、磁盘驱动器、网络连接等)流向内存,这叫做输入操作。如果字节流是从内流向设备(如显示器、打印机、磁盘驱动器、网络连接等),这叫做输出操作。I/O库头文件......
  • C++多线程——async、packages_task、promise
    异步编程async、future基本概念和使用:异步执行函数:std::async可以异步执行一个函数,这意味着函数将在后台线程中执行,而当前线程可以继续执行其他任务。返回值获取:你可以获得函数的返回值,或者得到一个std::future对象,它允许你在将来的某个时刻获取函数的结果。线程......
  • C++多线程——线程池
    线程池ThreadPool线程池简单来说就是用来管理多个线程的,以避免频繁开辟或销毁线程的情况。以下是创建和使用线程池的基本步骤:创建一个任务队列,用于存储待执行的任务。创建一组线程,这些线程会从任务队列中获取任务并执行它们。将任务提交到任务队列中,由线程池的线程......
  • C++U4-02-贪心算法2
    上节课作业部分  [纪念品分组]  【算法分析】贪心算法:先对数组从小到大排序,用l=1,r=n指针指向首尾元素;如果pl+pr≤w,则将pl和pr分一组,指针l++,r--。如果pl+pr>w,则将pr单独作为一组,指针r--。如此反复直到取完所有元素。#include<iostream>#include<a......
  • C++U5-深度优先搜索-03(记忆化搜索、剪枝和优化)
    ......
  • C++23:多维视图(std::mdspan)
    C++23:多维视图(std::mdspan)介绍在C++23中,std::mdspan是一个非拥有的多维视图,用于表示连续对象序列。这个连续对象序列可以是一个简单的C数组、带有大小的指针、std::array、std::vector或std::string。这种多维视图通常被称为多维数组。多维数组的形状由其维数(也称为秩)和每个......