Использование базовой вставки с пользовательскими торцевыми заглушками в C#

Пример Нарисуйте линии с пользовательскими заглушками в C# показывает, как рисовать линии с пользовательскими заглушками. Например, используя эти методы, вы можете рисовать линии со стрелками или кругами на концах.

Система координат для рисования торцевых крышек имеет Y, увеличивающуюся в направлении линии, поэтому, если вы нарисуете торцевую крышку, которая использует положительную координату Y, торцевая крышка выйдет за пределы нормальной конечной точки линии. Если вы этого не хотите, вы можете переместить форму торцевой крышки назад, чтобы она не использовала положительную координату Y, но затем она может нарисоваться поверх самой линии. Если торцевая крышка должна быть кругом, прямоугольником или другой открытой формой, это может выглядеть странно.

Вы можете устранить эту проблему, используя свойство CustomLineCap класса >. Это значение указывает на короткое расстояние, на которое должна заканчиваться линия, измеренная по толщине линий, как обычно.

В этом примере рисуются строки с помощью Pen, который рисует круг вокруг начальной точки линии и точку в конечной точке линии. В верхней части рисунка, объекты CustomLineCap не используют BaseInset, поэтому линия проходит в центр круга в начале строки и продолжается до тех пор, пока она не коснется точка на конце линии.

После рисования трех верхних строк программа устанавливает BaseInset на 2 для обеих торцевых крышек, чтобы линия останавливалась, только касаясь круга в начале и с небольшим промежутком между линией и точкой в конец.

В следующем коде показан обработчик событий Paint программы, который создает Pen и рисует строки.

private void Form1_Paint(object sender, PaintEventArgs e)
{
   e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;

   using (Pen the_pen = new Pen(Color.Blue, 5))
   {
      // Создаем GraphicsPath для определения начальной шапки.
      using (GraphicsPath start_path = new GraphicsPath())
      {
         start_path.AddEllipse(-2, -2, 4, 4);

         // Сделать начальную шапку.
         using (CustomLineCap start_cap =
            new CustomLineCap(null, start_path))
         {
            // Создаем GraphicsPath для определения конечной крышки.
            using (GraphicsPath end_path = new GraphicsPath())
            {
               end_path.AddEllipse(-0.5f, -0.5f, 1, 1);

               // Сделайте конечную крышку.
               using (CustomLineCap end_cap =
                  new CustomLineCap(end_path, null))
               {
                  the_pen.CustomStartCap = start_cap;
                  the_pen.CustomEndCap = end_cap;

                  // Нарисуем несколько строк без базовых вводов.
                  the_pen.Color = Color.Green;
                  e.Graphics.DrawLine(the_pen, 20, 20, 125, 60);
                  the_pen.Color = Color.Orange;
                  e.Graphics.DrawLine(the_pen, 125, 60, 210, 30);
                  the_pen.Color = Color.Blue;
                  e.Graphics.DrawLine(the_pen, 210, 30, 300, 70);

                  // Переводим и рисуем с помощью вставки.
                  e.Graphics.TranslateTransform(0, 50);
                  start_cap.BaseInset = 2;
                  end_cap.BaseInset = 2;
                  the_pen.CustomStartCap = start_cap;
                  the_pen.CustomEndCap = end_cap;

                  the_pen.Color = Color.Green;
                  e.Graphics.DrawLine(the_pen, 20, 20, 125, 60);
                  the_pen.Color = Color.Orange;
                  e.Graphics.DrawLine(the_pen, 125, 60, 210, 30);
                  the_pen.Color = Color.Blue;
                  e.Graphics.DrawLine(the_pen, 210, 30, 300, 70);
               }
            }
         }
      }
   }
}

Код создает ручку. Затем он создает GraphicsPath, чтобы представить начальную шапку пера. Он добавляет круг в путь, а затем использует путь для определения начального CustomLineCap.

Затем код повторяет эти шаги для создания пользовательской конечной крышки.

Затем программа использует перо для рисования трех связанных сегментов линии. Вы можете видеть, что линия втягивается в начальный круг и соединяется с конечной точкой.

Источник: http://csharphelper.com/blog/2016/12/use-base-insets-with-custom-end-caps-in-c/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Adblock
detector