Повернуть путь геометрии - PullRequest
2 голосов
/ 17 июня 2011

Я заново работаю с 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)

1 Ответ

3 голосов
/ 17 июня 2011

Если вращение предназначено только для представления (т. Е. Вас не волнует, что исходные геометрические данные все еще являются стрелкой, указывающей в исходном направлении), тогда вы можете применить к нему преобразование .

После того как вы нарисовали свой контекст, просто примените преобразование к исходному объекту 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);

Приведенный выше код нарисует стрелку, указывающую вниз / вправо на Image элемент управления с именем image1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...