Программный продукт "Графический редактор учебно-методических материалов"

Тип работы:
Дипломная
Предмет:
Программирование


Узнать стоимость

Детальная информация о работе

Выдержка из работы

Содержание

Введение

1. Постановка задачи

1.1 Общая постановка задачи

1.2 Формальная постановка задачи

1.3 Обзор аналогичных программных решений

1.3.1 Растровые графические редакторы

1.3.2 Векторные графические редакторы

1.3.3 Выводы

2. Обзор возможных методов решения поставленной задачи

2.1 Виды графики

2.1.1 Растровая графика

2.1.2 Векторная графика

2.1.3 Выбор: растровая или векторная графика

2.2 Обзор основных графических форматов

2.3 Вывод

3. Описание программного решения

3.1 Выбор инструментария и средств разработки

3.2 Описание входной и выходной информации

3.3 Разработка. Архитектура классов и модулей программного средства

3.3.1 Иерархия и описание классов, реализующих графические примитивы

3.3.1.1 Класс «Точка»

3.3.1.2 Класс «Линия»

3.3.1.3 Класс «Ломаная линия»

3.3.1.4 Класс «Вектор»

3.3.1.5 Класс «Безье»

3.3.1.6 Класс «Окружность»

3.3.1.7 Два множества

3.3.1.8 Три множества

3.3.2 Описание основных модулей программы

3.3.2.1 Сохранение

3.3.2.2 Преобразование форматов файлов

3.3.2.3 Реализация механизма отмена/возврат

3.3.2.4 Реализация сетки/привязка к сетке

3.3.2.5 Вывод и построение графика

3.3.2.6 Заливка примитивов

3.3.2.7 Инструмент текст

3.3.2.8 Автоматизация построения промежутков знакопостоянства

4. Организационно — экономическое обоснование

5. Безопасность жизнедеятельности

Заключение

Список литературы

Приложение А. Диаграмма последовательностей вызовов методов класса «Линия»

Приложение Б. Диаграмма последовательностей вызовов методов класса «Ломаная линия»

Приложение В. Диаграмма последовательностей вызовов методов класса «Вектор»

Приложение Г. Синтаксис и примеры сохранения в файл *. vff

Приложение Д. Руководство пользователя

Введение

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

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

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

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

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

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

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

1. Постановка задачи

1.1 Общая постановка задачи

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

Разрабатываемый программный продукт представляет собой графический редактор, и позволяет создавать графические иллюстрации на основе шаблонов:

— график функции в декартовых системах координат,

— промежутки знакопостоянства функции,

— диаграммы Эйлера-Вена.

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

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

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

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

1.2 Формальная постановка задачи

Основанием для разработки программного продукта является постановка задачи на дипломное проектирование. Название разрабатываемого программного продукта «Графический редактор учебно-методических материалов»

В соответствии с поставленной задачей выделим основные компоненты, которые необходимо разработать для выполнения поставленной задачи:

а) анализ и создание модуля распознавания вводимых математических выражений;

б) создание модуля автоматизации построения графиков функций;

в) создание интерфейса и модуля отображения графической информации;

г) создание модуля загрузки и сохранения файлов;

д) создание модуля для работы с графическими примитивами;

е) создание модуля построения шаблонов файлов;

ж) создание модуля автоматизации построения интервалов знакопостоянства функции;

з) создание модуля автоматизации построения диаграмм Эйлера-Венна.

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

1.3 Обзор аналогичных программных решений

В современном мире графические и математические пакеты считаются неотъемлемой частью мировой технологии, а, следовательно, и любого ПК. Самый примитивный графический редактор (Microsoft Paint) встроен в графическую оболочку Windows, а математический пакет (Excel) — в Office XP. Эти минимальные по требованиям к пользователю программные средства не достаточно пригодны для профессиональной работы, так как функционально ограничены. Поэтому появляется множество различных программ, у которых есть свои достоинства и недостатки.

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

1.3.1 Растровые графические редакторы

