Ejemplo n.º 1
0
void OSGLoader::endNode(void)
{
    PINFO << "End Node" << std::endl;

    if(_pCurrentFC != NULL)
    {
        if(_pCurrentFC->getType().isNode() == true)
        {
            Node *pNode = dynamic_cast<Node *>(_pCurrentFC.get());

            if(pNode->getCore() == NULL)
            {
                GroupUnrecPtr pGroup = Group::create();

                pNode->setCore(pGroup);
            }
        }

        UInt32 uiFunctorIndex = _pCurrentFC->getType().getId();

        if(uiFunctorIndex < _endNodeFunctors.size() && 
           ! _endNodeFunctors[uiFunctorIndex].empty())
        {
            (_endNodeFunctors[uiFunctorIndex])(_pCurrentFC);
        }
    }

    setFieldContainerValue(_pCurrentFC);

    _fcStack.pop();

    if(_fcStack.size() != 0)
    {
        _pCurrentFC = _fcStack.top();
    }
    else
    {
        _pCurrentFC = NULL;
    }

    if(_sChangedStack.size() != 0)
    {
        _bvChanged = _sChangedStack.top();
    }
    else
    {
        _bvChanged = 0;
    }

    _sChangedStack.pop();
}
Ejemplo n.º 2
0
void OSGLoader::use(const Char8 *szName)
{
    FieldContainerPtr pUseNode;

    // try to find a container with the given name attachment

    pUseNode = getReference(szName);

    if(pUseNode == NullFC)
    {
        SLOG << "No FieldContainer found with name " << szName << std::endl;
    }
    else
    {
        // assign nodepointer to current sf|mf field
        setFieldContainerValue(pUseNode);
    }
}
Ejemplo n.º 3
0
void OSGLoader::beginNode(const Char8 *szNodeTypename,
                          const Char8 *szNodename)
{
    FieldContainerPtr pNewNode;

    if(szNodeTypename == NULL)
        return;

    PINFO << "Begin node : " << szNodeTypename << " | ";

    if(szNodename == NULL)
    {
        PINFO << "NULL";
    }
    else
    {
        PINFO << szNodename;
    }

    PINFO << std::endl;

    pNewNode =
        FieldContainerFactory::the()->createFieldContainer(szNodeTypename);

    if(szNodename != NULL && pNewNode != NullFC)
    {
        AttachmentContainerPtr pAttCon =
            AttachmentContainerPtr::dcast(pNewNode);

        if(pAttCon != NullFC)
        {
            setName(pAttCon, szNodename);
        }

        _defMap.insert(std::make_pair(std::string(szNodename), pNewNode));
    }

    // assign nodepointer to current sf|mf field
    setFieldContainerValue(pNewNode);

    _pCurrentFC = pNewNode;

    _fcStack.push(_pCurrentFC);

    if(_fcStack.size() == 1)
    {
        NodePtr pNode;
        if(_pCurrentFC->getType().isNode())
        {
            pNode = NodePtr::dcast(_pCurrentFC);
        }
        else if(_pCurrentFC->getType().isNodeCore())
        {
            pNode = Node::create();
            pNode->setCore(NodeCorePtr::dcast(_pCurrentFC));
        }
        else
        {
            SLOG << "Fieldcontainer " << szNodeTypename
                 << "is neither Node nor NodeCore " << std::endl;
        }

        if(_pRootNode == NullFC)
        {
            GroupPtr pGroup = Group::create();

            _pRootNode = Node::create();

            beginEditCP(_pRootNode, Node::CoreFieldMask);
            {
                _pRootNode->setCore(pGroup);
            }
            endEditCP  (_pRootNode, Node::CoreFieldMask);
        }

        beginEditCP(_pRootNode, Node::ChildrenFieldMask);
        {
            _pRootNode->addChild(pNode);
        }
        endEditCP  (_pRootNode, Node::ChildrenFieldMask);
    }
}
Ejemplo n.º 4
0
void OSGLoader::nullNode(void)
{
    setFieldContainerValue(NULL);
}