如何检测 OpenCASCADE 中的形状选择?
How to detect selection of shapes in OpenCASCADE?
我正在将 OPENCASCADE 3D 库与 Qt 一起使用。我已经设置了 3D 显示,并使用调用 AIS_InteractiveContext::Display 方法在 window 中显示了 TopoDS_Shape 的几个项目。现在我想在用户在 3D 显示器上选择一个形状时进行一些事件处理。
我已经检查了 AIS_InteractiveContext ( https://dev.opencascade.org/doc/refman/html/class_a_i_s___interactive_context.html ) 的文档。有一种方法可以在 3D 视图中查询项目。但它只能查询选择:
- SelectedShape 方法(https://dev.opencascade.org/doc/refman/html/class_a_i_s___interactive_context.html#ac7879e85fade79a71e4f543a154763ff)
- 图形表示的IsSelected方法
- 选择方法
不断查询 AIS_Interactive 选择更改的上下文不是一种方法。
有什么方法可以在更改选择时在 opencascade 中设置回调?
我找到了与这个问题相关的内容:
https://dev.opencascade.org/content/how-receive-notification-selection-change
互联网的浪潮可能会冲走那个页面,所以我也把它放在这里:
It is exactly what I mean. For example, when user clicks, you need to take current cursor position and pass it to OCCT context as follows:
occtContext->MoveTo(cursorX, cursorY, occtView);
occtContext->Select();
Or like this:
occtContext->Select(cursorX, cursorY, endpointX, endpointY, occtView);
And then you can get selected objects:
for (occtContext->InitSelected(); occtContext->MoreSelected(); occtContext->NextSelected())
{
Handle(AIS_InteractiveObject) selected = occtContext->SelectedInteractive();
}
And now you can call your callback function if there are selected objects
这样的设计看起来不太好,但是......我没有找到任何其他东西
不,您应该对鼠标点击或击键做出反应,以检查用户是否想要select某些东西。
有一个名为“教程”的 Open CASCADE Qt 示例,您可能需要检查一下。在文件“.../samples/qt/Common/src/View.cxx”中,您可以找到示例实现。
我正在将 OPENCASCADE 3D 库与 Qt 一起使用。我已经设置了 3D 显示,并使用调用 AIS_InteractiveContext::Display 方法在 window 中显示了 TopoDS_Shape 的几个项目。现在我想在用户在 3D 显示器上选择一个形状时进行一些事件处理。
我已经检查了 AIS_InteractiveContext ( https://dev.opencascade.org/doc/refman/html/class_a_i_s___interactive_context.html ) 的文档。有一种方法可以在 3D 视图中查询项目。但它只能查询选择:
- SelectedShape 方法(https://dev.opencascade.org/doc/refman/html/class_a_i_s___interactive_context.html#ac7879e85fade79a71e4f543a154763ff)
- 图形表示的IsSelected方法
- 选择方法
不断查询 AIS_Interactive 选择更改的上下文不是一种方法。
有什么方法可以在更改选择时在 opencascade 中设置回调?
我找到了与这个问题相关的内容:
https://dev.opencascade.org/content/how-receive-notification-selection-change
互联网的浪潮可能会冲走那个页面,所以我也把它放在这里:
It is exactly what I mean. For example, when user clicks, you need to take current cursor position and pass it to OCCT context as follows:
occtContext->MoveTo(cursorX, cursorY, occtView);
occtContext->Select();
Or like this:
occtContext->Select(cursorX, cursorY, endpointX, endpointY, occtView);
And then you can get selected objects:
for (occtContext->InitSelected(); occtContext->MoreSelected(); occtContext->NextSelected())
{
Handle(AIS_InteractiveObject) selected = occtContext->SelectedInteractive();
}
And now you can call your callback function if there are selected objects
这样的设计看起来不太好,但是......我没有找到任何其他东西
不,您应该对鼠标点击或击键做出反应,以检查用户是否想要select某些东西。
有一个名为“教程”的 Open CASCADE Qt 示例,您可能需要检查一下。在文件“.../samples/qt/Common/src/View.cxx”中,您可以找到示例实现。