8 (972476)
Текст из файла
Семинар 8. Введение в программирование графики. Двумернаяграфика. Графические примитивы (прямоугольник, эллипс, линия, точка).1. Программирование графики в Windows. Подготовительные действияВоспользоваться графическими возможностями ОС Windows можно через среду .NET,установленную на большинстве современных Windows-компьютерах.
Библиотеки этойсреды содержат так называемый управляемый код, который выполняется подуправлением CLR (Common Language Runtime) системы.1.1 Расширения языка Си++.Для взаимодействия со средой .NET в стандартный язык Си++ добавлены специальные(управляемые) расширения. В частности, оператор gcnew выделяет память и создаетобъект в «управляемой куче», возвращая «управляемый указатель ^» на его уникальныйдескриптор (handle). Для объектов, созданных в «управляемой куче», как правило, нетребуется в явном виде вызывать «сборщика мусора».1.2 Проект в среде Visual Studio.С точки зрения взаимодействия с графическими возможностями среды .NET наиболееудобным типом проекта является Windows Forms Application.
По умолчанию мастер VisualStudio создаст приложение на основе базового класса Form, которое будет содержатьпустую форму с именем Form1. В среде Visual Studio интегрированный дизайнерпрограмм представит эту форму на экране (Form1.h[Design]). Нажав на ней правую кнопкумыши, можно выбрать режим просмотра программного кода (View Code) файла Form1.h.При запуске программы на выполнение эта форма отображается в виде пустого окна,ожидающего действий от пользователя. Свойства формы такие, как например, текст взаголовке формы или цвет фона можно поменять в окне ее свойств (Properties), котороетакже доступно с помощью правой кнопки мыши.1.3 Организация простого графического вывода.В большинстве случаев удобно сделать так, чтобы форма содержала различныеуправляющие элементы, такие, как например, кнопки. Поэтому, не смотря на то, чтоосуществлять графический вывод (рисовать) можно непосредственно на поверхностьформы, мы в качестве примера рассмотрим другой вариант.
Добавим на форму двеуправляющие кнопки (Button) – одну для запуска процесса рисования и вторую – длястирания области рисования; и специальный элемент – PictureBox, в пределах которогобудет осуществляться графический вывод. Проще всего это сделать в дизайнере,перетаскивая мышью соответствующие управляющие элементы из палитры Toolbox. Поумолчанию эти элементы получат имена button1, button2 и pictureBox1, соответственно.Текст, на кнопках по умолчанию совпадающий с их именами, лучше поменять на «Paint»и «Clear» в окне Properties.
При запуске программы ее окно теперь будет выглядетьследующим образом:Область рисования pictureBox1 на форме выделенацветом (Properties->BackColor).С точки зрения языка программирования показаннаяформа – это объект класса Form1, производного отбазового класса Form. Определение класса Form1можно увидеть в файле Form1.h. Для нашихспецифических целей добавим в класс частнуюстатическую целочисленную переменную MyPaint:static int MyPaint=0;значение которой будет определять режим отображения графической информации вPictureBox:0 – исходное состояние;1 – выполнить рисование;-1 – стереть.1.4 События и их обработчики.Наряду со свойствами, для управляющих элементов существует предопределенный наборсобытий.
Посмотреть их список можно в окне Properties, выбрав вкладку Events. Длякнопок нам потребуется событие Click (нажатие на кнопку). Для элемента PictureBox –событие Paint (элемент нуждается в перерисовке). Каждое событие обрабатываетсяспециальным методом – обработчиком событий. В проекте Windows Forms Applicationосновная задача программирования заключается в написании обработчиков событий.Для перехода к написанию кода обработчика достаточно дважды кликнуть мышью наимени события во вкладке Events окна Properties соответствующего элемента. Дизайнерсоздаст для вас заголовок обработчика и поместит курсор в пока еще пустое тело.Обработчик события Click кнопки Paint (button1).
Автоматически генерируемый шаблонобработчика имеет только заголовок:private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e){}По умолчанию обработчик получает имя, состоящее из имени управляющего элемента,подчеркивания и имени события: button1_Click. На вход обработчика передаетсяуказатель sender на дескриптор объекта, вызвавшего событие, и указатель e на дескрипторструктуры с дополнительными данными.В нашем случае после нажатия кнопки Paint следует сменить режим отображенияграфической информации на «выполнить рисование» и инициировать событие Paint дляpictureBox1. Последнее осуществляется вызовом метода Invalidate(). В итоге обработчикпринимает вид:private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e){MyPaint = 1;pictureBox1->Invalidate();}Обработчик события Click кнопки Clear (button2).
Отличие одно – устанавливается другойрежим отображения графической информации – стереть:private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e){MyPaint = -1;pictureBox1->Invalidate();}Собственно программирование графического вывода в этой схеме происходит вобработчике события Paint элемента pictureBox1.22. Обработчик события PaintДействия этого обработчика будут зависеть от установленного режима отображенияграфической информации, поэтому его структура могла бы быть следующей:System::Void pictureBox1_Paint(System::Object^ sender,System::Windows::Forms::PaintEventArgs^ e){switch (MyPaint){case 0:return; //ничего не делатьcase -1:e->Graphics->Clear(Color::LemonChiffon); // стеретьMyPaint = 0;break;case 1:// здесь надо добавить собственно рисование}}Для стирания графической поверхности pictureBox1 (объект Graphics, доступный черездескриптор e) вызывается метод Clear, которому передается цвет (в примере:Color::LemonChiffon), которым следует заполнить стираемую поверхность.Собственно рисование будет осуществляться в случае, если мы установили режимграфического отображения MyPaint = 1.3.
Графические примитивы3.1 Растровая графика.Двухмерную графическую поверхность, на которой осуществляется отображениеграфической информации, можно представить в виде прямоугольного растра цветныхквадратных пикселей. Задачей рисования, таким образом, является придание нужнымпикселям заданный цвет. Нумерацию пикселей на плоскости удобно осуществлять вдекартовой системе координат x, y. По умолчанию начало отсчета (пиксель скоординатами x = 0, y =0) размещается в левом верхнем угле графической поверхности, ивертикальная ось y направлена вниз:(0,0)xПрямоугольная система координат x, y дляцелочисленной нумерации пикселей на графической поверхности элемента pictureBox1.yКроме указания координат пикселей для рисования простейших фигур потребуетсяопределить перо для задания цвета и некоторых других свойств контура фигуры иликисть – для задания цвета пикселей, заполняющих фигуру.
Например, следующий кодсоздает в «управляемой куче» и возвращает указатели на дескриптор пера (Pen^) черногоцвета толщиной в три пикселя и «твердой» кисти (SolidBrush^) красного цвета:Pen^ blackPen = gcnew Pen(Color::Black, 3);SolidBrush^ redBrush = gcnew SolidBrush(Color::Red);33.2 Отрезок прямой.Отрезок прямой на графической поверхности можно нарисовать, вызвав метод DrawLineдля графического объекта Graphics. Потребуется перо, а также пиксельные координатыначала отрезка (x1, y1) и конца (x2, y2):e->Graphics->DrawLine(blackPen, x1, y1, x2, y2);3.3 Прямоугольник.Метод DrawRectangle рисует контур прямоугольника, а метод FillRectangle закрашиваетпрямоугольную область. Для первого метода необходимо указать перо, а для второго –кисть.
Сама прямоугольная область задается координатами ее левого верхнего угла,шириной (вдоль оси x) и высотой (вдоль оси y), измеряемыми в пикселях:e->Graphics->DrawRectangle(blackPen, x, y, width, height);e->Graphics->FillRectangle(redBrush, x, y, width, height);3.4 Одиночный пиксель.Закрасить один пиксель с координатами (x, y) проще всего методом FillRectangle, указавединичную ширину и высоту:e->Graphics->FillRectangle(redBrush, x, y, 1, 1);3.5 Эллипс.Рисуется и закрашивается методами DrawEllipse и FillEllipse, соответственно. Вкачестве координат задается прямоугольная область, в которую эллипс будет вписан:e->Graphics->DrawEllipse(blackPen, x, y, width, height);e->Graphics->FillEllipse(redBrush, x, y, width, height);3.6 Пример.Код обработчика события Paint элемента pictureBox1, отображающий наклонную линиючерного цвета, красный прямоугольник с черным контуром, закрашенный красныйэллипс, черный контур эллипса и одиночный красный пиксель, имеет вид:private: System::Void pictureBox1_Paint(System::Object^ sender,System::Windows::Forms::PaintEventArgs^ e){switch (MyPaint){case 0: return;case -1:e->Graphics->Clear(Color::LemonChiffon);MyPaint = 0;break;case 1:int PenWidth = 3; // ширина пераPen^ blackPen = gcnew Pen( Color::Black, PenWidth);SolidBrush^ redBrush = gcnew SolidBrush( Color::Red );// Задаем координаты концов отрезкаint x1 = 0;int y1 = 0;int x2 = 100;4int y2 = 100;// Рисуем линиюe->Graphics->DrawLine( blackPen, x1, y1, x2, y2 );// Create location and size of rectangle.int x = 200;int y = 100;int width = 60;int height = 60;// Рисуем и закрашиваем прямоугольник.e->Graphics->DrawRectangle( blackPen, x, y, width, height );e->Graphics->FillRectangle( redBrush, x+(PenWidth+1)/2,y+(PenWidth+1)/2, width-PenWidth, height-PenWidth);// Рисуем контур эллипса и отдельно закрашенный эллипс.y = 200;e->Graphics->DrawEllipse(blackPen, x, y, width, height );e->Graphics->FillEllipse(redBrush, x, y+100, width, height);// Закрашиваем одиночный пиксель.e->Graphics->FillRectangle(redBrush, 110, 110, 1, 1);}}В итоге, при выполнении программы и нажатии кнопки «Paint» форма на экранеприобретает вид:5.
Характеристики
Тип файла PDF
PDF-формат наиболее широко используется для просмотра любого типа файлов на любом устройстве. В него можно сохранить документ, таблицы, презентацию, текст, чертежи, вычисления, графики и всё остальное, что можно показать на экране любого устройства. Именно его лучше всего использовать для печати.
Например, если Вам нужно распечатать чертёж из автокада, Вы сохраните чертёж на флешку, но будет ли автокад в пункте печати? А если будет, то нужная версия с нужными библиотеками? Именно для этого и нужен формат PDF - в нём точно будет показано верно вне зависимости от того, в какой программе создали PDF-файл и есть ли нужная программа для его просмотра.