Je souhaite utiliser OpenSceneGraph Pickhandler pour imprimer le nom d'un noeud lorsque je clique dessus avec une souris. J'ai fait un fichier PickHandler Header et inclus ce que je pense être le code correct pour que cela se produise.Sélecteur d'événements de souris openscenegraph
Après aucune erreur lors de l'exécution de l'application n'affiche pas le nom du nœud lorsque vous cliquez dessus. Ai-je manqué quelque chose d'important?
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;
}
On dirait que vous avez manqué l'impression de nom dans votre code. Imprime-t-il la taille de l'intersection et le point d'intersection local comme dans le code? – vicrucann
Oui, il imprime les informations suivantes, mais ne sait pas comment obtenir le nom du nœud à ce moment-là. Exemple de sortie: Got 2 intersections: - point d'intersection local = -0,148942 -0,512957 0,357376 - point d'intersection local = -0,159801 0,489366 0,363891 –