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

news2025/7/19 18:00:48

文章目录

  • 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 运行结果

在结果中,可以看出,这是一条无线长度的直线
在这里插入图片描述

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 测试效果

在这里插入图片描述

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

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

相关文章

计算机终端核心安全配置规范

声明 本文是学习 政务计算机终端核心配置规范. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 范围 本标准提出了政务计算机终端核心配置的基本概念和要求&#xff0c;规定了核心配置的自动化实现方法&#xff0c;规范了核心配置实施流程。 本标准适…

设计模式(单例模式,工厂模式),线程池

目录 什么是设计模式? 单例模式 饿汉模式 懒汉模式 工厂模式 线程池 线程池种类 ThreadPoolExcutor的构造方法: 手动实现一个线程池 什么是设计模式? 计算机行业程序员水平层次不齐,为了让所有人都能够写出规范的代码,于是就有了设计模式,针对一些典型的场景,给出一…

嵌入式学习之linux

今天&#xff0c;主要对linux文件操作原理进行了学习&#xff0c;主要学习的内容就是对linux文件操作原理进行理解。写的代码如下&#xff1a;

[MyBatis系列④]核心配置文件

目录 1、简介 2、DTD 3、typeHandlers 3.1、默认类型处理器 3.2、自定义类型处理器 4、plugins ⭐MyBatis系列①&#xff1a;增删改查 ⭐MyBatis系列②&#xff1a;两种Dao开发方式 ⭐MyBatis系列③&#xff1a;动态SQL 1、简介 MyBatis的核心配置文件&#xff08;通常命…

【Spring Boot】数据库持久层框架MyBatis — MyBatis简介

MyBatis简介 本节首先会介绍什么是ORM、什么是MyBatis、MyBatis的特点以及核心概念&#xff0c;最后介绍MyBatis是如何启动、如何加载配置文件的&#xff1f; 1.什么是ORM ORM&#xff08;Object Relational Mapping&#xff0c;对象关系映射&#xff09;是为了解决面向对象…

抖音创作服务平台发布作品

最近分析了一下抖音创作服务平台发布作品的步骤 获取密钥等参数通过密钥等参数获取到上传视频需要的参数上传视频发布作品 需要的一些参数有a_bogus Signature crc32等 目前还没有校验a_bogus 只需要传入Cookie以及视频即可发布

C语言sscanf函数学习

sscanf()与scanf()相比&#xff0c;scanf()以键盘(stdin)为输入源&#xff0c;sscanf()以第一个参数的固定字符串为输入源&#xff1b; sscanf()的头文件是 #include <stdio.h>&#xff1b; 函数原型&#xff1a; int sscanf (char *str, char * format [, argument, ..…

纸贵科技连续三年蝉联IDC中国 FinTech 50榜单

近日&#xff0c;国际权威市场研究机构IDC公布了“2023 IDC中国FinTech 50榜单”。作为领先的区块链技术和解决方案服务商&#xff0c;纸贵科技凭借过硬的区块链技术和丰富的金融科技创新成果&#xff0c;连续第三年荣登IDC中国FinTech 50榜单。 IDC中国FinTech 50榜单是金融科…

广告电商模式

电商越来越渗透进我们的生活之中&#xff0c;网上医疗&#xff0c;网上订购电影票&#xff0c;车票等&#xff0c;未来绝不仅仅是网购这么简单&#xff0c;电商行业以后会与生活的方方面面更加精密结合在一起。因此&#xff0c;电商销售的发展是持续增长的&#xff0c;现在很多…

Oracle 查询(当天,月,年)的数据

Trunc 在oracle中&#xff0c;可利用 trunc函数 查询当天数据&#xff0c;该函数可用于截取时间或者数值&#xff0c;将该函数与 select 语句配合使用可查询时间段数据 查询当天数据 --sysdate是获取系统当前时间函数 --TRUNC函数用于截取时间或者数值&#xff0c;返回指定的…

[线程/C++(11)]线程池

