Permalink
Browse files

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.
  • Loading branch information...
1 parent 58ea384 commit d284ebcfd8528ab3f9c36420ab48bb3c8868bedd @osg-training-guest osg-training-guest committed Feb 6, 2014
@@ -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
View
@@ -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,18 +11,18 @@
* OpenSceneGraph Public License for more details.
*/
-#include "Widget.h"
#include <osg/Geode>
#include <osg/ScriptEngine>
#include <osg/Geometry>
#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();

0 comments on commit d284ebc

Please sign in to comment.