Основными представителями растровых графических редакторов присутствуют такие широко известные пакеты как: Microsoft Paint, Adobe Photoshop CS2, Adobe Photoshop Elements 4. 0, Corel Photo Paint, Corel Paint Shop Pro X, Graphy 2. 7, Gimp 2.2. 13, BetterJPEG 1.3.5.0. Проведем сравнительный анализ данных графических редакторов (таблица 1) в соответствии с нашими требованиями к построению графических иллюстраций по высшей математике и сделаем выводы по каждому из них.

Таблица 1. Сравнительный анализ растровых графических редакторов

Наименование

ПП

Критерии сравнения

MS Paint

Adobe Photoshop CS2

Adobe Photoshop Elements 4.0.

Corel Photo- Paint

Corel Paint Shop Pro X

Graphy 2.7.

Gimp 2.2. 13.

Ценовой класс («-» низкий, «- +» средний, «+» высокий)

-

+

— +

+

+

-

-

Кроссплатформенность

-

+

-

-

-

-

+

Цветовые модели

RGB

CMYK, RGB

CMYK, RGB

RGB

RGB

RGB

CMYK, RGB

Мастер обучения

-

-

-

+

-

-

-

Использование шаблонов

-

+

+

+

+

-

+

Средства технического черчения

-

-

-

-

-

+

-

Растровые изображения импорт (bmp, jpeg)

+ +

+ +

+ +

+ -

+ +

— +

+ +

Растровые изображения экспорт (bmp, jpeg)

+ +

+ +

+ +

+ -

+ +

— +

+ +

Векторные изображения импорт/экспорт

— -

+ +

+ +

— -

— -

+ +

+ +

Привязка объектов к сетке

-

-

-

-

-

-

-

Построение изображений по аналитическому выражению

-

-

-

-

-

-

-

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

а) Microsoft Paint

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

б) Adobe Photoshop CS2

Основным достоинством данного продукта для использования в рассматриваемой нами задаче является возможность импорта и экспорта изображений в различные форматы файлов. Но ценовая категория не позволяет использовать приложение большой группе пользователей.

в) Adobe Photoshop Elements 4. 0

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

г) Corel Photo-Paint

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

д) Corel Paint Shop Pro X

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

е) Graphy 2. 7

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

ж) Gimp 2.2. 13

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

и) BetterJPEG 1.7.0. 0

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

1.3.2 Векторные графические редакторы

Разнообразие векторных графических редакторов достаточно велико. Рассмотрим основные наиболее распространенные программные средства. К ним относятся: Corel Draw, Adobe Illustrator, Micrografx Designer, Macromedia FreeHand, CADE Pro. Проведем сравнительный анализ данных графических редакторов (таблица 2) в соответствии с требованиями к построению графических иллюстраций по высшей математике и сделаем выводы по каждому.

Таблица 2. Сравнительный анализ векторных графических редакторов

Наименование

ПП

Критерии сравнения

Corel Draw 10

Adobe Illustrator CS

Micrografx Designer 7

Macromedia FreeHand 10

CADE Pro

Ценовой класс («-» низкий, «- +» средний, «+» высокий)

+

+

+

+

— +

Кроссплатформенность

-

+

-

-

-

Цветовые модели

CMYK, RGB

CMYK

CMYK, RGB

CMYK, RGB

RGB

Мастер обучения

-

-

-

-

-

Использование шаблонов

+

+

+

+

+

Средства технического черчения

-

-

-

-

+

Растровые изображения импорт (bmp, jpeg)

+ +

— -

+ +

+ +

— +

Растровые изображения экспорт (bmp, jpeg)

+ +

— -

+ +

+ +

— +

Векторные изображения импорт/экспорт

+ +

+ +

+ +

+ +

+ +

Привязка объектов к узлам сетки

+

+

+

+

-

Построение изображений по аналитическому выражению

-

-

-

-

-

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

а) Corel Draw 10

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

б) Adobe Illustrator CS

