|
osgEarth 2.1.1
|
Public Member Functions | |
| ComputeVisitor () | |
| void | run (osg::Node *node, const osg::Vec3d ¢erECEF) |
| void | apply (osg::Geode &geode) |
| void | apply (osg::Transform &xform) |
Public Attributes | |
| unsigned | _pass |
| osg::Vec3d | _centerECEF |
| osg::Vec3f | _normalECEF |
| float | _maxNormalLen |
| float | _maxRadius2 |
| std::vector< osg::Matrixd > | _matrixStack |
Definition at line 133 of file NodeUtils.cpp.
| anonymous_namespace{NodeUtils.cpp}::ComputeVisitor::ComputeVisitor | ( | ) | [inline] |
Definition at line 135 of file NodeUtils.cpp.
: osg::NodeVisitor(osg::NodeVisitor::TRAVERSE_ALL_CHILDREN),
_maxRadius2(0.0f) { }
| void anonymous_namespace{NodeUtils.cpp}::ComputeVisitor::apply | ( | osg::Geode & | geode | ) | [inline] |
Definition at line 155 of file NodeUtils.cpp.
{
if ( _pass == 1 )
{
osg::Matrixd local2world;
if ( !_matrixStack.empty() )
local2world = _matrixStack.back();
osg::TemplatePrimitiveFunctor<ComputeMaxNormalLength> pass1;
pass1.set( _normalECEF, local2world, &_maxNormalLen );
for( unsigned i=0; i<geode.getNumDrawables(); ++i )
geode.getDrawable(i)->accept( pass1 );
}
else // if ( _pass == 2 )
{
osg::Vec3d center = _matrixStack.empty() ? _centerECEF : _centerECEF * osg::Matrixd::inverse(_matrixStack.back());
osg::TemplatePrimitiveFunctor<ComputeMaxRadius2> pass2;
pass2.set( center, &_maxRadius2 );
for( unsigned i=0; i<geode.getNumDrawables(); ++i )
geode.getDrawable(i)->accept( pass2 );
}
}
| void anonymous_namespace{NodeUtils.cpp}::ComputeVisitor::apply | ( | osg::Transform & | xform | ) | [inline] |
Definition at line 181 of file NodeUtils.cpp.
{
osg::Matrixd matrix;
if (!_matrixStack.empty()) matrix = _matrixStack.back();
xform.computeLocalToWorldMatrix( matrix, this );
_matrixStack.push_back( matrix );
traverse(xform);
_matrixStack.pop_back();
}
| void anonymous_namespace{NodeUtils.cpp}::ComputeVisitor::run | ( | osg::Node * | node, |
| const osg::Vec3d & | centerECEF | ||
| ) | [inline] |
Definition at line 139 of file NodeUtils.cpp.
{
_centerECEF = centerECEF;
_normalECEF = _centerECEF;
_normalECEF.normalize();
_maxNormalLen = _centerECEF.length();
_pass = 1;
node->accept( *this );
_centerECEF = _normalECEF * _maxNormalLen;
_pass = 2;
node->accept( *this );
}
| osg::Vec3d anonymous_namespace{NodeUtils.cpp}::ComputeVisitor::_centerECEF |
Definition at line 192 of file NodeUtils.cpp.
| std::vector<osg::Matrixd> anonymous_namespace{NodeUtils.cpp}::ComputeVisitor::_matrixStack |
Definition at line 196 of file NodeUtils.cpp.
| float anonymous_namespace{NodeUtils.cpp}::ComputeVisitor::_maxNormalLen |
Definition at line 194 of file NodeUtils.cpp.
| float anonymous_namespace{NodeUtils.cpp}::ComputeVisitor::_maxRadius2 |
Definition at line 195 of file NodeUtils.cpp.
| osg::Vec3f anonymous_namespace{NodeUtils.cpp}::ComputeVisitor::_normalECEF |
Definition at line 193 of file NodeUtils.cpp.
| unsigned anonymous_namespace{NodeUtils.cpp}::ComputeVisitor::_pass |
Definition at line 191 of file NodeUtils.cpp.
1.7.3