но нарисуйте точку (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);
}
Код: Выделить всё
Подробнее здесь: https://stackoverflow.com/questions/785 ... ct-drawing
Мобильная версия