Графический редактор обладает достаточно гибкими возможностями создания и сохранения векторной графики, однако большое количество инструментов может быть достаточно критично для неподготовленного пользователя, и вызывает трудности при работе на первых этапах, когда времени на освоение продукта не достаточно. Решающим критерием против использования пакета для создания иллюстраций по высшей математике является его высокая стоимость. Так покупка одной лицензии для образовательных учреждений колеблется в диапазоне от 7−8 тысяч рублей.

в) Micrografx Designer 7

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

г) Macromedia FreeHand 10

Программный продукт применим для создания графических примитивов и применяемых к ним различных типов заливки. Однако для автоматизации создания и рисования иллюстраций по вводимому аналитическому выражению данный пакет не предназначен.

д) CADE Pro

Пакет специализируется на создании блок-схем алгоритмов и не позволяет создавать различные иллюстраций. Ограниченность возможностей по созданию и заливке диаграмм Эйлера-Венна и автоматизации построения графиков функции делает программный продукт неприменимым для рассматриваемой области.

1.3.3 Выводы

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

Как отмечалось выше, ни один программный продукт не предоставляет возможностей для автоматического построения графиков функции или специализированных инструментов для их рисования. Также отсутствуют удобные шаблоны для построения диаграмм Эйлера-Венна, поэтому для их изображения требуется выполнять ряд шагов: создание окружностей и многоэтапные действия по заливке пересекающихся областей. Ещё одной трудоемкой задачей является задача построения промежутков знакопостоянства функции одной переменной. Для реализации в рамках использования средств, предоставляемых такими векторными графическими редакторами как Corel, потребуется необходимость создания нескольких кривых линий, примыкающих к оси, вычисление по формуле знаков в промежутках, рисование данных знаков прямыми линиями, и установка подписей к каждой из точек, являющихся корнями функции.

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

2. Обзор возможных методов решения поставленной задачи

2.1 Виды графики

Существует специальная область информатики, изучающая методы и средства создания и обработки изображений с помощью программно-аппаратных вычислительных комплексов, — компьютерная графика[27]. Она охватывает все виды и формы представления изображений, доступных для восприятия человеком либо на экране монитора, либо в виде копии на внешнем носителе (бумага, кинопленка, ткань и прочее).

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

2.1.1 Растровая графика

Растр, или растровый массив (bitmap), представляет совокупность битов, расположенных на сетчатом поле-канве. Бит может быть включен (единичное состояние) или выключен (нулевое состояние). Состояния битов можно использовать для представления черного или белого цветов, так что, соединив на канве несколько битов, можно создать изображение из черных и белых точек.

Растровое изображение напоминает лист клетчатой бумаги, на котором каждая точка закрашена черным или белым цветом, в совокупности формируя рисунок, как показано на рис. 2.1.

/

Рис. 2.1. Растровое изображение.

Основным элементом растрового изображения является пиксель (pixel) [28]. Под этим термином часто понимают несколько различных понятий: отдельный элемент растрового изображения; отдельная точка на экране монитора или отдельная точка на изображении, напечатанном принтером.

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

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

2.1.2 Векторная графика

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

Ключевым моментом векторной графики является то, что она использует комбинацию компьютерных команд и математических формул для объекта [33]. Это позволяет компьютерным устройствам вычислять и помещать в нужном месте реальные точки при рисовании этих объектов. Такая особенность векторной графики дает ей ряд преимуществ перед растровой графикой, но в тоже время является причиной ее недостатков. Векторную графику часто называют объектно-ориентированной графикой или чертежной графикой.

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

Рассмотрим подробнее способы представления различных объектов в векторной графике.

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

— прямая линия. Соответствует уравнению «y=kx+b». Указав параметры «k» и «b», всегда можно отобразить бесконечную прямую линию в известной системе координат, то есть для задания прямой достаточно двух параметров.

— отрезок прямой. Отличается тем, что требуется описание еще двух

параметров — например, координат «x1» и «х2» начала и конца отрезка.

— кривая второго порядка. К этому классу кривых относятся параболы,

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

x2+a1y2+a2xy+a3x+a4y+a5=0. (1)

Таким образом, для описания бесконечной кривой второго порядка достаточно пяти параметров. Если требуется построить отрезок кривой, понадобятся еще два параметра.

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

