Выбор событий мыши

Я хочу использовать OpenSceneGraph Pickhandler, чтобы напечатать имя узла при щелчке мышью. Я сделал файл заголовка PickHandler и включил, как мне кажется, правильный код, чтобы это произошло.

После отсутствия ошибок при запуске приложение не отображает имя узла при нажатии. Я пропустил что-то важное?

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;
}

0

Решение

Вам нужно извлечь имя вашего узла, чтобы распечатать его. Если вы не используете никаких пользовательских узлов, то используйте intersection.drawable->getName(), Убедитесь, что вы установили имя для этого конкретного osg::Geometry, иначе имя по умолчанию пустое.

Код для печати для вашего случая будет что-то вроде:

for( auto&& intersection : intersections ) {
std::cout << "  - Local intersection point = " << intersection.localIntersectionPoint << "\n";
std::cout << "Intersection name = " << intersection.drawable->getName() << std::endl;
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]