Давно не мучился с графикой... Стал простой вопрос о том, как люди решают проблему с перьями и системой рисования в Windows Forms и C#.
Как нужно реализовать алгоритм рисования графических примитивов на холсте так, чтобы качество(с точки зрения геометрии и перекрытия отдельных элементов) не страдало от толщины пера?
Допустим задача: нарисовать 2 прямоугольника так, чтобы один был вложен в другой и они не перекрывались при изменении толщин их перьев.
При простом алгоритме реализации этого выходит куча подводных камней из-за условия возможности изменения толщин перьев, которыми рисуются контуры этих прямоугольников...
Например:
// получаем ссылку на объект графики
Graphics g = e.Graphics;
// создаем перо для рамки графика
Pen gpen = new Pen(Color.Red, 5);
// уменьшаем размер прямоугольной клиентской области на толщину пера рамки
recf.Inflate(-gpen.Width/2, -gpen.Width/2);
// рисуем рамку графика
g.DrawRectangle(gpen, recf.X, recf.Y, recf.Width, recf.Height);
gpen.Width = 1;
gpen.Color = Color.Black;
recf.Inflate(-gpen.Width , -gpen.Width );
g.DrawRectangle(gpen, recf.X, recf.Y, recf.Width, recf.Height);
Как видно из кода выше, такой вариант не выполняет требования по- допустимости смены толщин перьев одного и другого прямоугольника...
Простое тестирование его при различных значениях gpen.Width показывает, что эти прямоугольники будут перекрываться при различных соотношениях толщин их перьев...
Надеюсь, что суть вопроса мне все-таки удалось изложить не смотря на характер описания...