2013-10-03 3 views
5

Я могу поворачивать панель и текст 90º, и это работает для меня. Но поворот на 180º не работает, я не вижу текст. Что я могу сделать, чтобы исправить это?C# Поворот трансформации

else if (m_orientation == AfyLabelOrientation.TurnedLeft90) 
     { 
      e.Graphics.TranslateTransform(0, this.Height - 5); 
      e.Graphics.RotateTransform(270); 

      if (!TextShadow_) 
      { 
       e.Graphics.DrawString(this.Text, this.Font, new SolidBrush(this.ForeColor), new RectangleF(Padding.Left, Padding.Top, this.Height, this.Width)); 
      } 
      else if (TextShadow_) 
      { 
       //Drawing text shadow 
       e.Graphics.DrawString(this.Text, this.Font, new SolidBrush(Color.Gray), new RectangleF(Padding.Left + 1, Padding.Top - 1, this.Height, this.Width)); 

       //Drawing text 
       e.Graphics.DrawString(this.Text, this.Font, new SolidBrush(this.ForeColor), new RectangleF(Padding.Left, Padding.Top, this.Height, this.Width)); 
      } 
     } 
     else if(m_orientation == AfyLabelOrientation.Overturned)//This don't work 
     { 
      e.Graphics.TranslateTransform(this.Width, 0); 
      e.Graphics.RotateTransform(180); 

      if (!TextShadow_) 
      { 
       e.Graphics.DrawString(this.Text, this.Font, new SolidBrush(this.ForeColor), new RectangleF(Padding.Left, Padding.Top, this.Height, this.Width)); 
      } 
      else if (TextShadow_) 
      { 
       //text shadow 
       e.Graphics.DrawString(this.Text, this.Font, new SolidBrush(Color.Gray), new RectangleF(Padding.Left + 1, Padding.Top - 1, this.Height, this.Width)); 

       //text 
       e.Graphics.DrawString(this.Text, this.Font, new SolidBrush(this.ForeColor), new RectangleF(Padding.Left, Padding.Top, this.Height, this.Width)); 
      } 
     } 
+0

Не могли бы вы задать более четкий вопрос? Это, скорее всего, заявление – JonE

+0

Как сделать Rotate by 180 работать правильно. – Zuhan

+0

Возможно, когда вы вращаетесь, объект меняет свои координаты, его перевод. – Butzke

ответ

4

Если у меня есть это, вам необходимо перевести на объект, чтобы поддерживать его центр.

RotateTransform всегда вращается вокруг источника. Поэтому вам нужно сначала перевести свой центр вращения в начало, затем повернуть, а затем перевести его обратно.

//move rotation point to center of image 
g.TranslateTransform((float)this.Width/2, (float)this.Height/2); 
//rotate 
g.RotateTransform(angle); 
//move image back 
g.TranslateTransform(-(float)this.Width/2,-(float)this.Height/2); 
1

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

________ 
|text | 
_________ 

вращаются в нечто вроде:

_______ 
text|  | 
    ________ 

, конечно, я не живопись text вращается, а просто пытаюсь idicate своей позиции. Переместите точку поворота в середину текста или переместите текст по ширине вправо после вращения, чтобы закончить текст, помещенный в правильное место.

Смежные вопросы