opencascade AIS_AnimationObject AIS_BaseAnimationObject 源码学习 7.8新增 原创
类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
更新变换
示例
暂无