当前位置: 首页 > news >正文

opencascade AIS_Line源码学习直线节点

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 视图中可视化线条,并且可以根据需要进一步自定义和互动。

参考

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 前端响应式布局解决方案分享
  • One-hot编码
  • 2024视频编辑网站微服务
  • android13去掉安全模式 删除安全模式
  • kafka 将log4j的项目升级到log4j2
  • 把外部资源利用到极致 如何利用大公司的dll插件 大公司的应用有大量的dll 还有windows系统dll
  • java自定义日志注解
  • 计算机毕业设计Django+Vue.js考研推荐系统 考研分数线预测 中公考研爬虫 混合神经网络推荐算法 考研可视化 机器学习 深度学习 大数据毕业设计
  • 热力学计算网站使用推荐,Thermo-Calc!
  • Qt QTableWidget 去除序号列
  • 将tsx引入vue
  • JavaScript 逆向技巧总结
  • 进程信号的产生与处理
  • C语言编译和链接超详解
  • 【卡梅德生物】鼠单B细胞筛选技术及其在鼠单抗生产中的应用
  • @angular/forms 源码解析之双向绑定
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • CSS3 变换
  • javascript 总结(常用工具类的封装)
  • python 学习笔记 - Queue Pipes,进程间通讯
  • 搞机器学习要哪些技能
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 设计模式走一遍---观察者模式
  • 深度学习在携程攻略社区的应用
  • 深入浏览器事件循环的本质
  • 为什么要用IPython/Jupyter?
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • 阿里云API、SDK和CLI应用实践方案
  • 翻译 | The Principles of OOD 面向对象设计原则
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • ​520就是要宠粉,你的心头书我买单
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • ​马来语翻译中文去哪比较好?
  • # 利刃出鞘_Tomcat 核心原理解析(二)
  • #define
  • #VERDI# 关于如何查看FSM状态机的方法
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (NSDate) 时间 (time )比较
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (vue)el-tabs选中最后一项后更新数据后无法展开
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (四)库存超卖案例实战——优化redis分布式锁
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • ./configure、make、make install 命令
  • .gitignore不生效的解决方案
  • .NET 分布式技术比较
  • .NET 跨平台图形库 SkiaSharp 基础应用
  • .NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖
  • .net 受管制代码
  • .NET/C# 使用反射调用含 ref 或 out 参数的方法
  • .net实现头像缩放截取功能 -----转载自accp教程网