![]() |
|
#1
|
|||
|
|||
|
Hi,
I am building a new C++ modifier for Vizard. I am intending to handle the whole scen at once. modifier=viz.add('modifier.dlm') logo1=viz.add('logo1.wrl') logo2=viz.add('logo2.wrl') viz.modify(modifier) Well, the last command calls a native code in the dlm file in the function named "void SceneModifier(void *modifier)" In this function i can get the whole scene through the modifier parameter. VizModifierObj* pscenemodifier=(VizModifierObj*)modifier; osg::Node* pnode=pscenemodifier->node.get(); The question is how to get seperate nodes declared in this scene? Thanks alot for time, Bye. |
|
#2
|
|||
|
|||
|
Hi,
To get the root of each individual vizard node, you will need to create an osg::NodeVisitor that traverses the scenegraph and checks the user data of each node. Here is some sample code that will do this: Code:
class VizNodeData : public osg::Referenced
{
public:
VizNodeData(int id) : m_id(id) {}
int getID() const { return m_id; }
private:
int m_id;
};
class VizardNodeVisitor : public osg::NodeVisitor
{
public :
VizardNodeVisitor() : osg::NodeVisitor( TRAVERSE_ALL_CHILDREN ) {}
virtual void apply( osg::Node &node )
{
VizNodeData *data = dynamic_cast<VizNodeData*>(node.getUserData());
if(data) {
//This is the root of a Vizard node with ID: data->getID()
}
traverse(node);
}
};
Code:
VizardNodeVisitor vnv; ((VizModifierObj*)modifier)->node->accept(vnv); |
![]() |
|
|