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;
}
解释示例代码:
-
包含头文件:包含了用于OpenCascade图形操作的必要头文件,例如
AIS_Selection.hxx
和AIS_InteractiveContext.hxx
。 -
createBox函数:创建一个简单的立方体形状
TopoDS_Shape
,通过 BRepPrimAPI_MakeBox 类来生成。 -
创建交互式上下文:使用
AIS_InteractiveContext
创建一个交互式上下文context
。 -
创建选择对象:实例化
AIS_Selection
类来创建一个选择对象selection
。 -
添加对象到选择中:使用
AddSelect
方法将创建的盒子形状对象boxShape
加入到选择中。 -
检查对象是否被选中:使用
IsSelected
方法检查对象是否被成功选中。 -
清除选择:使用
Clear
方法清除选择中的所有对象。 -
检查选择是否为空:使用
IsEmpty
方法检查选择是否为空。
这个示例展示了如何使用 AIS_Selection
类来进行对象的选择和管理,是OpenCascade中处理图形选择的基本操作之一。