⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 videodlg.cpp

📁 本程序是2005年参加中国机器人大赛的比赛程序
💻 CPP
📖 第 1 页 / 共 5 页
字号:
				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 + -