std::vector<CStdString> ElementRatings::GetChildNodes(const CStdString& sXML, const CStdString& sParentNode) { std::vector<CStdString> vElements; MSXML2::IXMLDOMNodeListPtr pRating = m_pXMLSchemaDoc->getElementsByTagName(sParentNode.c_str()); MSXML2::IXMLDOMNodePtr pNode = pRating->item[0]; MSXML2::IXMLDOMNodeListPtr pList = pNode->childNodes; for (int i=0; i<pList->length; i++) { MSXML2::IXMLDOMNodePtr pChildNode = pList->item[i]; CStdString sElement(pChildNode->nodeName); vElements.push_back(sElement); } return vElements; }
bool _mvl_read_old_lut_camera( TiXmlElement* pCamNode, int *width, int *height, double *hpose, double *RDF, double *fx, double *fy, double *cx, double *cy, double *sx, std::string& sPath, char* pLUTFilename, Bi_Point2D_f_nob*** pLUT ) { double epose[6]; double forward[3]; double right[3]; double down[3]; const char* delims = " ;,"; // acceptable delimiters for vector of numbers *width = 0; *height = 0; for( TiXmlElement* pNode = pCamNode->FirstChildElement(); pNode != NULL; pNode = pNode->NextSiblingElement() ) { std::string sElement( pNode->Value() ); std::string sText( pNode->GetText() ); char* valstr = (char*)sText.c_str(); if( sElement.compare("width") == 0 ){ if( sscanf( valstr, "%d", width ) != 1){ return false; } } else if( sElement.compare("height") == 0 ){ if( sscanf( valstr, "%d", height ) != 1 ){ return false; } } else if( sElement.compare("forward") == 0 ){ if( _parse_doubles( valstr, delims, 3, forward ) != 3 ){ return false; } } else if( sElement.compare("right") == 0 ){ if( _parse_doubles( valstr, delims, 3, right ) != 3 ){ return false; } } else if( sElement.compare("down") == 0 ){ if( _parse_doubles( valstr, delims, 3, down ) != 3 ){ return false; } } else if( sElement.compare("pose") == 0 ){ if( _parse_doubles( valstr, delims, 6, epose ) != 6 ){ return false; } epose_to_hpose_d( epose, hpose ); /* from libkinematics */ } else if( sElement.compare("fx") == 0 ){ if( sscanf( valstr, "%lf", fx ) != 1 ){ return false; } } else if( sElement.compare("fy") == 0 ){ if( sscanf( valstr, "%lf", fy )!= 1 ){ return false; } } else if( sElement.compare("cx") == 0 ){ if( sscanf( valstr, "%lf", cx )!= 1 ){ return false; } } else if( sElement.compare("cy") == 0 ){ if( sscanf( valstr, "%lf", cy )!= 1 ){ return false; } } else if( sElement.compare("sx") == 0 ){ if( sscanf( valstr, "%lf", sx )!= 1 ){ return false; } } else if( sElement.compare( "lut" ) == 0 ) { if( sprintf( pLUTFilename, "%s", valstr ) == 0 ){ return false; } } } if( *width == 0 || * height == 0 ) { fprintf( stderr, "ERROR: width or height is zero\n" ); return false; } // Read LUT from file string sFile, sExt; _FilePartsMVL( pLUTFilename, sPath, sFile, sExt ); sFile = sFile + "." + sExt; if( _mvl_read_lut_from_file( sFile.c_str(), *width, *height, pLUT ) != 0 ) { stringstream sFullLUTFilename; #ifdef _WIN32 sFullLUTFilename << sPath << "\\" << sFile; #else sFullLUTFilename << sPath << "/" << sFile; #endif if( _mvl_read_lut_from_file( sFullLUTFilename.str().c_str(), *width, *height, pLUT ) != 0 ) { fprintf( stderr, "ERROR: could not find LUT file '%s'!'\n", sFullLUTFilename.str().c_str() ); return false; } } // convert forward, right and down into the RDF conversion matrix. // See camera_math.pdf in the docs dir for more info. RDF[0] = right[0]; RDF[1] = right[1]; RDF[2] = right[2]; RDF[3] = down[0]; RDF[4] = down[1]; RDF[5] = down[2]; RDF[6] = forward[0]; RDF[7] = forward[1]; RDF[8] = forward[2]; return true; }
bool _mvl_read_lut_camera( TiXmlElement* pCamNode, int *width, int *height, double *hpose, double *RDF, double *fx, double *fy, double *cx, double *cy, double *sx, Bi_Point2D_f_nob*** pLUT ) { double epose[6]; double forward[3]; double right[3]; double down[3]; const char* delims = " ;,"; // acceptable delimiters for vector of numbers *width = 0; *height = 0; bool bSuccess = false; char* lutptr = NULL; for( TiXmlElement* pNode = pCamNode->FirstChildElement(); pNode != NULL; pNode = pNode->NextSiblingElement() ) { std::string sElement( pNode->Value() ); std::string sText( pNode->GetText() ); char* valstr = (char*)sText.c_str(); if( sElement.compare("width") == 0 ){ if( sscanf( valstr, "%d", width ) != 1){ return false; } } else if( sElement.compare("height") == 0 ){ if( sscanf( valstr, "%d", height ) != 1 ){ return false; } } else if( sElement.compare("forward") == 0 ){ if( _parse_doubles( valstr, delims, 3, forward ) != 3 ){ return false; } } else if( sElement.compare("right") == 0 ){ if( _parse_doubles( valstr, delims, 3, right ) != 3 ){ return false; } } else if( sElement.compare("down") == 0 ){ if( _parse_doubles( valstr, delims, 3, down ) != 3 ){ return false; } } else if( sElement.compare("pose") == 0 ){ if( _parse_doubles( valstr, delims, 6, epose ) != 6 ){ return false; } epose_to_hpose_d( epose, hpose ); /* from libkinematics */ } else if( sElement.compare("fx") == 0 ){ if( sscanf( valstr, "%lf", fx ) != 1 ){ return false; } } else if( sElement.compare("fy") == 0 ){ if( sscanf( valstr, "%lf", fy )!= 1 ){ return false; } } else if( sElement.compare("cx") == 0 ){ if( sscanf( valstr, "%lf", cx )!= 1 ){ return false; } } else if( sElement.compare("cy") == 0 ){ if( sscanf( valstr, "%lf", cy )!= 1 ){ return false; } } else if( sElement.compare("sx") == 0 ){ if( sscanf( valstr, "%lf", sx )!= 1 ){ return false; } } else if( sElement.compare("lut") == 0 ){ lutptr = valstr; //rjs: have to read the LUT here //as valstr ptr no longer valid outside //of TiXML for loop // Read LUT from string of hex values mvl_alloc_lut( *width, *height, pLUT ); for( int ii = 0; ii < *height; ++ii ) { for( int jj = 0; jj < *width; ++jj ) { _read_lut_point( lutptr, &lutptr, (*pLUT)[ii][jj] ); } } } } if( *width == 0 || *height == 0 ) { fprintf( stderr, "ERROR: width or height is zero\n" ); return false; } //rjs: can't read LUT here, lutptr no longer valid // Read LUT from string of hex values // mvl_alloc_lut( *width, *height, pLUT ); // for( int ii = 0; ii < *height; ++ii ) { // for( int jj = 0; jj < *width; ++jj ) { // _read_lut_point( lutptr, &lutptr, (*pLUT)[ii][jj] ); // } // } bSuccess = true; // convert forward, right and down into the RDF conversion matrix. // See camera_math.pdf in the docs dir for more info. RDF[0] = right[0]; RDF[1] = right[1]; RDF[2] = right[2]; RDF[3] = down[0]; RDF[4] = down[1]; RDF[5] = down[2]; RDF[6] = forward[0]; RDF[7] = forward[1]; RDF[8] = forward[2]; return bSuccess; }
bool _mvl_read_warped_camera( TiXmlElement* pCamNode, int *width, int *height, double *hpose, double *RDF, double *fx, double *fy, double *cx, double *cy, double *sx, double *kappa1, double *kappa2, double *kappa3, double *tau1, double *tau2 ) { double epose[6]; double forward[3]; double right[3]; double down[3]; const char* delims = " ;,"; // acceptable delimiters for vector of numbers for( TiXmlElement* pNode = pCamNode->FirstChildElement(); pNode != NULL; pNode = pNode->NextSiblingElement() ) { std::string sElement( pNode->Value() ); std::string sText( pNode->GetText() ); char* valstr = (char*)sText.c_str(); if( sElement.compare("width") == 0 ){ if( sscanf( valstr, "%d", width ) != 1){ return false; } } else if( sElement.compare("height") == 0 ){ if( sscanf( valstr, "%d", height ) != 1 ){ return false; } } else if( sElement.compare("forward") == 0 ){ if( _parse_doubles( valstr, delims, 3, forward ) != 3 ){ return false; } } else if( sElement.compare("right") == 0 ){ if( _parse_doubles( valstr, delims, 3, right ) != 3 ){ return false; } } else if( sElement.compare("down") == 0 ){ if( _parse_doubles( valstr, delims, 3, down ) != 3 ){ return false; } } else if( sElement.compare("pose") == 0 ){ if( _parse_doubles( valstr, delims, 6, epose ) != 6 ){ return false; } epose_to_hpose_d( epose, hpose ); /* from libkinematics */ } else if( sElement.compare("fx") == 0 ){ if( sscanf( valstr, "%lf", fx ) != 1 ){ return false; } } else if( sElement.compare("fy") == 0 ){ if( sscanf( valstr, "%lf", fy )!= 1 ){ return false; } } else if( sElement.compare("cx") == 0 ){ if( sscanf( valstr, "%lf", cx )!= 1 ){ return false; } } else if( sElement.compare("cy") == 0 ){ if( sscanf( valstr, "%lf", cy )!= 1 ){ return false; } } else if( sElement.compare("sx") == 0 ){ if( sscanf( valstr, "%lf", sx ) != 1 ){ return false; } } else if( sElement.compare("kappa1") == 0 ) { if( sscanf( valstr, "%lf", kappa1 ) != 1 ){ return false; } } else if( sElement.compare("kappa2") == 0 ) { if( sscanf( valstr, "%lf", kappa2 ) != 1 ){ return false; } } else if( sElement.compare("kappa3") == 0 ) { if( sscanf( valstr, "%lf", kappa3 ) != 1 ){ return false; } } else if( sElement.compare("tau1") == 0 ) { if( sscanf( valstr, "%lf", tau1 ) != 1 ) { return false; } } else if( sElement.compare("tau2") == 0 ) { if( sscanf( valstr, "%lf", tau2 ) != 1 ) { return false; } } } // convert forward, right and down into the RDF conversion matrix. // See camera_math.pdf in the docs dir for more info. RDF[0] = right[0]; RDF[1] = right[1]; RDF[2] = right[2]; RDF[3] = down[0]; RDF[4] = down[1]; RDF[5] = down[2]; RDF[6] = forward[0]; RDF[7] = forward[1]; RDF[8] = forward[2]; return true; }