opencascade AIS_MouseGesture AIS_MultipleConnectedInteractive源码学习

AIS_MouseGesture

//! 鼠标手势 - 同一时刻只能激活一个。  
enum AIS_MouseGesture  
{  AIS_MouseGesture_NONE,            //!< 无激活手势  //  AIS_MouseGesture_SelectRectangle, //!< 矩形选择;  //!  按下按钮开始,移动鼠标定义矩形,释放完成  AIS_MouseGesture_SelectLasso,     //!< 多边形选择;  //!  按下按钮开始,移动鼠标定义多边形路径,释放完成  //  AIS_MouseGesture_Zoom,            //!< 视图缩放手势;  //!  向左移动鼠标缩小,向右移动鼠标放大  AIS_MouseGesture_ZoomWindow,      //!< 通过窗口缩放视图手势;  //!  按下按钮开始,移动鼠标定义矩形,释放完成  AIS_MouseGesture_Pan,             //!< 视图平移手势  AIS_MouseGesture_RotateOrbit,     //!< 轨道旋转手势  AIS_MouseGesture_RotateView,      //!< 视图旋转手势  AIS_MouseGesture_Drag,            //!< 对象拖拽;  //!  按下按钮开始,移动鼠标定义矩形,释放完成  
};  

//! 定义鼠标手势的映射。
typedef NCollection_DataMap<unsigned int, AIS_MouseGesture> AIS_MouseGestureMap;
typedef NCollection_DataMap<unsigned int, AIS_SelectionScheme> AIS_MouseSelectionSchemeMap;

AIS_MultipleConnectedInteractive

前言

通过汇集多个对象表示来定义一个交互对象。
这是通过交互对象列表来实现的。
这些也可以是连接的对象。
这样就可以避免进行耗时的表示计算。
在这里插入图片描述

方法

1

空构造函数。
Standard_EXPORT AIS_MultipleConnectedInteractive();

2

析构函数。
Standard_EXPORT virtual ~AIS_MultipleConnectedInteractive();

3

设置回调函数,用于在队列进度时调用(例如,当需要显示新帧时)。
void SetCallback (Graphic3d_MediaTextureSet::CallbackOnUpdate_t theCallbackFunction, void* theCallbackUserPtr)
{
myFramePair->SetCallback (theCallbackFunction, theCallbackUserPtr);
}

4

打开指定文件。
Standard_EXPORT void OpenInput (const TCollection_AsciiString& thePath,
Standard_Boolean theToWait);

5

显示新帧。
Standard_EXPORT bool PresentFrame (const Graphic3d_Vec2i& theLeftCorner,
const Graphic3d_Vec2i& theMaxSize);

6

返回播放器上下文。
const Handle(Media_PlayerContext)& PlayerContext() const { return myFramePair->PlayerContext(); }

7

切换播放状态。
Standard_EXPORT void PlayPause();

8

安排关闭播放器。
void SetClosePlayer()
{
myToClosePlayer = true;
myFramePair->Notify();
}

9

返回持续时间。
double Duration() const { return myFramePair->Duration(); }

//! @name AIS_InteractiveObject 接口
protected:

10

仅接受显示模式0。
virtual Standard_Boolean AcceptDisplayMode (const Standard_Integer theMode) const Standard_OVERRIDE { return theMode == 0; }

11

计算演示文稿。
Standard_EXPORT virtual void Compute (const Handle(PrsMgr_PresentationManager)& thePrsMgr,
const Handle(Prs3d_Presentation)& thePrs,
const Standard_Integer theMode) Standard_OVERRIDE;

12

计算选择。
Standard_EXPORT virtual void ComputeSelection (const Handle(SelectMgr_Selection)& theSel,
const Standard_Integer theMode) Standard_OVERRIDE;

protected:

13

更新帧大小。
Standard_EXPORT bool updateSize (const Graphic3d_Vec2i& theLeftCorner,
const Graphic3d_Vec2i& theMaxSize);

