void VRMLFile::addRoute(const Char8 *szOutNodename, const Char8 *szOutFieldname, const Char8 *szInNodename, const Char8 *szInFieldname ) { if(szOutNodename == NULL || szOutFieldname == NULL || szInNodename == NULL || szInFieldname == NULL ) { FWARNING(("addRoute missing params\n")); } FieldContainer *pSrcNode = findReference(szOutNodename); FieldContainer *pDstNode = findReference(szInNodename); AttachmentContainer *pSrc = dynamic_cast<AttachmentContainer *>(pSrcNode); AttachmentContainer *pDst = dynamic_cast<AttachmentContainer *>(pDstNode); if(pSrc == NULL) { FWARNING(("Unknow src node %s\n", szOutNodename)); return; } if(pDstNode == NULL) { FWARNING(("Unknow dst node %s\n", szInNodename)); return; } VRMLGenericAtt *pSrcAtt = dynamic_cast<VRMLGenericAtt *>( pSrc->findAttachment(VRMLGenericAtt::getClassType())); VRMLGenericAtt *pDstAtt = NULL; if(pDst != NULL) { pDstAtt = dynamic_cast<VRMLGenericAtt *>( pDst->findAttachment(VRMLGenericAtt::getClassType())); } if(pSrcAtt == NULL) { Node *pNode = dynamic_cast<Node *>(pSrc); if(pNode != NULL && pNode->getCore() != NULL) { pSrcAtt = dynamic_cast<VRMLGenericAtt *>( pNode->getCore()->findAttachment( VRMLGenericAtt::getClassType())); } } if(pDstAtt == NULL) { Node *pNode = dynamic_cast<Node *>(pDst); if(pNode != NULL && pNode->getCore() != NULL) { pDstAtt = dynamic_cast<VRMLGenericAtt *>( pNode->getCore()->findAttachment( VRMLGenericAtt::getClassType())); } } std::string szOutFName = szOutFieldname; std::string szInFName = szInFieldname; std::string::size_type uiPos = szOutFName.rfind(std::string("_changed")); if(uiPos != std::string::npos) { szOutFName.erase(uiPos, std::string::npos); } uiPos = szInFName.find(std::string("set_")); if(uiPos != std::string::npos) { szInFName.erase(uiPos, uiPos + 4); } if(pSrcAtt != NULL) { VRMLNodeHelper *pHelper = findNodeHelper( pSrcAtt->getVrmlNodeTypename().c_str()); if(pHelper != NULL) { pHelper->mapFieldname(pSrcAtt->getVrmlNodeTypename(), szOutFName); } } if(pSrcAtt != NULL) { VRMLNodeHelper *pHelper = findNodeHelper( pDstAtt->getVrmlNodeTypename().c_str()); if(pHelper != NULL) { pHelper->mapFieldname(pDstAtt->getVrmlNodeTypename(), szInFName); } } addConnection(pSrc, szOutFName.c_str(), pDstNode, szInFName .c_str()); }
void OSGLoader::beginFieldDecl(const Char8 *szFieldType, const UInt32 uiFieldTypeId, const Char8 *szFieldName ) { UInt32 uiOSGFieldTypeId = mapIntExtFieldType(szFieldName, uiFieldTypeId); DynFieldContainerInterface *pIf = dynamic_cast<DynFieldContainerInterface *>(_pCurrentFC.get()); if(pIf != NULL) { GetFieldHandlePtr pField = _pCurrentFC->getField(szFieldName); if(pField == NULL || pField->isValid() == false) { if(uiFieldTypeId == 0) { pIf->addField(szFieldType, szFieldName); } else { pIf->addField(uiOSGFieldTypeId, szFieldName); } } _pCurrentField = _pCurrentFC->editField(szFieldName); _pCurrentFieldDesc = _pCurrentFC->getType().getFieldDesc(szFieldName); } else { AttachmentContainer *pAttCnt = dynamic_cast<AttachmentContainer *>(_pCurrentFC.get()); if(pAttCnt != NULL) { OSGGenericAttUnrecPtr pGenAtt = dynamic_cast<OSGGenericAtt *>( pAttCnt->findAttachment(OSGGenericAtt::getClassGroupId())); if(pGenAtt == NULL) { pGenAtt = OSGGenericAtt::create(); pAttCnt->addAttachment(pGenAtt); } GetFieldHandlePtr pField = pGenAtt->getField(szFieldName); if(pField == NULL || pField->isValid() == false) { if(uiFieldTypeId == 0) { // pGenAtt->addField(szFieldType, szFieldName); } else { pGenAtt->addField(uiOSGFieldTypeId, szFieldName); } } _pCurrentField = pGenAtt->editField(szFieldName); _pCurrentFieldDesc = pGenAtt->getType().getFieldDesc(szFieldName); } } _fStack.push (_pCurrentField); _fdStack.push(_pCurrentFieldDesc); }