Выбрать главу

Класс Brush

Класс Brush, задающий кисти, устроен более сложно. Начну с того, что класс Brush является абстрактным классом, так что создавать кисти этого класса нельзя, но можно создавать кисти классов-потомков Brush. Таких классов пять — они задают кисть:

• SolidBrush — для сплошной закраски области заданным цветом;

• TextureBrush — для закраски области заданной картинкой (image);

 HatchBrush — для закраски области предопределенным узором;

• LinearGradientBrush — для сплошной закраски с переходом от одного цвета к другому, где изменение оттенков задается линейным градиентом;

• PathGradientBrush — для сплошной закраски с переходом от одного цвета к другому, где изменение оттенков задается более сложным путем.

Первые два класса кистей находятся в пространстве имен System.Drawing, остальные — в System.Drawing.Drawing2D.

У каждого из этих классов свои конструкторы. В примере, обсуждаемом далее, рассмотрим создание кистей трех разных классов, там и поговорим о конструкторах классов.

Проект "Паутина Безье, кисти и краски"

Построим проект для рисования в формах. В одной из форм будем рисовать пером, в другом — кистями различного типа. Главную форму сделаем простой кнопочной формой. Вот как она выглядит.

Рис. 24.13. Кнопочная форма "кисть или перо"

Выбор соответствующей командной кнопки открывает форму для рисования пером или кистью.

Паутина Безье

В форме BezierWeb будем рисовать несколько кривых Безье, исходящих из одной точки — центра. Положение центра определяется курсором. Перемещая мышь, меняем положение курсора, а, следовательно, и центра, так что рисунок в форме будет все время перерисовываться, следуя за мышью, (кривые Безье — это широко используемый в графике и технических приложениях вид гладких кривых. Кривая Безье задается четырьмя точками, первая и последняя из которых являются начальной и конечной точками кривой. Две оставшиеся точки являются точками притяжения. Прямую, заданную началом и концом, они притягивают к себе, превращая ее в гладкую кривую. Строгое математическое определение несложно, но мы приводить его не будем.)

Прежде чем рассмотреть программный код, давайте посмотрим, как выглядят нарисованные программой кривые Безье, исходящие из одной точки.

Рис. 24.14. Паутина Безье

Перейдем к рассмотрению кода. Первым делом добавим в поля формы нужные нам объекты:

//fields

     Point center;

     Point[] points = new Point[10];

     Pen pen;

     Graphics graph;

     int count;

Точка center будет задавать общую начальную точку для всех рисуемых кривых Безье, массив points будет задавать остальные точки, используемые при построении кривых Безье. О роли объектов реn и graph, необходимых при рисовании, уже говорилось. Объект count играет техническую роль, о которой скажу чуть позже, прямого отношения к рисованию он не имеет.

В конструкторе формы вызывается метод MyInit, инициализирующий введенные объекты:

void MyInit()

{

    int сх = ClientSize.Width;

    int су = ClientSize.Height;

    points[0] = new Point (0,0);

    points[1] = new Point(cx/2,0);

    points [2] = new Point(cx,0);

    points[3] = new Point(0,cy/2);

    points[4] = new Point(cx,cy/2);

    points [5] = new Point(0,cy);

    points[б] = new Point(cx/2,су);

    points[7] = new Point(cx,cy);

    points[8] = new Point (0,0);

    points [9] = new Point(cx/2,0);

    graph = this.CreateGraphics ();

    center = new Point(cx/2,cy/2);

    count =1;

}

Рисование кривых Безье выполняется в методе DrawWeb, устроенном очень просто. В цикле рисуется 8 кривых, используя точку center и массив points;

void DrawWeb()

{

    for (int i = 0; i<8; i++)

        graph.DrawBezier(pen,center,points[i],points[i+2],