void CountsVisitor::apply(osg::Transform& node) { pushStateSet(node.getStateSet()); if (dynamic_cast<osgSim::DOFTransform*>(&node) != NULL) { _dofTransforms++; osg::ref_ptr<osg::Object> rp = (osg::Object*)&node; _uDofTransforms.insert(rp); } else { _transforms++; osg::ref_ptr<osg::Object> rp = (osg::Object*)&node; _uTransforms.insert(rp); } _totalChildren += node.getNumChildren(); apply(node.getStateSet()); if (++_depth > _maxDepth) _maxDepth = _depth; traverse((osg::Node&)node); _depth--; popStateSet(); }
void StatsVisitor::apply(osg::Transform& node) { if (node.getStateSet()) { apply(*node.getStateSet()); } ++_numInstancedTransform; _transformSet.insert(&node); traverse(node); }
void FltExportVisitor::apply( osg::Transform& node ) { _firstNode = false; ScopedStatePushPop guard( this, node.getStateSet() ); osgSim::DOFTransform* dof = dynamic_cast<osgSim::DOFTransform*>( &node ); if (dof) { writeDegreeOfFreedom( dof); } writeMatrix( node.getUserData() ); writeComment( node ); writePushTraverseWritePop( node ); }
void ProxyCullVisitor::apply(osg::Transform& node) { //OE_INFO << "Transform!" << std::endl; if ( isCulledByProxyFrustum(node) ) return; _cv->pushOntoNodePath( &node); _cv->pushCurrentMask(); osg::StateSet* node_state = node.getStateSet(); if (node_state) _cv->pushStateSet(node_state); // push the current proxy data: osg::Polytope savedF = _proxyFrustum; osg::Matrix savedMV = _proxyModelViewMatrix; // calculate the new proxy frustum: node.computeLocalToWorldMatrix(_proxyModelViewMatrix, this); _proxyFrustum.setAndTransformProvidingInverse( _proxyProjFrustum, _proxyModelViewMatrix ); osg::ref_ptr<osg::RefMatrix> matrix = createOrReuseMatrix(*_cv->getModelViewMatrix()); node.computeLocalToWorldMatrix(*matrix,this); _cv->pushModelViewMatrix(matrix.get(), node.getReferenceFrame()); // traverse children: handle_cull_callbacks_and_traverse(node); // restore the previous proxy frustum and MVM _proxyFrustum = savedF; _proxyModelViewMatrix = savedMV; _cv->popModelViewMatrix(); if (node_state) _cv->popStateSet(); _cv->popCurrentMask(); _cv->popFromNodePath(); }
void CVRCullVisitor::apply(osg::Transform& node) { bool status = _cullingStatus; bool firstStatus = _firstCullStatus; if(isCulled(node)) { _firstCullStatus = firstStatus; _cullingStatus = status; return; } // push the culling mode. pushCurrentMask(); // push the node's state. StateSet* node_state = node.getStateSet(); if(node_state) pushStateSet(node_state); ref_ptr<RefMatrix> matrix = createOrReuseMatrix(*getModelViewMatrix()); node.computeLocalToWorldMatrix(*matrix,this); pushModelViewMatrix(matrix.get(),node.getReferenceFrame()); handle_cull_callbacks_and_traverse(node); popModelViewMatrix(); // pop the node's state off the render graph stack. if(node_state) popStateSet(); // pop the culling mode. popCurrentMask(); _firstCullStatus = firstStatus; _cullingStatus = status; }