#pragma once
#include <QHash>
#include <osg/NodeVisitor>
#include <osg/Drawable>
#include <osg/Geometry>
#include <osg/Node>
#include <osg/Geode>
#include <osg/Group>
#include <osg/Transform>
#include <osg/Camera>
#include <osg/MatrixTransform>
class PlanetVisitor : public osg::NodeVisitor
{
public:
PlanetVisitor(TraversalMode tm = TRAVERSE_ALL_CHILDREN);
~PlanetVisitor();
virtual void apply(osg::Drawable& drawable);
virtual void apply(osg::Geometry& geometry);
virtual void apply(osg::Node& node);
virtual void apply(osg::Geode& node);
virtual void apply(osg::Group& node);
virtual void apply(osg::Transform& node);
virtual void apply(osg::Camera& node);
virtual void apply(osg::MatrixTransform& node);
void print();
private:
void addNode(const QString &name);
QHash<QString, int> m_hashNodeTypeNum;
};
#include "PlanetVisitor.h"
#include <QDebug>
PlanetVisitor::PlanetVisitor(TraversalMode tm)
:osg::NodeVisitor(tm)
{
}
PlanetVisitor::~PlanetVisitor()
{
}
void PlanetVisitor::apply(osg::Drawable& drawable)
{
addNode("Drawable");
traverse(drawable);
}
void PlanetVisitor::apply(osg::Geometry& geometry)
{
addNode("Geometry");
traverse(geometry);
}
void PlanetVisitor::apply(osg::Node& node)
{
addNode("Node");
traverse(node);
}
void PlanetVisitor::apply(osg::Geode& node)
{
addNode("Geode");
traverse(node);
}
void PlanetVisitor::apply(osg::Group& node)
{
addNode("Group");
traverse(node);
}
void PlanetVisitor::apply(osg::Transform& node)
{
addNode("Transform");
traverse(node);
}
void PlanetVisitor::apply(osg::Camera& node)
{
addNode("Camera");
traverse(node);
}
void PlanetVisitor::apply(osg::MatrixTransform& node)
{
addNode("MatrixTransform");
traverse(node);
}
void PlanetVisitor::print()
{
for (auto it = m_hashNodeTypeNum.begin(); it != m_hashNodeTypeNum.end(); ++it)
{
QString str = it.key() + " num";
qDebug() << str << ":" << it.value();
}
}
void PlanetVisitor::addNode(const QString &name)
{
m_hashNodeTypeNum[name]++;
}