opencascade AIS_Selection 源码学习 原创

AIS_Selection

前言

“持有选定所有者列表的类”
在这里插入图片描述

方法

1

创建一个新的选择。
Standard_EXPORT AIS_Selection();

2

清除所有选择的对象。
Standard_EXPORT virtual void Clear();

3

如果对象尚未在选择中,则将其添加。
//! 如果对象已经在选择中,则将其移除。
Standard_EXPORT virtual AIS_SelectStatus Select(const Handle(SelectMgr_EntityOwner)& theObject);

4

总是将对象添加到选择中。
//! 当选择的对象数量很大时更快。
Standard_EXPORT virtual AIS_SelectStatus AddSelect(const Handle(SelectMgr_EntityOwner)& theObject);

5

清除选择并添加对象到选择中。
virtual void ClearAndSelect(const Handle(SelectMgr_EntityOwner)& theObject)
{
Clear();
Select(theObject);
}

6

检查对象是否在选择中。
Standard_Boolean IsSelected(const Handle(SelectMgr_EntityOwner)& theObject) const { return myResultMap.IsBound(theObject); }

7

返回选择的对象列表。
const AIS_NListOfEntityOwner& Objects() const { return myresult; }

8

返回选择的对象数量。
Standard_Integer Extent() const { return myresult.Size(); }

9

如果选择的对象列表为空则返回true。
Standard_Boolean IsEmpty() const { return myresult.IsEmpty(); }

10

开始遍历选择的对象。
void Init() { myIterator = AIS_NListOfEntityOwner::Iterator(myresult); }

11

如果迭代器指向选择的对象则返回true。
Standard_Boolean More() const { return myIterator.More(); }

12

继续遍历选择的对象。
void Next() { myIterator.Next(); }

13

返回迭代器位置的选择的对象。
const Handle(SelectMgr_EntityOwner)& Value() const { return myIterator.Value(); }

14

根据选择方案选择或取消选择所有者。
thePickedOwners 要改变选择状态的元素
heSelScheme 选择方案,定义了如何选择所有者
theToAllowSelOverlap 选择标志,如果为true,则允许重叠的实体
theFilter 上下文过滤器,跳过不可接受的所有者
Standard_EXPORT virtual void SelectOwners(const AIS_NArray1OfEntityOwner& thePickedOwners,
const AIS_SelectionScheme theSelScheme,
const Standard_Boolean theToAllowSelOverlap,
const Handle(SelectMgr_Filter)& theFilter);

15

如果过滤器可接受,则将所有者追加到当前选择中。
theOwner [in] 要改变选择状态的元素
theFilter [in] 上下文过滤器,跳过不可接受的所有者
选择的结果状态
Standard_EXPORT virtual AIS_SelectStatus appendOwner(const Handle(SelectMgr_EntityOwner)& theOwner,
const Handle(SelectMgr_Filter)& theFilter);

示例

在OpenCascade中,AIS_Selection类用于管理图形场景中的选择操作,允许用户交互式选择对象。以下是一个简单的示例用法,展示如何创建和操作AIS_Selection对象:

#include <AIS_Selection.hxx>
#include <AIS_InteractiveContext.hxx>
#include <TopoDS_Shape.hxx>
#include <BRepPrimAPI_MakeBox.hxx>

// 创建一个简单的立方体形状
TopoDS_Shape createBox()
{
    BRepPrimAPI_MakeBox boxMaker(10.0, 20.0, 30.0);
    return boxMaker.Shape();
}

int main()
{
    // 创建一个交互式上下文
    AIS_InteractiveContext context;

    // 创建一个新的选择对象
    AIS_Selection selection;

    // 添加对象到选择中
    TopoDS_Shape boxShape = createBox();
    Handle(SelectMgr_EntityOwner) owner = new SelectMgr_EntityOwner(boxShape);
    selection.AddSelect(owner);

    // 检查对象是否被选中
    if (selection.IsSelected(owner))
    {
        std::cout << "Box is selected!" << std::endl;
    }

    // 清除选择
    selection.Clear();

    // 检查选择是否为空
    if (selection.IsEmpty())
    {
        std::cout << "Selection is empty." << std::endl;
    }

    return 0;
}

解释示例代码:

  1. 包含头文件:包含了用于OpenCascade图形操作的必要头文件,例如AIS_Selection.hxxAIS_InteractiveContext.hxx

  2. createBox函数:创建一个简单的立方体形状 TopoDS_Shape,通过 BRepPrimAPI_MakeBox 类来生成。

  3. 创建交互式上下文:使用 AIS_InteractiveContext 创建一个交互式上下文 context

  4. 创建选择对象:实例化 AIS_Selection 类来创建一个选择对象 selection

  5. 添加对象到选择中:使用 AddSelect 方法将创建的盒子形状对象 boxShape 加入到选择中。

  6. 检查对象是否被选中:使用 IsSelected 方法检查对象是否被成功选中。

  7. 清除选择:使用 Clear 方法清除选择中的所有对象。

  8. 检查选择是否为空:使用 IsEmpty 方法检查选择是否为空。

这个示例展示了如何使用 AIS_Selection 类来进行对象的选择和管理,是OpenCascade中处理图形选择的基本操作之一。

参考

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