bool GetArrowHead(On2dVector dir, On2dPoint tip, double scale, ref On3dPointArray triangle) { double arrow_size = m_default_arrow_size * scale; On2dPointArray corners = new On2dPointArray(); corners.Reserve(3); corners.SetCount(3); On2dVector up = new On2dVector(-dir.y, dir.x); corners[0].Set(tip.x, tip.y); corners[1].x = tip.x + arrow_size * (0.25 * up.x - dir.x); corners[1].y = tip.y + arrow_size * (0.25 * up.y - dir.y); corners[2].x = corners[1].x - 0.5 * arrow_size * up.x; corners[2].y = corners[1].y - 0.5 * arrow_size * up.y; triangle.Reserve(corners.Count()); triangle.SetCount(corners.Count()); for (int i = 0; i < corners.Count(); i++) { triangle[i] = m_plane.PointAt(corners[i].x, corners[i].y); } return(true); }
bool GetArrowHead(On2dVector dir, On2dPoint tip, double scale, ref On3dPointArray triangle) { double arrow_size = m_default_arrow_size * scale; On2dPointArray corners = new On2dPointArray(); corners.Reserve(3); corners.SetCount(3); On2dVector up = new On2dVector(-dir.y, dir.x); corners[0].Set(tip.x, tip.y); corners[1].x = tip.x + arrow_size * (0.25 * up.x - dir.x); corners[1].y = tip.y + arrow_size * (0.25 * up.y - dir.y); corners[2].x = corners[1].x - 0.5 * arrow_size * up.x; corners[2].y = corners[1].y - 0.5 * arrow_size * up.y; triangle.Reserve(corners.Count()); triangle.SetCount(corners.Count()); for (int i = 0; i < corners.Count(); i++) triangle[i] = m_plane.PointAt(corners[i].x, corners[i].y); return true; }