opencascade AIS_Line源码学习直线节点

news/2024/9/30 8:04:17

opencascade AIS_Line

前言

构造用于构建复合形状的线基准。

在这里插入图片描述

方法

1

//! 初始化线 aLine。
Standard_EXPORT AIS_Line(const Handle(Geom_Line)& aLine);

2

//! 初始化线的起始点 aStartPoint 和终点 aEndPoint。
Standard_EXPORT AIS_Line(const Handle(Geom_Point)& aStartPoint, const Handle(Geom_Point)& aEndPoint);

3

//! 返回签名 5。
virtual Standard_Integer Signature() const Standard_OVERRIDE { return 5; }

4

//! 返回类型 Datum。
virtual AIS_KindOfInteractive Type() const Standard_OVERRIDE { return AIS_KindOfInteractive_Datum; }

5

//! 构造一条无限线。
const Handle(Geom_Line)& Line() const { return myComponent; }

6

//! 返回通过 SetPoints 设置的线的起点 thePStart 和终点 thePEnd。
void Points (Handle(Geom_Point)& thePStart, Handle(Geom_Point)& thePEnd) const
{
thePStart = myStartPoint;
thePEnd = myEndPoint;
}

7

//! 实例化一条无限线。
void SetLine (const Handle(Geom_Line)& theLine)
{
myComponent = theLine;
myLineIsSegment = Standard_False;
}

8

//! 设置无限线的起点 thePStart 和终点 thePEnd,以创建一个有限线段。
void SetPoints (const Handle(Geom_Point)& thePStart, const Handle(Geom_Point)& thePEnd)
{
myStartPoint = thePStart;
myEndPoint = thePEnd;
myLineIsSegment = Standard_True;
}

9

//! 为绘图工具或“Drawer”中的线条提供新颜色设置 aColor。
Standard_EXPORT void SetColor (const Quantity_Color& aColor) Standard_OVERRIDE;

10

//! 为绘图工具或“Drawer”中的线条提供新宽度设置 aValue。
Standard_EXPORT void SetWidth (const Standard_Real aValue) Standard_OVERRIDE;

11

//! 移除颜色设置并返回原始颜色。
Standard_EXPORT void UnsetColor() Standard_OVERRIDE;

12

//! 移除宽度设置并返回原始宽度。
Standard_EXPORT void UnsetWidth() Standard_OVERRIDE;

示例:使用 AIS_Line

#include <AIS_InteractiveContext.hxx>
#include <AIS_Line.hxx>
#include <Geom_CartesianPoint.hxx>
#include <Geom_Line.hxx>
#include <Graphic3d.hxx>
#include <V3d_View.hxx>
#include <V3d_Viewer.hxx>
#include <Visual3d_ViewManager.hxx>
#include <OpenGl_GraphicDriver.hxx>
#include <WNT_Window.hxx>int main() {// 初始化图形驱动Handle(Graphic3d_GraphicDriver) aDriver = new OpenGl_GraphicDriver;// 创建一个 3D 视图器Handle(V3d_Viewer) aViewer = new V3d_Viewer(aDriver, Standard_ExtString("Viewer3D"));// 创建一个 3D 视图Handle(V3d_View) aView = aViewer->CreateView();// 为视图创建一个窗口(例如,使用 WNT_Window 类用于 Windows 系统)Handle(WNT_Window) aWindow = new WNT_Window("OpenCASCADE Line Example", 100, 100, 800, 600);aView->SetWindow(aWindow);// 创建一个交互上下文Handle(AIS_InteractiveContext) aContext = new AIS_InteractiveContext(aViewer);// 定义线的两个点Handle(Geom_CartesianPoint) startPoint = new Geom_CartesianPoint(0.0, 0.0, 0.0);Handle(Geom_CartesianPoint) endPoint = new Geom_CartesianPoint(10.0, 10.0, 0.0);// 创建一条连接两个点的 AIS_LineHandle(AIS_Line) aLine = new AIS_Line(startPoint, endPoint);// 设置线条的颜色和宽度aLine->SetColor(Quantity_NOC_BLUE);aLine->SetWidth(2.0);// 在交互上下文中显示这条线aContext->Display(aLine, AIS_Shaded, 0, Standard_True);// 调整视图以显示所有对象aView->FitAll();// 主事件循环(伪代码,实际实现取决于你的 GUI 框架)while (true) {// 处理 GUI 事件并根据需要重绘视图// 例如:// aView->Redraw();}return 0;
}

