Используйте wpf TranslateTransform и не получили правильный рисунокC#

Место общения программистов C#
Ответить
Anonymous
 Используйте wpf TranslateTransform и не получили правильный рисунок

Сообщение Anonymous »

Я даю две точки[(100, 100) и (500, 200)], чтобы создать прямоугольник с помощью wpfstreamgeometry. и я использую TranslateTransform для перевода прямоугольника в центр сетки.
но нарисуйте точку (400, 400) и (2000, 800) и переведите прямоугольник в центр сетки, справа часть прямоугольника исчезла.
Как исправить эту ошибку??
нарисовать прямоугольник с помощью точки[(100, 100) и (500, 200)]
нарисуйте прямоугольник с точкой[(400, 400) и (2000, 800)]

Код: Выделить всё

private void DrawLineObjectTest(double _fScale = 1.0f)
{
Point ptStart = new Point(100.0f, 100.0f);
Point ptEnd = new Point(500.0f, 200.0f);

double fScale = _fScale;
Path pathDraw1 = new Path();
StreamGeometry sg1 = new StreamGeometry();

sg1.FillRule = FillRule.Nonzero;
pathDraw1.Fill = new SolidColorBrush(Color.FromArgb(0, 255, 0, 0));
pathDraw1.Stroke = Brushes.Red;
pathDraw1.StrokeThickness = 1;
pathDraw1.Fill = Brushes.Red;

using (StreamGeometryContext ctx = sg1.Open())
{
double sx = ptStart.X * _fScale, sy = ptStart.Y * _fScale;
double ex = ptEnd.X * _fScale, ey = ptEnd.Y * _fScale;

ctx.BeginFigure(new Point(sx, (sy)), false, true);
ctx.LineTo(new Point(ex, (sy)), true, false);
ctx.LineTo(new Point(ex, (ey)), true, false);
ctx.LineTo(new Point(sx, (ey)), true, false);
ctx.LineTo(new Point(sx, (sy)), true, false);
}
sg1.Freeze();

Rect boundary = sg1.Bounds;
Point ptCenter = new Point();
ptCenter.X = (boundary.Left + boundary.Right) / 2.0f;
ptCenter.Y = (boundary.Top + boundary.Bottom) / 2.0f;

Point ScreenCenter = new Point(gridDisplay.ActualWidth / 2.0f, gridDisplay.ActualHeight / 2.0f);

TranslateTransform tr1 = new TranslateTransform(-ptCenter.X, -ptCenter.Y);
TranslateTransform tr2 = new TranslateTransform(ScreenCenter.X, ScreenCenter.Y);
TransformGroup tg = new TransformGroup();
tg.Children.Add(tr1);
tg.Children.Add(tr2);
pathDraw1.Data = sg1;
pathDraw1.RenderTransform = tg;
gridDisplay.Children.Add(pathDraw1);
}
xamlfile Я пробую использовать «Измерить и упорядочить», но это не работает

Подробнее здесь: https://stackoverflow.com/questions/785 ... ct-drawing
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»