Разработка графического редактора

Взаимодействие объектов кнопка “фигура” и кнопка “заполнение” показано на диаграмме переходов состояний (рисунок 2.4).

Рисунок 2.4 - Модели состояний для кнопок “фигура” и “запо

лнение”

Так как большинство действий в системе производится в соответствии с событиями от мыши, то основные входные данные для системы – это текущие координаты и сами события MouseDown, MouseUp, MouseMove.

Диаграмма потоков данных приведена на рисунке 2.5.

Рисунок 2.5 - Диаграмма потоков данных

Так как не было необходимости в проекте создавать специальные классы для реализации объектов, то в иерархии классов будут приведены основные классы среды Delphi, используемые для

реализации основных возможностей проекта и их описание.

Иерархия используемых графических классов изображена на рисунке 2.6.

Рисунок 2.6 - Иерархия классов

3. Программная реализация

Согласно условию задачи, выполнены следующие пункты:

Используя основные классы среды Delphi, были реализованы основные возможности редактора для создания рисунков;

2) Редактирование различных графических изображений;

Запоминание картинок в файлах формата *.bmp.;

Реализован удобный пользовательский интерфейс, который каждый пользователь может корректировать по своему желанию.

При решении задачи построения графического редактора был использован объектно-ориентированный подход. Его преимущество перед структурным подходом заключается в следующем:

Объект моделирования и действия над объектом разрабатываются совместно, что требует более тщательного анализа поведения и характеристик объекта, тем самым, повышая качество моделирования.

Объект моделирования и методы работы с ним объединяются в одной структуре – классе, связывая характеристики объекта с действиями над ними (инкапсуляция), что дает возможность рассматривать объект не как хранилище некоторых свойств, а как функционально полную единицу.

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

Возможность позднего связывания приводит к более гибкой манипуляции данными, т.к. позволяет использовать одни и те же действия при работе с объектами, которые отличаются некоторыми характеристиками, но имеют общие свойства (полиморфизм).

Данная программа написана в среде Delphi 5 в соответствии с основными принципами объектно-ориентированного программирования; объектный стиль программирования фиксирует поведение реального мира таким способом, при котором детали его реализации скрыты.

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

- алгоритмическая декомпозиция - разделение алгоритмов по методу «сверху вниз» и соответствует структурному проектированию, где каждый модуль системы выполняет один из важных этапов общего процесса. Результат структурного проектирования можно представить в виде дерева подпрограмм.

- объектно-ориентированная декомпозиция - в качестве критерия декомпозиции системы используется принадлежность ее элементов к различным абстракциям данной предметной области.

Программа состоит из основного модуля Unit1, осуществляющего синхронизацию процесса обработки данных и взаимодействие конкретных экземпляров конкретных объектов; подключаемого модуля Unit2, в котором содержится класс Form2, с помощью которого задается размер рисунка; подключаемого модуля Unit3, в котором содержится класс Form3, с помощью которого выводится окно “О программе…”.

Модуль Unit1 просто дополненять и модифицировать. В частности, не представляет никаких затруднений добавить новые виды инструментов, добавив их в тип TDrawingTool и задав для них соответствующие действия в процедуре DrawShape.

DrawShape является наиболее функцмональной процедурой и управляет работой практически всей системы. События происходят в зависимости от выбранного инструмента( это отражается в переменной Drawingtool). События OnMouseDown, OnMouseMove, OnMouseUp вызывают процедуру и далее она производит все действия. При нажатии кнопки мыши(OnMouseDown) начинается прорисовка графического объекта, при движении мыши(OnMouseMove) объект прорисовывается в соответствии с изменением координат указателя мыши, когда кнопку отпускают(OnMouseUp) прорисовка заканчивается.

Процедура DrawShape описана в разделе public основного класса TForm1, что позволяет использовать ее в любом модуле программы

Описание метода TForm1.DrawShape:

procedure TForm1.DrawShape(TopLeft, BottomRight: TPoint; AMode: TPenMode);

var i:integer;

begin

with image1.Canvas do

begin

Pen.Mode :=amode;

case DrawingTool of

dtHandle: //КАРАНДАШ

begin

Pen.Mode :=pmcopy;

image1.Canvas.Pixels[topleft.x,topleft.y]:=colordialog1.Color;

image1.Canvas.LineTo(BottomRight.X, BottomRight.Y);

end;

dtLine: //РИСОВАНИЕ ЛИНИИ

begin

image1.Canvas.MoveTo(TopLeft.X, TopLeft.Y);

image1.Canvas.LineTo(BottomRight.X, BottomRight.Y);

end;

dtPolyline: //ПИРАМИДА

begin

image1.Canvas.Polyline([origin, movept, point(spinedit1.Value, spinedit2.Value)]);

end;

dtSpray: //РАСПЫЛИТЕЛЬ

begin

Pen.Mode :=pmcopy;

for i:=1 to 20 do

begin

image1.Canvas.Pixels[BottomRight.X+random(20),

BottomRight.Y+random(20)]:=colordialog1.Color;

end;

end;

dtFonty: //ВЫВОД ТЕКСТА

begin

image1.Canvas.TextOut(bottomright.x,bottomright.y,edit1.Text);

end;

dtRomb: //РОМБ

begin

image1.Canvas.MoveTo(topleft.x+((bottomright.x-topleft.x) div 2),topleft.y);

image1.Canvas.LineTo(bottomright.x, bottomright.y-((bottomright.y-topleft.y) div 2));

image1.Canvas.MoveTo(topleft.x+((bottomright.x-topleft.x) div 2),topleft.y);

image1.Canvas.LineTo(topleft.x, topleft.y+((bottomright.y-topleft.y) div 2));

image1.Canvas.LineTo(topleft.x+((bottomright.x-topleft.x) div 2),bottomright.y);

image1.Canvas.LineTo(bottomright.x, bottomright.y-((bottomright.y-topleft.y) div 2));

Страница:  1  2  3  4 


Другие рефераты на тему «Программирование, компьютеры и кибернетика»:

Поиск рефератов

Последние рефераты раздела

Copyright © 2010-2024 - www.refsru.com - рефераты, курсовые и дипломные работы