GraphicsPath - Почему важен порядок методов AddLine - PullRequest
0 голосов
/ 28 января 2009

Я рисую треугольник со следующим кодом

int x = x coordinate for center;
int ax = x coordinate for left;
int bx = x coordinate for right;
int top = y coordinate for top;
int bottom = y coordinate for bottom;

//           (x, top)
//(ax, bottom)      (bx, bottom) 

GraphicsPath path = new GraphicsPath();
// _
path.AddLine(ax, bottom, bx, bottom);
// /
path.AddLine(ax, bottom, x, top);
// \
path.AddLine(bx, bottom, x, top);
// order of drawing is _ / \ (bottom line, left side, right side)

Когда я вызываю DrawPath, он всегда рисует мои линии, независимо от порядка. Но когда я вызываю FillPath, он ничего не делает. Только когда мой ордер / _ \ или \ _ / действительно заполняет мой треугольник. Почему это?

1 Ответ

2 голосов
/ 28 января 2009

Оказывается, что ответ, который я выложил первоначально, на самом деле не решил проблему, и что он работал на моей машине из-за внесенного мной дополнительного изменения, которое заключается в изменении FillMode :

GraphicsPath path = new GraphicsPath(FillMode.Winding);

Когда вы используете режим Winding , алгоритм обнаружит замкнутый путь, даже если вы не добавили строки по порядку.

...