예제 #1
0
void CRobot::DrawRobot(CDC* pDC)
{
	const float deg45 = M_PI / 4;
	const float deg135 = M_PI / 4 * 3;
	const float deg15 = M_PI / 180 * 15;

	for (UINT count = 0; count < mVectRobot.size(); count++){
		ROBOT *robot = &mVectRobot.at(count);

		DrawSensorBeam(robot, pDC);
		DrawTrajectory(pDC, robot);

		float robot_radius = robot->Size / 2;
		CPoint pos = CPoint(robot->XPos, robot->YPos);

		pDC->MoveTo(pos);

		// Draw robot
		CPen robot_pen(PS_SOLID, 1, OBSTACLE);
		CPen *old_pen = pDC->SelectObject(&robot_pen);

		CBrush brush;
		brush.CreateSolidBrush(robot->RobotColor);
		CBrush *old_brush = pDC->SelectObject(&brush);

		pDC->Ellipse(robot->XPos - robot_radius, robot->YPos - robot_radius, robot->XPos + robot_radius, robot->YPos + robot_radius);	

		pDC->SelectObject(old_brush);
		
		int l = robot_radius - 4;

		// For wheels
		CPoint pt1 = mGeom.Rotate(pos, l, robot->Theta + deg45);
		CPoint pt2 = mGeom.Rotate(pos, l, robot->Theta + deg135);
		CPoint pt3 = mGeom.Rotate(pos, l, robot->Theta - deg45 );
		CPoint pt4 = mGeom.Rotate(pos, l, robot->Theta - deg135);

		// For Head
		CPoint pt0 = mGeom.Rotate(pos, robot_radius, robot->Theta);
		CPoint pt5 = mGeom.Rotate(pos, l, robot->Theta + deg15 );
		CPoint pt6 = mGeom.Rotate(pos, l, robot->Theta - deg15);
		
		// Draw head
		pDC->MoveTo(pt5);
		pDC->LineTo(pt0);
		pDC->LineTo(pt6);

		// Draw wheels
		pDC->MoveTo(pt1);
		pDC->LineTo(pt2);
		pDC->MoveTo(pt3);
		pDC->LineTo(pt4);

		pDC->SelectObject(old_pen);
	}

	DrawLocationMark(pDC);
}
void PreviewWindow::Render(wxDC& dc)
{
	dc.SetBackground(wxBrush(backgroundColour));
	dc.Clear();		
	DrawPath(dc);
	DrawTrajectory(dc);
	DrawOrigin(dc);
	wxString text;
	text << wxT("X: ") << offset.x << wxT("  Y: ") << offset.y
		<< wxT("  Z: ") << wheelPosition;
	dc.SetTextForeground(wxColour(255, 255, 255));
	dc.DrawText(text, 40, 10);
}