2011-06-17 64 views
2

我正在用Streamgeometry來新繪製一個簡單的箭頭。現在我需要將箭頭轉到指定的角度。但如何旋轉這個幾何?旋轉幾何路徑

Dim pt1 As New Point(X1, Me.Y1) 'left point 
Dim pt2 As New Point(_X2, Me.Y2) 'right point 

Dim pt3 As New Point(_X2 + (HeadWidth * cost - HeadHeight * sint), Y2 + (HeadWidth * sint + HeadHeight * cost)) 'arrow line down 
Dim pt4 As New Point(_X2 + (HeadWidth * cost + HeadHeight * sint), Y2 - (HeadHeight * cost - HeadWidth * sint)) 'arrow line up 

context.BeginFigure(pt1, True, False) 
context.LineTo(pt2, True, True) 
context.LineTo(pt3, True, True) 
context.LineTo(pt2, True, True) 
context.LineTo(pt4, True, True) 

回答

3

如果旋轉僅用於演示(即你不關心原始幾何數據仍然在原來的方向指向的箭頭),那麼你可以申請一個transform它。

你畫在你的背景後,只要應用改造原有StreamGeometry對象(代碼在C#中,但它適用於VB.NET太):

var geo = new StreamGeometry(); 
using (var ctx = geo.Open()) 
{ 
    ctx.BeginFigure(new Point(0, 20), false, false); 
    ctx.LineTo(new Point(100, 20), true, true); 
    ctx.LineTo(new Point(80, 40), true, true); 
    ctx.LineTo(new Point(80, 0), true, true); 
    ctx.LineTo(new Point(100, 20), true, true); 
} 
geo.Transform = new RotateTransform(45); 
var drawing = new GeometryDrawing(Brushes.Transparent, new Pen(Brushes.Black, 1), geo); 
image1.Source = new DrawingImage(drawing); 

上面的代碼將會畫一個箭頭在名爲image1Image控件上向下/向右指向。

+0

感謝您的回答。我嘗試過,但如果我像你所建議的那樣使用Rotatetransform來創建幾何體,那麼它就不會起作用。我不知道爲什麼。 – Nasenbaer 2011-06-17 12:44:33