x3+a1y3+a2x2y+a3xy2+a4x2+a5y2+a6xy+a7x+a8y+a9=0. (2)

Таким образом, кривая третьего порядка описывается девятью параметрами.

Рисунок 2.2. Кривая третьего порядка (слева) и кривая Безье (справа)

— кривые Безье. Это особый, упрощенный вид кривых третьего порядка

(рис. 2.2., справа). Метод построения кривой Безье (Bezier) основан на использовании пары касательных, проведенных к отрезку линии в ее окончаниях. Отрезки кривых Безье описываются восемью параметрами, поэтому работать с ними удобнее. На форму линии влияет угол наклона

касательной и длина ее отрезка.

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

2.1.3 Выбор: растровая или векторная графика

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

В разрабатываемом программном продукте будем реализовывать поддержку обоих форматов. Дело в том, что создание иллюстраций предполагает их последующее редактирование и оформление в текстовый редактор. Тут и возникает главная проблема по выбору графического формата: текстовый редактор, например, такой как MS Word фирмы Microsoft поддерживает вставку только растровых иллюстраций; а студент-практикант (на кого и ориентирована разработка) может допустить при создании ошибку, исправить которую в изображении представленном в растровом формате будет достаточно сложно. Корректировка изображения может привести к созданию иллюстрации заново. Если для корректировки использовать изображение представленное не в растровом формате, а в векторном — то можно легко решить последнюю часть проблемы. Так как редактирование векторного изображения сводится к редактированию отдельных элементов — графических примитивов, что повысит эффективность формирования графических иллюстраций учебно-методических ресурсов по высшей математике.

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

2.2 Обзор основных графических форматов

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

Растровый файл представляет собой прямоугольную матрицу (bitmap), разделенную на маленькие квадратики — пиксели (pixel — picture element). Чем больше пикселей в каждом квадратном дюйме на матрице, тем выше разрешение файла. Данная структура характерна для всех растровых форматов. Различаются они способностью нести какую-либо дополнительную информацию, количеством информации о цвете, которую можно определить для каждого пикселя, способом архивации и другими особенностями.

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

Следовательно, при разработке нового графического редактора встает вопрос о выборе графического формата: использовать стандартные широко используемые (краткая информация о файлах приведена в таблице 3) или разрабатывать собственный формат.

Таблица 3. Форматы файлов

Название

Тип

Использование

Фирма

Расши-рение

BMP

(Windows BitMap)

растровый

Хранение и отображение информации в среде Windows

Microsoft

bmp

GIF (Grafics Inter-change Format)

растровый

Передача данных в сети

Compuserve Inc.

gif

JPEG

(Joint Photographic Experts Group)

растровый

Для фотографической информации

Joint Photografic Experts Group

jpg

TIFF (Tagged Image File Format)

растровый

Хранения растровых изображе-ний высокого качества

Aldus Corp.

tif

PSD (PhotoShop Document)

растровый

Для фотографической инфор-мации

Eastman Kodak

pcd

SVG (Scalable Vector Graphics)

векторный

Описание двухмерной векторной графики (декларативной и скриптовой).

Консорциум Всемирной паутины

svg

AI (Adobe Illustrator Doc.)

векторный

Хранение графики в редакторе Adobe Illustrator

Adobe

ai

WMF (Windows MetaFile)

векторный

Хранение и отображение информации в среде Windows

Microsoft

wmf

CDR

(Corel Drawing)

Растровый/векторный

Чертежная, издательская и другие виды графики

Corel

cdr

Проведем сравнительный анализ часто используемых форматов файлов (таблица 4) в соответствии с требованиями к построению графических иллюстраций по высшей математике. На основе его сделаем окончательный выбор форматов файлов, которые применимы и будут использоваться в разработке программного продукта.

Таблица 4. Сравнительный анализ форматов файлов

форматы

критерии

BMP

GIF

JPEG

Tiff

PSD

SVG

AI

WMF

CDR

Кросс-платформенность

+

+

+

+

+

+

-

-

Совместимость с приложениями сторонних разработчиков

