opencascade AIS_MouseGesture AIS_MultipleConnectedInteractive源码学习

AIS_MouseGesture

cpp 复制代码
//! 鼠标手势 - 同一时刻只能激活一个。  
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 头文件:

cpp 复制代码
#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

cpp 复制代码
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 对象,并将其连接到多个几何对象:

cpp 复制代码
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 操作多连接交互对象,例如旋转、平移等:

cpp 复制代码
// 平移多连接交互对象
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. 处理鼠标事件

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

cpp 复制代码
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 的官方文档和示例代码。
参考

相关推荐
我要吐泡泡了哦18 分钟前
GAMES104:15 游戏引擎的玩法系统基础-学习笔记
笔记·学习·游戏引擎
骑鱼过海的猫12318 分钟前
【tomcat】tomcat学习笔记
笔记·学习·tomcat
贾saisai2 小时前
Xilinx系FPGA学习笔记(九)DDR3学习
笔记·学习·fpga开发
北岛寒沫2 小时前
JavaScript(JS)学习笔记 1(简单介绍 注释和输入输出语句 变量 数据类型 运算符 流程控制 数组)
javascript·笔记·学习
铁匠匠匠4 小时前
从零开始学数据结构系列之第六章《排序简介》
c语言·数据结构·经验分享·笔记·学习·开源·课程设计
架构文摘JGWZ5 小时前
Java 23 的12 个新特性!!
java·开发语言·学习
小齿轮lsl5 小时前
PFC理论基础与Matlab仿真模型学习笔记(1)--PFC电路概述
笔记·学习·matlab
Aic山鱼6 小时前
【如何高效学习数据结构:构建编程的坚实基石】
数据结构·学习·算法
qq11561487076 小时前
Java学习第八天
学习
天玑y6 小时前
算法设计与分析(背包问题
c++·经验分享·笔记·学习·算法·leetcode·蓝桥杯