Я хочу использовать OpenSceneGraph Pickhandler, чтобы печатать имя узла при нажатии с помощью мыши. Я сделал файл заголовка PickHandler и включил то, что, по моему мнению, является правильным кодом, чтобы это произошло.Mouse event picker openscenegraph
После ошибок при запуске приложения не отображается имя узла при нажатии. Я пропустил что-то важное?
bool PickHandler::handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& aa)
{
`if(ea.getEventType() != osgGA::GUIEventAdapter::RELEASE &&
ea.getButton() != osgGA::GUIEventAdapter::LEFT_MOUSE_BUTTON)
{
return false;
}
osgViewer::View* viewer = dynamic_cast<osgViewer::View*>(&aa);
if(viewer)
{
osgUtil::LineSegmentIntersector* intersector
= new osgUtil::LineSegmentIntersector(osgUtil::Intersector::WINDOW, ea.getX(), ea.getY());`if(ea.getEventType() != osgGA::GUIEventAdapter::RELEASE &&
ea.getButton() != osgGA::GUIEventAdapter::LEFT_MOUSE_BUTTON)
{
return false;
}
osgViewer::View* viewer = dynamic_cast<osgViewer::View*>(&aa);
if(viewer)
{
osgUtil::LineSegmentIntersector* intersector
= new osgUtil::LineSegmentIntersector(osgUtil::Intersector::WINDOW, ea.getX(), ea.getY());
osgUtil::IntersectionVisitor iv(intersector);
osg::Camera* camera = viewer->getCamera();
if(!camera)
return false;
camera->accept(iv);
if(!intersector->containsIntersections())
return false;
auto intersections = intersector->getIntersections();
std::cout << "Got " << intersections.size() << " intersections:\n";
for(auto&& intersection : intersections)
std::cout << " - Local intersection point = " << intersection.localIntersectionPoint << "\n";
}
return true;
}
Похоже, вы пропустили имя печать в вашем коде. Печатает ли размер пересечения и локальную точку пересечения как в коде? – vicrucann
Да, он печатает следующую информацию, но не уверен, как получить имя узла в этой точке. Примера вывода: Got 2 перекрестков: - Локальная точка пересечения = -0,148942 -0,512957 0,357376 - Локальная точка пересечения = -0,159801 0,489366 0,363891 –