我有兩個連接時畫線的點。該線可以是垂直水平,垂直或(最常見)對角線。在對角線路徑上對齊文本
我想嘗試沿着這條路徑的文字。我使用的是C#和WinForms,但我認爲這不像一些簡單的僞代碼那樣重要,它可能包含一些數學運算(trig?),它需要找到文本對齊路徑的角度。
我有兩個連接時畫線的點。該線可以是垂直水平,垂直或(最常見)對角線。在對角線路徑上對齊文本
我想嘗試沿着這條路徑的文字。我使用的是C#和WinForms,但我認爲這不像一些簡單的僞代碼那樣重要,它可能包含一些數學運算(trig?),它需要找到文本對齊路徑的角度。
使用Math.Atan2()來計算的角度。將弧度轉換爲度數乘以180/Math.Pi.獲取RotateTransform()的旋轉中心是使文本與線條正確對齊的關鍵步驟。 r * Math.Cos(角度)表示線起點的X偏移量,r * Sin(角度)表示Y偏移量,其中r是距線起點的偏移量。根據字體的高度進行調整,以使其高於線條。
如果您正在繪製在OnPaint()
方法的文字,你可以試試這個(reference):
Graphics g = e.Graphics; // your graphics object.
float deg = 45F; // an angle, this one is 45 degrees
g.RotateTransform(deg);
g.DrawString("slopey text is fun");
謝謝,這似乎工作。我現在唯一的問題是它旋轉了所有的線條和我繪製的東西 - 儘管我想我可以創建一個新的圖形對象。 – DMan 2010-08-07 14:55:59
您可以在用'g.RotateTransform(-deg)'繪製字符串後取消旋轉文本。 – kbrimington 2010-08-07 17:06:53
工作,謝謝。我乘以-1,但與您發佈的效果相同。 – DMan 2010-08-07 17:35:10
'r'代表什麼?迴轉? – DMan 2010-08-07 17:09:34
距離線條起點有多遠可以繪製文本。 – 2010-08-07 17:11:51
我現在有'e.Graphics.TranslateTransform(point.X,point.Y);'作爲起點的地方。這似乎在不使用Math.Cos/Sin的情況下工作,但是,在某些情況下,它現在處於行列之下。無論我畫的是什麼角度,你會建議我怎樣才能讓它始終在線以上? – DMan 2010-08-07 17:43:24