opencascade AIS_ManipulatorOwner AIS_MediaPlayer源码学习

前言

AIS_ManipulatorOwner是OpenCascade中的一个类,主要用于操纵对象的交互控制。AIS_ManipulatorOwner结合AIS_Manipulator类,允许用户通过可视化工具(如旋转、平移、缩放等)来操纵几何对象。

以下是AIS_ManipulatorOwner的基本用法介绍:

1. 包含必要的头文件

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

cpp 复制代码
#include <AIS_ManipulatorOwner.hxx>
#include <AIS_InteractiveContext.hxx>
#include <AIS_Shape.hxx>
#include <AIS_Manipulator.hxx>
#include <TopoDS_Shape.hxx>
#include <BRepPrimAPI_MakeBox.hxx>
#include <V3d_View.hxx>

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

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

cpp 复制代码
Handle(AIS_InteractiveContext) context = ...; // 已初始化的交互上下文
TopoDS_Shape aShape = BRepPrimAPI_MakeBox(100.0, 100.0, 100.0).Shape();
Handle(AIS_Shape) aShapeAIS = new AIS_Shape(aShape);
context->Display(aShapeAIS, Standard_True);

3. 创建和设置Manipulator

创建一个Manipulator,并将其与几何对象关联:

cpp 复制代码
Handle(AIS_Manipulator) aManipulator = new AIS_Manipulator();
aManipulator->SetComponent(aShapeAIS);
context->Display(aManipulator, Standard_True);

4. 创建ManipulatorOwner

创建一个AIS_ManipulatorOwner,并将其与Manipulator关联:

cpp 复制代码
Handle(AIS_ManipulatorOwner) aManipulatorOwner = new AIS_ManipulatorOwner(aManipulator, context);

5. 操纵几何对象

通过ManipulatorOwner,可以对几何对象进行旋转、平移和缩放等操作。例如:

cpp 复制代码
gp_Trsf transformation;
transformation.SetTranslation(gp_Vec(10.0, 0.0, 0.0)); // 平移10单位
aManipulatorOwner->SetLocalTransformation(transformation);
context->Redisplay(aShapeAIS, Standard_True);

6. 交互操作

用户可以通过鼠标操作与几何对象进行交互。AIS_InteractiveContext提供了许多方法来处理鼠标事件并相应地更新几何对象的位置。

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 == aShapeAIS) {
            // 选中了几何对象
            context->StartTransformation(aView, x, y);
        }
    }
}

总结

AIS_ManipulatorOwner是一个强大的工具,可以帮助用户通过图形界面与几何对象进行交互。通过设置适当的变换矩阵,可以实现对对象的各种操作,从而极大地增强了用户的交互体验。

AIS_MediaPlayer

视频播放演示。

方法

1

空构造函数。

Standard_EXPORT AIS_MediaPlayer();

2

析构函数。

Standard_EXPORT virtual ~AIS_MediaPlayer();

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;

13

更新帧大小。

Standard_EXPORT bool updateSize (const Graphic3d_Vec2i& theLeftCorner,

const Graphic3d_Vec2i& theMaxSize);

参考

相关推荐
Duck Bro11 分钟前
数据结构:顺序表(动态顺序表)
c语言·数据结构·c++·学习·算法
·云扬·12 分钟前
Lambda 表达式详解
java·开发语言·笔记·学习·1024程序员节
再不会python就不礼貌了29 分钟前
Ollama 0.4 发布!支持 Llama 3.2 Vision,实现多模态 RAG
人工智能·学习·机器学习·ai·开源·产品经理·llama
dal118网工任子仪2 小时前
web安全漏洞之命令注入
笔记·学习·安全·web安全·网络安全
五味香3 小时前
Linux命令学习,git命令
linux·c语言·开发语言·c++·git·学习·算法
邂逅you3 小时前
深度优先搜索之全排列问题(C语言版)
c语言·数据结构·学习·算法·贪心算法·深度优先
小黑子不会打篮球3 小时前
记一次文件包含刷题(伪协议篇)
网络协议·学习·web安全
何作欢3 小时前
day04 vue学习
javascript·vue.js·学习
埋头编程~3 小时前
【C++】踏上C++学习之旅(五):auto、范围for以及nullptr的精彩时刻(C++11)
java·c++·学习
hengzhepa4 小时前
ElasticSearch备考 -- 集群配置常见问题
运维·学习·elasticsearch·搜索引擎·es