В представленном дипломном проекте разработан графический редактор эффектов частиц “Easy Particles”.
При разработке были использованы самые современные подходы к проектированию программного обеспечения. Программное обеспечение разработано с учетом простоты будущей модификации.
Программа имеет удобный пользовательский интерфейс, отвечающий современным требованиям. Она может использоваться на различных компьютерах с различной конфигурацией и не требует много ресурсов. Пользовательский интерфейс программы рассчитан на минимальные навыки работы с компьютером.
В ходе выполнения поставленной задачи реализованы все основные функции программного средства. Все предъявляемые к программе требования были выполнены. Отладка и тестирование программы проведены успешно.
Проведено технико-экономическое обоснование внедрения спроектированной системы. Полученный экономический эффект позволяет окупить затраты пользователя на закупку, установку ПС, обучение сотрудников его использованию и остальные. Следовательно, разработка является экономически целесообразной.
Цель, поставленная перед автором работы, была выполнена в полной мере. Проект выполнен в соответствие с ГОСТами и требованиями, предъявляемыми к технической документации.
Как уже было сказано, разработанная версия приложения является первой реализацией, наиболее общей, позволяющей использовать лишь самые основные величины и оперировать сильно ограниченным множеством настроек и характеристик.
Планируемое будущее расширение должно коснуться, в первую очередь, пользовательского интерфейса, а также задаваемых параметров частиц и эмиттеров. В целях большего удобства использования редактора, в него планируется внести изменения, связанные со способами задания скорости частиц и гравитации, действующей на них. Возможно, будет введены параметры дисперсии гравитации, или иные параметры, задающие изменение значений гравитации. Сами значения скорости и гравитации планируется вводить посредством векторов.
Необходимо изменить способы задания изменения цвета частиц (через визуальный цветовой элемент управления), ввести возможность использования дополнительных ключей цвета, с учётом длительности перехода частицы от одного цвета к другому.
Аналогичные параметры-ключи (и визуальные элементы управления, соответствующие им) будут введены для размеров частиц.
Для размеров, цвета, задержки генерации частиц планируется ввести параметры дисперсии.
Некоторые изменения претерпит и оконная система приложения. В ней будут преобладать перетаскиваемые присоединяемые панели. Станет возможным изменение размеров окна вывода, а также использование полноэкранного режима при просмотре эффектов.
Среди прочих возможных изменений можно отметить запуск в окне просмотра и встраивание эффектов частиц в файлы видео, а также расширенные программные интерфейсы для разработчиков компьютерных игр и иных графических приложений.
Перечисленные изменения должны повысить интерес к программному средству и его полезность для разных групп пользователей.
Список использованных источников
1) Бьёрн Страуструп Дизайн и эволюция языка C++ - М.: ДМК пресс, 2006. - 448с.
2) Ефремова О.С. Требования охраны труда при работе на персональных электронно-вычислительных машинах (ПК) - М.: Альфа-пресс, 2005. - 150с.
4) Санитарные нормы для образовательных учреждений . - 5-е изд., доп. - М.: Образование в документах, 2002. - 200с.
5) Замбржицкий О.Н. Гигиеническая оценка естественного и искусственного освещения помещений. - Мн.: БГМУ, 2005. - 18 с.
6) СанПиН N 9-131 РБ 2000 Гигиенические требования к видеодисплейным терминалам (ВДТ), электронно-вычислительным машинам (ЭВМ) и организации работы
7) Косилина Н.И., Колтановского А.П. Производственная гимнастика для работников умственного труда - М.: Физкультура и спорт, 1983.
8) Кляуззе В.П. Безопасность & компьютер. - Мн.: В.П.Кляуззе, 2001. - 155с.
Приложение А
(обязательное)
Текст программного модуля обработки частиц
//ParticleSystemChain.cpp (очередь эмиттеров)
#include "ParticleSystemChain.h"
#include "PSOutputFrame.h"//just for using canvas to get current reflecting mode ang zoom
#define BLEND_SRC "blend_src"
#define BLEND_DST "blend_dst"
#define ITEM_SELECTED "item_selected"
#define PSBOUND_SELECTED_COLOR wxColour(200, 200, 200, 255)
#define PSBOUNS_CHOOSED_COLOR wxColour(70, 70, 70, 255)
#define PSBOUND_COLOR wxColour(50, 50, 50, 255)
#define MIN_RUN_PSCHAIN_ITEM_DIMENSION 20
ParticleSystemChain *ParticleSystemChain::singletonChain = NULL;
ParticleSystemChain* ParticleSystemChain::Master()
{
if(!singletonChain)
singletonChain = new ParticleSystemChain();
return singletonChain;
}
void ParticleSystemChain::CleanSingleton()
if(singletonChain)
delete singletonChain;
singletonChain = NULL;
int ParticleSystemChain::AddSystem()
ParticleSystem* ps = new ParticleSystem();
all_ps.push_back(ps);
if(workMode != ParticleSystemChainWorkMode_STATIC)
ps->start();
int new_ps_layer = (int)all_ps.size() - 1;
if(selectedSystemLayer < 0)
selectedSystemLayer = new_ps_layer;
return new_ps_layer;
bool ParticleSystemChain::RemoveSystemAtLayer(int layer)
delete all_ps.at(layer);
void ParticleSystemChain::RemoveAll()
vector<ParticleSystem*>::iterator iter = all_ps.begin();
while(iter != all_ps.end())
delete((ParticleSystem*)*iter);
++iter;
all_ps.clear();
selectedSystemLayer = choosedSystemLayer = -1;
void ParticleSystemChain::MoveSystem(int from, int to)
void ParticleSystemChain::CopySystemsData(int layer_from, int layer_to)
int numof_systems = (int)all_ps.size();
bool ParticleSystemChain::Save(TiXmlElement* root) const
TiXmlElement tmp("BLENDING");
TiXmlElement *caption = (TiXmlElement*)root->InsertEndChild(tmp);
if(!caption)
return false;
caption->SetAttribute(BLEND_SRC, blendModeSrc);
caption->SetAttribute(BLEND_DST, blendModeDst);
return saveSystems(root);
bool ParticleSystemChain::Load(TiXmlElement *root)
TiXmlElement *blending_attrs_ptr = (TiXmlElement*)root->FirstChild("BLENDING");
if(!blending_attrs_ptr)//old version file (1.0), just set defaults
blendModeSrc = GL_ONE;
blendModeDst = GL_ONE_MINUS_SRC_ALPHA;
else
blending_attrs_ptr->Attribute(BLEND_SRC, &blendModeSrc);
blending_attrs_ptr->Attribute(BLEND_DST, &blendModeDst);
return loadSystems(root);
ParticleSystemOutputCoordCharacter ParticleSystemChain::AnalyseOutputCoords(MYPoint2D point) const
ParticleSystemOutputCoordCharacter res;
res.psLayer = -1;
res.isLeft = res.isRight = res.isTop = res.isBottom = false;
//first find selecting system layer
vector<ParticleSystem*>::const_iterator iter = all_ps.end();
vector<ParticleSystem*>::const_iterator begin_iter = all_ps.begin();
size_t i = all_ps.size();
wxRect system_rect, tmp_rect;
bool chain_is_run = (workMode != ParticleSystemChainWorkMode_STATIC);
while(iter != begin_iter)
--iter, --i;
wxRect tmp_rect;
MYPoint2D appear_box_position = MYPoint2DMake((*iter)->getX(), (*iter)->getY());
MYSize2D appear_box_size = (*iter)->getAppearBoxSize();
if(chain_is_run)
tmp_rect = wxRect(appear_box_position.x, appear_box_position.y, appear_box_size.width, appear_box_size.height);
if(tmp_rect.GetWidth() < MIN_RUN_PSCHAIN_ITEM_DIMENSION)
int diff = MIN_RUN_PSCHAIN_ITEM_DIMENSION - tmp_rect.GetWidth();
tmp_rect.SetX(tmp_rect.GetX() - diff / 2);
tmp_rect.SetWidth(MIN_RUN_PSCHAIN_ITEM_DIMENSION);
if(tmp_rect.GetHeight() < MIN_RUN_PSCHAIN_ITEM_DIMENSION)
int diff = MIN_RUN_PSCHAIN_ITEM_DIMENSION - tmp_rect.GetHeight();
tmp_rect.SetY(tmp_rect.GetY() - diff / 2);
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14