コード例 #1
0
void LoadThreadsHandler::AttachNodeToSceneByName::apply(osg::Switch& swt)
{
	if (swt.getName() == _nodeName)
	{
		if(!_attached || _multipleattach)
		{
			if(_ranged)
			{
				osg::ref_ptr<osg::LOD> newlod = new osg::LOD;
				newlod->setName("RangedLOD_" + _attachNode->getName());

				newlod->addChild(_attachNode.get(), _min, _max);

				swt.addChild(newlod.get(), true);
			}
			else
			{
				swt.addChild(_attachNode.get(), true);
			}
			
			_attached = true;
		}
	}

	traverse(swt);
}
コード例 #2
0
void KillableTargetActor::SwitchVisitor::apply(osg::Switch& switchNode)
{
   for (unsigned i = 0; i < switchNode.getNumChildren(); ++i)
   {
      if (switchNode.getChild(i)->getName() == mSwitchState)
      {
         switchNode.setSingleChildOn(i);
         break;
      }
   }
}
コード例 #3
0
ファイル: Statistics.cpp プロジェクト: AndreyIstomin/osg
void StatsVisitor::apply(osg::Switch& node)
{
    if (node.getStateSet())
    {
        apply(*node.getStateSet());
    }

    ++_numInstancedSwitch;
    _switchSet.insert(&node);

    traverse(node);
}
コード例 #4
0
ファイル: FltExportVisitor.cpp プロジェクト: joevandyk/osg
void
FltExportVisitor::apply( osg::Switch& node )
{
    _firstNode = false;
    ScopedStatePushPop guard( this, node.getStateSet() );

    writeSwitch( &node );

    writeMatrix( node.getUserData() );
    writeComment( node );
    writePushTraverseWritePop( node );
}
コード例 #5
0
void
CountsVisitor::apply(osg::Switch& node)
{
    pushStateSet(node.getStateSet());

    _switches++;
    osg::ref_ptr<osg::Object> rp = (osg::Object*)&node;
    _uSwitches.insert(rp);
    _totalChildren += node.getNumChildren();
    apply(node.getStateSet());

    if (++_depth > _maxDepth)
        _maxDepth = _depth;
    traverse((osg::Node&)node);
    _depth--;

    popStateSet();
}
コード例 #6
0
ファイル: SlideEventHandler.cpp プロジェクト: BriacB/osg
    void apply(osg::Switch& sw)
    {
        if (sw.getName().find(_name)!=std::string::npos)
        {
            _switch = &sw;
            return; // note, no need to do traverse now we've located the relevant switch
        }

        traverse(sw);
    }
コード例 #7
0
ファイル: visitors.cpp プロジェクト: blobfish/cadseer
void MainSwitchVisitor::apply(osg::Switch& switchIn)
{
    std::string userValue;
    if (switchIn.getUserValue(gu::idAttributeTitle, userValue))
    {
        boost::uuids::uuid switchId = boost::uuids::string_generator()(userValue);
        if (switchId == id)
        {
            out = &switchIn;
            return; //no need to continue search.
        }
    }

    traverse(switchIn);
}
コード例 #8
0
ファイル: daeWSceneObjects.cpp プロジェクト: aalex/osg
void daeWriter::apply( osg::Switch &node )
{
    debugPrint( node );
    updateCurrentDaeNode();
    currentNode = daeSafeCast< domNode >(currentNode->add( COLLADA_ELEMENT_NODE ) );
    currentNode->setId(getNodeName(node,"switch").c_str());

    if (writeExtras)
    {
        // Adds the following to a node

        //<extra type="Switch">
        //    <technique profile="OpenSceneGraph">
        //        <ValueList>1 0</ValueList>
        //    </technique>
        //</extra>

        domExtra *extra = daeSafeCast<domExtra>(currentNode->add( COLLADA_ELEMENT_EXTRA ));
        extra->setType("Switch");
        domTechnique *teq = daeSafeCast<domTechnique>(extra->add( COLLADA_ELEMENT_TECHNIQUE ) );
        teq->setProfile( "OpenSceneGraph" );

        domAny *valueList = (domAny*)teq->add( "ValueList" );

        std::stringstream fw;
        const osg::Switch::ValueList& values = node.getValueList();
        for(osg::Switch::ValueList::const_iterator itr=values.begin();
            itr!=values.end();
            ++itr)
        {
            if (itr != values.begin())
            {
                fw << " ";
            }
            fw << *itr;
        }
        valueList->setValue(fw.str().c_str());
    }

    writeNodeExtra(node);
    
    lastDepth = _nodePath.size();

    // Process all children
    traverse( node );
}