[osg-users] Cannot compile examples from Cookbook using PickHandler class

OpenSceneGraph Users osg-users at lists.openscenegraph.org
Mon May 18 14:18:52 PDT 2020


Hi,

Some examples from the Cookbook (book by Rui Wang & Xuelei Qian) use this 
code snippet, given at page 39.

    class PickHandler : public osgGA::GUIEventHandler
    {
    public:
        // This virtual method must be overrode by subclasses.
        virtual void doUserOperations( 
osgUtil::LineSegmentIntersector::Intersection& ) = 0;
        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::View* viewer = dynamic_cast<osgViewer::View*>(&aa);
            if ( viewer )
            {
                osg::ref_ptr<osgUtil::LineSegmentIntersector> intersector = 
new osgUtil::LineSegmentIntersector(osgUtil::Intersector::WINDOW, 
ea.getX(), ea.getY());
                osgUtil::IntersectionVisitor iv( intersector.get() );
                viewer->getCamera()->accept( iv );
                if ( intersector->containsIntersections() )
                {
                    osgUtil::LineSegmentIntersector::Intersection& result = 
*(intersector->getIntersections().begin());
                    doUserOperations( result );
                }
            }
            return false;
        }
    };

I couldn't compile examples 1 and 2 from chapter 2, and example 1 from 
chapter 5.

I'm using Debian 10 and the latest version of OSG. My command to compile 
the last one is:

$ g++ cook5.1.cpp -losg -losgAnimation -losgGA -losgUtil -losgViewer -o 
cook5.1

I get the following error message:

cook5.1.cpp: In member function ‘virtual bool 
osgCookBook::PickHandler::handle(const osgGA::GUIEventAdapter&, 
osgGA::GUIActionAdapter&)’:
cook5.1.cpp:72:62: error: binding reference of type 
‘osgUtil::LineSegmentIntersector::Intersection&’ to ‘const 
osgUtil::LineSegmentIntersector::Intersection’ discards qualifiers
      osgUtil::LineSegmentIntersector::Intersection& result = 
*(intersector->getIntersections().begin());
                                                              
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

The message is the same in the previous examples. Anyone knows what's going 
on?

Thanks,
Rodrigo.

-- 
You received this message because you are subscribed to the Google Groups "OpenSceneGraph Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to osg-users+unsubscribe at googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/osg-users/f0e93c54-f8aa-4651-bc11-1d22bc626343%40googlegroups.com.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openscenegraph.org/pipermail/osg-users-openscenegraph.org/attachments/20200518/88f6b50d/attachment.html>


More information about the osg-users mailing list