📄 videodlg.cpp
字号:
sample_rect.right = sample_rect.left;
if(sample_rect.bottom < sample_rect.top)
sample_rect.bottom = sample_rect.top;
KillTimer(3);
}
}
m_bIsLBDown = FALSE;
CDialog::OnLButtonUp(nFlags, point);
}
void CVideoDlg::OnMouseMove(UINT nFlags, CPoint point)
{
if((point.x<640)&&(point.y<480))
{
if (m_pConfigDlg->m_bMY_door && m_bIsLBDown)
{
my_Door.right = point.x;
my_Door.bottom = point.y;
if(my_Door.right < my_Door.left)
my_Door.right = my_Door.left;
if(my_Door.bottom < my_Door.top)
my_Door.bottom = my_Door.top;
DrawFieldRect(my_Door);
}
if (m_pConfigDlg->m_bTh_door && m_bIsLBDown)
{
th_Door.right = point.x;
th_Door.bottom = point.y;
if(th_Door.right < th_Door.left)
th_Door.right = th_Door.left;
if(th_Door.bottom < th_Door.top)
th_Door.bottom = th_Door.top;
DrawFieldRect(th_Door);
}
if(m_pConfigDlg->m_bCheckGetFieldRect && m_bIsLBDown)
{
m_FieldRect.right = point.x;
m_FieldRect.bottom = point.y;
if(m_FieldRect.right < m_FieldRect.left)
m_FieldRect.right = m_FieldRect.left;
if(m_FieldRect.bottom < m_FieldRect.top)
m_FieldRect.bottom = m_FieldRect.top;
DrawFieldRect(m_FieldRect);
}
if(m_pConfigDlg->m_rect_sample && m_bIsLBDown)
{
sample_rect.right = point.x;
sample_rect.bottom = point.y;
if(sample_rect.right < sample_rect.left)
sample_rect.right = sample_rect.left;
if(sample_rect.bottom < sample_rect.top)
sample_rect.bottom = sample_rect.top;
DrawFieldRect(sample_rect);
}
}
CDialog::OnMouseMove(nFlags, point);
}
void CVideoDlg::TimeStart()
{
m_StartTime = CTime::GetCurrentTime();
m_TotalSeconds = 0;
}
void CVideoDlg::TimeEnd()
{
CTimeSpan ts;
m_EndTime = CTime::GetCurrentTime();
ts = m_EndTime - m_StartTime;
m_TotalSeconds = ts.GetTotalSeconds();
}
void CVideoDlg::InitTeam()
{
for(int i = 0; i < 5; i++)
{
Vector MyGoal;//我方球门位置
Vector OpponentGoal;//对方球门位置
Vector LeftBackPoint;//左后卫位置
Vector RightBackPoint;//右后卫位置
Vector LeftForwardPoint;//左前锋位置
Vector RightForwardPoint;//右前锋位置
g_MyTeam[i].Set_Num(i);
g_MyTeam[i].Set_vPos(Vector(-100, -100));
g_MyTeam[i].Set_m_Angle(0);
g_MyTeam[i].Set_Width(ROBOT_WIDTH);
g_MyTeam[i].Set_Length(ROBOT_LENGTH);
g_MyTeam[i].Set_vL(0);
g_MyTeam[i].Set_vR(0);
g_MyTeam[i].Set_bIsLive(0);
g_MyTeam[i].Set_bIsLeft(TRUE);
MyGoal.x = (double)m_FieldRect.left;
MyGoal.y = (double)(m_FieldRect.top + m_FieldRect.bottom) / 2.0;
OpponentGoal.x = (double)m_FieldRect.right;
OpponentGoal.y = (double)(m_FieldRect.top + m_FieldRect.bottom) / 2.0;
LeftBackPoint.x = (double)((3*m_FieldRect.left+m_FieldRect.right)/4.0);
LeftBackPoint.y = (double)((3*m_FieldRect.top+m_FieldRect.bottom)/4.0);
RightBackPoint.x = (double)((3*m_FieldRect.left+m_FieldRect.right)/4.0);
RightBackPoint.y = (double)((m_FieldRect.top+3*m_FieldRect.bottom)/4.0);
LeftForwardPoint.x = (double)((m_FieldRect.left+3*m_FieldRect.right)/4.0);
LeftForwardPoint.y = (double)((3*m_FieldRect.top+m_FieldRect.bottom)/4.0);
RightForwardPoint.x = (double)((m_FieldRect.left+3*m_FieldRect.right)/4.0);
RightForwardPoint.y = (double)((m_FieldRect.top+3*m_FieldRect.bottom)/4.0);
if(!g_MyTeam[i].Get_bIsLeft())
{
Vector temp;
temp = MyGoal;
MyGoal = OpponentGoal;
OpponentGoal = temp;
temp = LeftBackPoint;
LeftBackPoint = RightForwardPoint;
RightForwardPoint = temp;
temp = RightBackPoint;
RightBackPoint = LeftForwardPoint;
LeftForwardPoint = temp;
}
g_MyTeam[i].Set_MyGoal(MyGoal);
g_MyTeam[i].Set_OpponentGoal(OpponentGoal);
g_MyTeam[i].Set_LeftBackPoint(LeftBackPoint);
g_MyTeam[i].Set_RightBackPoint(RightBackPoint);
g_MyTeam[i].Set_LeftForwardPoint(LeftForwardPoint);
g_MyTeam[i].Set_RightForwardPoint(RightForwardPoint);
g_TheirTeam[i].Set_Num(i);
g_TheirTeam[i].Set_vPos(Vector(-100, -100));
g_TheirTeam[i].Set_m_Angle(0);
g_TheirTeam[i].Set_Width(THEIR_LENGTH);
g_TheirTeam[i].Set_Length(THEIR_WIDTH);
g_TheirTeam[i].Set_vL(0);
g_TheirTeam[i].Set_vR(0);
g_TheirTeam[i].Set_bIsLive(0);
g_TheirTeam[i].Set_bIsLeft(FALSE);
g_TheirTeam[i].Set_MyGoal(OpponentGoal);
g_TheirTeam[i].Set_OpponentGoal(MyGoal);
}
g_Ball.Set_vPos(Vector(-100, -100));
g_Ball.Set_Width(5);
g_Ball.Set_Length(5);
g_Ball.Set_bIsLive(0);
int xCenter, yCenter;
int l, t, r, b;
l = m_FieldRect.left;
t = m_FieldRect.top;
r = m_FieldRect.right;
b = m_FieldRect.bottom;
xCenter = (l + r) / 2;
yCenter = (t + b) / 2;
g_LeftTopRect = CRect(l, t, xCenter, yCenter);
g_RightTopRect = CRect(xCenter, t, r, yCenter);
g_LeftBottomRect = CRect(l, yCenter, xCenter, b);
g_RightBottomRect = CRect(xCenter, yCenter, r, b);
//初始化场地信息
Player::FieldStruct.m_Field=CRect(0,m_FieldRect.bottom-m_FieldRect.top,m_FieldRect.right-m_FieldRect.left,0);
Player::FieldStruct.Goal_Width=GOAL_WIDTH;
Player::FieldStruct.m_MyGoal=Vector(0,Player::FieldStruct.m_Field.Height()/2);
Player::FieldStruct.m_TheirGoal=Vector(Player::FieldStruct.m_Field.Width(),Player::FieldStruct.m_Field.Height()/2);
}
void CVideoDlg::OnSnapToMem()
{
StaticMemAlloc(&pPage,&pPhysAddr,&pHandle,&pLineAddr);
CG400SnapOneToMem(hcg400, pPhysAddr, pPage*4*1024, FRAME);
if (m_pConfigDlg->m_bCheckDisplayField)
{
DrawFieldRect(m_FieldRect);
DrawFieldRect(my_Door);
DrawFieldRect(th_Door);
}
}
void CVideoDlg::OnDisplay()
{
EndCG400(hcg400);
InitVideo();
}
void CVideoDlg::OnStopdisp()
{
EndCG400(hcg400);
CDialog::OnCancel();
}
void CVideoDlg::OnDefault()
{
m_brt_scrollbar.SetScrollPos(128);
m_con_scrollbar.SetScrollPos(128);
m_hue_scrollbar.SetScrollPos(128);
m_sat_scrollbar.SetScrollPos(128);
char sVal[16];
itoa( m_brt_scrollbar.GetScrollPos(), sVal, 10);
m_brt_edit = _T(sVal);
itoa( m_con_scrollbar.GetScrollPos(), sVal, 10);
m_con_edit = _T(sVal);
itoa( m_hue_scrollbar.GetScrollPos(), sVal, 10);
m_hue_edit = _T(sVal);
itoa( m_sat_scrollbar.GetScrollPos(), sVal, 10);
m_sat_edit = _T(sVal);
CG400SetADParam(hcg400, AD_BRIGHTNESS, 128);
CG400SetADParam(hcg400, AD_CONTRAST, 128);
CG400SetADParam(hcg400, AD_HUE, 128);
CG400SetADParam(hcg400, AD_SATURATION, 128);
UpdateData(FALSE);
//差补
g_MyTeam[0].Diffrence=0;
g_MyTeam[1].Diffrence=0;
g_MyTeam[2].Diffrence=0;
g_MyTeam[3].Diffrence=0;
g_MyTeam[4].Diffrence=0;
}
void CVideoDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
OnGet();
int nCurPos;
switch( nSBCode ){
case SB_THUMBPOSITION:
pScrollBar->SetScrollPos( nPos );
break;
case SB_LINERIGHT:
nCurPos = pScrollBar->GetScrollPos();
nCurPos++;
if( nCurPos > 255 )
nCurPos = 255;
pScrollBar->SetScrollPos( nCurPos );
break;
case SB_LINELEFT:
nCurPos = pScrollBar->GetScrollPos();
nCurPos--;
if( nCurPos < 0 )
nCurPos = 0;
pScrollBar->SetScrollPos( nCurPos );
break;
case SB_PAGERIGHT:
nCurPos = pScrollBar->GetScrollPos();
nCurPos += 10;
if( nCurPos > 255 )
nCurPos = 255;
pScrollBar->SetScrollPos( nCurPos );
break;
case SB_PAGELEFT:
nCurPos = pScrollBar->GetScrollPos();
nCurPos -= 10;
if( nCurPos < 0 )
nCurPos = 0;
pScrollBar->SetScrollPos( nCurPos );
break;
case SB_THUMBTRACK:
pScrollBar->SetScrollPos( nPos );
break;
}
nCurPos = pScrollBar->GetScrollPos();
char sPos[16];
itoa( nCurPos, sPos, 10 );
if( pScrollBar == &m_brt_scrollbar ){
m_brt_edit = _T(sPos);
CG400SetADParam(hcg400, AD_BRIGHTNESS, nCurPos);
}else
if( pScrollBar == &m_con_scrollbar ){
m_con_edit = _T(sPos);
CG400SetADParam(hcg400, AD_CONTRAST, nCurPos);
}
else
if( pScrollBar == &m_hue_scrollbar ){
m_hue_edit = _T(sPos);
CG400SetADParam(hcg400, AD_HUE, nCurPos);
}
else
if( pScrollBar == &m_sat_scrollbar){
m_sat_edit = _T(sPos);
CG400SetADParam(hcg400, AD_SATURATION, nCurPos);
}
/* else
if( pScrollBar == &m_yuv_yh){
m_y_high = nCurPos;//_T(sPos);
// m_pScrollBar->SetScrollPos( nPos );
}else
if( pScrollBar == &m_yuv_uh){
m_u_high = nCurPos;//_T(sPos);
// m_pScrollBar->SetScrollPos( nPos );
}else
if( pScrollBar == &m_yuv_vh){
m_v_high = nCurPos;//_T(sPos);
// m_pScrollBar->SetScrollPos( nPos );
}else
if( pScrollBar == &m_yuv_yl){
m_y_low = nCurPos;//_T(sPos);
// m_pScrollBar->SetScrollPos( nPos );
}else
if( pScrollBar == &m_yuv_ul){
m_u_low = nCurPos;//_T(sPos);
// m_pScrollBar->SetScrollPos( nPos );
}else
if( pScrollBar == &m_yuv_vl){
m_v_low = nCurPos;//_T(sPos);
// m_pScrollBar->SetScrollPos( nPos );
}*/
UpdateData(FALSE);
OnSave();
// UpdateData(FALSE);
CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}
void CVideoDlg::DrawFieldRect(CRect rect)
{
int RectColor[3];
RectColor[0] = 0;
RectColor[1] = 255;
RectColor[2] = 0;
if(rect.top < 0) rect.top = 0;
if(rect.bottom >480) rect.bottom = 480;
if(rect.left < 0) rect.left = 0;
if(rect.right > 640) rect.right = 640;
CDC*pDC=GetDC();
CPen pen(PS_SOLID,1,RGB(RectColor[0],RectColor[1],RectColor[2]));
pDC->SelectObject(pen);
pDC->MoveTo(rect.left,rect.top);
pDC->LineTo(rect.right,rect.top);
pDC->LineTo(rect.right,rect.bottom);
pDC->LineTo(rect.left,rect.bottom);
pDC->LineTo(rect.left,rect.top);
ReleaseDC(pDC);
}
void CVideoDlg::OnButton1()
{
DWORD t;
t=GetTickCount();
OnRead();
SearchObject();
t=GetTickCount()-t;
m_time=t;
UpdateData(false);
SetPixDrawAllCap();
}
void CVideoDlg::OnTimer(UINT nIDEvent)
{
if (m_pConfigDlg->m_bCheckGetFieldRect)
{// TODO: Add your message handler code here and/or call default
DrawFieldRect(m_FieldRect);
}
if (m_pConfigDlg->m_bMY_door)
{
DrawFieldRect(my_Door);
}
if (m_pConfigDlg->m_bTh_door)
{
DrawFieldRect(th_Door);
}
CDialog::OnTimer(nIDEvent);
}
void CVideoDlg::SetPixelDrawRect(CRect rect)
{
if(rect.top < 0) rect.top = 0;
if(rect.bottom >480) rect.bottom = 480;
if(rect.left < 0) rect.left = 0;
if(rect.right > 640) rect.right = 640;
CDC* pDC = GetDC();
CRect DisplayRect;
GetClientRect(&DisplayRect);
for(int i=rect.left;i<rect.right;i++)
{
pDC->SetPixel(i,rect.top,RGB(0,255,0));
pDC->SetPixel(i,rect.bottom,RGB(0,255,0));
}
for(int j=rect.top;j<rect.bottom;j++)
{
pDC->SetPixel(rect.left,j,RGB(0,255,0));
pDC->SetPixel(rect.right,j,RGB(0,255,0));
}
ReleaseDC(pDC);
}
void CVideoDlg::SetPixDrawAllCap()
{
CPoint point;
int n;
CRect TempRect;
/////////////////////////////////画重心/////////////////////////////////////////
//画我队标志重心
if(m_pConfigDlg->m_bCheckCapRect)
{
for(n = 0; n < 5; n++)
{
point.x=My_LableCentreGravity[n][1];//第n个队标
point.y=My_LableCentreGravity[n][0];
TempRect.left=point.x-m_pConfigDlg->m_ObjectDia*2;
TempRect.right=point.x+m_pConfigDlg->m_ObjectDia*2;
TempRect.top=point.y-m_pConfigDlg->m_ObjectDia*2;
TempRect.bottom=point.y+m_pConfigDlg->m_ObjectDia*2;
SetPixelDrawRect(TempRect);
My_LableCentreGravity[n][1]=0;
My_LableCentreGravity[n][0]=0;
}
//画他队标志重心
for(n = 0; n < 5; n++)
{
point.x=Their_LableCentreGravity[n][1];
point.y=Their_LableCentreGravity[n][0];
TempRect.left=point.x-m_pConfigDlg->m_ObjectDia*2;
TempRect.right=point.x+m_pConfigDlg->m_ObjectDia*2;
TempRect.top=point.y-m_pConfigDlg->m_ObjectDia*2;
TempRect.bottom=point.y+m_pConfigDlg->m_ObjectDia*2;
SetPixelDrawRect(TempRect);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -