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); }