首页 > 其他 > 详细

节点访问器

时间:2021-08-30 06:08:52      阅读:9      评论:0      收藏:0      [点我收藏+]

查找节点名称

#include <Windows.h>
#include <osg\Node>
#include <osg\Group>
#include <osg\Geometry>
#include <osgViewer/Viewer>

class FindNameVisitor : public osg::NodeVisitor
{
public:
	FindNameVisitor(const std::string& name, TraversalMode tm = TRAVERSE_ALL_CHILDREN):
		osg::NodeVisitor(tm),
		name_(name)
	{

	}

	~FindNameVisitor()
	{

	}

	virtual void apply(osg::Node& node) override
	{
		if (node.getName() == name_)
			node_ = &node;

		std::cout << "Node Name:" << node.getName() << std::endl;

		traverse(node);
	}

	osg::Node* getName() { return node_.get(); }

private:
	std::string name_;
	osg::ref_ptr<osg::Node> node_;
};

int main()
{
	osgViewer::Viewer viewer;

	osg::ref_ptr<osg::Group> group = new osg::Group();
	group->addChild(osgDB::readNodeFile("cow.osg"));
	viewer.setSceneData(group);

	FindNameVisitor nv("cow.osg");
	group->accept(nv);
	osg::ref_ptr<osg::Node> node = nv.getName();
	std::cout <<"Find Node:"<< node.get() << std::endl;

	viewer.addEventHandler(new PickHander());
	viewer.addEventHandler(new osgViewer::StatsHandler());
	viewer.setUpViewInWindow(100, 100, 500, 400);
	return viewer.run();
}

技术分享图片

节点访问器

原文:https://www.cnblogs.com/shiguoliang/p/15195545.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!