opencascade AIS_AnimationObject AIS_BaseAnimationObject 源码学习 7.8新增

本文介绍了AIS_Axis类在3D空间中定位坐标轴和构建旋转体的应用,以及AIS_AnimationObject用于3D对象动画的功能,包括设置动画属性、更新视图和控制动画播放。
摘要由CSDN通过智能技术生成

类AIS_Axis

在这里插入图片描述

在交互式对象中定位 x、y 和 z 轴。这些轴用于在从不同视角展示的演示中正确地定向对象,或者用于从其中一个轴构建旋转形状,例如。相反地,可以创建一个轴来构建旋转形状,然后将其相对于视图的一个轴进行定位。
AIS_Axis类通常用于以下目的:

显示坐标轴:在3D视图中显示x、y和z坐标轴,以便用户能够直观地理解模型的方向和比例。
作为参考:在创建或编辑模型时,可以使用AIS_Axis作为参考,以确保对象的方向和位置是正确的。
构建旋转体:可以使用AIS_Axis来表示旋转体的旋转轴,例如圆柱体或圆锥体的中心轴。

构造 AIS_Axis (const Handle< Geom_Line > &aComponent)

用法:

构造 AIS_Axis (const Handle< Geom_Axis2Placement > &aComponent, const AIS_TypeOfAxis anAxisType)

用法:

构造 AIS_Axis (const Handle< Geom_Axis1Placement > &anAxis)

用法:

构造 AIS_Axis (const gp_Ax1 &theAxis, const Standard_Real theLength=-1)

方法:Component

用法:

方法:SetComponent

用法:

方法:Axis2Placement

用法:

方法:SetAxis2Placement

用法:

方法:TypeOfAxis

用法:

方法:SetTypeOfAxis

用法:

方法:IsXYZAxis

用法:

方法:AcceptDisplayMode

用法:

方法:Signature

用法:

方法:Type

用法:

方法:SetColor

用法:

方法:SetWidth

用法:

方法:SetDisplayAspect

用法:

方法:UnsetColor

用法:

方法:UnsetWidth

用法:

示例

#include <AIS_Axis.hxx>  
#include <AIS_InteractiveContext.hxx>  
#include <V3d_View.hxx>  
#include <Graphic3d_GraphicDriver.hxx>  
  
int main()  
{  
    // 初始化图形驱动和视图  
    Handle(Graphic3d_GraphicDriver) aDriver = new Graphic3d_WNTDriver(NULL, 1, 1);  
    Handle(V3d_View) aView = new V3d_View(aDriver, Standard_ExtString("My View"));  
  
    // 初始化交互式上下文  
    Handle(AIS_InteractiveContext) aContext = new AIS_InteractiveContext(aView);  
  
    // 创建一个AIS_Axis对象  
    // 这里我们创建一个从原点开始,沿Z轴方向,长度为100的轴  
    gp_Pnt origin(0.0, 0.0, 0.0); // 轴的起点  
    gp_Dir direction(0.0, 0.0, 1.0); // 轴的方向  
    Standard_Real length = 100.0; // 轴的长度  
    Handle(AIS_Axis) anAxis = new AIS_Axis(origin, direction, length);  
  
    // 将轴添加到交互式上下文中  
    aContext->Display(anAxis, Standard_True);  
  
    // 这里可以添加其他对象,进行用户交互等...  
  
    // 启动视图的事件循环(通常在一个图形用户界面中)  
    // 注意:这只是一个示例,实际的应用中你可能需要一个更复杂的事件循环  
    // aView->MustBeResized();  
    // aView->SetProjection(V3d_VP_XZ);  
    // aView->FitAll();  
    // aDriver->DisplayView(aView);  
    // ...  
  
    // 在实际应用中,你可能还需要处理窗口关闭等事件  
  
    return 0;  
}

AIS_AnimationObject.

前言:

AIS_AnimationObject是用于处理对象(通常是3D模型)动画的类。这个类提供了在3D视图中平滑地改变对象位置、方向或其他属性的功能。

与AIS_AnimationCamera类似,AIS_AnimationObject也允许你设置动画的持续时间、起始和结束状态等属性。然而,与相机动画不同,对象动画直接涉及到模型或场景中的3D对象。

方法:invalidateViewer

用法:是使视图(viewer)无效化,以触发其进行正确的更新。
这通常意味着你需要执行某些操作来确保视图(也就是用户看到的3D场景)能够反映出最近对场景或视图设置所做的更改。

在OCCT中,当你修改了3D场景中的对象、相机或其他属性,并希望这些更改能够立即在视图上反映出来时,你可能需要“使视图无效化”来强制视图进行重绘或刷新。这通常是通过调用与视图或上下文相关的更新方法来实现的,而不是直接“使视图无效化”作为一个单独的函数调用。

例如,你可以使用AIS_InteractiveContext的Display方法或类似的方法来强制视图进行更新。这将导致视图重新绘制其内容,从而反映任何最近的更改。

方法:update

用法:更新视图

示例:

以下是一个简化的概念框架,展示了如何使用

1:初始化:

首先,你需要有一个AIS_InteractiveContext实例和一个或多个3D对象(这些对象可能是通过其他OCCT类创建的,如TopoDS_Shape)。

2:创建动画对象:

创建一个AIS_AnimationObject的实例,并将其与你要动画化的对象相关联。

3:设置动画属性:

使用AIS_AnimationObject的方法设置动画的持续时间、起始和结束状态等属性。起始和结束状态通常涉及到修改对象的局部变换(如位置、方向、缩放等)。

4:启动动画:

调用AIS_AnimationObject的Start方法来启动动画。在动画播放期间,OCCT将自动根据设置的属性更新对象的状态。

5:更新和显示:

在你的应用程序中,确保有一个循环来更新视图并显示动画。这通常涉及到调用AIS_InteractiveContext的Display方法。

6:停止动画:

当你想停止动画时,调用AIS_AnimationObject的Stop方法。

Handle(AIS_Animation) anim = new AIS_Animation();  
// ... 设置动画属性 ...  
anim->StartTimer(0, duration, true); // 开始动画  
  
while (!anim->IsStopped()) {  
    anim->UpdateTimer(); // 更新动画  
    myContext->UpdateCurrentViewer(); // 更新视图  
    // ... 其他处理 ...  
}  
anim->StopTimer(); // 停止动画
注意线程:

OCCT的动画处理通常是在主线程中进行的,这意味着动画可能会阻塞主线程的执行。如果你的应用程序需要保持响应性,你可能需要考虑使用单独的线程来处理动画。

类AIS_BaseAnimationObject

动画相关

构造

theAnimationName 动画标识符
theContext 交互式上下文,其中对象已被显示
theObject 要应用局部变换的对象

方法:updateTrsf

更新变换

示例

暂无

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值