通道对象的挑选主要通过鼠标点击场景通道的屏幕来完成,这是因为挑选类的功能使用是在窗口鼠标类中完成的。其中,这里会使用到 VP 公共类里的一个静态成员PublicMember::CTS_pObject_observer,用于记录选中的目标对象。
在该窗口鼠标类中,设置了一个私有变量m_boundsStrategy,该对象为挑选对象的渲染策略,该渲染策略的类型为vrRenderStrategyBounds,可以绘制一个矩形的包围盒。该变量在窗口类的构造函数中进行了实例化和初始化。
m_boundsStrategy=new vrRenderStrategyBounds();
m_boundsStrategy->setRenderGeometryEnable(true);
m_boundsStrategy->setLineWidth (1);
m_boundsStrategy->setColor (1.0,1.0,0.0,1.0);
m_boundsStrategy->setWireframeEnable(true);
m_boundsStrategy->ref();
可以依次控制线框可见性、线框线条粗细度、线框线条颜色和线框类型。
对于窗口鼠标类对于挑选类的功能调用,主要在下面一个方法中实现:(www.daowen.com)
void notify(vpInputSourceBoolean::Event event,vpInputSourceBoolean *source)
该方法包含vpInputSourceBoolean::Event 事件和vpInputSourceBoolean,该方法首先获取鼠标点击通道屏幕处的坐标,然后使用Picker 类的pick 方法返回目标对象。对于返回的目标对象,需要区别对待,对于已经选中并进行了高亮渲染的对象,首先应取消高亮渲染;对于新选中的第一个对象,才使用高亮渲染策略。当然,也可以实现逐次选中多个物体实现高亮渲染。核心代码如下:
窗口鼠标类的辅助设计的具体代码如图9.5.2所示。
图9.5.2 窗口鼠标类的辅助设计
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。