|
我在一幅地图上利用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 编辑 ] |
|