示例

AIS_MultipleConnectedInteractive 是 OpenCascade 中用于表示与多个其他交互对象连接的交互对象。它允许在同一对象中显示和操作多个相关联的几何对象。以下是 AIS_MultipleConnectedInteractive 的用法示例:

1. 包含必要的头文件

首先,确保在代码中包含必要的 OpenCascade 头文件:

#include <AIS_MultipleConnectedInteractive.hxx>
#include <AIS_InteractiveContext.hxx>
#include <AIS_Shape.hxx>
#include <BRepPrimAPI_MakeBox.hxx>
#include <V3d_View.hxx>
#include <TopLoc_Location.hxx>

2. 创建几何对象和上下文

创建一些几何对象,并初始化一个 AIS_InteractiveContext

Handle(V3d_Viewer) viewer = ...; // 已初始化的视图器
Handle(AIS_InteractiveContext) context = new AIS_InteractiveContext(viewer);// 创建两个几何对象
TopoDS_Shape box1 = BRepPrimAPI_MakeBox(100.0, 100.0, 100.0).Shape();
TopoDS_Shape box2 = BRepPrimAPI_MakeBox(50.0, 50.0, 50.0).Shape();Handle(AIS_Shape) aisBox1 = new AIS_Shape(box1);
Handle(AIS_Shape) aisBox2 = new AIS_Shape(box2);// 显示几何对象
context->Display(aisBox1, Standard_True);
context->Display(aisBox2, Standard_True);

3. 创建 AIS_MultipleConnectedInteractive

创建一个 AIS_MultipleConnectedInteractive 对象,并将其连接到多个几何对象:

Handle(AIS_MultipleConnectedInteractive) multiConnInteractive = new AIS_MultipleConnectedInteractive();// 将第一个几何对象连接到多连接交互对象
multiConnInteractive->Connect(aisBox1, aisBox1->LocalTransformationGeom(), aisBox1->TransformPersistence());// 将第二个几何对象连接到多连接交互对象
multiConnInteractive->Connect(aisBox2, aisBox2->LocalTransformationGeom(), aisBox2->TransformPersistence());// 显示多连接交互对象
context->Display(multiConnInteractive, Standard_True);

4. 操作多连接交互对象

你可以通过 AIS_InteractiveContext 操作多连接交互对象,例如旋转、平移等:

// 平移多连接交互对象
gp_Trsf translation;
translation.SetTranslation(gp_Vec(10.0, 0.0, 0.0));
multiConnInteractive->SetLocalTransformation(translation);
context->Redisplay(multiConnInteractive, Standard_True);// 旋转多连接交互对象
gp_Trsf rotation;
rotation.SetRotation(gp::OX(), M_PI / 4);
multiConnInteractive->SetLocalTransformation(rotation);
context->Redisplay(multiConnInteractive, Standard_True);

5. 处理鼠标事件

你可以处理鼠标事件来交互式操作多连接对象:

