コード例 #1
0
ファイル: TaskPointRenderer.cpp プロジェクト: Advi42/XCSoar
void
TaskPointRenderer::DrawTaskLine(const GeoPoint &start, const GeoPoint &end)
{
  canvas.Select(LegActive() ? task_look.leg_active_pen :
                              task_look.leg_inactive_pen);
  canvas.SetBackgroundTransparent();
  map_canvas.DrawLine(start, end);
  canvas.SetBackgroundOpaque();

  // draw small arrow along task direction
  BulkPixelPoint Arrow[3] = { {6,6}, {-6,6}, {0,0} };

  const auto p_start = m_proj.GeoToScreen(start);
  const auto p_end = m_proj.GeoToScreen(end);

  const Angle ang = Angle::FromXY(p_start.y - p_end.y,
                                  p_end.x - p_start.x).AsBearing();

  const auto p_p = ScreenClosestPoint(p_start, p_end, m_proj.GetScreenOrigin(),
                                      Layout::Scale(25));
  PolygonRotateShift(Arrow, 2, p_p, ang);
  Arrow[2] = Arrow[1];
  Arrow[1] = p_p;

  canvas.Select(LegActive() ? task_look.arrow_active_pen :
                              task_look.arrow_inactive_pen);
  canvas.DrawPolyline(Arrow, 3);
}
コード例 #2
0
ファイル: RenderTaskPoint.cpp プロジェクト: davidswelt/XCSoar
void
RenderTaskPoint::DrawTaskLine(const GeoPoint &start, const GeoPoint &end)
{
    canvas.Select(LegActive() ? task_look.leg_active_pen :
                  task_look.leg_inactive_pen);
    canvas.SetBackgroundTransparent();
    map_canvas.line(start, end);
    canvas.SetBackgroundOpaque();

    // draw small arrow along task direction
    RasterPoint p_p;
    RasterPoint Arrow[3] = { {6,6}, {-6,6}, {0,0} };

    const RasterPoint p_start = m_proj.GeoToScreen(start);
    const RasterPoint p_end = m_proj.GeoToScreen(end);

    const Angle ang = Angle::Radians(atan2(fixed(p_end.x - p_start.x),
                                           fixed(p_start.y - p_end.y))).AsBearing();

    ScreenClosestPoint(p_start, p_end, m_proj.GetScreenOrigin(), &p_p, Layout::Scale(25));
    PolygonRotateShift(Arrow, 2, p_p.x, p_p.y, ang);
    Arrow[2] = Arrow[1];
    Arrow[1] = p_p;

    canvas.Select(task_look.arrow_pen);
    canvas.DrawPolyline(Arrow, 3);
}