+

+

+

+

+

+

+

+

-

Хранение изображений растровое / векторное

+ -

+ -

+ -

+ -

+ -

+ -

+ -

+ -

+ +

Цветовой диапазон

(+ большой спектр, — ограниченный)

-

+

+

+

+

+

+

-

+

Алгоритмы сжатия / потери

+ -

+ -

+ +

+ -

— -

— -

— -

— -

+ +

Открытость формата

+

+

+

+

-

+

-

-

-

Простота реализации алгоритма

+

-

-

-

-

+

-

-

-

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

2.3 Вывод

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

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

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

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

Таким образом, для реализации процедуры в векторный формат будет разработан специализированный формат хранения векторной информации. Структура данного файла напоминает формат SVG, с некоторыми особенностями хранения информации о характерных для математических иллюстраций элементах.

3. Описание программного решения

3.1 Выбор инструментария и средств разработки

В настоящее время для создания Win-ориентированных приложений используются следующие средства разработки: С++ Builder, Visual Studio C++,

Sun Java Studio Enterprise 8.

Visial Studio. NET — это среда разработчика, позволяющая значительно существенно увеличить производительность труда разработчиков, предоставляя им широкий выбор средств для автоматизации рутинных операций и минимизации написания кода. Для создания клиентских приложений в Visual Studio. NET используются Windows-формы, поддержку Windows-форм обеспечивает ядро NET.

Sun Java Studio Enterprise 8 компании Sun — это унифицированная инструментальная платформа для разработки приложений. Sun Java Studio представляет собой полное решение для разработчиков, включающее интегрированные инструменты, наборы для разработки ПО, интерфейсы создания приложений (API), библиотеки и сервисы для разработчиков.

При разработке приложений среда разработки Sun Java Studio предоставляет средства аналогичные средствам представленным во всех рассматриваемых средах: выделение синтаксических конструкций и их подсветка, редакторы интерфейса посредством использования стандартных компонент и многие другие.

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

Таким образом, наиболее эффективным средством разработки программного продукта выступает среда разработки С++ Builder 6. 0, обеспечивающая возможность использования широкого спектра подключаемых модулей, возможность создания графического интерфейса посредством использования технологии WYSWYG (What You See Is What You Get), возможностей использования парадигм объектно-ориентированного программирования.

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

К основным возможностям OpenGL относятся: набор базовых примитивов: точки, линии, многоугольники; видовые и координатные преобразования; использование сплайнов для построения линий и поверхностей. Отрисовка экрана в OpenGL производится после выполнения аффинных преобразований, что позволяет избежать мигания нарисованных объектов, чего невозможно обиться использованием стандартных функций рисования используемых в рассматриваемых средах.

Большинство основных функций графической библиотеки OpenGL задействовано при реализации разработанного программного продукта «Графический редактор учебно-методических материалов» (ГРУММ).

3.2 Описание входной и выходной информации

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

а) построение графика функции и редактирование и с использованием графических примитивов,

б) построение промежутков знакопостоянства функции без возможности редактирования,

в) построение диаграмм Эйлера-Венна на случай двух и трех пересекающихся множеств.

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

Построение изображения связано с редактированием и созданием примитивов, вводом функций, использования инструментов заливки областей.

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

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

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

В качестве выходной информации к проекту используется набор выходных файлов позволяющих производить сохранение информации, как в векторном, так и растровом виде. Для сохранения векторного файла и последующей его загрузки для дальнейшего редактирования используется разработанный в рамках выполнения работы формат с типом файла *. vff (vector file format). Данный файл представляет собой набор тегов характерных для каждого примитива. Структура и теги разработанного формата файла будут представлены и описаны в ходе проектирования программного продукта.

Для сохранения информации в файл пользователю необходимо указать тип сохраняемого файла из предлагаемого списка, ввести его имя и нажать кнопку «сохранить». Процедура как сохранения, так и открытия файла производится с использованием стандартных окон открытия/сохранения файлов характерных для большинства программных продуктов серии MS Office и другие. Подробно процедура сохранения различных типов файлов описана ниже в приложении пользователя.

