opencascade AIS_Trihedron源码学习 绘制三轴坐标系
opencascade AIS_Trihedron
前言
//! 创建一个可选择的三轴坐标系
//! 该三轴坐标系包括一个原点,三个轴线和三个标签。
//! 标签的默认文本为 “X”, “Y”, “Z”。
//! 可以更改原点和任意轴线的颜色,箭头和标签的颜色也可以改变。
//! 可视化呈现可能显示为两种模式:着色模式和线框模式(默认为线框模式)。
//! 有四种选择模式:
//! - AIS_TrihedronSelectionMode_EntireObject 完整选择三轴坐标系,优先级 = 1
//! - AIS_TrihedronSelectionMode_Origin 选择其原点,优先级 = 5
//! - AIS_TrihedronSelectionMode_Axes 选择其轴线,优先级 = 3
//! - AIS_TrihedronSelectionMode_MainPlanes 选择其主平面,优先级 = 2
//!
//! 警告!
//! 用于显示三轴坐标系的默认长度单位是毫米,
//! 而轴线的默认表示值为100。
//! 如果您修改了这些尺寸,必须暂时恢复 Drawer。
//! 在其中,您可以取得存储长度值的 Aspect。
//! 对于三轴坐标系,这是 Prs3d_Drawer_LineAspect。
//! 您可以在此 Aspect 内部更改数值,然后重新计算显示。
方法
1
初始化三轴坐标系实体。
Standard_EXPORT AIS_Trihedron (const Handle(Geom_Axis2Placement)& theComponent);
2
返回数据显示模式。
Prs3d_DatumMode DatumDisplayMode() const { return myTrihDispMode; }
3
设置着色或线框显示模式,相对使用三角形或线段图形组。
void SetDatumDisplayMode (Prs3d_DatumMode theMode) { myTrihDispMode = theMode; }
4
返回在 SetComponent 中设置的右手坐标系。
const Handle(Geom_Axis2Placement)& Component() const { return myComponent; }
5
构造右手坐标系 aComponent。
Standard_EXPORT void SetComponent (const Handle(Geom_Axis2Placement)& theComponent);
6
如果三轴坐标系对象具有非默认大小(每个轴线默认大小为100毫米),则返回 true。
Standard_Boolean HasOwnSize() const { return myHasOwnSize; }
7
返回三轴坐标系对象的大小;默认为100.0。
Standard_EXPORT Standard_Real Size() const;
8
设置三轴坐标系对象的大小。
Standard_EXPORT void SetSize (const Standard_Real theValue);
9
如果对象具有单一颜色,则复制绘制器的默认大小;否则,DatumAspect 变为空。
Standard_EXPORT void UnsetSize();
10
如果三轴坐标系具有自定义文本颜色,则返回 true。
Standard_Boolean HasTextColor() const { return myHasOwnTextColor; }
11
返回三轴坐标系文本颜色。
Standard_EXPORT Quantity_Color TextColor() const;
12
设置三轴坐标系轴线标签的颜色。
Standard_EXPORT void SetTextColor (const Quantity_Color& theColor);
13
设置三轴坐标系轴线标签的颜色。
Standard_EXPORT void SetTextColor (const Prs3d_DatumParts thePart,
const Quantity_Color& theColor);
14
如果三轴坐标系具有自定义箭头颜色,则返回 true。
Standard_Boolean HasArrowColor() const { return myHasOwnArrowColor; }
15
返回三轴坐标系箭头颜色。
Standard_EXPORT Quantity_Color ArrowColor() const;
16
设置三轴坐标系箭头颜色。
Standard_EXPORT void SetArrowColor (const Quantity_Color& theColor);
17
设置三轴坐标系箭头颜色。
Standard_EXPORT void SetArrowColor (const Prs3d_DatumParts thePart,
const Quantity_Color& theColor);
18
返回数据部分的颜色:原点或三轴坐标系的某些部分。
Standard_EXPORT Quantity_Color DatumPartColor (Prs3d_DatumParts thePart);
19
设置数据部分的颜色:原点或三轴坐标系的某些部分。
20
如果显示模式为着色模式,则此颜色设置为正反面的颜色。
Standard_EXPORT void SetDatumPartColor (const Prs3d_DatumParts thePart,
const Quantity_Color& theColor);
21
设置原点的颜色。
void SetOriginColor (const Quantity_Color& theColor);
22
//! 设置x轴的颜色。
void SetXAxisColor (const Quantity_Color& theColor);
23
设置y轴的颜色。
void SetYAxisColor (const Quantity_Color& theColor);
24
设置z轴的颜色。
void SetAxisColor (const Quantity_Color& theColor);
25
//! 如果要绘制箭头,则返回 true。
Standard_Boolean ToDrawArrows() const;
26
//! 设置是否在可视化中绘制箭头。
void SetDrawArrows (const Standard_Boolean theToDraw);
27
//! 返回给定类型所有者的选择优先级。
Standard_Integer SelectionPriority (Prs3d_DatumParts thePart) { return mySelectionPriority[thePart]; }
28
//! 设置给定类型所有者的选择优先级。
void SetSelectionPriority (Prs3d_DatumParts thePart,
Standard_Integer thePriority);
29
//! 返回轴线的文本。参数 thePart 应为 XAxis、YAxis 或 ZAxis。
const TCollection_ExtendedString& Label (Prs3d_DatumParts thePart) { return myLabels[thePart]; }
30
设置三轴坐标系轴线的文本标签。参数 thePart 应为 XAxis、YAxis 或 ZAxis。
void SetLabel (const Prs3d_DatumParts thePart,
const TCollection_ExtendedString& theName);
31
//! 设置此三轴坐标系对象的颜色 theColor,它改变轴线的颜色。
Standard_EXPORT virtual void SetColor (const Quantity_Color& theColor) Standard_OVERRIDE;
32
//! 返回是否选定的显示模式 aMode 对于三轴坐标系数据有效。
virtual Standard_Boolean AcceptDisplayMode (const Standard_Integer theMode) ;
####33
返回索引 3,选择平面 XOY、YOZ、XOZ。
Standard_Integer Signature() const { return 3; }
33
表示交互对象类型为数据。
virtual AIS_KindOfInteractive Type() const Standard_OVERRIDE { return AIS_KindOfInteractive_Datum; }
34
//! 移除颜色设置。
Standard_EXPORT virtual void UnsetColor() Standard_OVERRIDE;
35
清除属于此可选择对象的所有选定所有者(用于快速显示绘制)。
Standard_EXPORT virtual void ClearSelected() Standard_OVERRIDE;
36
绘制选定的所有者(用于快速显示绘制)。
Standard_EXPORT virtual void HilightSelected (const Handle(PrsMgr_PresentationManager)& thePM,
const SelectMgr_SequenceOfOwner& theOwners) Standard_OVERRIDE;
37
高亮显示属于此可选择对象的所有者(用于快速显示绘制)。
Standard_EXPORT virtual void HilightOwnerWithColor (const Handle(PrsMgr_PresentationManager)& thePM,
const Handle(Prs3d_Drawer)& theStyle,
使用实例
OpenCascade 中的 AIS_Trihedron
是用于绘制三轴坐标系的类,通常用于可视化工程模型中的参考坐标系。以下是一个简单的示例,展示如何创建和使用 AIS_Trihedron
:
-
包含必要的头文件
首先,需要包含相关的 OpenCascade 头文件:
#include <AIS_Trihedron.hxx> #include <Geom_Axis2Placement.hxx> #include <gp_Ax2.hxx> #include <Quantity_Color.hxx> #include <Prs3d_DatumMode.hxx> #include <Prs3d_Drawer.hxx> #include <AIS_Drawer.hxx> #include <V3d_Viewer.hxx> #include <AIS_InteractiveContext.hxx>
-
创建三轴坐标系
使用
AIS_Trihedron
类创建一个三轴坐标系对象,并设置其位置和显示选项:// 创建一个轴线的位置 gp_Ax2 anAxis(gp_Pnt(0, 0, 0), gp_Dir(0, 0, 1)); // 以原点为中心,方向为Z轴// 创建三轴坐标系对象 Handle(Geom_Axis2Placement) anAxisPlacement = new Geom_Axis2Placement(anAxis); Handle(AIS_Trihedron) aTrihedron = new AIS_Trihedron(anAxisPlacement);// 设置三轴坐标系的大小 aTrihedron->SetSize(200.0); // 设置大小为200mm// 设置三轴坐标系的显示模式为着色模式 aTrihedron->SetDatumDisplayMode(Prs3d_DM_Shaded);// 设置轴线颜色 Quantity_Color aColor(Quantity_NOC_RED); // 设置为红色 aTrihedron->SetColor(aColor);
-
将三轴坐标系添加到视图中
将创建的三轴坐标系添加到 OpenCascade 的视图中,例如
V3d_Viewer
和AIS_InteractiveContext
:// 创建一个视图 viewer Handle(V3d_Viewer) aViewer = new V3d_Viewer();// 创建交互上下文 context Handle(AIS_InteractiveContext) aContext = new AIS_InteractiveContext(aViewer);// 将三轴坐标系添加到交互上下文中 aContext->Display(aTrihedron, Standard_True);
-
处理交互操作
可以通过
AIS_InteractiveContext
处理用户交互操作,例如选择、高亮等:// 选择对象 aContext->SetSelected(aTrihedron);// 高亮显示选定的对象 aTrihedron->HilightSelected(aContext->MainPrsMgr()->PresentationManager(), aContext->SelectedOwners());
-
清除资源
在程序结束时,记得清理资源:
// 清除所有的显示对象 aContext->EraseAll();
这些步骤展示了如何使用 AIS_Trihedron
类在 OpenCascade 中创建、显示和操作三轴坐标系对象。
参考
相关文章:

opencascade AIS_Trihedron源码学习 绘制三轴坐标系
opencascade AIS_Trihedron 前言 //! 创建一个可选择的三轴坐标系 //! 该三轴坐标系包括一个原点,三个轴线和三个标签。 //! 标签的默认文本为 “X”, “Y”, “Z”。 //! 可以更改原点和任意轴线的颜色,箭头和标签的颜色也可以改变。 //! 可视化呈现可…...

【C++】C++应用案例-通讯录管理系统
目录 一、整体介绍 1.1、需求和目标 1.2、整体功能描述 二、页面及功能描述 2.1 主菜单 2.2 添加联系人菜单 2.3 显示联系人菜单 2.4 修改联系人菜单 2.5 退出功能 三、流程设计 3.1 主流程 3.2 添加操作流程 3.3 显示联系人操作流程 3.4 修改联系人操作流程 四…...
使用Python自动批量提取增值税发票信息并导出为Excel文件
要批量提取增值税发票的关键信息并将其导出为 Excel 文件,可以使用 Python 脚本结合 pdfplumber(用于解析 PDF 内容)、pandas(用于处理数据并导出 Excel)等库来实现。以下是实现这一目标的详细步骤。 1. 环境设置 首…...

vitis (eclipse) 的Indexer不能搜索、不能跳转到函数和变量定义和声明不能打开调用层次的解决方法
在使用vitis(2021.1) 过程中,有一个非常方便实用的功能,就是在函数或变量等源代码上通过右键菜单或快捷键F3、F4、CtrlAltH,也可以按住Ctrl键然后鼠标停留在函数名或变量名上,点击出现的链接,可以跳转到函数或变量的定…...

最佳HR软件指南:11款高效管理工具
文章介绍了11款人力资源管理工具:Moka、友人才、北森HRSaaS、同鑫eHR、i人事、红海eHR、BambooHR、Skuad、Hibob、OrangeHRM、Verint。 在选择人力资源管理软件时,选错不仅浪费时间和金钱,还会影响团队的工作效率和员工满意度。本文总结了11款…...
家长为孩子出国留学择校的四个步骤
如何为孩子选择最好的学校?无论您是选择公立或私立学校还是在家上学,无论您是否支付学费,都必须仔细规划。在为孩子选择学校的过程中,以下部分有供您考虑的问题。 写下对你来说最重要的五件事 在考虑选择学校时,您可…...
数据挖掘可以挖掘什么类型的模式?
一、挖掘频繁模式、关联和相关性 频繁模式(frequent pettern)是在数据中频繁出现的模式。 频繁项集一般是指频繁的在事务数据集中一起出现的商品的集合。 频繁出现的子序列,如顾客倾向于先买相机,再买内存卡这样的模式就是一个…...
JAVA中的隐式参数this
在Java中,this 关键字是一个非常重要的隐式参数,它代表当前对象的引用。通过 this,你可以访问类中的字段(属性)、方法以及构造函数中的参数(当参数名与字段名相同时,用于区分)。虽然…...
ThreadLocal 使用和详解避坑
在多线程编程中,每个线程都有自己的线程栈和线程本地存储。线程栈用于存储方法调用的信息,而线程本地存储则是每个线程私有的存储空间,用于存储线程的局部变量。ThreadLocal类提供了一种简单的方式来实现线程本地存储,它允许将线程…...
Python中使用类方法的返回值在其他方法中继续调用,return self进行链式调用
文章目录 return self进行链式调用继续思考,以下内容可以不看如果self中没有初始化valueself中定义其他变量,调用类方法外的函数 return self进行链式调用 在Python中,可以使用类方法的返回值在其他方法中继续调用。这通常通过返回类实例&am…...

基于IOT架构的数据采集监控平台!
LP-SCADA数据采集监控平台是蓝鹏测控推出的一款聚焦于工业领域的自动化数据采集监控系统, 助力数字工厂建设的统一监控平台。 为企业提供从下到上的完整的生产信息采集与集成服务,从而为企业综合自动化、工厂数字化及完整的"管控一体化”的解决方案…...
初见scikit-learn之基础教程
初见scikit-learn之基础教程 scikit-learn 基础教程 1. scikit-learn 简介1.1 什么是 scikit-learn?1.2 scikit-learn 的主要功能 2. 安装 scikit-learn2.1 安装方法2.2 验证安装 3. scikit-learn 基本使用3.1 数据加载与预处理3.1.1 加载数据集3.1.2 数据拆分3.1.3…...

基于STM32的嵌入式深度学习系统教程
目录 引言环境准备嵌入式深度学习系统基础代码实现:实现嵌入式深度学习系统 数据采集与预处理深度学习模型训练与优化模型部署与推理实时数据处理与反馈应用场景:智能物联网设备常见问题与解决方案收尾与总结 引言 随着深度学习在各种应用中的广泛采用…...

hive udf去掉map中的一个或者多个key
实现一个hive udf,可以将Map中的某一个或者多个key去掉,这里要继承GenericUDF 这个抽象类,然后Override evaluate这个函数即可,可以把执行这个udf前初始化的一些内容放在initialize方法内,比如参数的判断,函数的返回值类型等等。 代码写好之后,可以用如下方法创建这个函…...

模型量化技术综述:揭示大型语言模型压缩的前沿技术
大型语言模型(LLMs)通常因为体积过大而无法在消费级硬件上运行。这些模型可能包含数十亿个参数,通常需要配备大量显存的GPU来加速推理过程。 因此越来越多的研究致力于通过改进训练、使用适配器等方法来缩小这些模型的体积。在这一领域中&am…...

一文掌握Prompt:万能框架+优化技巧+常用指标
👉目录 1 写在前面 2 Prompt 万能框架 3 框架的细化 4 在框架上增加更多信息(RAG) 5 让大模型更好的思考(CoT) 6 附加技巧 7 优化方式及常用指标 8 写在最后 随着大模型在2023年横空出世,“Prompt 工程” 应…...
Vue 常用组件间通信方式
Vue 常用组件间通信方式 1. 父子组件通信 1.1 Props 父组件通过 props 向子组件传递数据,子组件通过 props 接收数据。 <!-- ParentComponent.vue --> <template><ChildComponent :message"parentMessage"></ChildComponent>…...

NineData云原生智能数据管理平台新功能发布|2024年7月版
本月发布 12 项更新,其中性能优化 3 项、功能优化 8 项、安全性发布 1 项。 1. 性能优化 数据复制 - SQL Server 增量性能优化 调整读取和写入方式,让 SQL Server 增量复制的性能轻松达到 5000 RPS 以上。 数据复制 - Doris|SelectDB|StarRocks 性能优…...

验收测试:确保软件符合业务需求和合同要求
目录 前言1. 验收测试的概念1.1 用户验收测试(UAT)1.2 操作验收测试(OAT) 2. 验收测试的主要作用2.1 确认业务需求的满足2.2 验证合同要求的实现2.3 提升用户信心 3. 验收测试在整个测试中的地位3.1 测试的最后一道关卡3.2 用户与…...
Qt | QChartView+QDateTimeAxis(日期和时间数据图表)+QPieSeries(饼图)
点击上方"蓝字"关注我们 01、QDateTimeAxis QDateTimeAxis 是 Qt 中用于图表的轴类,它专门用于处理日期和时间数据。这个类允许你在图表上显示和解释与日期和时间相关的数据点。例如,在 Qt 的图表库中,你可以使用 QDateTimeAxis 来创建一个时间序列图表,展示股票…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...

Linux 内存管理实战精讲:核心原理与面试常考点全解析
Linux 内存管理实战精讲:核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用,还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...

群晖NAS如何在虚拟机创建飞牛NAS
套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...
Oracle11g安装包
Oracle 11g安装包 适用于windows系统,64位 下载路径 oracle 11g 安装包...