Hi Peter, I can't specifically say what you are seeing a problem, but it does rather sound like a precision issue with projecting the mouse poistion into clip space and then to world and final object coordinates.
Robert. On 17 October 2012 14:19, Peter Bako <[email protected]> wrote: > Hi, > > I've got a problem with line segment intersector. Sometimes I get only one > intersection (on the bootom side of the "table"), while I should get two. > Please check the screenshot. > > Do you have any idea why this happens? What should I do? > STLFILE.stl (ZIPPED) is attached > Thank you! > > Cheers, > Peter > > Hold CTRL key to activate intersection output. > This is the code I use: > > Code: > #include "stdafx.h" > #include <osgViewer/Viewer> > #include <osgDB/ReadFile> > #include <osgUtil/LineSegmentIntersector> > > > class PickHandler : public osgGA::GUIEventHandler > { > public: > > virtual bool handle( const osgGA::GUIEventAdapter& ea, > osgGA::GUIActionAdapter& aa ) > { > if ( ea.getEventType()!=osgGA::GUIEventAdapter::RELEASE || > ea.getButton()!=osgGA::GUIEventAdapter::LEFT_MOUSE_BUTTON || > !(ea.getModKeyMask()&osgGA::GUIEventAdapter::MODKEY_CTRL) ) > return false; > > osgViewer::Viewer* viewer = dynamic_cast<osgViewer::Viewer*>(&aa); > if ( viewer ){ > osg::ref_ptr<osgUtil::LineSegmentIntersector> intersector = > new > osgUtil::LineSegmentIntersector(osgUtil::Intersector::WINDOW, ea.getX(), > ea.getY()); > osgUtil::IntersectionVisitor iv( intersector.get() ); > iv.setTraversalMask( ~0x1 ); > viewer->getCamera()->accept( iv ); > > if ( intersector->containsIntersections() ){ > const > osgUtil::LineSegmentIntersector::Intersection& result = > *(intersector->getIntersections().begin()); > printf("Intersection count:%d. Coordinates: %.2f, %.2f, > %.2f\n", > > intersector->getIntersections().size(), > result.getWorldIntersectPoint().x(),result.getWorldIntersectPoint().y(),result.getWorldIntersectPoint().z()); > > } > } > return false; > } > > }; > > int main( int argc, char** argv ) > { > osg::ref_ptr<osg::Node> model1 = osgDB::readNodeFile( "STLFILE.stl" ); > osg::ref_ptr<osg::Group> root = new osg::Group; > root->addChild( model1.get() ); > osg::ref_ptr<PickHandler> picker = new PickHandler; > osgViewer::Viewer viewer; > viewer.setSceneData( root.get() ); > viewer.addEventHandler( picker.get() ); > return viewer.run(); > } > > > > > ------------------ > Read this topic online here: > http://forum.openscenegraph.org/viewtopic.php?p=50644#50644 > > > > > Attachments: > http://forum.openscenegraph.org//files/intersection_errors_639.png > http://forum.openscenegraph.org//files/stlfile_974.zip > > > _______________________________________________ > osg-users mailing list > [email protected] > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org _______________________________________________ osg-users mailing list [email protected] http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

