Moved experimental Widget class to osgGA
Add computeIntersections() to the osgGA::GUIActionAdapter base class to enable intersection tests without needing to directly link to osgViewer.
This commit is contained in:
parent
958a7d0ab0
commit
4016aed62d
@ -1,5 +1,4 @@
|
||||
SET(TARGET_SRC
|
||||
Widget.cpp
|
||||
TransferFunctionWidget.cpp
|
||||
osgtransferfunction.cpp
|
||||
)
|
||||
|
@ -17,14 +17,14 @@
|
||||
#include <osg/Group>
|
||||
#include <osg/TransferFunction>
|
||||
|
||||
#include "Widget.h"
|
||||
#include <osgGA/Widget>
|
||||
|
||||
#define OSGUI_EXPORT
|
||||
|
||||
namespace osgUI
|
||||
{
|
||||
|
||||
class OSGUI_EXPORT TransferFunctionWidget : public osgUI::Widget
|
||||
class OSGUI_EXPORT TransferFunctionWidget : public osgGA::Widget
|
||||
{
|
||||
public:
|
||||
TransferFunctionWidget(osg::TransferFunction1D* tf=0);
|
||||
|
@ -16,6 +16,7 @@
|
||||
|
||||
#include <osgGA/Export>
|
||||
#include <osg/View>
|
||||
#include <osgUtil/LineSegmentIntersector>
|
||||
|
||||
namespace osgGA{
|
||||
|
||||
@ -83,6 +84,13 @@ public:
|
||||
*/
|
||||
virtual void requestWarpPointer(float x,float y) = 0;
|
||||
|
||||
|
||||
/** Compute intersections of a ray, starting the current mouse position, through the specified camera. */
|
||||
virtual bool computeIntersections(const osgGA::GUIEventAdapter& /*ea*/, osgUtil::LineSegmentIntersector::Intersections& /*intersections*/,osg::Node::NodeMask /*traversalMask*/ = 0xffffffff) { return false; }
|
||||
|
||||
/** Compute intersections of a ray, starting the current mouse position, through the specified master camera's window/eye coordinates and a specified nodePath's subgraph. */
|
||||
virtual bool computeIntersections(const osgGA::GUIEventAdapter& /*ea*/, const osg::NodePath& /*nodePath*/, osgUtil::LineSegmentIntersector::Intersections& /*intersections*/,osg::Node::NodeMask /*traversalMask*/ = 0xffffffff) { return false; }
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
@ -21,7 +21,7 @@
|
||||
|
||||
#define OSGUI_EXPORT
|
||||
|
||||
namespace osgUI
|
||||
namespace osgGA
|
||||
{
|
||||
|
||||
class OSGUI_EXPORT Widget : public osg::Group
|
@ -9,6 +9,7 @@ SET(LIB_NAME osgGA)
|
||||
SET(HEADER_PATH ${OpenSceneGraph_SOURCE_DIR}/include/${LIB_NAME})
|
||||
SET(TARGET_H
|
||||
${HEADER_PATH}/AnimationPathManipulator
|
||||
${HEADER_PATH}/CameraViewSwitchManipulator
|
||||
${HEADER_PATH}/DriveManipulator
|
||||
${HEADER_PATH}/Device
|
||||
${HEADER_PATH}/Event
|
||||
@ -32,8 +33,8 @@ SET(TARGET_H
|
||||
${HEADER_PATH}/TerrainManipulator
|
||||
${HEADER_PATH}/TrackballManipulator
|
||||
${HEADER_PATH}/UFOManipulator
|
||||
${HEADER_PATH}/Widget
|
||||
${HEADER_PATH}/Version
|
||||
${HEADER_PATH}/CameraViewSwitchManipulator
|
||||
)
|
||||
|
||||
SET(TARGET_SRC
|
||||
@ -59,6 +60,7 @@ SET(TARGET_SRC
|
||||
TerrainManipulator.cpp
|
||||
TrackballManipulator.cpp
|
||||
UFOManipulator.cpp
|
||||
Widget.cpp
|
||||
Version.cpp
|
||||
CameraViewSwitchManipulator.cpp
|
||||
${OPENSCENEGRAPH_VERSIONINFO_RC}
|
||||
|
@ -11,7 +11,6 @@
|
||||
* OpenSceneGraph Public License for more details.
|
||||
*/
|
||||
|
||||
#include "Widget.h"
|
||||
|
||||
#include <osg/Geode>
|
||||
#include <osg/ScriptEngine>
|
||||
@ -19,10 +18,11 @@
|
||||
#include <osg/MatrixTransform>
|
||||
#include <osg/io_utils>
|
||||
|
||||
#include <osgGA/Widget>
|
||||
#include <osgGA/EventVisitor>
|
||||
#include <osgViewer/View>
|
||||
#include <osgGA/GUIActionAdapter>
|
||||
|
||||
using namespace osgUI;
|
||||
using namespace osgGA;
|
||||
|
||||
Widget::Widget():
|
||||
_focusBehaviour(FOCUS_FOLLOWS_POINTER),
|
||||
@ -50,8 +50,8 @@ void Widget::setExtents(const osg::BoundingBox& bb)
|
||||
void Widget::updateFocus(osg::NodeVisitor& nv)
|
||||
{
|
||||
osgGA::EventVisitor* ev = dynamic_cast<osgGA::EventVisitor*>(&nv);
|
||||
osgViewer::View* view = ev ? dynamic_cast<osgViewer::View*>(ev->getActionAdapter()) : 0;
|
||||
if (ev && view)
|
||||
osgGA::GUIActionAdapter* aa = ev ? ev->getActionAdapter() : 0;
|
||||
if (ev && aa)
|
||||
{
|
||||
osgGA::EventQueue::Events& events = ev->getEvents();
|
||||
for(osgGA::EventQueue::Events::iterator itr = events.begin();
|
||||
@ -74,7 +74,7 @@ void Widget::updateFocus(osg::NodeVisitor& nv)
|
||||
if (numButtonsPressed==1)
|
||||
{
|
||||
osgUtil::LineSegmentIntersector::Intersections intersections;
|
||||
bool withinWidget = view->computeIntersections(*ea, nv.getNodePath(), intersections);
|
||||
bool withinWidget = aa->computeIntersections(*ea, nv.getNodePath(), intersections);
|
||||
if (withinWidget) _hasEventFocus = true;
|
||||
else _hasEventFocus = false;
|
||||
}
|
||||
@ -104,7 +104,7 @@ void Widget::updateFocus(osg::NodeVisitor& nv)
|
||||
if (checkWithinWidget)
|
||||
{
|
||||
osgUtil::LineSegmentIntersector::Intersections intersections;
|
||||
bool withinWidget = view->computeIntersections(*ea, nv.getNodePath(), intersections);
|
||||
bool withinWidget = aa->computeIntersections(*ea, nv.getNodePath(), intersections);
|
||||
|
||||
_hasEventFocus = withinWidget;
|
||||
}
|
||||
@ -205,8 +205,7 @@ void Widget::traverseImplementation(osg::NodeVisitor& nv)
|
||||
if (!_graphicsInitialized && nv.getVisitorType()!=osg::NodeVisitor::CULL_VISITOR) createGraphics();
|
||||
|
||||
osgGA::EventVisitor* ev = dynamic_cast<osgGA::EventVisitor*>(&nv);
|
||||
osgViewer::View* view = ev ? dynamic_cast<osgViewer::View*>(ev->getActionAdapter()) : 0;
|
||||
if (ev && view)
|
||||
if (ev)
|
||||
{
|
||||
updateFocus(nv);
|
||||
|
||||
@ -263,9 +262,9 @@ bool Widget::handleImplementation(osgGA::EventVisitor* /*ev*/, osgGA::Event* /*e
|
||||
|
||||
bool Widget::computePositionInLocalCoordinates(osgGA::EventVisitor* ev, osgGA::GUIEventAdapter* event, osg::Vec3& localPosition) const
|
||||
{
|
||||
osgViewer::View* view = ev ? dynamic_cast<osgViewer::View*>(ev->getActionAdapter()) : 0;
|
||||
osgGA::GUIActionAdapter* aa = ev ? ev->getActionAdapter() : 0;
|
||||
osgUtil::LineSegmentIntersector::Intersections intersections;
|
||||
if (view && view->computeIntersections(*event, ev->getNodePath(), intersections))
|
||||
if (aa && aa->computeIntersections(*event, ev->getNodePath(), intersections))
|
||||
{
|
||||
localPosition = intersections.begin()->getLocalIntersectPoint();
|
||||
|
Loading…
Reference in New Issue
Block a user