OSG中找到特定节点的方法(转)
发布日期:2025-05-01 06:01:18 浏览次数:2 分类:技术文章

本文共 852 字,大约阅读时间需要 2 分钟。

OSG中找到特定节点的方法

为了在OSG中找到需要的节点并对节点做出相应的操作,可以从NodeVisitor类中继承一个类,NPS的教程
下载文件
[download id="14"]
阐述了这个问题。下面是我写的一个类,找到指定名字、指定类型的节点:
class findGeoNamedNode:
public osg::NodeVisitor
{
public:
findGeoNamedNode();
findGeoNamedNode(const std::string name):
osg::NodeVisitor(TRAVERSE_ALL_CHILDREN) //Set traverse mode
{
resultNode=NULL;
this->name=name;
}
virtual void apply(osg::Node &searchNode)
{
if(searchNode.getName()==name)
{
osg::Geode* dynamicTry=dynamic_cast(&searchNode);
if(dynamicTry)
{
resultNode=dynamicTry;
}
}
traverse(searchNode);
}
osg::Geode* getNode()
{
return resultNode;
}
private:
osg::Geode* resultNode;
std::string name;
};
使用这个VISITOR类只需要调用以下的一些函数
osg::Node* testNode=NULL;
testNode=dynamic_cast(osgDB::readNodeFile("d:\\1.3ds"));
findGeoNamedNode* visitor=new findGeoNamedNode("Box01");
testNode->accept(*visitor);
用起来很方便,得益于visitor模式的正确应用。
上一篇:OSG学习:C#调用非托管C++方法——C++/CLI
下一篇:OSG——选取和拖拽

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2025年04月10日 18时00分01秒