Example #1
0
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;
}
Example #2
0
    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;
    }
Example #3
0
    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;
    }
Example #4
0
    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;
    }