OpenMW
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
visitor.hpp
Go to the documentation of this file.
1 #ifndef OPENMW_COMPONENTS_SCENEUTIL_VISITOR_H
2 #define OPENMW_COMPONENTS_SCENEUTIL_VISITOR_H
3 
4 #include <osg/MatrixTransform>
5 #include <osg/NodeVisitor>
6 
7 // Commonly used scene graph visitors
8 namespace SceneUtil
9 {
10 
11  // Find a Group by name, case-insensitive
12  // If not found, mFoundNode will be NULL
13  class FindByNameVisitor : public osg::NodeVisitor
14  {
15  public:
16  FindByNameVisitor(const std::string& nameToFind)
17  : osg::NodeVisitor(TRAVERSE_ALL_CHILDREN)
18  , mNameToFind(nameToFind)
19  , mFoundNode(NULL)
20  {
21  }
22 
23  virtual void apply(osg::Group& group);
24  virtual void apply(osg::MatrixTransform& node);
25  virtual void apply(osg::Geometry& node);
26 
27  bool checkGroup(osg::Group& group);
28 
29  std::string mNameToFind;
30  osg::Group* mFoundNode;
31  };
32 
33  class FindByClassVisitor : public osg::NodeVisitor
34  {
35  public:
36  FindByClassVisitor(const std::string& nameToFind)
37  : osg::NodeVisitor(TRAVERSE_ALL_CHILDREN)
38  , mNameToFind(nameToFind)
39  {
40  }
41 
42  virtual void apply(osg::Node &node);
43 
44  std::string mNameToFind;
45  std::vector<osg::Node *> mFoundNodes;
46  };
47 
48  // Disable freezeOnCull for all visited particlesystems
49  class DisableFreezeOnCullVisitor : public osg::NodeVisitor
50  {
51  public:
53  : osg::NodeVisitor(TRAVERSE_ALL_CHILDREN)
54  {
55  }
56 
57  virtual void apply(osg::MatrixTransform& node);
58 
59  virtual void apply(osg::Drawable& drw);
60  };
61 
63  class NodeMapVisitor : public osg::NodeVisitor
64  {
65  public:
66  typedef std::map<std::string, osg::ref_ptr<osg::MatrixTransform> > NodeMap;
67 
69  : osg::NodeVisitor(osg::NodeVisitor::TRAVERSE_ALL_CHILDREN)
70  , mMap(map)
71  {
72  }
73 
74  void apply(osg::MatrixTransform& trans);
75 
76  private:
78  };
79 
83  class RemoveVisitor : public osg::NodeVisitor
84  {
85  public:
87  : osg::NodeVisitor(TRAVERSE_ALL_CHILDREN)
88  {
89  }
90 
91  void remove();
92 
93  protected:
94  // <node to remove, parent node to remove it from>
95  typedef std::vector<std::pair<osg::Node*, osg::Group*> > RemoveVec;
96  std::vector<std::pair<osg::Node*, osg::Group*> > mToRemove;
97  };
98 
99  // Removes all drawables from a graph.
101  {
102  public:
103  virtual void apply(osg::Drawable& drw);
104  virtual void apply(osg::Group& node);
105  virtual void apply(osg::MatrixTransform& node);
106  virtual void apply(osg::Node& node);
107 
108  void applyNode(osg::Node& node);
109  void applyDrawable(osg::Node& node);
110  };
111 
113  {
114  public:
115  virtual void apply(osg::Drawable& drw);
116  virtual void apply(osg::Group& node);
117  virtual void apply(osg::MatrixTransform& node);
118 
119  void applyImpl(osg::Node& node);
120  };
121 }
122 
123 #endif
Definition: visitor.hpp:13
Definition: visitor.hpp:100
FindByNameVisitor(const std::string &nameToFind)
Definition: visitor.hpp:16
std::vector< osg::Node * > mFoundNodes
Definition: visitor.hpp:45
FindByClassVisitor(const std::string &nameToFind)
Definition: visitor.hpp:36
std::map< std::string, osg::ref_ptr< osg::MatrixTransform > > NodeMap
Definition: visitor.hpp:66
std::vector< std::pair< osg::Node *, osg::Group * > > RemoveVec
Definition: visitor.hpp:95
virtual void apply(osg::Drawable &drw)
Definition: visitor.cpp:81
virtual void apply(osg::MatrixTransform &node)
Definition: visitor.cpp:49
virtual void apply(osg::Node &node)
Definition: visitor.cpp:25
void applyDrawable(osg::Node &node)
Definition: visitor.cpp:112
Base class for visitors that remove nodes from a scene graph. Subclasses need to fill the mToRemove v...
Definition: visitor.hpp:83
void applyNode(osg::Node &node)
Definition: visitor.cpp:101
Definition: visitor.hpp:49
virtual void apply(osg::Group &group)
Definition: visitor.cpp:33
void applyImpl(osg::Node &node)
Definition: visitor.cpp:149
virtual void apply(osg::Drawable &drw)
Definition: visitor.cpp:134
osg::Group * mFoundNode
Definition: visitor.hpp:30
bool checkGroup(osg::Group &group)
Definition: visitor.cpp:15
NodeMapVisitor(NodeMap &map)
Definition: visitor.hpp:68
RemoveVisitor()
Definition: visitor.hpp:86
std::string mNameToFind
Definition: visitor.hpp:29
std::vector< std::pair< osg::Node *, osg::Group * > > mToRemove
Definition: visitor.hpp:96
Maps names to nodes.
Definition: visitor.hpp:63
void apply(osg::MatrixTransform &trans)
Definition: visitor.cpp:60
Definition: visitor.hpp:112
Definition: visitor.hpp:33
NodeMap & mMap
Definition: visitor.hpp:77
std::string mNameToFind
Definition: visitor.hpp:44
DisableFreezeOnCullVisitor()
Definition: visitor.hpp:52