Рисование текста под углом в .NET
От: Andy77 Ниоткуда  
Дата: 06.06.03 21:25
Оценка:
Сегодня пришлось написать много кода с постоянными переключениями RotateTransform/TranslateTransform, жизнь малиной не казалась пока не написал простенький хелпер. Вдруг еще кому-нибудь поможет.

раньше для вывода текста под углом приходилось писать монструозные конструкции типа такой (и ни в коем случае не забывать восстанавать предыдущий трансформ) —

   // вывести текст вертикально снизу вверх в точке (40, 100)
   g.RotateTransform(270);
   g.TranslateTransform(-100, 40);  // тут я постоянно путался :)
   g.DrawString(caption, Font, Brushes.Black, 0, 0);
   g.TranslateTransform(100, -40);  // ResetTransform(), если не важно предыдущее состояние
   g.RotateTransform(-270);


А теперь я пользуюсь новым порошком "Тайд"

   using (new VerticalTextTransform(g, 40, 100))
      g.DrawString(caption, Font, Brushes.Black, 0, 0);


Вот и сам хелпер.

   public class SmartTransform : IDisposable
   {
      Graphics graphics;
      float angle, dx, dy;

      public SmartTransform(Graphics g, float angle, float dx, float dy)
      {
         this.angle = angle;
         this.dx = dx;
         this.dy = dy;
         this.graphics = g;

         graphics.RotateTransform(angle);
         graphics.TranslateTransform(dx, dy);
      }

      public void Dispose()
      {
         graphics.TranslateTransform(-dx, -dy);
         graphics.RotateTransform(-angle);
      }
   }

   public class VerticalTextTransform : SmartTransform
   {
      public VerticalTextTransform(Graphics g, float x, float y) : base(g, 270, -y, x) 
      {
      }
   }
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.