OsgEarth3 PlacNode添加Icon图片

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
喜欢就支持一下吧
点赞0 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容