#1
|
|||
|
|||
How to access scene information in a C++ modifier
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); |
|
|