查看: 2028|回复: 2

osg中文字的拾取

[复制链接]

该用户从未签到

发表于 2009-6-6 10:32:20 | 显示全部楼层 |阅读模式
我在一幅地图上利用osgText::FadeText添加了标注  在鼠标移动到标注上的时候   会高亮显示该标注  这个如何实现
我的想法是每一个标注作为一个叶节点   不停的检测是否有标注在光标的下面  如果是 则高亮显示  当时这样并不对 下面是一些主要的代码   请大家指点!!!
osg::Geode* geode = new osg::Geode();
        osg::Group* parent = new osg::Group();

        //创建一个线段交际检测函数
        osgUtil:ineSegmentIntersector::Intersections intersections;
        if (view->computeIntersections(x,y,intersections))
        {
                osgUtil::LineSegmentIntersector::Intersection intersection = *intersections.begin();
                osg::NodePath& nodePath = intersection.nodePath;

                //得到选择的物体
                geode = (nodePath.size() >= 1) ? dynamic_cast<osg::Geode*>(nodePath[nodePath.size() - 1]):0;
                parent = (nodePath.size() >= 2) ? dynamic_cast<osg::Group*>(nodePath[nodePath.size() - 2]):0;
        }

        //用一种高亮显示来显示以选中的物体
        if (geode && parent)
        {
                osgFX::Scribe* parentasscribe = dynamic_cast<osgFX::Scribe*>(parent);
                if (!parentasscribe)
                {
                        //如果对象选择到,高亮显示
                        osgFX::Scribe*scribe = new osgFX::Scribe();
                        osgText::FadeText* text = dynamic_cast<osgText::FadeText*>(geode->getDrawable(0));
                        if (!text)
                        {               
                                USES_CONVERSION;
                                AfxMessageBox(A2W("选中了文字!!!"));
                        }
                }
}

[ 本帖最后由 zhufu0208 于 2009-6-6 10:48 编辑 ]

该用户从未签到

发表于 2009-6-6 10:48:15 | 显示全部楼层
参看osgpick,用IntersectionVisitor就可以了

该用户从未签到

 楼主| 发表于 2009-6-6 15:31:55 | 显示全部楼层
谢谢array   已经解决了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表