void OnMouseClick(const Handle(V3d_View)& aView, Standard_Integer x, Standard_Integer y) {context->MoveTo(x, y, aView);if (context->HasDetected()) {Handle(AIS_InteractiveObject) detectedObj = context->DetectedInteractive();if (!detectedObj.IsNull() && detectedObj == multiConnInteractive) {// 选中了多连接交互对象context->StartTransformation(aView, x, y);}}
}

总结

AIS_MultipleConnectedInteractive 是一个强大的工具,可以帮助用户管理和显示多个相关联的几何对象。通过设置适当的变换矩阵,可以实现对多个对象的各种操作,从而极大地增强了用户的交互体验。如果需要更详细的示例和高级用法,建议查阅 OpenCascade 的官方文档和示例代码。
参考

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

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

相关文章

分布式相关理论详解

目录 1.绪论 2.什么是分布式系统&#xff0c;和集群的区别 3.CAP理论 3.1 什么是CAP理论 3.2 一致性 3.2.1 计算机的一致性说明 1.事务中的一致性 2.并发场景下的一致性 3.分布式场景下的一致性 3.2.2 一致性分类 3.2.3 强一致性 1.线性一致性 a) 定义 a) Raft算法…

跟李沐学AI:池化层

目录 二维最大池化 填充、步幅和多个通道 平均池化层 池化层总结 二维最大池化 返回滑动窗口中的最大值。 图为池化窗口形状为 22 的最大池化层。着色部分是第一个输出元素&#xff0c;以及用于计算这个输出的输入元素: max(0,1,3,4)4。池化层与卷积层类似&#xff0c;不断…

职业本科专业群的生成机制研究

一、引言 随着我国经济结构的持续优化升级和职业教育体系的不断深化&#xff0c;职业本科教育作为连接高等教育与职业技能培养的桥梁&#xff0c;其专业群构建已成为提升教育质量与服务产业升级的关键。本文基于知识整合的视角&#xff0c;采用案例分析法&#xff0c;从生成决…

自定义协议(应用层协议)——网络版计算机基于TCP传输协议

应用层&#xff1a;自定义网络协议&#xff1a;序列化和反序列化&#xff0c;如果是TCP传输的&#xff1a;还要关心区分报文边界&#xff08;在序列化设计的时候设计好&#xff09;——粘包问题 1、首先想要使用TCP协议传输的网络&#xff0c;服务器和客户端都应该要创建自己…

Pytorch使用教学8-张量的科学运算

在介绍完PyTorch中的广播运算后&#xff0c;继续为大家介绍PyTorch的内置数学运算&#xff1a; 首先对内置函数有一个功能印象&#xff0c;知道它的存在&#xff0c;使用时再查具体怎么用其次&#xff0c;我还会介绍PyTorch科学运算的注意事项与一些实用小技巧 1 基本数学运算…

wpf中轮询显示图片

本文的需求是&#xff0c;在一个文件夹中&#xff0c;放一堆图片的集合&#xff0c;然后在wpf程序中&#xff0c;按照定时的方式&#xff0c;循序显示照片。 全部代码 1.声明一个PictureInfo类 namespace WpfApp1 {public class PictureInfo{public string? FileName { get; …

【网络安全学习】 SQL注入01:基础知识

&#x1f4bb; 1. 什么是SQL注入 SQL注入是一种针对Web程序中数据库层的安全漏洞的攻击方式。它利用了程序对用户输入数据合法性的判断或过滤不严&#xff0c;允许攻击者在设计不良的程序中添加额外的SQL语句&#xff0c;从而执行计划外的命令或访问未授权的数据。攻击者可以通…

视觉SLAM第一讲

第一讲-预备知识 SLAM是什么&#xff1f; SLAM&#xff08;Simultaneous Localization and Mapping&#xff09;是同时定位与地图构建。 它是指搭载特定传感器的主体&#xff0c;在没有环境先验信息的情况下&#xff0c;于运动过程中建立环境的模型&#xff0c;同时估计自己…

Chapter 16 Python文件操作(上)

欢迎大家订阅【Python从入门到精通】专栏&#xff0c;一起探索Python的无限可能&#xff01; 文章目录 前言一、文件的编码二、文件的读取1.打开文件2.读取文件3.关闭文件 前言 Python作为一种高效且易于学习的编程语言&#xff0c;提供了一系列强大的文件操作功能&#xff0c…

C++STL详解(五)——list类的接口详解

一.list的介绍 list容器的底层是双向循环带头链表&#xff0c;在CPP中&#xff0c;我们对双向循环带头链表进行了一定程度的封装。 如果你不了解双向链表&#xff0c;那么可以浏览此片博文&#xff1a;双向链表 二.list的定义方式以及赋值 2.1list的构造方式 在这里我们要…

idea中如何创建yml、yaml、properties配置文件

目录 1、配置文件 2、创建yml配置文件 3、配置文件的优先级 1、配置文件 我们一直使用springboot项目创建完毕后自带的application.properties进行属性的配置&#xff0c;那其实呢&#xff0c;在springboot项目当中是支持多种配置方式的&#xff0c;除了支持properties配置文件…

华为od机试真题:考勤信息(Python)

题目描述 公司用一个字符串来表示员工的出勤信息 absent:缺勒late: 迟到leaveearly: 早退present: 正常上班 现需根据员工出勤信息&#xff0c;判断本次是否能获得出勤奖&#xff0c;能获得出勤奖的条件如下: 缺勤不超过一次&#xff0c;没有连续的迟到/早退:任意连续7次考…

计算机二级刷题(讲+练)

【拯救者】二级C语言历届真题解析(二级期末升本均适用) 前提: 学过C语言, 想要速成可以看我的C语言课程 3套真题 赠送1套预测题(带解析)

【SOC 芯片设计 DFT 学习专栏 -- DFT DRC规则检查】

请阅读【嵌入式及芯片开发学必备专栏】 请阅读【芯片设计 DFT 学习系列 】 如有侵权&#xff0c;请联系删除 转自&#xff1a; 芯爵ChipLord 2024年07月10日 12:00 浙江 文章目录 概述DRC的概念Tessent DRC检查的概述时钟相关检查扫描相关检查BIST规则检查预DFT时钟规则检查 …

基于Vue开发的前端系统中寻找后端API及其参数

前言 在日常渗透工作中&#xff0c;常常遇到后台系统&#xff0c;且有相当一部分是自研开发的系统&#xff0c;没有源代码&#xff0c;没有弱口令漏洞&#xff0c;也没有swagger、webpack泄露等。幸运的是&#xff0c;这些系统几乎都是前后端分离的架构&#xff0c;而我发现使…

【OpenCV C++20 学习笔记】调节图片对比度和亮度(像素变换)

调节图片对比度和亮度&#xff08;像素变换&#xff09; 原理像素变换亮度和对比度调整 代码实现更简便的方法结果展示 γ \gamma γ校正及其实操案例线性变换的缺点 γ \gamma γ校正低曝光图片矫正案例代码实现 原理 关于OpenCV的配置和基础用法&#xff0c;请参阅本专栏的其…

视频号矩阵系统,AI自动生成文案,实现批量上传视频和定时发布

在数字化浪潮席卷全球的今天&#xff0c;视频内容已成为信息传播的重要载体。然而&#xff0c;对于众多自媒体创作者和企业而言&#xff0c;如何高效、精准地发布视频内容&#xff0c;依然是一个不小的挑战。幸运的是&#xff0c;随着技术的不断进步&#xff0c;视频号矩阵系统…

0725,进程间传递文件描述符,socketpair + sendmsg/recvmsg

我要碎掉了我要碎掉了我要碎掉了 上课喵&#xff1a; pipe匿名管道的问题 #include <func.h>int main() {int fds[2];pipe(fds);pid_t pidfork();if(pid>0){ //fatherclose(fds[0]);//close readint fdopen("file2.txt",O_RDONLY);printf("father: …

Idea2024 创建Meaven项目没有src文件夹

1、直接创建 新建maven项目&#xff0c;发现没有src/main/java 直接新建文件夹&#xff1a;右击项目名->new->Directory 可以看到idea给出了快捷创建文件夹的选项&#xff0c;可以根据需要创建&#xff0c;这里点击src/main/java 回车&#xff0c;可以看到文件夹已经创建…

用户管理与高级SQL语句(数据库管理与高可用)

1.表&#xff08;Table &#xff09; 数据库中的表与我们日常生活中使用的表格类似&#xff0c;它也是由行&#xff08;Row&#xff09; 和列&#xff08;Column&#xff09;组成的。列由同类的信息组成&#xff0c;每列又称为一个字段&#xff0c;每列的标题称为字段名。行包…