Qt3D 中的 QObjectPicker 和设置 PointPicking 不起作用

QObjectPicker in Qt3D and setting PointPicking does not work

我想使用点选择器在点云中选择(获取)我的点的坐标。这就是为什么我想将 QPickingSettings 设置为 PointPicking 但似乎无法完成。发送到方法 mouse_event 的事件的类型为 QPickEvent 而不是 QPickPointEvent。我做错了什么?

self.picker = Qt3DRender.QObjectPicker(self)
picking_settings = Qt3DRender.QPickingSettings(self.picker)
picking_settings.setFaceOrientationPickingMode(
    Qt3DRender.QPickingSettings.FrontAndBackFace)  
# set QObjectPicker to PointPicking:
picking_settings.setPickMethod(
    Qt3DRender.QPickingSettings.PointPicking)
picking_settings.setPickResultMode(
    Qt3DRender.QPickingSettings.NearestPick)
picking_settings.setWorldSpaceTolerance(.5)

self.picker.setHoverEnabled(True)
self.picker.setDragEnabled(True)

def mouse_event(e):
    # do something
    # e should be QPickPointEvent type
    pass

self.picker.moved.connect(mouse_event)
self.picker.pressed.connect(mouse_event)
self.picker.clicked.connect(mouse_event)
self.picker.released.connect(mouse_event)
self.addComponent(self.picker)

我不熟悉 python API,但您不应该创建自己的 QPickingSettings 实例,而应使用作为 属性 实例存在的实例QRenderSettings(即单例)。

如果您使用的是 Qt3DExtras 中的Qt3DWindow,它将提供一个访问 QRenderSettings 实例的方法。

否则,您将需要创建 QRenderSettings 的实例并将其添加为实体的组件。按照惯例,我们倾向于使用场景图的根。