visionview-1.cpp
来自「FIRA 3对3 机器人足球PC端控制程序。」· C++ 代码 · 共 2,053 行 · 第 1/5 页
CPP
2,053 行
DistanceBetweenBigTeamAndSmallID = (short)(sqrt(2)/2. * DEF_SIZE_X_ROBOT);
for(i=0;i<6;i++){
BallColor[i] = 0;
TeamColor[i] = 0;
IdColor[0][i] = 0;
IdColor[1][i] = 0;
IdColor[2][i] = 0;
OpponentColor[i] = 0;
}
////////////////////////////////
// initialization by defaults //
////////////////////////////////
// Serial port initialization
m_bPort1=TRUE;
m_pComm.SetComPort(1,19200,8,0,0);
m_pComm.CreateCommInfo();
m_pComm.OpenComPort();
m_nGame = 5;
m_nSetting = 5;
m_nTest = FALSE;
//by kui hong
// Determine initial title of mainframe window
GetParentFrame()->SetWindowText("Supervisor Program of Robot Soccer System");
// Disable all command button except "Load VXD" button
GetDlgItem(IDC_READY_BUTTON)->EnableWindow(FALSE);
GetDlgItem(IDC_START_GAME_BUTTON)->EnableWindow(FALSE);
GetDlgItem(IDC_STOP_GAME_BUTTON)->EnableWindow(FALSE);
GetDlgItem(IDC_SET_BOUNDARY)->EnableWindow(FALSE);
GetDlgItem(IDC_SET_COLOR)->EnableWindow(FALSE);
GetDlgItem(IDC_SET_PIXEL_SIZE)->EnableWindow(FALSE);
GetDlgItem(IDC_SET_ROBOT_SIZE)->EnableWindow(FALSE);
GetDlgItem(IDC_CHANGE_COLOR)->EnableWindow(FALSE);
GetDlgItem(IDC_LOAD_CONFIGURATION)->EnableWindow(FALSE);
GetDlgItem(IDC_SAVE_CONFIGURATION)->EnableWindow(FALSE);
GetDlgItem(IDC_CONTINUOUS_GRAB_BUTTON)->EnableWindow(FALSE);
GetDlgItem(IDC_POS_BALL_RADIO)->EnableWindow(FALSE);
GetDlgItem(IDC_POS_HOME1_RADIO)->EnableWindow(FALSE);
GetDlgItem(IDC_POS_HOME2_RADIO)->EnableWindow(FALSE);
GetDlgItem(IDC_POS_HOME3_RADIO)->EnableWindow(FALSE);
GetDlgItem(IDC_POS_HOME4_RADIO)->EnableWindow(FALSE);
GetDlgItem(IDC_POS_HGOALIE_RADIO)->EnableWindow(FALSE);
GetDlgItem(IDC_POS_OPPO1_RADIO)->EnableWindow(FALSE);
GetDlgItem(IDC_POS_OPPO2_RADIO)->EnableWindow(FALSE);
GetDlgItem(IDC_POS_OPPO3_RADIO)->EnableWindow(FALSE);
GetDlgItem(IDC_POS_OPPO4_RADIO)->EnableWindow(FALSE);
GetDlgItem(IDC_POS_OPPO5_RADIO)->EnableWindow(FALSE);
// Get the position of client window on screen
GetWndPos();
UpdateData(FALSE);
}
// 弊贰滚狼 叼胶敲饭捞 汲沥 力芭, 皋葛府 立辟 靛扼捞滚 摧扁
BOOL CVisionView::DestroyWindow()
{
// TODO: Add your specialized code here and/or call the base class
// Halt continuous grab and remove MilDisplay
RemoveFromDisplay();
// Close TViCH32
HW32 = CloseTVicHW32(HW32);
return CFormView::DestroyWindow();
}
void CVisionView::RemoveFromDisplay()
{
// Halt grab if in process in THIS view
MdigHalt(MilDigitizerId);
// Deselect the buffer from it's display object and given window
if (MilImageBufferId && MilDisplayId)
MdispDeselect(MilDisplayId, MilImageBufferId);
// Free the display
if (MilDisplayId)
MdispFree(MilDisplayId);
MilDisplayId = M_NULL;
}
// 漠扼 汲沥 劝己
void CVisionView::OnSetColor()
{
// TODO: Add your control notification handler code here
if(bPlay)
return;
//KillTimer(1);
bSetColor = TRUE;
bSetRobotSize = FALSE;
}
// 版扁厘 版拌 汲沥窍扁; SetBoundary 措拳芒 剁快扁
void CVisionView::OnSetBoundary()
{
// TODO: Add your control notification handler code here
if(bPlay)
return;
//KillTimer(1);
ptrSetBoundary->rect.top = rectBoundary.top;
ptrSetBoundary->rect.left = rectBoundary.left;
ptrSetBoundary->rect.bottom = rectBoundary.bottom;
ptrSetBoundary->rect.right = rectBoundary.right;
ptrSetBoundary->DispSizeX = DispSizeX;
ptrSetBoundary->DispSizeY = DispSizeY;
ptrSetBoundary->MilDisplayId = MilDisplayId;
if(ptrSetBoundary->DoModal() == IDOK){
rectBoundary.top = ptrSetBoundary->rect.top;
rectBoundary.left = ptrSetBoundary->rect.left;
rectBoundary.bottom = ptrSetBoundary->rect.bottom;
rectBoundary.right = ptrSetBoundary->rect.right;
}
}
// cfg 颇老肺 何磐 祸裹困, 拱眉 茫扁 咯何, 版扁厘 康开 蔼 佬扁
void CVisionView::OnLoadConfiguration()
{
// TODO: Add your control notification handler code here
if(bPlay)
return;
//KillTimer(1);
MdigHalt(MilDigitizerId);
FILE *fp;
long i;
CFileDialog FileDlg(TRUE, "cfg", "default", OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
"CFG files(*.cfg)|*.cfg|All files(*.*)|*.*||", this);
if(FileDlg.DoModal() == IDOK)
{
if((fp = fopen((const char *)FileDlg.GetPathName(), "r")) == NULL)
MessageBox("File Open Error");
else {
MgraColor(M_DEFAULT, M_RGB888(0, 0, 0));
MgraClear(M_DEFAULT, MilImageBufferId);
MgraFont(M_DEFAULT, M_FONT_DEFAULT_LARGE);
MgraColor(M_DEFAULT, M_RGB888(255, 0, 255));
MgraText(M_DEFAULT, MilImageBufferId, DispSizeX/2-200, DispSizeY/2-45, "Loading New Configuration ...");
MgraFont(M_DEFAULT, M_FONT_DEFAULT);
MgraText(M_DEFAULT, MilImageBufferId, DispSizeX/2-200, DispSizeY/2+10, "Wait a moment.");
fscanf(fp, "%d", &rectBoundary.top);
fscanf(fp, "%d", &rectBoundary.left);
fscanf(fp, "%d", &rectBoundary.bottom);
fscanf(fp, "%d", &rectBoundary.right);
fscanf(fp, "%d",&LowerBoundOfBallSize);
fscanf(fp, "%d",&UpperBoundOfBallSize);
fscanf(fp, "%d",&LowerBoundOfBigTeamSize);
fscanf(fp, "%d",&UpperBoundOfBigTeamSize);
fscanf(fp, "%d",&LowerBoundOfSmallIDSize);
fscanf(fp, "%d",&UpperBoundOfSmallIDSize);
fscanf(fp, "%d",&LowerBoundOfOpponentSize);
fscanf(fp, "%d",&UpperBoundOfOpponentSize);
fscanf(fp, "%d",&DistanceBetweenBigTeamAndSmallID);
for(i = 0;i < 6;i++)
fscanf(fp, "%d", &BallColor[i]);
for(i = 0;i < 6;i++)
fscanf(fp, "%d", &TeamColor[i]);
for(i = 0;i < 6;i++)
fscanf(fp, "%d", &IdColor[0][i]);
// for(i = 0;i < 6;i++)
// fscanf(fp, "%d", &IdColor[1][i]);
// for(i = 0;i < 6;i++)
// fscanf(fp, "%d", &IdColor[2][i]);
for(i = 0;i < 6;i++)
fscanf(fp, "%d", &OpponentColor[i]);
fscanf(fp, "%d", &m_bFlagFindBall);
fscanf(fp, "%d", &m_bFlagFindHome1);
fscanf(fp, "%d", &m_bFlagFindHome2);
// fscanf(fp, "%d", &m_bFlagFindHome3);
// fscanf(fp, "%d", &m_bFlagFindHome4);
fscanf(fp, "%d", &m_bFlagFindHgoalie);
fscanf(fp, "%d", &m_bFlagFindOpponent1);
fscanf(fp, "%d", &m_bFlagFindOpponent2);
fscanf(fp, "%d", &m_bFlagFindOpponent3);
// fscanf(fp, "%d", &m_bFlagFindOpponent4);
// fscanf(fp, "%d", &m_bFlagFindOpponent5);
bFlagFindBall = m_bFlagFindBall;
bFlagFindHomeRobot[HOME1] = m_bFlagFindHome1;
bFlagFindHomeRobot[HOME2] = m_bFlagFindHome2;
// bFlagFindHomeRobot[HOME3] = m_bFlagFindHome3;
// bFlagFindHomeRobot[HOME4] = m_bFlagFindHome4;
bFlagFindHomeRobot[HGOALIE] = m_bFlagFindHgoalie;
bFlagFindOpponent[OPP1] = m_bFlagFindOpponent1;
bFlagFindOpponent[OPP2] = m_bFlagFindOpponent2;
bFlagFindOpponent[OPP3] = m_bFlagFindOpponent3;
// bFlagFindOpponent[OPP4] = m_bFlagFindOpponent4;
// bFlagFindOpponent[OPP5] = m_bFlagFindOpponent5;
UpdateLUTAllColor();
fscanf(fp, "%d", &bFlagIsOurHomeLeft);
}
fclose(fp);
}
UpdateData(FALSE);
MdigGrabContinuous(MilDigitizerId, MilImageBufferId);
Invalidate();
}
// 漂沥 祸狼 RGB甫 YUV肺 函券窍咯 lookup table 盎脚窍扁
void CVisionView::UpdateLUTcolor(short *ptrNewColor, const int Color)
{
int r, g, b, y, u, v, Ly, Uy, Lu, Uu, Lv, Uv;
Ly = *ptrNewColor;
Uy = *(ptrNewColor+1);
Lu = *(ptrNewColor+2);
Uu = *(ptrNewColor+3);
Lv = *(ptrNewColor+4);
Uv = *(ptrNewColor+5);
for(r=0;r<256;r++)
for(g=0;g<256;g++)
for(b=0;b<256;b++) {
index_lut = ((r<<16) + (g<<8) + b);
if(LUTcolor[index_lut] == Color)
LUTcolor[index_lut] = NONE_COLOR;
y = (int)(299*r + 587*g + 114*b);
y = min(255000,max(y,0));
u = (int)(565*(1000*b-y) + 128000000)/1000000;
u = min(255,max(u,0));
v = (int)(713*(1000*r-y) + 128000000)/1000000;
v = min(255,max(v,0));
y /= 1000;
if(y >= Ly && y <= Uy && u >= Lu && u <= Uu && v >= Lv && v <= Uv)
LUTcolor[index_lut] = Color;
}
}
// 葛电 祸狼 RGB甫 YUV肺 函券窍咯 lookup table 盎脚窍扁
void CVisionView::UpdateLUTAllColor()
{
int r, g, b, y, u, v;
for(r=0;r<256;r++)
for(g=0;g<256;g++)
for(b=0;b<256;b++) {
index_lut = ((r<<16) + (g<<8) + b);
y = (int)(299*r + 587*g + 114*b);
y = min(255000,max(y,0));
u = (int)(565*(1000*b-y) + 128000000)/1000000;
u = min(255,max(u,0));
v = (int)(713*(1000*r-y) + 128000000)/1000000;
v = min(255,max(v,0));
y /= 1000;
if(y >= BallColor[0] && y <= BallColor[1] && u >= BallColor[2] && u <= BallColor[3] && v >= BallColor[4] && v <= BallColor[5])
LUTcolor[index_lut] = BALL_COLOR;
else if(y >= TeamColor[0] && y <= TeamColor[1] && u >= TeamColor[2] && u <= TeamColor[3] && v >= TeamColor[4] && v <= TeamColor[5])
LUTcolor[index_lut] = TEAM_COLOR;
else if(y >= IdColor[0][0] && y <= IdColor[0][1] && u >= IdColor[0][2] && u <= IdColor[0][3] && v >= IdColor[0][4] && v <= IdColor[0][5])
LUTcolor[index_lut] = ID1_COLOR;
// else if(y >= IdColor[1][0] && y <= IdColor[1][1] && u >= IdColor[1][2] && u <= IdColor[1][3] && v >= IdColor[1][4] && v <= IdColor[1][5])
// LUTcolor[index_lut] = ID2_COLOR;
// else if(y >= IdColor[2][0] && y <= IdColor[2][1] && u >= IdColor[2][2] && u <= IdColor[2][3] && v >= IdColor[2][4] && v <= IdColor[2][5])
// LUTcolor[index_lut] = ID3_COLOR;
else if( (bFlagFindOpponent[OPP1] || bFlagFindOpponent[OPP2] || bFlagFindOpponent[OPP3]) // || bFlagFindOpponent[OPP4] || bFlagFindOpponent[OPP5])
&& y >= OpponentColor[0] && y <= OpponentColor[1] && u >= OpponentColor[2] && u <= OpponentColor[3] && v >= OpponentColor[4] && v <= OpponentColor[5])
LUTcolor[index_lut] = OPPONENT_COLOR;
else
LUTcolor[index_lut] = NONE_COLOR;
}
}
// cfg 历厘窍扁
void CVisionView::OnSaveConfiguration()
{
// TODO: Add your control notification handler code here
if(bPlay)
return;
//KillTimer(1);
MdigHalt(MilDigitizerId);
FILE *fp;
short i;
UpdateData(TRUE);
CFileDialog FileDlg(FALSE, "cfg", "default", OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
"CFG files(*.cfg)|*.cfg|All files(*.*)|*.*||", this);
if(FileDlg.DoModal() == IDOK)
{
if((fp = fopen((const char *)FileDlg.GetPathName(), "w")) == NULL)
MessageBox("File Open Error");
else {
fprintf(fp, "%d ", rectBoundary.top);
fprintf(fp, "%d ", rectBoundary.left);
fprintf(fp, "%d ", rectBoundary.bottom);
fprintf(fp, "%d ", rectBoundary.right);
fprintf(fp,"\n");
fprintf(fp, "%d ",LowerBoundOfBallSize);
fprintf(fp, "%d ",UpperBoundOfBallSize);
fprintf(fp, "%d ",LowerBoundOfBigTeamSize);
fprintf(fp, "%d ",UpperBoundOfBigTeamSize);
fprintf(fp, "%d ",LowerBoundOfSmallIDSize);
fprintf(fp, "%d ",UpperBoundOfSmallIDSize);
fprintf(fp, "%d ",LowerBoundOfOpponentSize);
fprintf(fp, "%d\n",UpperBoundOfOpponentSize);
fprintf(fp, "%d\n",DistanceBetweenBigTeamAndSmallID);
for(i = 0;i < 6;i++)
fprintf(fp, "%d ", BallColor[i]);
fprintf(fp,"\n");
for(i = 0;i < 6;i++)
fprintf(fp, "%d ", TeamColor[i]);
fprintf(fp,"\n");
for(i = 0;i < 6;i++)
fprintf(fp, "%d ", IdColor[0][i]);
fprintf(fp,"\n");
// for(i = 0;i < 6;i++)
// fprintf(fp, "%d ", IdColor[1][i]);
// fprintf(fp,"\n");
// for(i = 0;i < 6;i++)
// fprintf(fp, "%d ", IdColor[2][i]);
// fprintf(fp,"\n");
for(i = 0;i < 6;i++)
fprintf(fp, "%d ", OpponentColor[i]);
fprintf(fp,"\n");
fprintf(fp, "%d ", m_bFlagFindBall);
fprintf(fp, "%d ", m_bFlagFindHome1);
fprintf(fp, "%d ", m_bFlagFindHome2);
// fprintf(fp, "%d ", m_bFlagFindHome3);
// fprintf(fp, "%d ", m_bFlagFindHome4);
fprintf(fp, "%d ", m_bFlagFindHgoalie);
fprintf(fp, "%d ", m_bFlagFindOpponent1);
fprintf(fp, "%d ", m_bFlagFindOpponent2);
fprintf(fp, "%d ", m_bFlagFindOpponent3);
// fprintf(fp, "%d ", m_bFlagFindOpponent4);
// fprintf(fp, "%d ", m_bFlagFindOpponent5);
fprintf(fp,"\n");
fprintf(fp, "%d ", bFlagIsOurHomeLeft);
}
fclose(fp);
}
MdigGrabContinuous(MilDigitizerId, MilImageBufferId);
Invalidate();
}
// 祸 裹困 犁炼沥窍扁
void CVisionView::OnChangeColor()
{
// TODO: Add your control notification handler code here
if(bPlay)
return;
//KillTimer(1);
// Initialize values of SetColor Dialog
ptrSetColor->bSetColor = FALSE;
InitSetColorDlg();
if(ptrSetColor->DoModal() == IDOK)
SetColorUpdate();
}
// Initialize values of SetColor Dialog
// 祸 裹困 炼沥 困茄 措拳芒 檬扁拳
void CVisionView::InitSetColorDlg()
{
short i;
ptrSetColor->m_nSelectedColor = 0;
ptrSetColor->MilDisplayId = MilDisplayId;
ptrSetColor->MilDigitizerId = MilDigitizerId;
ptrSetColor->MilImageBufferId = MilImageBufferId;
ptrSetColor->DispSizeX = DispSizeX;
ptrSetColor->DispSizeY = DispSizeY;
ptrSetColor->pImageBuffer = ImageBuffer;
ptrSetColor->m_bBlackBackground = TRUE;
//khs MdispControl(MilDisplayId, M_WINDOW_COLOR, M_ENABLE);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?