📄 landmarkreader.c
字号:
return false; } } else if ( std::string ( attr[i] ) == LandmarkReader::STARTY_KW ) { if ( rect_stack.size () == 0 ) { if ( !extract ( attr[i], attr[i+1], rect.starty ) ) return false; } else { if ( !extract ( attr[i], attr[i+1], rect.starty, rect_stack.top ().starty, rect_stack.top ().endy ) ) return false; } } else if ( std::string ( attr[i] ) == LandmarkReader::ENDX_KW ) { if ( rect_stack.size () == 0 ) { if ( !extract ( attr[i], attr[i+1], rect.endx ) ) return false; } else { if ( !extract ( attr[i], attr[i+1], rect.endx, rect_stack.top ().startx, rect_stack.top ().endx ) ) return false; } } else if ( std::string ( attr[i] ) == LandmarkReader::ENDY_KW ) { if ( rect_stack.size () == 0 ) { if ( !extract ( attr[i], attr[i+1], rect.endy ) ) return false; } else { if ( !extract ( attr[i], attr[i+1], rect.endy, rect_stack.top ().starty, rect_stack.top ().endy ) ) return false; } } else { // error std::cerr << path << ": " << line << ": unknown attribute " << attr[i] << std::endl; return false; } } rect_stack.push (rect); if ( main ) { pitch = rect; } return true;}bool LandmarkReader::processFlag ( const char **attr, bool goal ){ LandmarkReader::flag_t flag = LandmarkReader::DEF_FLAG; if ( rect_stack.size () > 0 ) { flag.x = ( rect_stack.top ().startx + rect_stack.top ().endx ) * 0.5; flag.y = ( rect_stack.top ().starty + rect_stack.top ().endy ) * 0.5; } for (int i = 0; attr[i]; i += 2) { if ( std::string ( attr[i] ) == LandmarkReader::X_KW ) { if ( rect_stack.size () == 0 ) { if ( !extract ( attr[i], attr[i+1], flag.x ) ) return false; } else { if ( !extract ( attr[i], attr[i+1], flag.x, rect_stack.top ().startx, rect_stack.top ().endx ) ) return false; } } else if ( std::string ( attr[i] ) == LandmarkReader::Y_KW ) { if ( rect_stack.size () == 0 ) { if ( !extract ( attr[i], attr[i+1], flag.y ) ) return false; } else { if ( !extract ( attr[i], attr[i+1], flag.y, rect_stack.top ().starty, rect_stack.top ().endy ) ) return false; } } else if ( std::string ( attr[i] ) == LandmarkReader::NAME_KW ) { if ( !extract ( attr[i], attr[i+1], flag.name ) ) return false; } else if ( std::string ( attr[i] ) == LandmarkReader::VER_KW ) { if ( !extract ( attr[i], attr[i+1], flag.ver ) ) return false; } else { std::cerr << path << ": " << line << ": Unknown attribute " << attr[i] << std::endl; return false; } } addFlag ( flag, goal );}#endif // HAVE_LIBEXPAT // Be very carefull when changing the default values. If you // change from abs to percent or visa-versa, make sure you add // or remove the % sign in the print function and the loadDefaults.std::ostream& LandmarkReader::print ( std::ostream& o ) const{ o << "<?xml version=\"1.0\"?>" << std::endl; o << "" << std::endl; o << "" << std::endl; o << "<mainPitch startx=\"" << LandmarkReader::DEF_PITCH.startx << "\" starty=\"" << LandmarkReader::DEF_PITCH.starty << "\" endx=\"" << LandmarkReader::DEF_PITCH.endx << "\" endy=\"" << LandmarkReader::DEF_PITCH.endy << "\">" << std::endl; LandmarkReader::FLAG_C.toXml ( o << "\t" ) << std::endl; LandmarkReader::FLAG_C_T.toXml ( o << "\t" ) << std::endl; LandmarkReader::FLAG_C_B.toXml ( o << "\t" ) << std::endl; LandmarkReader::FLAG_R_T.toXml ( o << "\t" ) << std::endl; LandmarkReader::FLAG_R_B.toXml ( o << "\t" ) << std::endl; LandmarkReader::FLAG_L_T.toXml ( o << "\t" ) << std::endl; LandmarkReader::FLAG_L_B.toXml ( o << "\t" ) << std::endl; LandmarkReader::GOAL_MOUTH_R.toXml ( o << "\t" ) << std::endl; LandmarkReader::FLAG_G_R_B.toXml ( o << "\t\t" ) << std::endl; o << "\t\t<goal y=\"" << LandmarkReader::GOAL_R.y << "%\" name=\"" << LandmarkReader::GOAL_R.name << "\" ver=\"" << LandmarkReader::GOAL_R.ver << "\"/>" << std::endl; LandmarkReader::FLAG_G_R_T.toXml ( o << "\t\t" ) << std::endl; o << "\t</goalMouth>" << std::endl; LandmarkReader::GOAL_MOUTH_L.toXml ( o << "\t" ) << std::endl; LandmarkReader::FLAG_G_L_B.toXml ( o << "\t\t" ) << std::endl; o << "\t\t<goal y=\"" << LandmarkReader::GOAL_L.y << "%\" name=\"" << LandmarkReader::GOAL_L.name << "\" ver=\"" << LandmarkReader::GOAL_L.ver << "\"/>" << std::endl; LandmarkReader::FLAG_G_L_T.toXml ( o << "\t\t" ) << std::endl; o << "\t</goalMouth>" << std::endl; o << "\t<penaltyArea startx=\"" << LandmarkReader::PEN_R.startx << "\" starty=\"" << LandmarkReader::PEN_R.starty << "\" endx=\"" << LandmarkReader::PEN_R.endx << "%\" " << "endy=\"" << LandmarkReader::PEN_R.endy << "\">" << std::endl; LandmarkReader::FLAG_P_R_B.toXml ( o << "\t\t" ) << std::endl; LandmarkReader::FLAG_P_R_C.toXml ( o << "\t\t" ) << std::endl; LandmarkReader::FLAG_P_R_T.toXml ( o << "\t\t" ) << std::endl; o << "\t</penaltyArea>" << std::endl; o << "\t<penaltyArea startx=\"" << LandmarkReader::PEN_L.startx << "\" starty=\"" << LandmarkReader::PEN_L.starty << "\" endx=\"" << LandmarkReader::PEN_L.endx << "%\" " << "endy=\"" << LandmarkReader::PEN_L.endy << "\">" << std::endl; LandmarkReader::FLAG_P_L_B.toXml ( o << "\t\t" ) << std::endl; LandmarkReader::FLAG_P_L_C.toXml ( o << "\t\t" ) << std::endl; LandmarkReader::FLAG_P_L_T.toXml ( o << "\t\t" ) << std::endl; o << "\t</penaltyArea>" << std::endl; o << "\t<outerPitch startx=\"" << LandmarkReader::OUTER_PITCH.startx << "\" starty=\"" << LandmarkReader::OUTER_PITCH.starty << "\" endx=\"" << LandmarkReader::OUTER_PITCH.endx << "\" endy=\"" << LandmarkReader::OUTER_PITCH.endy << "\">" << std::endl; LandmarkReader::FLAG_T_0.toXml ( o << "\t\t", false, true ) << std::endl; LandmarkReader::FLAG_T_R_10.toXml ( o << "\t\t", false, true ) << std::endl; LandmarkReader::FLAG_T_R_20.toXml ( o << "\t\t", false, true ) << std::endl; LandmarkReader::FLAG_T_R_30.toXml ( o << "\t\t", false, true ) << std::endl; LandmarkReader::FLAG_T_R_40.toXml ( o << "\t\t", false, true ) << std::endl; LandmarkReader::FLAG_T_R_50.toXml ( o << "\t\t", false, true ) << std::endl; LandmarkReader::FLAG_T_L_10.toXml ( o << "\t\t", false, true ) << std::endl; LandmarkReader::FLAG_T_L_20.toXml ( o << "\t\t", false, true ) << std::endl; LandmarkReader::FLAG_T_L_30.toXml ( o << "\t\t", false, true ) << std::endl; LandmarkReader::FLAG_T_L_40.toXml ( o << "\t\t", false, true ) << std::endl; LandmarkReader::FLAG_T_L_50.toXml ( o << "\t\t", false, true ) << std::endl; LandmarkReader::FLAG_B_0.toXml ( o << "\t\t", false, true ) << std::endl; LandmarkReader::FLAG_B_R_10.toXml ( o << "\t\t", false, true ) << std::endl; LandmarkReader::FLAG_B_R_20.toXml ( o << "\t\t", false, true ) << std::endl; LandmarkReader::FLAG_B_R_30.toXml ( o << "\t\t", false, true ) << std::endl; LandmarkReader::FLAG_B_R_40.toXml ( o << "\t\t", false, true ) << std::endl; LandmarkReader::FLAG_B_R_50.toXml ( o << "\t\t", false, true ) << std::endl; LandmarkReader::FLAG_B_L_10.toXml ( o << "\t\t", false, true ) << std::endl; LandmarkReader::FLAG_B_L_20.toXml ( o << "\t\t", false, true ) << std::endl; LandmarkReader::FLAG_B_L_30.toXml ( o << "\t\t", false, true ) << std::endl; LandmarkReader::FLAG_B_L_40.toXml ( o << "\t\t", false, true ) << std::endl; LandmarkReader::FLAG_B_L_50.toXml ( o << "\t\t", false, true ) << std::endl; LandmarkReader::FLAG_R_0.toXml ( o << "\t\t", true, false ) << std::endl; LandmarkReader::FLAG_R_T_10.toXml ( o << "\t\t", true, false ) << std::endl; LandmarkReader::FLAG_R_T_20.toXml ( o << "\t\t", true, false ) << std::endl; LandmarkReader::FLAG_R_T_30.toXml ( o << "\t\t", true, false ) << std::endl; LandmarkReader::FLAG_R_B_10.toXml ( o << "\t\t", true, false ) << std::endl; LandmarkReader::FLAG_R_B_20.toXml ( o << "\t\t", true, false ) << std::endl; LandmarkReader::FLAG_R_B_30.toXml ( o << "\t\t", true, false ) << std::endl; LandmarkReader::FLAG_L_0.toXml ( o << "\t\t", true, false ) << std::endl; LandmarkReader::FLAG_L_T_10.toXml ( o << "\t\t", true, false ) << std::endl; LandmarkReader::FLAG_L_T_20.toXml ( o << "\t\t", true, false ) << std::endl; LandmarkReader::FLAG_L_T_30.toXml ( o << "\t\t", true, false ) << std::endl; LandmarkReader::FLAG_L_B_10.toXml ( o << "\t\t", true, false ) << std::endl; LandmarkReader::FLAG_L_B_20.toXml ( o << "\t\t", true, false ) << std::endl; LandmarkReader::FLAG_L_B_30.toXml ( o << "\t\t", true, false ) << std::endl; o << "\t</outerPitch>" << std::endl; o << "</mainPitch>" << std::endl; return o;} // Be very carefull when changing the default values. If you // change from abs to percent or visa-versa, make sure you add // or remove the % sign in the print function and the loadDefaults.void LandmarkReader::loadDefaults (){ LandmarkReader::flag_t tmp_flag; rect_stack.push ( LandmarkReader::DEF_PITCH ); addFlag ( LandmarkReader::FLAG_C.percentify ( rect_stack.top (), true, true ) ); addFlag ( LandmarkReader::FLAG_C_T.percentify ( rect_stack.top (), true, true ) ); addFlag ( LandmarkReader::FLAG_C_B.percentify ( rect_stack.top (), true, true ) ); addFlag ( LandmarkReader::FLAG_R_T.percentify ( rect_stack.top (), true, true ) ); addFlag ( LandmarkReader::FLAG_R_B.percentify ( rect_stack.top (), true, true ) ); addFlag ( LandmarkReader::FLAG_L_T.percentify ( rect_stack.top (), true, true ) ); addFlag ( LandmarkReader::FLAG_L_B.percentify ( rect_stack.top (), true, true ) ); rect_stack.push ( LandmarkReader::GOAL_MOUTH_R.toRect ( rect_stack.top () ) ); addFlag ( LandmarkReader::FLAG_G_R_B.percentify ( rect_stack.top (), true, true ) ); addFlag ( LandmarkReader::GOAL_R.percentify ( rect_stack.top (), true, true ), true ); addFlag ( LandmarkReader::FLAG_G_R_T.percentify ( rect_stack.top (), true, true ) ); rect_stack.pop (); rect_stack.push ( LandmarkReader::GOAL_MOUTH_L.toRect ( rect_stack.top () ) ); addFlag ( LandmarkReader::FLAG_G_L_B.percentify ( rect_stack.top (), true, true ) ); addFlag ( LandmarkReader::GOAL_L.percentify ( rect_stack.top (), true, true ), true ); addFlag ( LandmarkReader::FLAG_G_L_T.percentify ( rect_stack.top (), true, true ) ); rect_stack.pop (); rect_stack.push ( LandmarkReader::PEN_R.percentify ( rect_stack.top (), false, false, true, false ) ); addFlag ( LandmarkReader::FLAG_P_R_B.percentify ( rect_stack.top (), true, true ) ); addFlag ( LandmarkReader::FLAG_P_R_C.percentify ( rect_stack.top (), true, true ) ); addFlag ( LandmarkReader::FLAG_P_R_T.percentify ( rect_stack.top (), true, true ) ); rect_stack.pop (); rect_stack.push ( LandmarkReader::PEN_L.percentify ( rect_stack.top (), false, false, true, false ) ); addFlag ( LandmarkReader::FLAG_P_L_B.percentify ( rect_stack.top (), true, true ) ); addFlag ( LandmarkReader::FLAG_P_L_C.percentify ( rect_stack.top (), true, true ) ); addFlag ( LandmarkReader::FLAG_P_L_T.percentify ( rect_stack.top (), true, true ) ); rect_stack.pop (); rect_stack.push ( LandmarkReader::OUTER_PITCH ); addFlag ( LandmarkReader::FLAG_T_0.percentify ( rect_stack.top (), false, true ) ); addFlag ( LandmarkReader::FLAG_T_R_10.percentify ( rect_stack.top (), false, true ) ); addFlag ( LandmarkReader::FLAG_T_R_20.percentify ( rect_stack.top (), false, true ) ); addFlag ( LandmarkReader::FLAG_T_R_30.percentify ( rect_stack.top (), false, true ) ); addFlag ( LandmarkReader::FLAG_T_R_40.percentify ( rect_stack.top (), false, true ) ); addFlag ( LandmarkReader::FLAG_T_R_50.percentify ( rect_stack.top (), false, true ) ); addFlag ( LandmarkReader::FLAG_T_L_10.percentify ( rect_stack.top (), false, true ) ); addFlag ( LandmarkReader::FLAG_T_L_20.percentify ( rect_stack.top (), false, true ) ); addFlag ( LandmarkReader::FLAG_T_L_30.percentify ( rect_stack.top (), false, true ) ); addFlag ( LandmarkReader::FLAG_T_L_40.percentify ( rect_stack.top (), false, true ) ); addFlag ( LandmarkReader::FLAG_T_L_50.percentify ( rect_stack.top (), false, true ) ); addFlag ( LandmarkReader::FLAG_B_0.percentify ( rect_stack.top (), false, true ) ); addFlag ( LandmarkReader::FLAG_B_R_10.percentify ( rect_stack.top (), false, true ) ); addFlag ( LandmarkReader::FLAG_B_R_20.percentify ( rect_stack.top (), false, true ) ); addFlag ( LandmarkReader::FLAG_B_R_30.percentify ( rect_stack.top (), false, true ) ); addFlag ( LandmarkReader::FLAG_B_R_40.percentify ( rect_stack.top (), false, true ) ); addFlag ( LandmarkReader::FLAG_B_R_50.percentify ( rect_stack.top (), false, true ) ); addFlag ( LandmarkReader::FLAG_B_L_10.percentify ( rect_stack.top (), false, true ) ); addFlag ( LandmarkReader::FLAG_B_L_20.percentify ( rect_stack.top (), false, true ) ); addFlag ( LandmarkReader::FLAG_B_L_30.percentify ( rect_stack.top (), false, true ) ); addFlag ( LandmarkReader::FLAG_B_L_40.percentify ( rect_stack.top (), false, true ) ); addFlag ( LandmarkReader::FLAG_B_L_50.percentify ( rect_stack.top (), false, true ) ); addFlag ( LandmarkReader::FLAG_R_0.percentify ( rect_stack.top (), true, false ) ); addFlag ( LandmarkReader::FLAG_R_T_10.percentify ( rect_stack.top (), true, false ) ); addFlag ( LandmarkReader::FLAG_R_T_20.percentify ( rect_stack.top (), true, false ) ); addFlag ( LandmarkReader::FLAG_R_T_30.percentify ( rect_stack.top (), true, false ) ); addFlag ( LandmarkReader::FLAG_R_B_10.percentify ( rect_stack.top (), true, false ) ); addFlag ( LandmarkReader::FLAG_R_B_20.percentify ( rect_stack.top (), true, false ) ); addFlag ( LandmarkReader::FLAG_R_B_30.percentify ( rect_stack.top (), true, false ) ); addFlag ( LandmarkReader::FLAG_L_0.percentify ( rect_stack.top (), true, false ) ); addFlag ( LandmarkReader::FLAG_L_T_10.percentify ( rect_stack.top (), true, false ) ); addFlag ( LandmarkReader::FLAG_L_T_20.percentify ( rect_stack.top (), true, false ) ); addFlag ( LandmarkReader::FLAG_L_T_30.percentify ( rect_stack.top (), true, false ) ); addFlag ( LandmarkReader::FLAG_L_B_10.percentify ( rect_stack.top (), true, false ) ); addFlag ( LandmarkReader::FLAG_L_B_20.percentify ( rect_stack.top (), true, false ) ); addFlag ( LandmarkReader::FLAG_L_B_30.percentify ( rect_stack.top (), true, false ) ); rect_stack.pop (); rect_stack.pop ();}void LandmarkReader::addFlag ( const LandmarkReader::flag_t& flag, const bool& goal ){ // add goal to stadium char* sname = new char[16]; char* lname = new char[16]; std::string sub_name; PObject::obj_type object_type; if ( goal ) { strcpy ( sname, (std::string ( "(g " ) + flag.name + ")").c_str () ); strcpy ( lname, (std::string ( "(goal " ) + flag.name + ")").c_str () ); sub_name = "g "; sub_name += flag.name; object_type = PObject::OT_GOAL; } else { strcpy ( sname, (std::string ( "(f " ) + flag.name + ")").c_str () ); strcpy ( lname, (std::string ( "(flag " ) + flag.name + ")").c_str () ); sub_name = flag.name; object_type = PObject::OT_FLAG; } // hmmm... even though the PObject constructor takes a // const Name, the compiler compains about casting from const, // so we have to copy the string. Grrrr.... stad->votable.AssignObject ( new PObject ( object_type, lname, sname, sub_name, PVector(flag.x, flag.y), flag.ver)) ; // dont delete sname and lname 'cause PObject takes them}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -