如何检测 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 视图中查询项目。但它只能查询选择:

  1. SelectedShape 方法(https://dev.opencascade.org/doc/refman/html/class_a_i_s___interactive_context.html#ac7879e85fade79a71e4f543a154763ff)
  2. 图形表示的IsSelected方法
  3. 选择方法

不断查询 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”中,您可以找到示例实现。