OsgEarth3 PlacNode添加Icon图片
osgEarth::Style pm;
pm.getOrCreate<osgEarth::IconSymbol>()->declutter() = true;
pm.getOrCreate<osgEarth::TextSymbol>()->halo() = osgEarth::Color("#5f5f5f");
osgEarth::PlaceNode* pNode = new osgEarth::PlaceNode(osgEarth::GeoPoint(mapSRS, 102.4843167207031, 30.81374538948102, 1000, osgEarth::ALTMODE_ABSOLUTE), "PlacNode_Icon", pm);
osg::ref_ptr<osg::Image> pImage = osgDB::readImageFile("C:/Users/PC/Pictures/srtm_dem.png");
if (pImage.valid())
{
pImage->scaleImage(64, 64, 1);
pNode->setIconImage(pImage);
}
但是如果要修改Icon的Size,如果直接像如下的调用,并不能生效:pNode->getIconImage()->scaleImage(128, 128, 1);
查看了下OsgEarth3内PlaceNode的setIconImage源码,需要调用到内部的complie函数才能重新获取修改的image进行绘制。
所以在修改image的scale后,又调用了一次setStyle来使PlaceNode内部调到complied函数以更新绘制:
pNode->getIconImage()->scaleImage(128, 128, 1);
pNode->setStyle(pm);
其实这样scale后的Icon图片绘制出来会被拉伸模糊,如果可以重新new一个Image后,调用setIconImage修改,当然,为了能够更新到绘制,还是需要用这个折中的办法,调用setStyle
osg::ref_ptr<osg::Image> pImage = osgDB::readImageFile("C:/Users/PC/Pictures/srtm_dem.png");
if (pImage.valid())
{
pImage->scaleImage(128, 128, 1);
pNode->setIconImage(pImage);
pNode->setStyle(pm);
}
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END