Я пытаюсь создать собственный элемент управления, который будет использоваться для представления временной шкалы.
Я нашел в сети симпатичный дизайн:
и я начал кодировать, через пару минут у меня было это:
Как видите, большой маркер выглядит неплохо, но самый маленький мог бы смотреться и лучше.
Мой текущий код, отвечающий за отрисовку маркера, выглядит так:
enum Position
{
Left,
Right
}
private void DrawMarker(Graphics gfx, Rectangle Bounds, int CornerRadius, Pen DrawPen, Position direction)
{
GraphicsPath gfxPath = new GraphicsPath();
gfxPath.AddArc(new Rectangle(Bounds.X + Bounds.Width - CornerRadius, Bounds.Y + 0, CornerRadius, CornerRadius), 270, 45); //tr
if(direction==Position.Right)
gfxPath.AddArc(new Rectangle(Bounds.X + Bounds.Width - CornerRadius + 40, Bounds.Y + Bounds.Height / 2, CornerRadius, CornerRadius), 315, 90); //right
gfxPath.AddArc(new Rectangle(Bounds.X + Bounds.Width - CornerRadius, Bounds.Y + Bounds.Height - CornerRadius, CornerRadius, CornerRadius), 45, 45); //br
gfxPath.AddArc(new Rectangle(Bounds.X + 0, Bounds.Y + Bounds.Height - CornerRadius, CornerRadius, CornerRadius), 90, 90); //bl
gfxPath.AddArc(new Rectangle(Bounds.X + 0, Bounds.Y + 0, CornerRadius, CornerRadius), 180, 90); //tl
gfxPath.CloseAllFigures();
//gfx.FillPath(new SolidBrush(FillColor), gfxPath);
gfx.DrawPath(DrawPen, gfxPath);
}
Мне нужен способ улучшить внешний вид этих маркеров.
Я думаю, что проблема в углах дуг в верхнем правом и нижнем правом углах. Я установил их на 45, но это выглядит плохо, если отметки маленькие.
Углы с левой стороны всегда будут равны 90, а углы справа и на отмеченной стороне необходимо рассчитать.
Как мне изменить свою функцию для правильного расчета дуг?
ElementHost
. - person Federico Berasategui   schedule 14.02.2014