Skip to content

物体拾取器

一个项目的基础是响应鼠标点击,拾取场景中的物体,被拾取的物体可能显示描边,高亮等行为。为此,封装了定制化的物体拾取器ObjectSelector。

ObjectSelector的主要行为是

  • 接受一个RoySceneNode的列表,外部可以传入逻辑上的选中物体
  • 实现rayPickItem、frustumPickItem方法,通过响应鼠标事件,形成探查射线或者探查锥体,拾取场景中的RoySceneNode,形成RoySceneNode列表。
  • 表现策略:当有了选中的RoySceneNode列表之后,那么就是如何表现的问题,插件plugin_objectselect内置了三种模式,在实际上项目中可根据需要扩展,并组合多种共同显示:
    • ObjSelectorBoundbox: 显示选中物体的包围盒
    • ObjSelectorStroke:选中物体秒表
    • ObjSelectorWireframe:选中物体的网格线显示
  • 选中操作也封装了重做和撤销
  • 在具体的业务逻辑中,后续的操作都应该先获取选择器中被选中的物体,再进行后续的操作,所以其事件响应和派发也是完善的。

我们可以直接在App的鼠标事件中直接将鼠标事件传递给ObjectSelector,但更加推荐的做法是与MESObjectSelect鼠标响应策略配合,共同完成任务,鼠标响应策略可以参考鼠标事件响应这一章节。