visionview.cpp
来自「FIRA 3对3 机器人足球PC端控制程序。」· C++ 代码 · 共 2,092 行 · 第 1/5 页
CPP
2,092 行
// Resize frame to the dimensions of the multimedia window
GetParent()->CalcWindowRect(&MMRect);
MMRect.OffsetRect(-MMRect.left,-MMRect.top);
GetParent()->SetWindowPos(&wndTopMost, 0, 0,
MMRect.right+PosOffset,
MMRect.bottom+PosOffset,
SWP_NOACTIVATE|SWP_NOMOVE);
GetParent()->InvalidateRect(NULL,FALSE);
MgraFont(M_DEFAULT, M_FONT_DEFAULT_LARGE);
MgraColor(M_DEFAULT, M_RGB888(255, 255, 0));
MgraText(M_DEFAULT, MilImageBufferId, DispSizeX/2-250, DispSizeY/2-75, "Welcome to YUJIN Robot Soccer!");
MgraFont(M_DEFAULT, M_FONT_DEFAULT_MEDIUM);
MgraColor(M_DEFAULT, M_RGB888(0, 0, 255));
MgraText(M_DEFAULT, MilImageBufferId, DispSizeX/2-150, DispSizeY/2+15, "Load VXD.");
}
}
}
///////////////////////////////////////////////////////////////////////////////////
// MIL: Code that will be executed when a view is first attached to the document //
///////////////////////////////////////////////////////////////////////////////////
////////////////////////////////
// initialization by defaults //
////////////////////////////////
rectBoundary = CRect(0, 0, DispSizeX-1, DispSizeY-1);
bFlagIsOurHomeLeft = TRUE;
m_bFlagFindBall = TRUE;
m_bFlagFindHgoalie = TRUE;
m_bFlagFindHome1 = TRUE;
m_bFlagFindHome2 = TRUE;
m_bFlagFindHome3 = TRUE;
m_bFlagFindHome4 = TRUE;
m_bFlagFindOpponent1 = TRUE;
m_bFlagFindOpponent2 = TRUE;
m_bFlagFindOpponent3 = TRUE;
m_bFlagFindOpponent4 = TRUE;
m_bFlagFindOpponent5 = TRUE;
bFlagFindBall = TRUE;
bFlagFindHomeRobot[HOME1] = TRUE;
bFlagFindHomeRobot[HOME2] = TRUE;
// bFlagFindHomeRobot[HOME3] = TRUE;
// bFlagFindHomeRobot[HOME4] = TRUE;
bFlagFindHomeRobot[HGOALIE] = TRUE;
bFlagFindOpponent[OPP1] = TRUE;
bFlagFindOpponent[OPP2] = TRUE;
bFlagFindOpponent[OPP3] = TRUE;
// bFlagFindOpponent[OPP4] = TRUE;
// bFlagFindOpponent[OPP5] = TRUE;
bFlagBallFound = FALSE;
bFlagHomeRobotFound[HOME1] = FALSE;
bFlagHomeRobotFound[HOME2] = FALSE;
// bFlagHomeRobotFound[HOME3] = FALSE;
// bFlagHomeRobotFound[HOME4] = FALSE;
bFlagHomeRobotFound[HGOALIE] = FALSE;
bFlagOpponentFound[OPP1] = FALSE;
bFlagOpponentFound[OPP2] = FALSE;
bFlagOpponentFound[OPP3] = FALSE;
// bFlagOpponentFound[OPP4] = FALSE;
// bFlagOpponentFound[OPP5] = FALSE;
/////////////////////////////////////////////////
// Choi.W.H 2000.02.22
lNFindMiss[BALL] = 0;
lNFindMiss[HOME1] = 0;
lNFindMiss[HOME2] = 0;
lNFindMiss[HGOALIE] = 0;
// Choi.W.H 2000.02.22
//////////////////////////////////////////////////////
LowerBoundOfBigTeamSize = DEF_LBOUND_BIG_TEAM_SIZE;
UpperBoundOfBigTeamSize = DEF_UBOUND_BIG_TEAM_SIZE;
LowerBoundOfSmallIDSize = DEF_LBOUND_SMALL_ID_SIZE;
UpperBoundOfSmallIDSize = DEF_UBOUND_SMALL_ID_SIZE;
LowerBoundOfBallSize = DEF_LBOUND_BALL_SIZE;
UpperBoundOfBallSize = DEF_UBOUND_BALL_SIZE;
LowerBoundOfOpponentSize = DEF_LBOUND_OPPONENT_SIZE;
UpperBoundOfOpponentSize = DEF_UBOUND_OPPONENT_SIZE;
/////////////////////////////////////////////////
// Choi.W.H 2000.02.24
DistanceBetweenBigTeamAndSmallID = (short)(sqrt(2.) * DEF_SIZE_X_ROBOT);
//DistanceBetweenBigTeamAndSmallID = (short)(sqrt(2)/2. * DEF_SIZE_X_ROBOT);
// Choi.W.H 2000.02.24
//////////////////////////////////////////////////////
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 = 0;
m_nSetting = 5;
// m_nTest = FALSE;
// Parade_Start = false; // 欺饭捞靛 檬扁 厚劝己拳 daewone
//by kui hong
// Determine initial title of mainframe window
GetParentFrame()->SetWindowText("Supervisor Program of YUJIN 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);
// GetDlgItem(IDC_PARADE_INIT)->EnableWindow(FALSE);
// GetDlgItem(IDC_PARADE_START)->EnableWindow(FALSE);
// GetDlgItem(IDC_PARADE_STOP)->EnableWindow(FALSE);
// Get the position of client window on screen
GetWndPos();
UpdateData(FALSE);
}
// --------------------------------------------------------
// Param : none
// Return : none
// Remark : 弊贰滚狼 叼胶敲饭捞 汲沥 力芭, 皋葛府 立辟 靛扼捞滚 摧扁
// --------------------------------------------------------
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);
if (m_primary_surface) m_primary_surface->Release();
if (m_dd_obj) m_dd_obj->Release();
return CFormView::DestroyWindow();
}
// --------------------------------------------------------
// Param : none
// Return : none
// Remark :
// --------------------------------------------------------
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;
}
// --------------------------------------------------------
// Param : none
// Return : none
// Remark : 漠扼 汲沥 劝己
// --------------------------------------------------------
void CVisionView::OnSetColor()
{
// TODO: Add your control notification handler code here
if(bPlay)
return;
//KillTimer(1);
bSetColor = TRUE;
bSetRobotSize = FALSE;
}
// --------------------------------------------------------
// Param : none
// Return : none
// Remark : 版扁厘 版拌 汲沥窍扁; 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;
}
}
// --------------------------------------------------------
// Param : none
// Return : none
// Remark : 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]);
/////////////////////////////////////////////////
// Choi.W.H 2000.02.18
for(i = 0;i < 6;i++)
fscanf(fp, "%d", &IdColor[1][i]);
for(i = 0;i < 6;i++)
fscanf(fp, "%d", &IdColor[2][i]);
// Choi.W.H 2000.02.18
////////////////////////////////////////////////
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;
// DW BAEK Neo Robot
fscanf(fp, "%d", &Ref_Hue);
fscanf(fp, "%d", &Ref_Saturation);
fscanf(fp, "%d", &Ref_Contrast);
fscanf(fp, "%d", &Ref_Brightness);
ColorParameter[0] = Ref_Hue;
ColorParameter[1] = Ref_Saturation;
ColorParameter[2] = Ref_Contrast;
ColorParameter[3] = Ref_Brightness;
// neorobot
UpdateLUTAllColor();
fscanf(fp, "%d", &bFlagIsOurHomeLeft);
}
fclose(fp);
}
MdigReference(MilDigitizerId, M_HUE_REF, ColorParameter[0]);
MdigReference(MilDigitizerId, M_SATURATION_REF, ColorParameter[1]);
MdigReference(MilDigitizerId, M_CONTRAST_REF, ColorParameter[2]);
MdigReference(MilDigitizerId, M_BRIGHTNESS_REF, ColorParameter[3]);
UpdateData(FALSE);
MdigGrabContinuous(MilDigitizerId, MilImageBufferId);
Invalidate();
}
// --------------------------------------------------------
// Param : none
// Return : none
// Remark : 漂沥 祸狼 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;
}
}
// --------------------------------------------------------
// Param : none
// Return : none
// Remark : 葛电 祸狼 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++) {
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?