opencascade AIS_InteractiveContext源码学习相关枚举 AIS_SelectionScheme AIS_StatusOfPick 原创
AIS_SelectionScheme
枚举 AIS_SelectionScheme
设置交互上下文中的选择方案。
枚举值:
AIS_SelectionScheme_UNKNOWN
未定义的方案
AIS_SelectionScheme_Replace
清除当前选择并选择检测到的对象
AIS_SelectionScheme_Add
将检测到的对象添加到当前选择
AIS_SelectionScheme_Remove
从当前选择中移除检测到的对象
AIS_SelectionScheme_XOR
对检测到的对象执行异或操作,其他已选择的对象不受影响
AIS_SelectionScheme_Clear
清除当前选择
AIS_SelectionScheme_ReplaceExtra
替换一个区别是:如果替换的结果为空,并且当前选择包含检测到的元素,则选择该元素
这些是用于交互上下文中设置选择方案的枚举值及其描述。
在OpenCASCADE中,AIS_SelectionScheme
是一个枚举类型,用于定义交互式上下文中选择对象的不同方案。这些方案确定了当用户进行选择操作时,如何处理当前选择集合以及新选择的对象。
以下是一些 AIS_SelectionScheme
的常见用法和用例:
示例用法:
-
替换选择(AIS_SelectionScheme_Replace):
myContext->ClearSelected(); // 清除当前选择 myContext->Select(...); // 选择新的对象
在这个例子中,首先使用
ClearSelected()
方法清除当前选择集合,然后使用Select()
方法选择新的对象。这种方式适合在每次选择操作之前清除当前选择并选择新对象。 -
添加到当前选择(AIS_SelectionScheme_Add):
myContext->ShiftSelect(...); // 将新的对象添加到当前选择
使用
ShiftSelect()
方法可以将新的对象添加到当前已选择的对象集合中。这样做可以在不清除当前选择的情况下添加新的对象。 -
从当前选择中移除(AIS_SelectionScheme_Remove):
myContext->ShiftSelect(...); // 将新的对象添加到当前选择 myContext->ShiftSelect(...); // 再次选择相同对象以移除它
在这个示例中,使用两次
ShiftSelect()
方法。第一次将对象添加到当前选择中,第二次再次选择相同对象,这会导致从当前选择中移除该对象。 -
异或选择(AIS_SelectionScheme_XOR):
myContext->CtrlSelect(...); // 对新对象执行 XOR 操作
使用
CtrlSelect()
方法可以执行异或操作。这意味着如果新选择的对象已经在当前选择中,则从当前选择中移除它;如果不在当前选择中,则添加它进去。 -
清除当前选择(AIS_SelectionScheme_Clear):
myContext->ClearSelected(); // 清除当前选择
使用
ClearSelected()
方法可以清除当前选择集合中的所有对象,即使没有新的选择操作。 -
替换选择(带额外条件)(AIS_SelectionScheme_ReplaceExtra):
myContext->ShiftSelect(...); // 将新的对象添加到当前选择
这种情况类似于
AIS_SelectionScheme_Add
,但有一个区别:如果新的选择操作结果为空,并且当前选择集合中包含了被检测到的元素,则该元素会被选中。
相关方法和类:
AIS_InteractiveContext
: OpenCASCADE中用于管理交互式对象和选择操作的主要类。- 选择操作方法:如
Select()
、ShiftSelect()
、CtrlSelect()
和ClearSelected()
等方法,用于执行不同的选择方案。 AIS_SelectionScheme
枚举:定义了不同的选择方案,每种方案都有不同的行为和效果,适合不同的用户交互需求。
在使用 AIS_SelectionScheme
时,根据用户的操作行为和应用程序的需求选择适当的选择方案。这些方案可以帮助控制和管理用户在3D场景中的选择行为,以提供更好的用户体验和交互性。
AIS_StatusOfPick
枚举 AIS_StatusOfPick
枚举值:
AIS_SOP_Error
错误状态
AIS_SOP_NothingSelected
未选择任何内容
AIS_SOP_Removed
已移除选择
AIS_SOP_OneSelected
已选择一个对象
AIS_SOP_SeveralSelected
已选择多个对象
这些是用于表示拾取操作状态的枚举值及其描述。
示例用法:
在OpenCASCADE中,AIS_StatusOfPick
是一个枚举类型,用于表示拾取操作的状态。它通常用于交互式上下文(Interactive Context)中,以确定用户在3D场景中选择对象时的情况。
以下是一些 AIS_StatusOfPick
的常见用法和示例:
-
获取拾取状态:
AIS_StatusOfPick status = context->Pick(...); // 使用上下文进行拾取操作 if (status == AIS_SOP_OneSelected) { // 当选择了一个对象时执行某些操作 } else if (status == AIS_SOP_SeveralSelected) { // 当选择了多个对象时执行某些操作 } else if (status == AIS_SOP_NothingSelected) { // 当未选择任何对象时执行某些操作 } else if (status == AIS_SOP_Error) { // 处理拾取过程中的错误情况 }
在此示例中,
context
是AIS_InteractiveContext
对象,通过它进行拾取操作,并根据返回的AIS_StatusOfPick
状态执行不同的操作。 -
处理拾取事件:
void MyView::OnMouseDown(int x, int y) { AIS_StatusOfPick status = myContext->Select(x, y); switch (status) { case AIS_SOP_OneSelected: // 处理选择了一个对象的事件 break; case AIS_SOP_SeveralSelected: // 处理选择了多个对象的事件 break; case AIS_SOP_NothingSelected: // 处理未选择对象的事件 break; case AIS_SOP_Error: // 处理拾取过程中的错误情况 break; default: break; } }
这个例子展示了如何在用户鼠标按下事件中使用
AIS_StatusOfPick
处理不同的拾取状态,以便根据用户的操作做出响应。
相关方法和类:
AIS_InteractiveContext
: OpenCASCADE中负责管理交互式对象和拾取操作的主要类。Select
、Pick
方法: 用于执行拾取操作并返回AIS_StatusOfPick
状态。AIS_StatusOfPick
枚举: 定义了不同的拾取状态,如已选择一个对象、已选择多个对象、未选择任何对象和拾取过程中的错误状态。
在使用 AIS_StatusOfPick
时,根据不同的返回状态来决定应用程序的行为,例如更新界面、执行操作或显示消息等。