OsgEarth3 PlaceNode添加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);
}
OsgEarth3 PlaceNode 图标缩放与重绘策略

本文介绍了如何在OsgEarth3中使用PlaceNode添加Icon图片,并详细说明了如何调整图标大小以避免拉伸模糊。作者提到,为了确保图标更新正确,需要调用setStyle函数重编译样式。
376

被折叠的 条评论
为什么被折叠?