文章目录 一、C实现线程池1. 头文件2. 测试部分 二、C11实现线程池1. 头文件2. 测试部分 一、C实现线程池 1. 头文件 #define _CRT_SECURE_NO_WARNINGS #pragma once #include<iostream> #include<string.h> #include<string> #include<pthread.h> #…

vue学习之热更新、单文件开发、插槽、作用域插槽

vue-cli 全局安装&#xff1a;-g&#xff0c;全局安装 vue-cli npm install -g vuecli 创建项目 vue create my-app 生成的文件结构&#xff1a; node-modules: 存放依赖src&#xff1a;源代码文件夹src- components&#xff1a;存放组件的位置 将上一篇中我们html的文件…

【SpringCloud技术专题】「Gateway网关系列」(1)微服务网关服务的Gateway组件的原理介绍分析

为什么要有服务网关? 我们都知道在微服务架构中&#xff0c;系统会被拆分为很多个微服务。那么作为客户端要如何去调用这么多的微服务呢&#xff1f;难道要一个个的去调用吗&#xff1f;很显然这是不太实际的&#xff0c;我们需要有一个统一的接口与这些微服务打交道&#xf…

Android JNI系列详解之CMake配置库文件的输出目录

一、前提 阅读上一篇文章Android JNI系列详解之CMake编译工具的使用&#xff0c;里面讲到了需要配置两个文件&#xff1a;CMakeList.txt和build.gradle 二、配置CMake编译工具输出库文件的路径 1.默认的库文件输出路径&#xff1a;app/build/intermediates/cmake/debug/obj 由此…

springboot整合rabbitmq发布确认高级

在生产环境中由于一些不明原因&#xff0c;导致 rabbitmq 重启&#xff0c;在 RabbitMQ 重启期间生产者消息投递失败&#xff0c;导致消息丢失&#xff0c;需要手动处理和恢复。于是&#xff0c;我们如何才能进行 RabbitMQ 的消息可靠投递。 发布确认 发布确认方案 架构 配置…

poi带表头多sheet导出

导出工具类 package com.hieasy.comm.core.excel;import com.hieasy.comm.core.excel.fragment.ExcelFragment; import com.hieasy.comm.core.utils.mine.MineDateUtil; import org.apache.poi.hssf.usermodel.*; import org.apache.poi.ss.usermodel.*; import org.apache.po…

android studio安装教程

1、android studio 下载 下载网址&#xff1a;Download Android Studio & App Tools - Android Developers 2、开始安装 因为不需要每次连接手机进行调试&#xff0c;android studio给我们提供了模拟器调试环境。 一般选择自定义安装&#xff0c;这样可选sdk以及下载路径…

IT运维:使用数据分析平台监控 Kafka 服务

Apache Kafka 是由 LinkedIn 开发&#xff0c;并于2011年开源的分布式消息队列服务。但是通过快速持续的演进&#xff0c;目前它发展成为成熟的事件流处理平台&#xff0c;可用于大规模流处理、实时数据管道和数据集成等场景。 Kafka 的服务端组件包括一个或者多个 broker。Bro…

视频云存储/安防监控AI视频智能分析平台——智慧煤矿解决方案

一、方案背景 煤矿业是一个高风险行业&#xff0c;存在着许多潜在的安全隐患和风险。互联网、物联网、人工智能等新兴技术高速发展&#xff0c;为传统行业带来颠覆性变革&#xff0c;将高新技术与传统技术装备、管理相融合&#xff0c;实现产业转型升级已经成为煤矿行业发展趋…

【0824作业】C++ 拷贝赋值函数、匿名对象、友元、常成员函数和常对象、运算符重载

一、思维导图 二、作业&#xff1a;实现关系运算符的重载 关系运算符重载 概念&#xff1a; 种类&#xff1a;>、>、< 、< 、 、!表达式&#xff1a;L#R (L表示左操作数&#xff0c;R表示有操作数&#xff0c;#表示运算符)左操作数&#xff1a;既可以是左值也可以…