OSGEarth對繪製的直線進行顯示與隱藏

目錄

一、聲明全局變量

二、實現直線的顯示

三、實現直線的隱藏


本文主要介紹如何通過複選框等事件實現OSGEarth中所繪製直線的顯示與隱藏。

一、聲明全局變量

將如下代碼放在類屬性中,或聲明爲全局變量。

osgEarth::Annotation::FeatureNode* m_pStippleFeatureNode;

二、實現直線的顯示

通過下面的代碼進行直線的繪製,並將繪製的直線添加到mRoot。

void  showLine()
{
	const osgEarth::SpatialReference* geoSRS = mapNode->getMapSRS()->getGeographicSRS();
	// 初始化繪圖參數
	osgEarth::Symbology::Style m_lineLakeStyle;
	m_lineLakeStyle.getOrCreate<osgEarth::Symbology::LineSymbol>()
		->stroke()->color() = osgEarth::Symbology::Color::Red;
	m_lineLakeStyle.getOrCreate<osgEarth::Symbology::LineSymbol>()
		->stroke()->width() = 2.0;
	m_lineLakeStyle.getOrCreate<osgEarth::Symbology::LineSymbol>()
		->tessellation() = 20.0;
	m_lineLakeStyle.getOrCreate<osgEarth::Symbology::AltitudeSymbol>()
		->verticalOffset() = 0.1;
	m_lineLakeStyle.getOrCreate<osgEarth::Symbology::LineSymbol>()
		->stroke()->stipple() = 255;
	osgEarth::Features::Feature* m_pLakeFeature;
	std::vector<osg::Vec3> m_vecLakePoint;
	m_pLakeFeature = new osgEarth::Features::Feature(
		new osgEarth::Annotation::LineString,
		geoSRS, m_lineLakeStyle);
	m_pStippleFeatureNode = new osgEarth::Annotation::FeatureNode(
		mapNode, m_pLakeFeature);
	
	double out_haml = 0.0;
	//std::fstream fin("./Module/sensor/position.txt", std::ios::in);

	double lat, lon;

	lat = 44.227523;
	lon = 81.624970;
	query->getElevation(osgEarth::GeoPoint(mapNode->getMapSRS(), lon, lat, 0.0, osgEarth::AltitudeMode::ALTMODE_RELATIVE),
		out_haml, query_resolution, &out_resolution);
	//存儲當前點
	m_vecLakePoint.push_back(osg::Vec3(lon, lat, out_haml + 5));

	lat = 44.227523;
	lon = 81.624057;
	query->getElevation(osgEarth::GeoPoint(mapNode->getMapSRS(), lon, lat, 0.0, osgEarth::AltitudeMode::ALTMODE_RELATIVE),
		out_haml, query_resolution, &out_resolution);
	//存儲當前點
	m_vecLakePoint.push_back(osg::Vec3(lon, lat, out_haml + 5));

	lat = 44.227102;
	lon = 81.624364;
	query->getElevation(osgEarth::GeoPoint(mapNode->getMapSRS(), lon, lat, 0.0, osgEarth::AltitudeMode::ALTMODE_RELATIVE),
		out_haml, query_resolution, &out_resolution);
	//存儲當前點
	m_vecLakePoint.push_back(osg::Vec3(lon, lat, out_haml + 5));

	lat = 44.227523;
	lon = 81.624057;
	query->getElevation(osgEarth::GeoPoint(mapNode->getMapSRS(), lon, lat, 0.0, osgEarth::AltitudeMode::ALTMODE_RELATIVE),
		out_haml, query_resolution, &out_resolution);
	//存儲當前點
	m_vecLakePoint.push_back(osg::Vec3(lon, lat, out_haml + 5));

	lat = 44.226859;
	lon = 81.623650;
	query->getElevation(osgEarth::GeoPoint(mapNode->getMapSRS(), lon, lat, 0.0, osgEarth::AltitudeMode::ALTMODE_RELATIVE),
		out_haml, query_resolution, &out_resolution);
	//存儲當前點
	m_vecLakePoint.push_back(osg::Vec3(lon, lat, out_haml + 5));

	lat = 44.227523;
	lon = 81.624057;
	query->getElevation(osgEarth::GeoPoint(mapNode->getMapSRS(), lon, lat, 0.0, osgEarth::AltitudeMode::ALTMODE_RELATIVE),
		out_haml, query_resolution, &out_resolution);
	//存儲當前點
	m_vecLakePoint.push_back(osg::Vec3(lon, lat, out_haml + 5));

	lat = 44.226452;
	lon = 81.622972;
	query->getElevation(osgEarth::GeoPoint(mapNode->getMapSRS(), lon, lat, 0.0, osgEarth::AltitudeMode::ALTMODE_RELATIVE),
		out_haml, query_resolution, &out_resolution);
	//存儲當前點
	m_vecLakePoint.push_back(osg::Vec3(lon, lat, out_haml + 5));

	mRoot->addChild(m_pStippleFeatureNode);
	m_pLakeFeature->getGeometry()->clear();
	m_pStippleFeatureNode->setStyle(m_lineLakeStyle);
	for (int i = 0; i < m_vecLakePoint.size(); ++i)
	{
		m_pLakeFeature->getGeometry()->push_back(m_vecLakePoint[i]);
	}
	m_pStippleFeatureNode->getOrCreateStateSet()->setMode(GL_DEPTH_TEST, osg::StateAttribute::OFF);//關閉深度測試
	m_pStippleFeatureNode->init();
	
}

三、實現直線的隱藏

將添加到mRoot的直線進行移除。

void hideLine()
{
	mRoot->removeChild(m_pStippleFeatureNode);
}

 

發佈了277 篇原創文章 · 獲贊 222 · 訪問量 48萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章