2010-09-14 8 views
3

У меня есть список строк, которые я рисую на оси. Я хочу повернуть струны (опять же, они должны оставаться на одной и той же горизонтальной оси при повороте). Я пытаюсь использовать следующий код:Как повернуть список строк вдоль оси?

namespace DrawString 
{ 
    struct StringData 
    { 
     public string StringName; 
     public int X; 
     public int Y; 
    } 

    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     Font mFont = new Font("Arial", 10.0f, FontStyle.Bold); 
     List<StringData> data = new List<StringData> { new StringData() { StringName = "Label1", X = 10, Y = 30 }, 
                new StringData() { StringName = "Label2", X = 130, Y = 30 }}; 

     private void Form1_Paint(object sender, PaintEventArgs e) 
     { 
      foreach (var str in data) 
      { 
       e.Graphics.RotateTransform(30); 
       e.Graphics.DrawString(str.StringName, mFont, new SolidBrush(Color.Black), new Point(str.X, str.Y)); 
       e.Graphics.ResetTransform(); 
      } 
     } 
    } 
} 

Но это не работает, так как Графика вращается для обеих строк сразу, вызывая одну строку выше, чем другой. Как я могу повернуть их индивидуально, используя центр строки в качестве своей оси вращения?

+0

Не знаете, как решить вашу проблему, но я думаю, с помощью TranslateClip может помочь вещи немного (в другие рамки, перевод часто помогает сменить центр вращения) – luiscubal

ответ

1

Это звучит, как вы описываете что-то вроде этого:

private void Form1_Paint(object sender, PaintEventArgs e) 
{ 
    foreach (var str in data) 
    { 
     e.Graphics.TranslateTransform(str.X, str.Y); 
     e.Graphics.RotateTransform(30); 
     e.Graphics.DrawString(str.StringName, mFont, new SolidBrush(Color.Black), new Point(0, 0)); 
     e.Graphics.ResetTransform(); 
    } 
} 

Этот фрагмент первого транслирует, затем поворачивается, рисует строку в трансформированном происхождения, а затем сбрасывает. Обе строки повернуты под одним и тем же углом на одной оси X, но происходят из разных точек.

+0

Большое спасибо. Это сработало. – Ioga3

0

насчет

 private void Form1_Paint(object sender, PaintEventArgs e) 
     { 
      e.Graphics.RotateTransform(30); 
      foreach (var str in data) 
      { 
       e.Graphics.DrawString(str.StringName, mFont, new SolidBrush(Color.Black), new Point(str.X, str.Y)); 
      } 
      e.Graphics.ResetTransform(); 
     } 

После поворота плоскости, вы будете рисовать строки в позиции