Фрейм ввода данных предназначен для ввода вышеозначенных параметров текущего эмиттера. В редакторе всегда имеется текущий эмиттер, если их число больше нуля. Если же оно равно нулю, инструменты фрейма ввода блокируются. При изменении текущего эмиттера происходит соответствующее обновление данных инструментов фрейма ввода.
Фрейм управления очередью эмиттеров представляет собой панель со схематическим отображением отдельных эмиттеров в виде пиктограмм. К функциям фрейма относятся добавление и удаление эмиттеров, копирование эмиттера со всеми его параметрами, изменение текущего эмиттера, а также порядка прорисовки эмиттеров. Для копирования и удаления эмиттеров при активном фрейме управления очередью можно использовать горячие клавиши (Ctrl+V, Ctrl+X, соответственно).
Фрейм вывода объединяет в себе всю функциональность вывода графических данных приложения. Для максимально быстрого вывода используется низкоуровневая работа с аппаратным обеспечением видеосистемы, осуществляемая посредством драйвера OpenGL. Доступ к платформенно-независимому конвейеру OpenGL осуществляется, в свою очередь, через интерфейс wxWidgets. Именно на уровне фрейма вывода осуществлено связывание оконной системы и функциональности рисования очереди эмиттеров, не зависящей от конкретного окна и работающая с буферами OpenGL. Средства wxWidgets используют для этого те или иные системные библиотеки, в зависимости от целевой платформы. Для Windows это WGL, для MacOSX – AGL, а также стандартные Carbon(для С++) и Cocoa(ObjectiveС).
Дополнительно фрейм вывода позволяет при помощи мыши перемещать эмиттеры, изменять их размеры. Также поддерживается перенос рабочей (текущей отображаемой) области рисования. Для этого необходимо, во-первых, активировать режим переноса, использовав клавишу Space. Затем, используя мышь, осуществить перенос области в нужном направлении и на необходимое расстояние. Для выхода из режима переноса рабочей области необходимо повторно нажать клавишу Space. Необходимо отметить, что в режиме переноса рабочей области возможности переноса эмиттеров и изменения их размеров отключаются.
Системное меню имеет следующую структуру:
- меню “Файл”, отвечающее за общий сброс, сохранение и загрузку, выход из приложения;
- меню “Очередь”, отвечающее за установку режима отображения эмиттеров (Playback, Loopplayback, Static), добавление и удаление текущего эмиттера, копирование эмиттера и набора его параметров, сброс всех эмиттеров;
- меню “Информация”, позволяющее получить информацию о способах использования редактора, а также о разработчике;
Панель инструментов содержит следующие компоненты:
а) функции установки режима отображения эмиттеров:
1) Playback;
2) Loopplayback;
2) Static;
б) функции сохранения и загрузки:
1) Save;
2) Load;
в) функции настройки отображения:
1) Back color;
2) Back image;
3) режимсмешивания;
Панель статуса имеет два поля: количество отображённых за секунду кадров, число частиц, число примитивов, быстрая подсказка (по ситуации).
Получить информацию о внутренней структуре приложения можно, обратившись к диаграмме классов (Приложение Г).
2.3 Функциональная модель приложения
Разработанный редактор имеет шесть базовых функциональных блоков: настройка очереди эмиттеров, обновление, отображение, ввод/вывод, настройка отображения и работа со справочной системой приложения (в базовой версии сводится к получению общей информации о функциональности редактора и разработчике, впоследствии планируется расширение).
Настройка очереди эмиттеров, в свою очередь, состоит из на набора функций по управлению очередью (добавление эмиттеров, удаление эмиттеров, копирование эмиттеров с переносом их параметров) и набора функций по установке параметров текущего эмиттера и его частиц.
Функция отображения реализует вывод на экран создаваемых эффектов.
Функции ввода и вывода позволяют пользователю сохранять текущий проект, а именно – данные о эмиттерах и о дополнительных параметрах отображения, на внешний носитель, и загружать проекты, которые были сохранены ранее.
Функции настройки отображения состоят в установке дополнительных параметров отображения (перечисленных в предыдущем подразделе).
Получить более детальную информацию о множестве и структуре интерфейсных функций приложения можно, обратившись к диаграмме вариантов использования (Приложение Д). На ней отображена декомпозиция крупнейших интерфейсных блоков. Диаграмма позволяет в наглядной форме представить набор действий, осуществляемых пользователем, которыми определяется работа редактора.
2.4 Информационная модель приложения
Информационная модель приложения отражает потоки информации, проходящие между его модулями и внешними сущностями.
Разрабатываемый редактор частиц является однопользовательским приложением, так как поддерживает интерфейс одновременно лишь с одним пользователем. Таким образом, первой внешней сущностью является пользователь.
Данные о частицах, обработанные редактором, выводятся на внешний носитель в виде текстовых файлов формата XML. Позже эти файлы могут быть использованы как редактором, так и поставляемым совместно с ним инструментарием в контексте целевого приложения. Таким образом, второй внешней сущностью является носитель данных.
За непосредственный приём данных эмиттеров от пользователя отвечает инструментарий фрейма ввода. Библиотеки операционной системы предоставляют для этого всё необходимое, а использование предкомпиляторных “фильтров” wxWidgets позволяет и вовсе забыть о платформе.
После ввода данные направляются в первую основную сущность приложения – очередь эмиттеров. Там они хранятся, используясь при выводе (некоторые поля модифицируются при этом).
В свою очередь, ввод управляющих сигналов осуществляется через аналогичные инструменты панели инструментов. Эти данные помещаются в служебные поля очереди эмиттеров, а также фрейма вывода.
Обмен данными с внешними носителями осуществляется по соответствующим управляющим командам. При сохранении осуществляется съём данных очереди эмиттеров, параметров отображения, хранящихся в фрейме вывода, прочей служебной информации, характеризующей состояние приложения, которые форматируются установленным образом (используется инструмент TinyXML) и выводятся. При загрузке происходит прямо противоположная последовательность действий.
Обобщая вышесказанное, к основным потокам данных приложения можно отнести:
а) ввод пользователем в систему параметров эмиттеров:
1) координаты в двумерной декартовой системе;
2) скорость;
3) размеры эмиттера;
4) значения разброса частиц;
5) стартовая задержка и длительность генерации;
б) ввод пользователем в систему параметров частиц эмиттера:
1) текстура;
2) время жизни;
3) скорость по осям;
4) гравитация по осям;
5) значения начальных и конечных растяжений;
6) значения начального и конечного цветов (32bit), по каналам;
в) вывод графической информации системы эмиттеров в буфер изображения;
Графически информационная модель приложения представлена в Приложении В, на диаграмме потоков данных.
2.5 Объектная модель приложения
Так как приложение было разработано с использованием возможностей объектно-ориентированного языка С++, следует раскрыть его объектную структуру. Подробно объектная структура программного средства описана в Приложении Г, здесь же можно привести общий обзор системы классов.
а) класс MyApp, отвечает за инициализацию приложения, создаётся и управляется полностью из среды wxWidgets. Это корневой класс всей проектируемой части приложения.
б) модуль очереди эмиттеров. Включает в себя:
1) класс ParticleSystemChain, то есть непосредственно саму очередь; в системе существует singleton-объект данного класса;
2) содержащиеся в очереди эмиттеры – объекты класса ParticleSystem;
3) для формирования и использования корректных OpenGL текстур на основании битовых изображений используются объекты класса MyTexture.
в) класс MainFrame – корневой класс оконного пользовательского интерфейса; в системе существует singleton-объект данного класса;
г) класс PSChainFrame представляет собой окно управления очередью систем;
д) объекты PSLabel применяются в PSChainFrame для представления эмиттеров, представляют собой пиктограммы;
е) PSInputFrame используется для ввода пользовательских данных активной системы;
ж) объекты классов MySpinCtrld и MySpinEditCtrld – пользовательские элементы управления, используемые для ввода чисел с плавающей точкой из указанного диапазона, применяются в PSInputFrame;
з) PSOutputFrame используется для отображения результатов работы приложения (вывода вычисленных графических примитивов – частиц); объект MyCanvas – предоставляется OpenGL в качестве контекста визуализации;
Это общий перечень разработанных в рамках программного средства классов с кратким описанием их функциональности. Взаимосвязи между ними и другими, менее значительными, классами, а также внутренняя структура классов в более полном виде раскрывается в Приложении Г.
2.6 Требования к программным, аппаратным ресурсам и ОС
Для сборки приложения необходимо наличие набора встраиваемых (статических) библиотек среды wxWidgets, установленных в системный каталог (или в один из каталогов поиска статических библиотек, указанных в настройках среды разработки MicrosoftVisualStudio 2005 и в свойствах проекта). Для корректной работы приложения необходимо наличие в системе динамической библиотеки OpenGL (любой версии, по умолчанию с OSWindows поставляется версия 1.0). Драйвер OpenGL используется для растеризации графических данных, генерируемых редактором.
Приложение требует не более 30 MB оперативной памяти, 20 MB – виртуальной, 40 MB дискового пространства.
Минимальное разрешения дисплея монитора, требуемое для корректной работы приложения, составляет 1024x768 точек.
Приложение работает под управлением любой OС Windows (версии не ниже WindowsXPSP2).