class PickEvent : public osgGA::GUIEventHandler
{
public:
PickEvent(osg::Geometry* drawable) : _drawable(drawable){}
~PickEvent(){}
public:
bool handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& aa)
{
if (ea.getEventType() == osgGA::GUIEventAdapter::PUSH)
{
osgViewer::Viewer* viewer = dynamic_cast<osgViewer::Viewer*>(&aa);
double x = ea.getX();
double y = ea.getY();
osgUtil::LineSegmentIntersector* picker = new osgUtil::LineSegmentIntersector(osgUtil::Intersector::WINDOW, x,y);
osg::Camera* camera = viewer->getCamera();
osgUtil::IntersectionVisitor visitor(picker);
camera->accept(visitor);
if (picker->containsIntersections())
{
osgUtil::LineSegmentIntersector::Intersections::iterator it = picker->getIntersections().begin();
osg::Geometry* geometry = (*it).drawable->asGeometry();
osg::Vec3Array* vertes = dynamic_cast<osg::Vec3Array*>( geometry->getVertexArray() );
osg::Vec3* first = &(vertes->front());
int i = (*it).indexList[0];
int j = (*it).indexList[1];
int k = (*it).indexList[2];
osg::Vec3 test1 = *(first+i);
osg::Vec3 test2 = *(first+j);
osg::Vec3 test3 = *(first+k);
}
}
return false;
}
public:
osg::Transform* _transform;
osg::Geometry* _drawable;
};