opencascade AIS_Plane 源码学习 原创
AIS_Plane
前言
构建用于构建复合形状的平面基准
方法
1
//! 初始化平面 aComponent。如果 aCurrentMode 等于 true,则不初始化绘图工具 “Drawer”。
Standard_EXPORT AIS_Plane(const Handle(Geom_Plane)& aComponent, const Standard_Boolean aCurrentMode = Standard_False);
2
//! 初始化平面 aComponent 和点 aCenter。如果 aCurrentMode 等于 true,则不初始化绘图工具 “Drawer”。
Standard_EXPORT AIS_Plane(const Handle(Geom_Plane)& aComponent, const gp_Pnt& aCenter, const Standard_Boolean aCurrentMode = Standard_False);
3
//! 初始化平面 aComponent、点 aCenter,以及最小和最大点 aPmin 和 aPmax。如果 aCurrentMode 等于 true,则不初始化绘图工具 “Drawer”。
Standard_EXPORT AIS_Plane(const Handle(Geom_Plane)& aComponent, const gp_Pnt& aCenter, const gp_Pnt& aPmin, const gp_Pnt& aPmax, const Standard_Boolean aCurrentMode = Standard_False);
4
//! 初始化具有给定类型的轴放置 aComponent 和平面 aPlaneType。如果 aCurrentMode 等于 true,则不初始化绘图工具 “Drawer”。
Standard_EXPORT AIS_Plane(const Handle(Geom_Axis2Placement)& aComponent, const AIS_TypeOfPlane aPlaneType, const Standard_Boolean aCurrentMode = Standard_False);
5
//! 为 x 和 y 方向设置相同的大小值。
Standard_EXPORT void SetSize (const Standard_Real aValue);
6
//! 设置沿 X 轴 XVal 和沿 Y 轴 YVal 的长度。
Standard_EXPORT void SetSize (const Standard_Real Xval, const Standard_Real YVal);
7
//! 取消设置大小。
Standard_EXPORT void UnsetSize();
8
//! 获取大小。
Standard_EXPORT Standard_Boolean Size (Standard_Real& X, Standard_Real& Y) const;
9
//! 检查是否有自定义大小。
Standard_Boolean HasOwnSize() const { return myHasOwnSize; }
10
//! 设置变换持久性以最小大小进行缩放。
Standard_EXPORT void SetMinimumSize (const Standard_Real theValue);
11
//! 取消设置变换持久性缩放。
Standard_EXPORT void UnsetMinimumSize();
12
//! 检查是否设置了变换持久性缩放。
Standard_EXPORT Standard_Boolean HasMinimumSize() const;
13
//! 获取签名。
virtual Standard_Integer Signature() const Standard_OVERRIDE { return 7; }
14
//! 获取交互类型。
virtual AIS_KindOfInteractive Type() const Standard_OVERRIDE { return AIS_KindOfInteractive_Datum; }
15
//! 返回设置的组件。
const Handle(Geom_Plane)& Component() { return myComponent; }
16
//! 创建一个平面组件的实例。
Standard_EXPORT void SetComponent (const Handle(Geom_Plane)& aComponent);
17
//! 返回选定平面的设置,这些设置由 SetPlaneAttributes 提供。包括中心点 aCenter、最小点 aPmin 和最大点 aPmax。
Standard_EXPORT Standard_Boolean PlaneAttributes (Handle(Geom_Plane)& aComponent, gp_Pnt& aCenter, gp_Pnt& aPmin, gp_Pnt& aPmax);
18
//! 提供除默认设置以外的设置给选定平面。包括:中心点 aCenter、最大点 aPmax 和最小点 aPmin。
Standard_EXPORT void SetPlaneAttributes (const Handle(Geom_Plane)& aComponent, const gp_Pnt& aCenter, const gp_Pnt& aPmin, const gp_Pnt& aPmax);
19
//! 返回中心点的坐标。
const gp_Pnt& Center() const { return myCenter; }
20
//! 提供除 (0, 0, 0) 以外的中心点 theCenter 的设置。
void SetCenter (const gp_Pnt& theCenter) { myCenter = theCenter; }
21
//! 提供设置平面轴的坐标和方向 aComponent 在 3D 空间中的设置。坐标系使用右手坐标系,平面类型 aPlaneType 可以是:AIS_TOPL_Unknown, AIS_TOPL_XYPlane, AIS_TOPL_XZPlane, AIS_TOPL_YZPlane。
Standard_EXPORT void SetAxis2Placement (const Handle(Geom_Axis2Placement)& aComponent, const AIS_TypeOfPlane aPlaneType);
22
//! 返回平面轴系统的位置,标识 x, y 或 z 轴,并为平面在 3D 空间中给出方向。轴系统是右手坐标系。
Standard_EXPORT Handle(Geom_Axis2Placement) Axis2Placement();
23
//! 返回平面类型 - xy, yz, xz 或未知。
AIS_TypeOfPlane TypeOfPlane() { return myTypeOfPlane; }
24
//! 返回平面类型 - xy, yz, 或 xz。
Standard_Boolean IsXYZPlane() { return myIsXYZPlane; }
25
//! 返回通过 SetCurrentMode 设置的非默认当前显示模式。
Standard_Boolean CurrentMode() { return myCurrentMode; }
26
//! 提供非默认当前显示模式的设置。
void SetCurrentMode (const Standard_Boolean theCurrentMode) { myCurrentMode = theCurrentMode; }
27
//! 检查所选显示模式 aMode 是否对平面有效。
Standard_EXPORT virtual Standard_Boolean AcceptDisplayMode (const Standard_Integer aMode) const Standard_OVERRIDE;
28
//! 与 默认绘图器连接意味着需要重新计算框架值。
Standard_EXPORT virtual void SetContext (const Handle(AIS_InteractiveContext)& aCtx) Standard_OVERRIDE;
29
//! 返回平面的敏感度类型;
Select3D_TypeOfSensitivity TypeOfSensitivity() const { return myTypeOfSensitivity; }
30
//! 设置平面的敏感度类型。
void SetTypeOfSensitivity (Select3D_TypeOfSensitivity theTypeOfSensitivity) { myTypeOfSensitivity = theTypeOfSensitivity; }
示例
AIS_Plane
是 OpenCascade 中的一个类,用于在交互式场景中表示几何平面。它继承自 AIS_InteractiveObject
,允许在 3D 视图中显示和操作几何平面。
以下是 AIS_Plane
的用法示例:
1. 包含必要的头文件
首先,确保在代码中包含必要的 OpenCascade 头文件:
#include <AIS_Plane.hxx>
#include <AIS_InteractiveContext.hxx>
#include <Geom_Plane.hxx>
#include <BRepBuilderAPI_MakeFace.hxx>
#include <gp_Pln.hxx>
#include <gp_Pnt.hxx>
#include <V3d_View.hxx>
2. 创建几何平面
创建一个几何平面对象:
// 创建一个通过原点 (0, 0, 0) 且法向量为 (0, 0, 1) 的平面
gp_Pln aPlane(gp_Pnt(0, 0, 0), gp_Dir(0, 0, 1));
Handle(Geom_Plane) geomPlane = new Geom_Plane(aPlane);
3. 创建 AIS_Plane 对象
创建一个 AIS_Plane
对象,并将其设置为几何平面:
Handle(AIS_Plane) aisPlane = new AIS_Plane(geomPlane);
4. 显示平面
将 AIS_Plane
对象添加到 AIS_InteractiveContext
并显示:
Handle(V3d_Viewer) viewer = ...; // 已初始化的视图器
Handle(AIS_InteractiveContext) context = new AIS_InteractiveContext(viewer);
// 显示平面
context->Display(aisPlane, Standard_True);
5. 设置平面属性
你可以设置平面的中心、大小和其他属性:
// 设置平面的中心点
gp_Pnt center(10, 10, 0);
aisPlane->SetCenter(center);
// 设置平面的大小
aisPlane->SetSize(100, 100);
// 设置最小大小(用于变换持久性缩放)
aisPlane->SetMinimumSize(10);
// 取消设置平面大小
aisPlane->UnsetSize();
6. 操作平面
你可以通过 AIS_InteractiveContext
操作平面,例如平移、旋转等:
// 平移平面
gp_Trsf translation;
translation.SetTranslation(gp_Vec(10.0, 0.0, 0.0));
aisPlane->SetLocalTransformation(translation);
context->Redisplay(aisPlane, Standard_True);
// 旋转平面
gp_Trsf rotation;
rotation.SetRotation(gp::OX(), M_PI / 4);
aisPlane->SetLocalTransformation(rotation);
context->Redisplay(aisPlane, Standard_True);
7. 获取平面属性
你可以获取平面的相关属性:
// 获取平面的中心点
gp_Pnt planeCenter = aisPlane->Center();
// 获取平面的大小
Standard_Real xSize, ySize;
if (aisPlane->Size(xSize, ySize)) {
// 使用 xSize 和 ySize
}
// 检查是否有自定义大小
if (aisPlane->HasOwnSize()) {
// 自定义大小已设置
}
// 检查是否设置了最小大小
if (aisPlane->HasMinimumSize()) {
// 最小大小已设置
}
总结
AIS_Plane
是一个强大的工具,可以在交互式 3D 场景中显示和操作几何平面。通过设置适当的属性和变换,可以实现对平面的各种操作,从而极大地增强了用户的交互体验。如果需要更详细的示例和高级用法,建议查阅 OpenCascade 的官方文档和示例代码。
参考