2013-10-03 20 views
5

Mogę obrócić panel i tekst o 90º i to działa dla mnie. Obracanie o 180 ° nie działa, ale nie widzę tekstu. Co mogę zrobić, aby to naprawić?Transformacja z obrotem 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

Czy możesz zadać bardziej przejrzyste pytanie? Wydaje się, że jest to bardziej oświadczenie. – JonE

+0

Jak sprawić, aby Obrót o 180 działał prawidłowo. – Zuhan

+0

Prawdopodobnie podczas obrotu obiekt zmienia swoje współrzędne, jego tłumaczenie. – Butzke

Odpowiedz

4

Jeśli ją otrzymam, należy przetłumaczyć obiekt, aby zachować jego środek.

RotateTransform zawsze obraca się wokół początku. Musisz najpierw przetłumaczyć środek obrotu na pochodzenie, a następnie obrócić, a następnie przetłumaczyć.

//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

Możliwe, że to, co próbujesz obrócić, znajduje się w lewym górnym rogu kontenera. Następnie obrót obraca się wokół lewego górnego rogu obiektu, więc obrót o 180 stopni powoduje przesunięcie obiektu poza okno widoku.

________ 
|text | 
_________ 

obraca się w coś podobnego:

_______ 
text|  | 
    ________ 

oczywiście ja nie maluję text obracany, ale po prostu staramy się idicate swoją pozycję. Przesuń punkt obrotu do środka tekstu lub przesuń tekst o jego szerokość w prawo po obrocie, aby zakończyć tekstem umieszczonym we właściwym miejscu.

Powiązane problemy