C# Graphic DrawRectangle
От: head-dron  
Дата: 28.10.10 08:20
Оценка:
Такая проблема. Рисую мышкой прямоугольник, задаются начальные координаты, и конечные.
Но беда в том, что в Rectangle конечный координаты задаются в качестве размера.

И поэтому координаты X=10, Y=10, X=50, Y=50 работают нормально. Вырисовывается то что нужно.
А когда координаты становятся X=50, Y=50, X=10, Y=10 прямоугольник не рисуется, считая что задан нулевой размер.

Пробовал рисовать полигоном, но мне нужен конкретно объект Rectangle на выходе.

Вижу только 1 вариант. Перебирать координаты полигона и подставлять в прямоугольник. Но это очень криво выглядит.

Есть какой то еще способ чтобы рисовать прямоугольник "В обе стороны", а не только вниз и вправо?

28.10.10 13:35: Перенесено из '.NET'
c# graphic rectangle polygone paint
Re: C# Graphic DrawRectangle
От: cvetkov  
Дата: 28.10.10 08:24
Оценка:
у прямоугольника 4 стороны.
надо найти верхнюю левую и нижнюю правую (насколько я помню ось Y направлена вниз) в чем проблема?
... << RSDN@Home 1.2.0 alpha 4 rev. 1227>>
Re[2]: C# Graphic DrawRectangle
От: head-dron  
Дата: 28.10.10 08:42
Оценка:
Здравствуйте, cvetkov, Вы писали:

C>у прямоугольника 4 стороны.

C>надо найти верхнюю левую и нижнюю правую (насколько я помню ось Y направлена вниз) в чем проблема?

Конкретно у Rectangle(int x, int y, int width, int height);

То есть нажимая мышь MouseDown я фиксирую X и Y. И далее в MouseMove высчитываю высоту и ширину.
И если мышь залезет выше или левее начальных координат то получится отрицательная высота или ширина, что вызывает ошибку.
Re[3]: C# Graphic DrawRectangle
От: KRT Украина  
Дата: 28.10.10 09:06
Оценка:
Здравствуйте, head-dron, Вы писали:

HD>Здравствуйте, cvetkov, Вы писали:


C>>у прямоугольника 4 стороны.

C>>надо найти верхнюю левую и нижнюю правую (насколько я помню ось Y направлена вниз) в чем проблема?

HD>Конкретно у Rectangle(int x, int y, int width, int height);


HD>То есть нажимая мышь MouseDown я фиксирую X и Y. И далее в MouseMove высчитываю высоту и ширину.

HD>И если мышь залезет выше или левее начальных координат то получится отрицательная высота или ширина, что вызывает ошибку.

Не тестировал, но вроде должно помочь.
var currentHeight = currentY - startY;
var currentWidth = currentX - startX;

DrawRectangle(..., Math.Min(startX, currentX),
Math.Min(startY, currentY), Math.Abs(currentWidth), Math.Abs(currentHeight));
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.