解释

  1. 初始化图形驱动

    • 使用 OpenGl_GraphicDriver 处理 OpenGL 渲染。
  2. 创建视图器和视图

    • 创建 V3d_Viewer 来管理 3D 可视化。
    • V3d_View 是实际的 3D 视图,用于渲染对象。
  3. 创建窗口

    • 使用 WNT_Window 在 Windows 系统上创建一个窗口。对于其他系统,你可能会使用 Xw_Window 或其他适当的类。
  4. 创建交互上下文

    • 创建 AIS_InteractiveContext 来管理视图器中的交互对象。
  5. 定义点并创建线

    • 使用 Geom_CartesianPoint 定义两个点。
    • 使用这些点创建 AIS_Line 对象。
  6. 设置线条属性

    • 使用 SetColorSetWidth 自定义线条的外观。
  7. 显示线条

    • 使用 Display 方法在交互上下文中显示线条。
  8. 调整和更新视图

    • 使用 FitAll 方法确保视图调整以显示所有对象。
  9. 事件循环

    • 需要一个事件循环来处理 GUI 事件并根据需要重绘视图。实际实现取决于你的 GUI 框架。

关键点

  • AIS_Line:表示有限和无限线条,可以通过颜色和线宽进行自定义。
  • 交互上下文:用于管理和显示像 AIS_Line 这样的交互对象。
  • GUI 框架:将 OpenCASCADE 集成到 GUI 框架(如 Qt 或 MFC)中需要调整事件循环以正确处理窗口事件。

这个示例展示了如何使用 AIS_Line 在 3D 视图中可视化线条,并且可以根据需要进一步自定义和互动。

参考
参考

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

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

相关文章

读数据湖仓03不同类型的数据

不同类型的数据1. 结构化数据 1.1. 结构化数据是数据湖仓中最常见的基础数据之一1.1.1. 是技术领域中最早出现的数据环境之一1.2. 每条记录的结构都是相同的,即便不同记录中的内容可能不同,但数据的基本布局完全一样 1.3. 结构化数据环境都经过了优化,计算机能以最优的方式处…

重命名工具 Bulk Rename Utility v4.0.0.0 中文版

​重命名工具 Bulk Rename Utility v4.0.0.0 中文版 下载地址;https://pan.quark.cn/s/67fba8bda394 介绍 当发现做一件事情,原本用工具或软件进行批量处理也能达到相同效果,可却花了数倍的时间去处理的时候,会很讨厌自己的愚蠢。当你在电脑上做某个操作时,如果觉得可能会…

开源免费 PDF 工具集 | Stirling-PDF v0.29.0

开源免费 PDF 工具集 | Stirling-PDF v0.29.0 下载地址:https://pan.quark.cn/s/f02c1b332928 介绍 这是一款使用 Docker 的基于本地托管网络的强大 PDF 操作工具。它能让你在 PDF 文件上执行各种操作,包括分割、合并、转换、重组、添加图像、旋转、压缩等。这款本地托管的网络…

jenkins--为普通用户授予指定job权限

安装Role-based Authorization Strategy 插件 我们采用RBAC 基于角色的方式进行授权,需要在jenkins上安装插件,在Jenkins的Manage Jenkins→Plugins→Available Plugins 中安装之后在Jenkins的Manage Jenkins→Security 中开启基于角色的权限策略。然后在jenkins的配置栏里就…

【CodeForces训练记录】Codeforces Round 976 (Div. 2) and Divide By Zero 9.0

https://codeforces.com/contest/2020赛后反思 没有捏,尽力了 A题 给定 \(n,k\) 每次都可以将 \(n\) 减去 \(k\) 的任意次方,想要次数最少,我们显然使用贪心,每次尽可能减去最大,但我们倒过来想,\(k^{x_1}+k^{x_2}+k^{x_3} \cdots = n\) 这东东不就是将 \(n\) 转成 \(k\)…

RocketMQ Offset管理

## Offset管理 ### 1. **Offset 的定义** - **Offset** 表示某个消息在消息队列中的位置。通过 `Offset`,可以准确地找到该消息或者从这个位置开始继续消费消息。- **maxOffset** 表示消息队列中的最大偏移量,是最新消息的 `Offset + 1`。- **minOffset** 是当前消息队列中的…

随书光盘下载使用方法

https://zhujiang.tjufe.edu.cn/tsg/2023/0620/c146a23515/page.htm随书光盘下载使用方法发布时间:2023-06-20浏览次数:3053一、网址访问 1.进入访问链接http://discx.yuntu.io,打开联图云光盘页面(需连接校园网)。 2.在搜索栏输入要搜索的图书isbn或书名。 3.在线使用光…

加入极限科技(INFINI Labs),成为搜索运维工程师!

我们是国内搜索型数据库产品厂商第一梯队的杰出代表,随着业务的快速发展,现开放岗位:搜索运维工程师( Elasticsearch/Easysearch ),如果有兴趣,请直接拉到文末,扫描二维码或将简历投递至 hello@infini.ltd。 如果您还不了解 极限科技(INFINI Labs)是谁,在做什么,需…