00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include <osg/Drawable>
00023 #include <osg/Geode>
00024
00025 #include "NodeAndDrawableVisitor.hxx"
00026
00027 namespace simgear
00028 {
00029 using namespace osg;
00030
00031 NodeAndDrawableVisitor::NodeAndDrawableVisitor(NodeVisitor::TraversalMode tm) :
00032 NodeVisitor(tm)
00033 {
00034 }
00035
00036 NodeAndDrawableVisitor::NodeAndDrawableVisitor(NodeVisitor::VisitorType type,
00037 NodeVisitor::TraversalMode tm) :
00038 NodeVisitor(type, tm)
00039 {
00040 }
00041
00042 NodeAndDrawableVisitor::~NodeAndDrawableVisitor()
00043 {
00044 }
00045
00046 void NodeAndDrawableVisitor::apply(Node& node)
00047 {
00048 traverse(node);
00049 }
00050
00051 void NodeAndDrawableVisitor::apply(Drawable& Drawable)
00052 {
00053 }
00054
00055 void NodeAndDrawableVisitor::traverse(Node& node)
00056 {
00057 TraversalMode tm = getTraversalMode();
00058 if (tm == TRAVERSE_NONE) {
00059 return;
00060 } else if (tm == TRAVERSE_PARENTS) {
00061 NodeVisitor::traverse(node);
00062 return;
00063 }
00064 Geode* geode = dynamic_cast<Geode*>(&node);
00065 if (geode) {
00066 unsigned numDrawables = geode->getNumDrawables();
00067 for (unsigned i = 0; i < numDrawables; ++i)
00068 apply(*geode->getDrawable(i));
00069 } else {
00070 NodeVisitor::traverse(node);
00071 }
00072 }
00073 }