3.3 Разработка. Архитектура классов и модулей программного средства

В соответствии с представленным техническим заданием, необходимо предусмотреть возможности редактирования таких графических элементов как:

а) линия Безье

б) линия по двум точкам

в) ломаная линия по нескольким точкам

г) вектор по нескольким точкам

д) диаграмма с двумя окружностями

е) диаграмма с тремя пересекающимися окружностями

ж) текст

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

отсутствие некоторых свойств.

а) примитивы на основе точек (линия Безье, линия по двум точкам, ломаная линия по нескольким точкам, вектор по нескольким точкам);

б) BitMap-примитивы (текст);

в) составные примитивы (диаграмма с двумя окружностями, диаграмма с тремя пересекающимися окружностями).

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

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

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

Рис. 3.1. Типы стрелок для вектора

Для подкласса BitMap-примитивы характерны свойства: тип, размер и цвет шрифта.

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

Для удобства программирования и доступа к свойствам и методам определенного класса, реализующего тот или иной примитив, необходимо предусмотреть такой класс который позволит обращаться к свойствам любого из примитивов посредством единого набора методов. Данный класс позволит также объединить характерные для всех классов общие свойства, такие как видимость, цвет линии или текста, имя примитива, выделение. Класс будет являться родительским по отношении к каждому из классов реализующих примитивы, условно назовем данный класс «Примитив».

Кроме организации такого класса необходимо предусмотреть способ хранения набора примитивов. В качестве способов реализации можно воспользоваться либо массивом с типом класс «Примитив», либо динамической структурой типа стек или очередь.

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

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

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

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

Рассмотрим свойства и методы базового абстрактного класса «Примитив».

Открытые свойства.

_NamePrim — имя примитива, используется для доступа к некоторому примитиву, уникально для каждого примитива.

_selected — признак того, что примитив является выбранным или не выбранным.

_visible — признак того, что примитив видим или не видим на экране.

_fillcolor — цвет заполнения примитива.

Закрытые свойства.

_color, _size — цвет и толщина линии примитива.

R, G, B — цветовые составляющие цвета линии примитива.

RFill, GFill, BFill — цветовые составляющие цвета заливки примитива.

Closed — признак того, что примитив является замкнутой фигурой.

typeLines — тип линии примитива (сплошная, пунктирная, штрих пунктирная, точечная).

Открытые методы класса.

setColor (), getColor () — устанавливает и возвращает цвет линии примитива соответственно. В качестве параметра подается значение устанавливаемого цвета.

setSize (int sz) — установка толщины линии примитива. В качестве параметра данной функции передается значение устанавливаемой толщины.

getSize () — возвращает толщину линии выбранного примитива.

setFillColor () — устанавливает значение цвета заливки замкнутого примитива. В качестве параметра передается значение устанавливаемого цвета заливки.

GetR (), GetG (), GetB () — получение цветовых составляющих исходного цвета. В качестве параметров данные функции принимают целочисленное значение цвета, из которого производится выделение компонент красного,

зеленого и голубого цвета.

setName (), getName () -устанавливает и возвращает имя примитива.

setFinished () — устанавливает значение окончания добавления точек к примитиву.

setClosed (), getClosed () — устанавливает и возвращает значение признака указывающего на то, что примитив является замкнутой фигурой.

setLineType (), getLineType () — устанавливает и возвращает значение типа начертания линии. В качестве параметра принимает целое значение, характеризующее тип начертания.

3.3.1 Иерархия и описание классов, реализующих графические примитивы

3.3.1.1 Класс «Точка»

Класс определяет основные методы работы с точкой. Основные атрибуты данного класса это координаты точки на экране «X» и «Y», и признак наведения мыши на точку. Кроме того, он наследует класс «Примитив», а, следовательно, все его свойства и методы.

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

Открытые свойства:

_X, _Y — позиция точки на экране по вертикали и горизонтали.

_mover — признак наведения мыши на точку, а точнее на область в

которой находится точка. Область характеризуется квадратом размерами 5×5 пикселей.

