![]()  | 
	
| 
		 
			 
			#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);  | 
![]()  | 
	
	
| Thread Tools | |
| Display Modes | Rate This Thread | 
		
  | 
	
		
  |