Basic Image AlgorithmS Library  2.8.0
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
NodeInfoOpenSGVisitor.hh
1 #ifndef __NodeInfoOpenSGVisitor_hh__
2 #define __NodeInfoOpenSGVisitor_hh__
3 
4 #include <bias_config.h>
5 #include <Base/Debug/Error.hh>
6 #include <osg/Node>
7 #include <osg/NodeVisitor>
8 #include "NodeInfo.hh"
9 
10 namespace BIAS
11 {
13  {
14  virtual void ApplyNodeOP(osg::Node* ActualNode,
15  NodeInfoMap* map)=0;
16  virtual ~NodeInfoOpBase(){}
17  };
18 
20  {
21  virtual void ApplyNodeOP(osg::Node* ActualNode,
22  NodeInfoMap* map)
23  {
24  if(!ActualNode) return;
25  if(!map) return;
26  map->erase(ActualNode);
27  }
28  virtual ~NodeInfoEraseOp() {}
29  };
30 
32  {
33  virtual void ApplyNodeOP(osg::Node* ActualNode,
34  NodeInfoMap* map)
35  {
36  if(!ActualNode) return;
37  if(!map) return;
38  if(!targetMap) return;
39  //find nodeinfo with ActualNode.name==nodeinfo.id and restore node name
40  //and delete nodeinfo and add new ndoe info to targetmap with correct ptr
41  NodeInfoMap::iterator it;
42  for(it=map->begin();it!=map->end();it++)
43  {
44  if((*it).second.Id==ActualNode->getName()) //nodeinf exists for node
45  {
46  //restore name
47  ActualNode->setName((*it).second.Name);
48  (*targetMap)[ActualNode]=(*it).second; //create corrected copy
49  map->erase((*it).first); //delete found and reduce search space
50  break;
51  }
52  }
53  }
56  };
57 
58  /** @class NodeInfoOpenSGVisitor
59  @brief visitor for traversing the scene graph and applying some operation
60  to the related nodeinfomap
61  @author grauel 6/2008
62 
63  */
64  class NodeInfoOpenSGVisitor: public osg::NodeVisitor
65  {
66  public:
68  NodeInfoOpBase* Op):
69  osg::NodeVisitor(osg::NodeVisitor::TRAVERSE_ALL_CHILDREN )
70  {
71  NodeInfoMap_ = nodeinfomap;
72  NodeOp_ = Op;
73  };
74 
75  virtual void apply( osg::Node& node ); //node visitor code
77  private:
78 
79  NodeInfoMap* NodeInfoMap_;
80  NodeInfoOpBase* NodeOp_;
81  };
82 
83 
84 }//end of namespace
85 
86 #endif
NodeInfoOpenSGVisitor(NodeInfoMap *nodeinfomap, NodeInfoOpBase *Op)
virtual void ApplyNodeOP(osg::Node *ActualNode, NodeInfoMap *map)=0
visitor for traversing the scene graph and applying some operation to the related nodeinfomap ...
virtual void ApplyNodeOP(osg::Node *ActualNode, NodeInfoMap *map)
virtual void ApplyNodeOP(osg::Node *ActualNode, NodeInfoMap *map)
virtual void apply(osg::Node &node)