Hi,

I want to obtain the latitude, longitude and height when I click with the 
mouse. Here is my code :

osgGA::GUIEventAdapter& ea;

osgUtil::LineSegmentIntersector::Intersections intersections;
std::string gdlist="";
float x = ea.getX();
float y = ea.getY();

osg::ref_ptr< osgUtil::LineSegmentIntersector > picker = new 
osgUtil::LineSegmentIntersector(osgUtil::Intersector::WINDOW, x, y);
osgUtil::IntersectionVisitor iv(picker.get());
view->getCamera()->accept(iv);
if (picker->containsIntersections())
{
        intersections = picker->getIntersections();

        for(osgUtil::LineSegmentIntersector::Intersections::iterator hitr = 
intersections.begin();
                hitr != intersections.end();
                ++hitr)
        {
                std::ostringstream os;
                if (!hitr->nodePath.empty() && 
!(hitr->nodePath.back()->getName().empty()))
                {
                        // the geodes are identified by name.
                        os<<"Object 
\""<<hitr->nodePath.back()->getName()<<"\""<<std::endl;
                }
                else if (hitr->drawable.valid())
                {
                        os<<"Object 
\""<<hitr->drawable->className()<<"\""<<std::endl;
                }


                osg::CoordinateSystemNode* csn = new osg::CoordinateSystemNode;
                csn->setEllipsoidModel(new osg::EllipsoidModel());
                csn->addChild(TerrainNode);


                os<<"        local coords vertex("<< 
hitr->getLocalIntersectPoint()<<")"<<std::endl;
                os<<"        world coords vertex("<< 
hitr->getWorldIntersectPoint()<<")"<<std::endl;

                osg::Vec3 point = hitr->getWorldIntersectPoint();

                double latitude;
                double longitude;
                double height;

                
csn->getEllipsoidModel()->convertXYZToLatLongHeight(point.x(),point.y(),point.z(),latitude,longitude,height);

                latitude = osg::RadiansToDegrees(latitude);
                longitude = osg::RadiansToDegrees(longitude);

                os<<"        lat,long,height("<< latitude << "," << longitude 
<< "," << height << ")" <<std::endl;

                gdlist += os.str();

        }
}


This works well when I don't make a translation or rotation on the terrain.
But when I make a translation for example : 

TerrainNode= osgDB::readNodeFile("geo.osg");
osg::ref_ptr<osg::Group> group = new osg::Group;
osg::ref_ptr<osg::MatrixTransform> mat = new osg::MatrixTransform;
group->addChild(mat);
mat->addChild(TerrainNode);

osg::Matrix trans;
trans.makeTranslate(osg::Vec3f(1000,5000,1500));
mat->preMult(trans);


the values of latitude, longitude and height are false  and it's normal.
I would prefer to use local point "hitr->getLocalIntersectPoint()", which does 
not change when I make a translation, to calculate the latitude, longitude and 
height but I don't how to do this.
Can you help me?

Thank you!

Cheers,
lucie

------------------
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=30174#30174





_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to