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

posted @ 2024-07-26 09:56  一点灯  阅读(0)  评论(0编辑  收藏  举报  来源