Открытые методы:

Draw () — метод рисования точки на экране. В качестве параметров принимает контекст устройства воспроизведения и контекст окна Open GL. Данный метод также реализует подсветку точки, на которую указывает курсор пользователя путем отрисовки прямоугольника, в центре которого и находится выбранная точка.

onMouseOver () — производит проверку: является ли текущая точка такой, на которую наведен курсор мыши. В качестве параметров принимает значения координат указателя мыши.

onMouseDown () — позволяет присвоить координаты указывающие позицию точки на экране. В качестве параметров принимает значения текущего положения курсора на экране.

onRemove () -метод призван организовать перемещение точки с целью изменения её позиции на экране.

isSelected () — возвращает значение признака: выбрана или нет точка.

setSelected () — присваивает значение признака того, что точка выбрана.

recalcPoints () — пересчитывает координаты точки при изменении размера экрана отображения. В качестве параметров принимает предыдущие значения ширины и высоты и новые ширину и высоту экрана.

3.3.1.2 Класс «Линия»

Класс «Линия» — данный класс позволяет производить рисование и работу

с прямой линией. Линия задается как две точки: начальная и конечная, поэтому одним из его членов является объект класса точка и представляет собой массив из двух значений. Данный класс наследуется от класса «Примитив». Опишем основные свойства и методы класса «Линия».

Открытые свойства:

linePoints[2] - массив значений типа, определенного классом «точка». Свойство необходимо для хранения информации о точках (начальной и конечной). Обращение к членам класса точка позволяет производить большинство функций необходимых при работе с опорными точками линии, например, таких как наведение на точку, её перемещение.

numPoint — количество текущих заданных точек. Данный атрибут класса позволяет узнать завершено ли рисование линии. Рисование линии считается завершенным, если количество точек примитива становиться равным двум.

Закрытые свойства.

oldMPX, oldMPY — атрибуты позволяют узнать, в какой позиции при наведении на объект «линия», находится мышь. Необходимость использования таких атрибутов состоит в том, что при их отсутствии позиция мыши перехватывается только в тот момент, когда объект выделяется. Таким образом, перемещение будет производиться относительно точки отловленной в данный момент, что приводит к некорректному перемещению примитива по экрану. Именно для избегания такого эффекта необходимо знать позицию курсора на экране в любой момент при условии выделенного объекта.

Открытые методы.

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

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

GetX (int i), GetY (int i) — возвращает значение координаты i-ой точки по горизонтали и по вертикали на экране соответственно.

isClosedPrim () — позволяет узнать является ли примитив замкнутым. Данная функция возвращает в любой момент значение «ЛОЖЬ». Однако его определение необходимо, т.к. в противном случае класс будет не доопределен,

UndoPoint () — производит отмену последней созданной точки. Реализация отмены может быть произведена в двух случаях: отмена второй созданной точки, отмена первой созданной точки. Причем второй вариант влечет за собой и уничтожение объекта «Линия».

Закрытые методы

FindMax (), FindMin () — функции в качестве результатов возвращают максимальные и минимальные позиции точек линии на экране. Работа по поиску таких точек производится последовательным обходом всех точек (двух) линии, заданных свойством linePoints.

otherPointSel (int n) — производит проверку выделения точек и позволяет блокировать множественный выбор точек, за счет того, что возвращает логическое значение. Если точек не выделено проверка приводит к перемещению линии, или другим операциям работы с линией. В случаях, когда одна из точек выбрана, данный метод не позволяет производить выделение других точек. Актуальность такой процедуры возникла при перемещении точек линии, так как в определенные моменты при перемещении одной из точек и наведении на другую производилось выделение последней и дальнейшее её перемещение с первой.

onTypeLine (), offTypeLine () — методы вызываются методом Draw () и позволяют включить или отключить режим начертания линии (пунктир, штриховая и т. д.). Так как работы по подготовке к рисованию примитива не относятся непосредственно к отрисовке линии, то для облегчения понимания исходных кодов, данные методы были вынесены отдельно.

ПоказатьСвернуть
Заполнить форму текущей работой