landmarkreader.cpp
来自「2009 ROBOCUP 仿真2DSERVER 源码」· C++ 代码 · 共 785 行 · 第 1/3 页
CPP
785 行
#ifdef HAVE_CONFIG_H#include "config.h"#endif#include "landmarkreader.h"#include "field.h"const char LandmarkReader::FLAG_KW[] = "flag";const char LandmarkReader::GOAL_KW[] = "goal";const char LandmarkReader::MAINPITCH_KW[] = "mainPitch";const char LandmarkReader::OUTERPITCH_KW[] = "outerPitch";const char LandmarkReader::GOALMOUTH_KW[] = "goalMouth";const char LandmarkReader::PENALTYAREA_KW[] = "penaltyArea";const char LandmarkReader::X_KW[] = "x";const char LandmarkReader::Y_KW[] = "y";const char LandmarkReader::STARTX_KW[] = "startx";const char LandmarkReader::STARTY_KW[] = "starty";const char LandmarkReader::ENDX_KW[] = "endx";const char LandmarkReader::ENDY_KW[] = "endy";const char LandmarkReader::NAME_KW[] = "name";const char LandmarkReader::VER_KW[] = "ver";const char LandmarkReader::SIDE_KW[] = "side";const char LandmarkReader::SIDE_L = 'l';const char LandmarkReader::SIDE_R = 'r';const LandmarkReader::flag_t LandmarkReader::DEF_FLAG( 0.0, 0.0, "", 8.0 );// standard landmarks// 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.const LandmarkReader::rect_t LandmarkReader::DEF_PITCH = { -52.5, -34.0, 52.5, 34.0 };const LandmarkReader::flag_t LandmarkReader::FLAG_C( 0.0, 0.0, "c", 3.0 );const LandmarkReader::flag_t LandmarkReader::FLAG_C_T( 0.0, -100.0, "c t", 3.0 );const LandmarkReader::flag_t LandmarkReader::FLAG_C_B( 0.0, 100.0, "c b", 3.0 );const LandmarkReader::flag_t LandmarkReader::FLAG_R_T( 100.0, -100.0, "r t", 3.0 );const LandmarkReader::flag_t LandmarkReader::FLAG_R_B( 100.0, 100.0, "r b", 3.0 );const LandmarkReader::flag_t LandmarkReader::FLAG_L_T( -100.0, -100.0, "l t", 3.0 );const LandmarkReader::flag_t LandmarkReader::FLAG_L_B( -100.0, 100.0, "l b", 3.0 );const LandmarkReader::goal_mouth_t LandmarkReader::GOAL_MOUTH_R = { 'r', -7.01, 7.01 };const LandmarkReader::goal_mouth_t LandmarkReader::GOAL_MOUTH_L = { 'l', -7.01, 7.01 };const LandmarkReader::flag_t LandmarkReader::FLAG_G_R_B( 0.0, 100.0, "g r b", 3.0 );const LandmarkReader::flag_t LandmarkReader::GOAL_R( 0.0, 0.0, "r", 3.0 );const LandmarkReader::flag_t LandmarkReader::FLAG_G_R_T( 0.0, -100.0, "g r t", 3.0 );const LandmarkReader::flag_t LandmarkReader::FLAG_G_L_B( 0.0, 100.0, "g l b", 3.0 );const LandmarkReader::flag_t LandmarkReader::GOAL_L( 0.0, 0.0, "l", 3.0 );const LandmarkReader::flag_t LandmarkReader::FLAG_G_L_T( 0.0, -100.0, "g l t", 3.0 );const LandmarkReader::rect_t LandmarkReader::PEN_R = { 36.0, -20.16, 100, 20.16 };// NOTE: the default endx for PEN_R is a % and the others are absouluteconst LandmarkReader::flag_t LandmarkReader::FLAG_P_R_B( -100.0, 100.0, "p r b", 3.0 );const LandmarkReader::flag_t LandmarkReader::FLAG_P_R_C( -100.0, 0.0, "p r c", 3.0 );const LandmarkReader::flag_t LandmarkReader::FLAG_P_R_T( -100.0, -100.0, "p r t", 3.0 );const LandmarkReader::rect_t LandmarkReader::PEN_L = { -36.0, -20.16, -100, 20.16 };// NOTE: the default endx for PEN_L is a % and the others are absouluteconst LandmarkReader::flag_t LandmarkReader::FLAG_P_L_B( -100.0, 100.0, "p l b", 3.0 );const LandmarkReader::flag_t LandmarkReader::FLAG_P_L_C( -100.0, 0.0, "p l c", 3.0 );const LandmarkReader::flag_t LandmarkReader::FLAG_P_L_T( -100.0, -100.0, "p l t", 3.0 );const LandmarkReader::rect_t LandmarkReader::OUTER_PITCH = { -57.5, -39.0, 57.5, 39.0 };// NOTE: The top and bottom outer pitch flags have a abs x and a % yconst LandmarkReader::flag_t LandmarkReader::FLAG_T_0( 0.0, -100.0, "t 0", 4.0 );const LandmarkReader::flag_t LandmarkReader::FLAG_T_R_10( 10.0, -100.0, "t r 10", 4.0 );const LandmarkReader::flag_t LandmarkReader::FLAG_T_R_20( 20.0, -100.0, "t r 20", 4.0 );const LandmarkReader::flag_t LandmarkReader::FLAG_T_R_30( 30.0, -100.0, "t r 30", 4.0 );const LandmarkReader::flag_t LandmarkReader::FLAG_T_R_40( 40.0, -100.0, "t r 40", 4.0 );const LandmarkReader::flag_t LandmarkReader::FLAG_T_R_50( 50.0, -100.0, "t r 50", 4.0 );const LandmarkReader::flag_t LandmarkReader::FLAG_T_L_10( -10.0, -100.0, "t l 10", 4.0 );const LandmarkReader::flag_t LandmarkReader::FLAG_T_L_20( -20.0, -100.0, "t l 20", 4.0 );const LandmarkReader::flag_t LandmarkReader::FLAG_T_L_30( -30.0, -100.0, "t l 30", 4.0 );const LandmarkReader::flag_t LandmarkReader::FLAG_T_L_40( -40.0, -100.0, "t l 40", 4.0 );const LandmarkReader::flag_t LandmarkReader::FLAG_T_L_50( -50.0, -100.0, "t l 50", 4.0 );const LandmarkReader::flag_t LandmarkReader::FLAG_B_0( 0.0, 100.0, "b 0", 4.0 );const LandmarkReader::flag_t LandmarkReader::FLAG_B_R_10( 10.0, 100.0, "b r 10", 4.0 );const LandmarkReader::flag_t LandmarkReader::FLAG_B_R_20( 20.0, 100.0, "b r 20", 4.0 );const LandmarkReader::flag_t LandmarkReader::FLAG_B_R_30( 30.0, 100.0, "b r 30", 4.0 );const LandmarkReader::flag_t LandmarkReader::FLAG_B_R_40( 40.0, 100.0, "b r 40", 4.0 );const LandmarkReader::flag_t LandmarkReader::FLAG_B_R_50( 50.0, 100.0, "b r 50", 4.0 );const LandmarkReader::flag_t LandmarkReader::FLAG_B_L_10( -10.0, 100.0, "b l 10", 4.0 );const LandmarkReader::flag_t LandmarkReader::FLAG_B_L_20( -20.0, 100.0, "b l 20", 4.0 );const LandmarkReader::flag_t LandmarkReader::FLAG_B_L_30( -30.0, 100.0, "b l 30", 4.0 );const LandmarkReader::flag_t LandmarkReader::FLAG_B_L_40( -40.0, 100.0, "b l 40", 4.0 );const LandmarkReader::flag_t LandmarkReader::FLAG_B_L_50( -50.0, 100.0, "b l 50", 4.0 );// NOTE: The left and right outer pitch flags have a % x and a abs yconst LandmarkReader::flag_t LandmarkReader::FLAG_R_0( 100.0, 0.0, "r 0", 4.0 );const LandmarkReader::flag_t LandmarkReader::FLAG_R_T_10( 100.0, -10.0, "r t 10", 4.0 );const LandmarkReader::flag_t LandmarkReader::FLAG_R_T_20( 100.0, -20.0, "r t 20", 4.0 );const LandmarkReader::flag_t LandmarkReader::FLAG_R_T_30( 100.0, -30.0, "r t 30", 4.0 );const LandmarkReader::flag_t LandmarkReader::FLAG_R_B_10( 100.0, 10.0, "r b 10", 4.0 );const LandmarkReader::flag_t LandmarkReader::FLAG_R_B_20( 100.0, 20.0, "r b 20", 4.0 );const LandmarkReader::flag_t LandmarkReader::FLAG_R_B_30( 100.0, 30.0, "r b 30", 4.0 );const LandmarkReader::flag_t LandmarkReader::FLAG_L_0( -100.0, 0.0, "l 0", 4.0 );const LandmarkReader::flag_t LandmarkReader::FLAG_L_T_10( -100.0, -10.0, "l t 10", 4.0 );const LandmarkReader::flag_t LandmarkReader::FLAG_L_T_20( -100.0, -20.0, "l t 20", 4.0 );const LandmarkReader::flag_t LandmarkReader::FLAG_L_T_30( -100.0, -30.0, "l t 30", 4.0 );const LandmarkReader::flag_t LandmarkReader::FLAG_L_B_10( -100.0, 10.0, "l b 10", 4.0 );const LandmarkReader::flag_t LandmarkReader::FLAG_L_B_20( -100.0, 20.0, "l b 20", 4.0 );const LandmarkReader::flag_t LandmarkReader::FLAG_L_B_30( -100.0, 30.0, "l b 30", 4.0 );LandmarkReader::LandmarkReader( Field & field, const std::string &#ifdef HAVE_LIBEXPAT path_name#endif ) : M_field( field ){#ifdef HAVE_LIBEXPAT if ( ! readXml( path_name ) ) { std::cerr << "trying to create default landmark file..."; if ( createFile( path_name ) ) { std::cerr << "\t...Created\n"; } else { std::cerr << "\t...Failed\n"; } loadDefaults(); }#else // !HAVE_LIBEXPAT loadDefaults();#endif // !HAVE_LIBEXPAT}#ifdef HAVE_LIBEXPATvoidLandmarkReader::start( const char * el, const char ** attr ){ if ( std::string( el ) == LandmarkReader::FLAG_KW ) { processFlag( attr ); } else if ( std::string( el ) == LandmarkReader::GOAL_KW ) { processFlag( attr, true ); } else if ( std::string( el ) == LandmarkReader::MAINPITCH_KW ) { processPitch( attr ); } else if ( std::string( el ) == LandmarkReader::PENALTYAREA_KW ) { processPitch( attr, false ); } else if ( std::string( el ) == LandmarkReader::GOALMOUTH_KW ) { processGoalMouth( attr ); } else if ( std::string( el ) == LandmarkReader::OUTERPITCH_KW ) { processPitch( attr, false ); } else { std::cerr << path << ": " << line << ": unknown tag " << el << std::endl; }}voidLandmarkReader::end( const char * el ){ if ( std::string( el ) == LandmarkReader::MAINPITCH_KW || std::string( el ) == LandmarkReader::PENALTYAREA_KW || std::string( el ) == LandmarkReader::GOALMOUTH_KW ) { rect_stack.pop(); }}boolLandmarkReader::processGoalMouth( const char ** attr ){ if ( rect_stack.size() == 0 ) { return false; } LandmarkReader::goal_mouth_t goal_mouth; LandmarkReader::rect_t rect; bool side_found = false; for( int i = 0; attr[i]; i += 2 ) { if ( std::string( attr[i] ) == LandmarkReader::SIDE_KW ) { if ( ! extract( attr[i], attr[i+1], goal_mouth.side ) ) { return false; } if ( goal_mouth.side == LandmarkReader::SIDE_L ) { rect.startx = rect.endx = rect_stack.top().startx; side_found = true; goal_mouth.side = LandmarkReader::SIDE_L;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?