Визуализатор алгоритмов с применением трехмерной графики
Общее описание разрабатываемого приложения, его актуальность и сферы практического применения. Выбор среды разработки и языка программирования, 3D-движка. Архитектура приложения, интерфейса и его главных элементов, взаимодействие с пользователем.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 10.07.2017 |
Размер файла | 317,5 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
algoRButton();
stepStaticText();
stepStopButton();
stepPlayButton();
stepPauseButton();
stepLastButton();
stepNextButton();
logStaticText();
logList(); // логирование (комментирование)
speedButtonOn();
speedButtonOff();
speedListTextStaticText(); // text для исх. последовательности in speed
speedListStaticText(); // text исх. последовательности in speed
speedReportStaticText(); // text для report in speed
speedReportOkButton(); // button для create report in speed
speedReportEditBox(); // editbox для report in speed
sceneButtonOn();
sceneButtonOff();
skyStaticText();
skyButton1 (); // кнопки sky
skyButton2 (); // кнопки sky
skyButton3 (); // кнопки sky
groundStaticText();
groundButton1 (); // кнопки ground
groundButton2 (); // кнопки ground
groundButton3 (); // кнопки ground
shadowButtonOn();
shadowButtonOff();
}
void Mygui:quitButton(void)
{
quit = CEGUI: WindowManager:getSingleton().createWindow («TaharezLook/Button», «QuitButton»);
quit->setText (ToRU(L «Выход»));
quit->setSize (CEGUI:UVector2 (CEGUI:UDim (0.15, 0), CEGUI:UDim (0.05, 0)));
quit->setPosition (CEGUI:UVector2 (CEGUI:UDim (0.025, 0), CEGUI:UDim (0.025, 0)));
mySheet->addChildWindow(quit); // прикрепим кнопку выхода на лист
}
void Mygui:camStaticText(void)
{
camText = CEGUI: WindowManager:getSingleton().createWindow («TaharezLook/StaticText», «CamStaticText»);
camText->setText (ToRU(L «Выберите камеру:»));
camText->setSize (CEGUI:UVector2 (CEGUI:UDim (0.20, 0), CEGUI:UDim (0.05, 0)));
camText->setPosition (CEGUI:UVector2 (CEGUI:UDim (0.80, 0), CEGUI:UDim (0, 0)));
mySheet->addChildWindow(camText); // прикрепим статиктекст на лист
}
void Mygui:camButton1 (void)
{
cam1 = CEGUI: WindowManager:getSingleton().createWindow («TaharezLook/Button», «CamButton1»);
cam1->setText («1»);
cam1->setSize (CEGUI:UVector2 (CEGUI:UDim (0.05, 0), CEGUI:UDim (0.05, 0)));
cam1->setPosition (CEGUI:UVector2 (CEGUI:UDim (0.8, 0), CEGUI:UDim (0.05, 0)));
mySheet->addChildWindow(cam1); // прикрепим кнопку на лист
}
void Mygui:camButton2 (void)
{
cam2 = CEGUI: WindowManager:getSingleton().createWindow («TaharezLook/Button», «CamButton2»);
cam2->setText («2»);
cam2->setSize (CEGUI:UVector2 (CEGUI:UDim (0.05, 0), CEGUI:UDim (0.05, 0)));
cam2->setPosition (CEGUI:UVector2 (CEGUI:UDim (0.85, 0), CEGUI:UDim (0.05, 0)));
mySheet->addChildWindow(cam2); // прикрепим кнопку на лист
}
void Mygui:camButton3 (void)
{
cam3 = CEGUI: WindowManager:getSingleton().createWindow («TaharezLook/Button», «CamButton3»);
cam3->setText («3»);
cam3->setSize (CEGUI:UVector2 (CEGUI:UDim (0.05, 0), CEGUI:UDim (0.05, 0)));
cam3->setPosition (CEGUI:UVector2 (CEGUI:UDim (0.9, 0), CEGUI:UDim (0.05, 0)));
mySheet->addChildWindow(cam3); // прикрепим кнопку на лист
}
void Mygui:camButton4 (void)
{
cam4 = CEGUI: WindowManager:getSingleton().createWindow («TaharezLook/Button», «CamButton4»);
cam4->setText («4»);
cam4->setSize (CEGUI:UVector2 (CEGUI:UDim (0.05, 0), CEGUI:UDim (0.05, 0)));
cam4->setPosition (CEGUI:UVector2 (CEGUI:UDim (0.95, 0), CEGUI:UDim (0.05, 0)));
mySheet->addChildWindow(cam4); // прикрепим кнопку на лист
}
void Mygui:listStaticText(void)
{
listSText = CEGUI: WindowManager:getSingleton().createWindow («TaharezLook/StaticText», «ListStaticText»);
listSText->setText (ToRU(L «Введите последовательность чисел:»));
listSText->setSize (CEGUI:UVector2 (CEGUI:UDim (0.30, 0), CEGUI:UDim (0.05, 0)));
listSText->setPosition (CEGUI:UVector2 (CEGUI:UDim (0.025, 0), CEGUI:UDim (0.825, 0)));
mySheet->addChildWindow(listSText); // прикрепим статиктекст на лист
}
void Mygui:listEditBox(void)
{
listEdit = CEGUI: WindowManager:getSingleton().createWindow («TaharezLook/Editbox», «ListEditBox»);
listEdit->setText («7 3 1 6 10 9 2 5 8 4»);
listEdit->setSize (CEGUI:UVector2 (CEGUI:UDim (0.30, 0), CEGUI:UDim (0.05, 0)));
listEdit->setPosition (CEGUI:UVector2 (CEGUI:UDim (0.025, 0), CEGUI:UDim (0.875, 0)));
mySheet->addChildWindow(listEdit); // прикрепим editBox на лист
}
void Mygui:listAutoButton(void)
{
listAuto = CEGUI: WindowManager:getSingleton().createWindow («TaharezLook/Button», «ListAutoButton»);
listAuto->setText («Auto»);
listAuto->setSize (CEGUI:UVector2 (CEGUI:UDim (0.15, 0), CEGUI:UDim (0.05, 0)));
listAuto->setPosition (CEGUI:UVector2 (CEGUI:UDim (0.025, 0), CEGUI:UDim (0.925, 0)));
mySheet->addChildWindow(listAuto); // прикрепим button на лист
}
void Mygui:listOkButton(void)
{
listOk = CEGUI: WindowManager:getSingleton().createWindow («TaharezLook/Button», «ListOkButton»);
listOk->setText (ToRU(L «Создать»));
listOk->setSize (CEGUI:UVector2 (CEGUI:UDim (0.15, 0), CEGUI:UDim (0.05, 0)));
listOk->setPosition (CEGUI:UVector2 (CEGUI:UDim (0.175, 0), CEGUI:UDim (0.925, 0)));
mySheet->addChildWindow(listOk); // прикрепим button на лист
}
void Mygui:algoOffButton(void)
{
algoOff = CEGUI: WindowManager:getSingleton().createWindow («TaharezLook/Button», «AlgoOffButton»);
algoOff->setText (ToRU(L»< Поменять числа»));
algoOff->setSize (CEGUI:UVector2 (CEGUI:UDim (0.20, 0), CEGUI:UDim (0.05, 0)));
algoOff->setPosition (CEGUI:UVector2 (CEGUI:UDim (0.025, 0), CEGUI:UDim (0.525, 0)));
mySheet->addChildWindow(algoOff); // прикрепим button на лист
}
void Mygui:algoStaticText(void)
{
algoSText = CEGUI: WindowManager:getSingleton().createWindow («TaharezLook/StaticText», «AlgoStaticText»);
algoSText->setText (ToRU(L «Введите ID алгоритма:»));
algoSText->setSize (CEGUI:UVector2 (CEGUI:UDim (0.30, 0), CEGUI:UDim (0.05, 0)));
algoSText->setPosition (CEGUI:UVector2 (CEGUI:UDim (0.025, 0), CEGUI:UDim (0.575, 0)));
mySheet->addChildWindow(algoSText); // прикрепим статиктекст на лист
}
void Mygui:algoNameText(void)
{
algoText = CEGUI: WindowManager:getSingleton().createWindow («TaharezLook/StaticText», «AlgoNameText»);
algoText->setText («123»);
algoText->setSize (CEGUI:UVector2 (CEGUI:UDim (0.20, 0), CEGUI:UDim (0.05, 0)));
algoText->setPosition (CEGUI:UVector2 (CEGUI:UDim (0.075, 0), CEGUI:UDim (0.625, 0)));
mySheet->addChildWindow(algoText); // прикрепим статиктекст на лист
}
void Mygui:algoLButton(void)
{
algoL = CEGUI: WindowManager:getSingleton().createWindow («TaharezLook/Button», «AlgoLButton»);
algoL->setText(«<»);
algoL->setSize (CEGUI:UVector2 (CEGUI:UDim (0.05, 0), CEGUI:UDim (0.05, 0)));
algoL->setPosition (CEGUI:UVector2 (CEGUI:UDim (0.025, 0), CEGUI:UDim (0.625, 0)));
mySheet->addChildWindow(algoL); // прикрепим button на лист
}
void Mygui:algoRButton(void)
{
algoR = CEGUI: WindowManager:getSingleton().createWindow («TaharezLook/Button», «AlgoRButton»);
algoR->setText(«>»);
algoR->setSize (CEGUI:UVector2 (CEGUI:UDim (0.05, 0), CEGUI:UDim (0.05, 0)));
algoR->setPosition (CEGUI:UVector2 (CEGUI:UDim (0.275, 0), CEGUI:UDim (0.625, 0)));
mySheet->addChildWindow(algoR); // прикрепим button на лист
}
void Mygui:stepStaticText(void)
{
stepSText = CEGUI: WindowManager:getSingleton().createWindow («TaharezLook/StaticText», «StepStaticText»);
stepSText->setText (ToRU(L «Шаги:»));
stepSText->setSize (CEGUI:UVector2 (CEGUI:UDim (0.30, 0), CEGUI:UDim (0.05, 0)));
stepSText->setPosition (CEGUI:UVector2 (CEGUI:UDim (0.025, 0), CEGUI:UDim (0.675, 0)));
mySheet->addChildWindow(stepSText); // прикрепим статиктекст на лист
}
void Mygui:stepStopButton(void)
{
stepStop = CEGUI: WindowManager:getSingleton().createWindow («TaharezLook/Button», «StepStopButton»);
stepStop->setText («stop»);
stepStop->setSize (CEGUI:UVector2 (CEGUI:UDim (0.05, 0), CEGUI:UDim (0.05, 0)));
stepStop->setPosition (CEGUI:UVector2 (CEGUI:UDim (0.1, 0), CEGUI:UDim (0.725, 0)));
mySheet->addChildWindow(stepStop); // прикрепим button на лист
}
void Mygui:stepPlayButton(void)
{
stepPlay = CEGUI: WindowManager:getSingleton().createWindow («TaharezLook/Button», «StepPlayButton»);
stepPlay->setText (ToRU(L «play»));
stepPlay->setSize (CEGUI:UVector2 (CEGUI:UDim (0.05, 0), CEGUI:UDim (0.05, 0)));
stepPlay->setPosition (CEGUI:UVector2 (CEGUI:UDim (0.15, 0), CEGUI:UDim (0.725, 0)));
mySheet->addChildWindow(stepPlay); // прикрепим button на лист
}
void Mygui:stepPauseButton(void)
{
stepPause = CEGUI: WindowManager:getSingleton().createWindow («TaharezLook/Button», «StepPauseButton»);
stepPause->setText (ToRU(L «pause»));
stepPause->setSize (CEGUI:UVector2 (CEGUI:UDim (0.05, 0), CEGUI:UDim (0.05, 0)));
stepPause->setPosition (CEGUI:UVector2 (CEGUI:UDim (0.2, 0), CEGUI:UDim (0.725, 0)));
mySheet->addChildWindow(stepPause); // прикрепим button на лист
}
void Mygui:stepLastButton(void)
{
stepLast = CEGUI: WindowManager:getSingleton().createWindow («TaharezLook/Button», «StepLastButton»);
stepLast->setText (ToRU(L «last»));
stepLast->setSize (CEGUI:UVector2 (CEGUI:UDim (0.05, 0), CEGUI:UDim (0.05, 0)));
stepLast->setPosition (CEGUI:UVector2 (CEGUI:UDim (0.025, 0), CEGUI:UDim (0.725, 0)));
mySheet->addChildWindow(stepLast); // прикрепим button на лист
}
void Mygui:stepNextButton(void)
{
stepNext = CEGUI: WindowManager:getSingleton().createWindow («TaharezLook/Button», «StepNextButton»);
stepNext->setText (ToRU(L «next»));
stepNext->setSize (CEGUI:UVector2 (CEGUI:UDim (0.05, 0), CEGUI:UDim (0.05, 0)));
stepNext->setPosition (CEGUI:UVector2 (CEGUI:UDim (0.275, 0), CEGUI:UDim (0.725, 0)));
mySheet->addChildWindow(stepNext); // прикрепим button на лист
}
void Mygui:logStaticText(void)
{
logSText = CEGUI: WindowManager:getSingleton().createWindow («TaharezLook/StaticText», «LogStaticText»);
logSText->setText (ToRU(L «Комментарии:»));
logSText->setSize (CEGUI:UVector2 (CEGUI:UDim (0.30, 0), CEGUI:UDim (0.05, 0)));
logSText->setPosition (CEGUI:UVector2 (CEGUI:UDim (0.025, 0), CEGUI:UDim (0.775, 0)));
mySheet->addChildWindow(logSText); // прикрепим статиктекст на лист
}
void Mygui:logList(void)
{
logText = CEGUI: WindowManager:getSingleton().createWindow («TaharezLook/MultiLineEditbox», «logText1»);
logText->setText (ToRU(L»!!! Введите исходную последовательность чисел. Затем выберите алгоритм!!!»));
logText->setSize (CEGUI:UVector2 (CEGUI:UDim (0.30, 0), CEGUI:UDim (0.15, 0)));
logText->setPosition (CEGUI:UVector2 (CEGUI:UDim (0.025, 0), CEGUI:UDim (0.825, 0)));
mySheet->addChildWindow(logText); // прикрепим logText1 на лист
}
void Mygui:speedButtonOn(void)
{
speedOn = CEGUI: WindowManager:getSingleton().createWindow («TaharezLook/Button», «SpeedButtonOn»);
speedOn->setText (ToRU(L «Скорость | ^»));
speedOn->setSize (CEGUI:UVector2 (CEGUI:UDim (0.15, 0), CEGUI:UDim (0.05, 0)));
speedOn->setPosition (CEGUI:UVector2 (CEGUI:UDim (0.35, 0), CEGUI:UDim (0.925, 0)));
mySheet->addChildWindow(speedOn); // прикрепим кнопку на лист
}
void Mygui:speedButtonOff(void)
{
speedOff = CEGUI: WindowManager:getSingleton().createWindow («TaharezLook/Button», «SpeedButtonOff»);
speedOff->setText (ToRU(L «Скорость | _»));
speedOff->setSize (CEGUI:UVector2 (CEGUI:UDim (0.15, 0), CEGUI:UDim (0.05, 0)));
speedOff->setPosition (CEGUI:UVector2 (CEGUI:UDim (0.35, 0), CEGUI:UDim (0.475, 0)));
mySheet->addChildWindow(speedOff); // прикрепим кнопку на лист
}
void Mygui:speedListTextStaticText(void)
{
speedListText = CEGUI: WindowManager:getSingleton().createWindow («TaharezLook/StaticText», «SpeedListTextStaticText»);
speedListText->setText (ToRU(L «Исходная последовательность:»));
speedListText->setSize (CEGUI:UVector2 (CEGUI:UDim (0.30, 0), CEGUI:UDim (0.05, 0)));
speedListText->setPosition (CEGUI:UVector2 (CEGUI:UDim (0.35, 0), CEGUI:UDim (0.525, 0)));
mySheet->addChildWindow(speedListText); // прикрепим статиктекст на лист
}
void Mygui:speedListStaticText(void)
{
speedList = CEGUI: WindowManager:getSingleton().createWindow («TaharezLook/StaticText», «SpeedListStaticText»);
speedList->setText («empty»);
speedList->setSize (CEGUI:UVector2 (CEGUI:UDim (0.30, 0), CEGUI:UDim (0.05, 0)));
speedList->setPosition (CEGUI:UVector2 (CEGUI:UDim (0.35, 0), CEGUI:UDim (0.575, 0)));
mySheet->addChildWindow(speedList); // прикрепим статиктекст на лист
}
void Mygui:speedReportStaticText(void)
{
speedReportText = CEGUI: WindowManager:getSingleton().createWindow («TaharezLook/StaticText», «SpeedReportStaticText»);
speedReportText->setText (ToRU(L «Отчет:»));
speedReportText->setSize (CEGUI:UVector2 (CEGUI:UDim (0.15, 0), CEGUI:UDim (0.05, 0)));
speedReportText->setPosition (CEGUI:UVector2 (CEGUI:UDim (0.35, 0), CEGUI:UDim (0.625, 0)));
mySheet->addChildWindow(speedReportText);
}
void Mygui:speedReportOkButton(void)
{
speedReportOk = CEGUI: WindowManager:getSingleton().createWindow («TaharezLook/Button», «SpeedReportOkButton»);
speedReportOk->setText (ToRU(L «Создать»));
speedReportOk->setSize (CEGUI:UVector2 (CEGUI:UDim (0.15, 0), CEGUI:UDim (0.05, 0)));
speedReportOk->setPosition (CEGUI:UVector2 (CEGUI:UDim (0.5, 0), CEGUI:UDim (0.625, 0)));
mySheet->addChildWindow(speedReportOk); // прикрепим кнопку на лист
}
void Mygui:speedReportEditBox(void)
{
speedReportLog = CEGUI: WindowManager:getSingleton().createWindow («TaharezLook/MultiLineEditbox», «SpeedReportEditBox»);
speedReportLog->setText (ToRU(L»!!! Нажмите кнопку Создать для создания отчета о скорости работы алгоритмов!!!»));
speedReportLog->setSize (CEGUI:UVector2 (CEGUI:UDim (0.30, 0), CEGUI:UDim (0.30, 0)));
speedReportLog->setPosition (CEGUI:UVector2 (CEGUI:UDim (0.35, 0), CEGUI:UDim (0.675, 0)));
mySheet->addChildWindow(speedReportLog); // прикрепим log на лист
}
void Mygui:sceneButtonOn(void)
{
sceneOn = CEGUI: WindowManager:getSingleton().createWindow («TaharezLook/Button», «SceneButtonOn»);
sceneOn->setText (ToRU(L «Графика | ^»));
sceneOn->setSize (CEGUI:UVector2 (CEGUI:UDim (0.15, 0), CEGUI:UDim (0.05, 0)));
sceneOn->setPosition (CEGUI:UVector2 (CEGUI:UDim (0.825, 0), CEGUI:UDim (0.925, 0)));
mySheet->addChildWindow(sceneOn); // прикрепим кнопку на лист
}
void Mygui:sceneButtonOff(void)
{
sceneOff = CEGUI: WindowManager:getSingleton().createWindow («TaharezLook/Button», «SceneButtonOff»);
sceneOff->setText (ToRU(L «Графика | _»));
sceneOff->setSize (CEGUI:UVector2 (CEGUI:UDim (0.15, 0), CEGUI:UDim (0.05, 0)));
sceneOff->setPosition (CEGUI:UVector2 (CEGUI:UDim (0.825, 0), CEGUI:UDim (0.65, 0)));
mySheet->addChildWindow(sceneOff); // прикрепим кнопку на лист
}
void Mygui:skyStaticText(void)
{
skyText = CEGUI: WindowManager:getSingleton().createWindow («TaharezLook/StaticText», «SkyStaticText»);
skyText->setText (ToRU(L «Выберите фон неба:»));
skyText->setSize (CEGUI:UVector2 (CEGUI:UDim (0.30, 0), CEGUI:UDim (0.05, 0)));
skyText->setPosition (CEGUI:UVector2 (CEGUI:UDim (0.675, 0), CEGUI:UDim (0.7, 0)));
mySheet->addChildWindow(skyText); // прикрепим статиктекст на лист
}
void Mygui:skyButton1 (void)
{
sky1 = CEGUI: WindowManager:getSingleton().createWindow («TaharezLook/Button», «SkyButton1»);
sky1->setText («1»);
sky1->setSize (CEGUI:UVector2 (CEGUI:UDim (0.1, 0), CEGUI:UDim (0.05, 0)));
sky1->setPosition (CEGUI:UVector2 (CEGUI:UDim (0.675, 0), CEGUI:UDim (0.75, 0)));
mySheet->addChildWindow(sky1); // прикрепим кнопку на лист
}
void Mygui:skyButton2 (void)
{
sky2 = CEGUI: WindowManager:getSingleton().createWindow («TaharezLook/Button», «SkyButton2»);
sky2->setText («2»);
sky2->setSize (CEGUI:UVector2 (CEGUI:UDim (0.1, 0), CEGUI:UDim (0.05, 0)));
sky2->setPosition (CEGUI:UVector2 (CEGUI:UDim (0.775, 0), CEGUI:UDim (0.75, 0)));
mySheet->addChildWindow(sky2); // прикрепим кнопку на лист
}
void Mygui:skyButton3 (void)
{
sky3 = CEGUI: WindowManager:getSingleton().createWindow («TaharezLook/Button», «SkyButton3»);
sky3->setText («3»);
sky3->setSize (CEGUI:UVector2 (CEGUI:UDim (0.1, 0), CEGUI:UDim (0.05, 0)));
sky3->setPosition (CEGUI:UVector2 (CEGUI:UDim (0.875, 0), CEGUI:UDim (0.75, 0)));
mySheet->addChildWindow(sky3); // прикрепим кнопку на лист
}
void Mygui:groundStaticText(void)
{
groundText = CEGUI: WindowManager:getSingleton().createWindow («TaharezLook/StaticText», «GroundStaticText»);
groundText->setText (ToRU(L «Выберите поверхность:»));
groundText->setSize (CEGUI:UVector2 (CEGUI:UDim (0.30, 0), CEGUI:UDim (0.05, 0)));
groundText->setPosition (CEGUI:UVector2 (CEGUI:UDim (0.675, 0), CEGUI:UDim (0.8, 0)));
mySheet->addChildWindow(groundText); // прикрепим статиктекст на лист
}
void Mygui:groundButton1 (void)
{
ground1 = CEGUI: WindowManager:getSingleton().createWindow («TaharezLook/Button», «GroundButton1»);
ground1->setText («1»);
ground1->setSize (CEGUI:UVector2 (CEGUI:UDim (0.1, 0), CEGUI:UDim (0.05, 0)));
ground1->setPosition (CEGUI:UVector2 (CEGUI:UDim (0.675, 0), CEGUI:UDim (0.85, 0)));
mySheet->addChildWindow(ground1); // прикрепим кнопку на лист
}
void Mygui:groundButton2 (void)
{
ground2 = CEGUI: WindowManager:getSingleton().createWindow («TaharezLook/Button», «GroundButton2»);
ground2->setText («2»);
ground2->setSize (CEGUI:UVector2 (CEGUI:UDim (0.1, 0), CEGUI:UDim (0.05, 0)));
ground2->setPosition (CEGUI:UVector2 (CEGUI:UDim (0.775, 0), CEGUI:UDim (0.85, 0)));
mySheet->addChildWindow(ground2); // прикрепим кнопку на лист
}
void Mygui:groundButton3 (void)
{
ground3 = CEGUI: WindowManager:getSingleton().createWindow («TaharezLook/Button», «GroundButton3»);
ground3->setText («3»);
ground3->setSize (CEGUI:UVector2 (CEGUI:UDim (0.1, 0), CEGUI:UDim (0.05, 0)));
ground3->setPosition (CEGUI:UVector2 (CEGUI:UDim (0.875, 0), CEGUI:UDim (0.85, 0)));
mySheet->addChildWindow(ground3); // прикрепим кнопку на лист
}
void Mygui:shadowButtonOn(void)
{
shadowOn = CEGUI: WindowManager:getSingleton().createWindow («TaharezLook/Button», «ShadowButtonOn»);
shadowOn->setText (ToRU(L «Тень ON»));
shadowOn->setSize (CEGUI:UVector2 (CEGUI:UDim (0.15, 0), CEGUI:UDim (0.05, 0)));
shadowOn->setPosition (CEGUI:UVector2 (CEGUI:UDim (0.675, 0), CEGUI:UDim (0.925, 0)));
shadowOn->disable();
mySheet->addChildWindow(shadowOn); // прикрепим кнопку на лист
}
void Mygui:shadowButtonOff(void)
{
shadowOff = CEGUI: WindowManager:getSingleton().createWindow («TaharezLook/Button», «ShadowButtonOff»);
shadowOff->setText (ToRU(L «Тень OFF»));
shadowOff->setSize (CEGUI:UVector2 (CEGUI:UDim (0.15, 0), CEGUI:UDim (0.05, 0)));
shadowOff->setPosition (CEGUI:UVector2 (CEGUI:UDim (0.825, 0), CEGUI:UDim (0.925, 0)));
mySheet->addChildWindow(shadowOff); // прикрепим кнопку на лист
}
void Mygui:listShow(void)
{
listSText->show();
listEdit->show();
listAuto->show();
listOk->show();
}
void Mygui:listHide(void)
{
listSText->hide();
listEdit->hide();
listAuto->hide();
listOk->hide();
}
void Mygui:algoShow(void)
{
algoOff->show();
algoSText->show();
algoText->show();
algoL->show();
algoR->show();
stepSText->show();
stepStop->show();
stepPlay->show();
stepPause->show();
stepLast->show();
stepNext->show();
logSText->show();
logText->show();
speedOn->show();
}
void Mygui:algoHide(void)
{
algoOff->hide();
algoSText->hide();
algoText->hide();
algoL->hide();
algoR->hide();
stepSText->hide();
stepStop->hide();
stepPlay->hide();
stepPause->hide();
stepLast->hide();
stepNext->hide();
logSText->hide();
logText->hide();
speedOn->hide();
}
void Mygui:sceneShow(void)
{
sceneOn->hide();
sceneOff->show();
skyText->show();
sky1->show();
sky2->show();
sky3->show();
groundText->show();
ground1->show();
ground2->show();
ground3->show();
shadowOn->show();
shadowOff->show();
}
void Mygui:sceneHide(void)
{
sceneOn->show();
sceneOff->hide();
skyText->hide();
sky1->hide();
sky2->hide();
sky3->hide();
groundText->hide();
ground1->hide();
ground2->hide();
ground3->hide();
shadowOn->hide();
shadowOff->hide();
}
void Mygui:speedShow(void)
{
speedOn->hide();
speedOff->show();
speedListText->show();
speedList->show();
speedReportText->show();
speedReportOk->show();
speedReportLog->show();
}
void Mygui:speedHide(void)
{
speedOn->show();
speedOff->hide();
speedListText->hide();
speedList->hide();
speedReportText->hide();
speedReportOk->hide();
speedReportLog->hide();
}
void Mygui:stepEnableBegin(void)
{
stepStop->disable();
stepPlay->enable();
stepPause->disable();
stepLast->disable();
stepNext->enable();
}
void Mygui:stepEnableEnd(void)
{
stepStop->enable();
stepPlay->disable();
stepPause->disable();
stepLast->enable();
stepNext->disable();
}
void Mygui:stepEnablePlay(void)
{
stepStop->enable();
stepPlay->disable();
stepPause->enable();
stepLast->disable();
stepNext->disable();
}
void Mygui:stepEnablePause(void)
{
stepStop->enable();
stepPlay->enable();
stepPause->disable();
stepLast->enable();
stepNext->enable();
}
void Mygui:stepDisable(void)
{
stepStop->disable();
stepPlay->disable();
stepPause->disable();
stepLast->disable();
stepNext->disable();
}
Листинг файла Algo.h
#include <iostream>
#include <OgreRoot.h>
#include <vector>
#include «Convert.h»
using namespace std;
using namespace Convert;
class Algo
{
public:
Algo();
virtual ~Algo();
virtual void createOperationList (int length, int sort); // выбор алгоритма
virtual void createSelection (int l[], int len); // Selection Sort
virtual void createBubble (int l[], int len); // Bubble Sort
virtual void createInsert (int l[], int len); // Insert Sort
virtual void createQuick (int l[], int len); // quick Sort
virtual vector<int> quickSort (vector<int> data, int const len, int p);
virtual void createShell (int l[], int len); // shell Sort
virtual void push (string oper, int num);
virtual void push (string oper, int num1, int num2);
virtual void pushLog (CEGUI: String l1);
virtual void pushLog (CEGUI: String l1, CEGUI: String l2);
virtual void pushLog (CEGUI: String l1, CEGUI: String l2, CEGUI: String l3);
virtual void pushLog (CEGUI: String l1, CEGUI: String l2, CEGUI: String l3, CEGUI: String l4);
virtual void pushLog (CEGUI: String l1, CEGUI: String l2, CEGUI: String l3, CEGUI: String l4, CEGUI: String l5);
int algoSum; // количество алгоритмов
vector<CEGUI: String> algoName; // названия алгоритмов
int stepSum; // количество шагов
int *listStart; // начальный результат (список)
int *listResult; // конечный результат (список)
vector<std:string> vec; // список операций алгоритма
vector<CEGUI: String> logSort; // комментарий
bool logOn; // записывать ли комментарии
};
Листинг файла Algo.cpp
#include «Algo.h»
Algo: Algo()
{
algoSum = 5; // количество алгоритмов
algoName.push_back (ToRU(L «Выбором»));
algoName.push_back (ToRU(L «Пузырьковая»));
algoName.push_back (ToRU(L «Вставками»));
algoName.push_back (ToRU(L «Быстрая»));
algoName.push_back (ToRU(L «Шелла»));
stepSum = 0;
listStart = new int[0];
listResult = new int[0];
logOn = true;
}
Algo:~Algo()
{
algoName.clear();
delete[] listStart;
delete[] listResult;
vec.clear();
logSort.clear();
}
void Algo:createOperationList (int length, int sort)
{
vec.clear(); // создали пустой список (вектор)
if (logOn)
{
logSort.clear(); // обнулили логи
stepSum = 0; // обнулили шаги
}
int *list = new int[length]; // создали пустой список (для чисел)
for (int i=0; i<length; i++) list[i] = listStart[i];
switch (sort)
{
case 1: createSelection (list, length);
break;
case 2: createBubble (list, length);
break;
case 3: createInsert (list, length);
break;
case 4: createQuick (list, length);
break;
case 5: createShell (list, length);
break;
default:
break;
}
}
void Algo:createSelection (int l[], int len)
{
int j = 0; // для запоминания подходящего элемента
int buf = 0; // буфер для элементов
for (int i=0; i<(len-1); i++)
{
j = i; // подходящий = первый выдвинутый
push («a», i); // выдвинуть i-элемент на 200
pushLog (ToRU(L «Выдвинули число»), Ogre: StringConverter:toString (l[i]),
ToRU (L». Будем сравнивать с ним»));
for (int k=i+1; k<len; k++)
{
push («b», k); // выдвинуть k-элемент на 100
pushLog (ToRU(L «Сравним»), Ogre: StringConverter:toString (l[k]),
ToRU (L» и»), Ogre: StringConverter:toString (l[i]));
if (l[j]>l[k])
{
j = k; // подходящий = выдвинутый
if (buf>0)
{
push («d», buf); // вернуть на место buf
pushLog (Ogre: StringConverter:toString (l[k]), ToRU (L» >»),
Ogre: StringConverter:toString (l[j]),
ToRU (L», поэтому дальше будем сравнивать с ним»));
}
buf = j; // запомнили последний подходящий
} else {
push («d», k); // вернуть на место k-элемент ot 100
pushLog (Ogre: StringConverter:toString (l[k]), ToRU (L» >=»),
Ogre: StringConverter:toString (l[i]),
ToRU (L», поэтому вернем его на место»));
}
}
if (j>i)
{
push («s», i, j); // поменять i и j
pushLog (Ogre: StringConverter:toString (l[j]), ToRU (L» >»),
Ogre: StringConverter:toString (l[i]),
ToRU (L», поэтому поменяем их местами»));
buf = l[i];
l[i] = l[j];
l[j] = buf;
push («f», i, j); // вернуть на место 2 элемента
pushLog (ToRU(L «Вернули элементы на место»));
} else {
push («c», i); // вернуть на место i-элемент ot 200
pushLog (Ogre: StringConverter:toString (l[j]), ToRU (L» <=»),
Ogre: StringConverter:toString (l[i]),
ToRU (L», поэтому вернем его на место»));
}
buf = 0; // обнулили буфер
}
listResult = l; // запомнили конечный список
}
void Algo:createBubble (int l[], int len)
{
int j = 0; // для запоминания подходящего элемента
int buf = 0; // буфер для элементов
for (int i=0; i<len; i++)
{
for (int k=(len-1); k>i; k-)
{
push («e», k-1, k); // выдвинуть 2 элемента
pushLog (ToRU(L «Сравним числа»),
Ogre: StringConverter:toString (l[k]),
ToRU (L» и»), Ogre: StringConverter:toString (l[k-1]));
if (l[k] < l [k-1])
{
push («s», k-1, k); // поменять k-1 и k
pushLog (Ogre: StringConverter:toString (l[k]), ToRU (L» <»),
Ogre: StringConverter:toString (l[k-1]),
ToRU (L», поэтому поменяем их местами»));
buf = l[k];
l[k] = l [k-1];
l [k-1] = buf;
pushLog (ToRU(L «Возвратим числа на место»));
} else {
pushLog (Ogre: StringConverter:toString (l[k]), ToRU (L» >=»),
Ogre: StringConverter:toString (l[k-1]),
ToRU (L», поэтому возвращаем их на место»));
}
push («f», k-1, k); // вернуть на место 2 элемента
}
}
listResult = l; // запомнили конечный список
}
void Algo:createInsert (int l[], int len)
{
int key = 0; // для запоминания выдвинутого элемента
int i = 0; // для перемещения от выдвинутого элемента до 1 элемента
for (int j = 1; j<len; j++)
{
push («a», j); // выдвинуть j-элемент на 200
pushLog (ToRU(L «Выдвинули число»), Ogre: StringConverter:toString (l[j]),
ToRU (L». Будем сравнивать с ним»));
key = l[j]; // запомнили выдвинутый элемент
i = j-1; // запомнили положение предыдущего элемента
while ((i>=0) && (l[i]>key))
{
push («b», i); // выдвинуть i-элемент на 100
pushLog (ToRU(L «Сравним»), Ogre: StringConverter:toString (l[i]),
ToRU (L» и»), Ogre: StringConverter:toString (l[i+1]));
push («s», i, i+1); // поменять i и key
pushLog (Ogre: StringConverter:toString (l[i+1]), ToRU (L» <»),
Ogre: StringConverter:toString (l[i]),
ToRU (L», поэтому поменяем их местами»));
l [i+1] = l[i];
i = i-1;
l [i+1]=key;
push («c», i+2); // вернуть на место i+1-элемент ot 200
pushLog (ToRU(L «Вернем его на место»),
Ogre: StringConverter:toString (l[i+2]),
ToRU (L», а дальше будем сравнивать с»),
Ogre: StringConverter:toString (l[i+1]));
}
push («b», i); // выдвинуть i-элемент на 100
pushLog (ToRU(L «Сравним»), Ogre: StringConverter:toString (l[i]),
ToRU (L» и»), Ogre: StringConverter:toString (l[i+1]));
push («f», i, i+1); // вернуть на место 2 элемента
pushLog (Ogre: StringConverter:toString (l[i+1]), ToRU (L» >=»),
Ogre: StringConverter:toString (l[i]),
ToRU (L», поэтому возвращаем их на место»));
}
listResult = l; // запомнили конечный список
}
void Algo:createQuick (int l[], int len)
{
vector<int> lvec(0); // создали вектор для копирования последовательности
for (int i=0; i<len; i++)
{
lvec.push_back (l[i]); // копируем последовательность в вектор
}
lvec = quickSort (lvec, len, 0); // запустили сортировку с 0 элемента
for (int i=0; i<len; i++)
{
l[i] = lvec[i]; // копируем конечный вектор в список
}
listResult = l; // запомнили конечный список
}
vector<int> Algo:quickSort (vector<int> data, int const len, int p)
{
vector<int> l = data; // скопировали исходный вектор
int const lenD = len; // запомнили длину
int pivot = 0; // создали опорный элемент
int ind = lenD/2; // запомнили центральную точку в последовательности
int indVec = ind; // запомнили центральную точку для вектора
int decIndVec = 0; // сколько раз уменьшали indVec
int j = 0, k = 0; // j/k - количество получаемых элементов слева / справа
if (lenD>1) {
vector<int> L(0); // левый массив
vector<int> R(0); // правый массив
pivot = l[ind]; // запомнили опорный элемент
push («a», indVec+p); // выдвинуть опорный-элемент на 200
pushLog (ToRU(L «Выдвинули число»), Ogre: StringConverter:toString (l[ind]),
ToRU (L». Будем сравнивать с ним»));
for (int i=0; i<lenD; i++)
{
if (i!=ind)
{
push («b», i+p-decIndVec); // выдвинуть i-элемент на 100
pushLog (ToRU(L «Сравним»), Ogre: StringConverter:toString (l[i]),
ToRU (L» и»), Ogre: StringConverter:toString (l[ind]));
if((l[i]<pivot))
{
L.push_back (l[i]); // заполняем левый массив
j++; // увеличили количество элементов слева
if (i<ind)
{
push («d», i+p-decIndVec); // вернуть на место i-элемент
pushLog (Ogre: StringConverter:toString (l[i]), ToRU (L» <»),
Ogre: StringConverter:toString (l[ind]),
ToRU (L», поэтому вернем его на место»));
} else {
push («q», i+p-decIndVec, indVec+p); // двинуть 1 элемент
pushLog (Ogre: StringConverter:toString (l[i]), ToRU (L» <»),
Ogre: StringConverter:toString (l[ind]),
ToRU (L», поэтому поставим его перед опорным в конец левого массива»));
push («d», indVec+p); // вернуть на место i-элемент
pushLog (ToRU(L «Вернем»),
Ogre: StringConverter:toString (l[i]),
ToRU (L» на место»));
indVec++;
}
} else {
R.push_back (l[i]); // заполняем правый массив
k++; // увеличили количество элементов справа
if (i>ind)
{
push («d», i+p-decIndVec); // вернуть на место i-элемент
pushLog (Ogre: StringConverter:toString (l[i]), ToRU (L» >=»),
Ogre: StringConverter:toString (l[ind]),
ToRU (L», поэтому вернем его на место»));
} else {
push («r», i+p-decIndVec, indVec+p+k-1); // двинуть 1 элемент
pushLog (Ogre: StringConverter:toString (l[i]), ToRU (L» >=»),
Ogre: StringConverter:toString (l[ind]),
ToRU (L», поэтому поставим его после опорного в конец правого массива»));
push («d», indVec+p+k-1); // вернуть на место i-элемент
pushLog (ToRU(L «Вернем»),
Ogre: StringConverter:toString (l[i]),
ToRU (L» на место»));
decIndVec++;
indVec -;
}
}
} else {
decIndVec = 0;
}
}
push («c», indVec+p); // вернуть на место опорный-элемент ot 200
pushLog (ToRU(L «Вернем»), Ogre: StringConverter:toString (l[ind]),
ToRU (L» на место»));
L = quickSort (L, j, p); // сортируем элементы слева
R = quickSort (R, k, indVec+1+p); // сортируем элементы справа
for (int cnt=0; cnt<lenD; cnt++)
{
if (cnt<j)
{
l[cnt] = L[cnt]; // заполняем вектор левыми элементами
}
else if (cnt==j)
{
l[cnt] = pivot; // вставили опорный элемент
} else {
l[cnt] = R [cnt - (j+1)]; // заполняем вектор правыми элементами
}
}
}
return l; // вернули полученный вектор
}
void Algo:createShell (int l[], int len)
{
int temp = 0; // для запоминания сравниваемого элемента
int ind = 0; // для запоминания, какой номер сейчас вывинут
for (int gap = len/2; gap > 0; gap /= 2)
{
for (int i=gap; i<len; i++)
{
int temp = l[i];
ind = i;
push («a», i); // выдвинуть i-элемент на 200
pushLog (ToRU(L «Выдвинули число»),
Ogre: StringConverter:toString (l[i]),
ToRU (L». Будем сравнивать с ним»));
int j;
for (j = i; j >= gap; j -= gap)
{
push («b», j-gap); // выдвинуть j-элемент на 100
pushLog (ToRU(L «Сравним»),
Ogre: StringConverter:toString (l[j-gap]),
ToRU (L» и»), Ogre: StringConverter:toString(temp));
if (l [j - gap] > temp)
{
push («s», j-gap, ind); // swap j-gap элемент & temp
pushLog (Ogre: StringConverter:toString (l[j-gap]),
ToRU (L» >»),
Ogre: StringConverter:toString (l[j]),
ToRU (L», поэтому поменяем их местами»));
l[j] = l [j - gap];
ind = j-gap;
push («d», j); // вернуть на место ot 100
pushLog (ToRU(L «Вернем»),
Ogre: StringConverter:toString (l[j-gap]), ToRU (L» на место»));
} else {
push («d», j-gap); // вернуть на место ot 100
pushLog (Ogre: StringConverter:toString (l[j-gap]),
ToRU (L» <=»),
Ogre: StringConverter:toString (l[j]),
ToRU (L», поэтому вернем его на место»));
j = 0;
}
}
l[ind] = temp;
push («c», ind); // вернуть на место опорный-элемент ot 200
pushLog (ToRU(L «Вернем»), Ogre: StringConverter:toString (l[ind]),
ToRU (L» на место»));
}
}
listResult = l;
}
void Algo:push (string oper, int num)
{
oper += «»;
oper += Ogre: StringConverter:toString(num);
vec.push_back(oper);
if (logOn)
stepSum++;
}
void Algo:push (string oper, int num1, int num2)
{
oper += «»;
oper += Ogre: StringConverter:toString(num1);
oper += «»;
oper += Ogre: StringConverter:toString(num2);
vec.push_back(oper);
if (logOn) stepSum++;
}
void Algo:pushLog (CEGUI: String l1)
{
if (logOn) logSort.push_back(l1);
}
void Algo:pushLog (CEGUI: String l1, CEGUI: String l2)
{
if (logOn)
{
l1 += l2;
logSort.push_back(l1);
}
}
void Algo:pushLog (CEGUI: String l1, CEGUI: String l2, CEGUI: String l3)
{
if (logOn)
{
l1 += l2;
l1 += l3;
logSort.push_back(l1);
}
}
void Algo:pushLog (CEGUI: String l1, CEGUI: String l2, CEGUI: String l3, CEGUI: String l4)
{
if (logOn)
{
l1 += l2;
l1 += l3;
l1 += l4;
logSort.push_back(l1);
}
}
void Algo:pushLog (CEGUI: String l1, CEGUI: String l2, CEGUI: String l3, CEGUI: String l4, CEGUI: String l5)
{
if (logOn)
{
l1 += l2;
l1 += l3;
l1 += l4;
l1 += l5;
logSort.push_back(l1);
}
}
Листинг файла MainApp.h
#include «BaseApp.h»
#include «ListMember.h»
#include «CubeMember.h»
#include «Algo.h»
#include «Convert.h»
#include «GUI.h»
#include <iostream>
#include <vector>
#include <time.h>
#include <stdlib.h>
#include <CEGUI.h>
#include <RendererModules/Ogre/CEGUIOgreRenderer.h>
using namespace std;
using namespace Convert;
class MainApp: public BaseApp
{
public:
MainApp(void);
virtual ~MainApp(void);
protected:
int listLength, step;
int *listStart;
ListMember *list;
CubeMember *listCube;
int idSort;
vector<string> operation;
CEGUI: String logAlgo;
bool timerEnabled;
int timerPoint;
bool shadow;
int cam;
Algo algo;
Mygui gui;
CEGUI: OgreRenderer* mRenderer;
Ogre: Entity* groundEntity; // сущность для поверхности
virtual void createScene(void); // для создания сцены
virtual bool frameRenderingQueued (const Ogre: FrameEvent& fe);
virtual bool keyPressed (const OIS: KeyEvent& ke);
virtual bool keyReleased (const OIS: KeyEvent& ke);
virtual void listCreate(); // для построения и создания list on scene
virtual void createListStart (int listIn[]); // для построения исходного списка
virtual void createListMember (int listIn[]); // для построения списка ListMember
virtual void createListCube(); // для построения и создания кубиков
virtual void deleteListCube(); // for delete cubes on scene
virtual void setCubePosition(); // для настройки позиций кубиков
virtual void setShadow(); // для включения / выключения тени от кубиков
virtual void createSort();
virtual void nextStepSort();
virtual void lastStepSort();
virtual void nextStep();
virtual void lastStep();
virtual void stopStep(); // stop all
virtual void timerOn();
virtual void timerOff();
virtual void animMoveFront1 (int num, int point); // двигаем куб на себя
virtual void animMoveBack1 (int num); // двигаем куб на место
virtual void animMoveFront2 (int num1, int num2); // двигаем 2 куба на себя
virtual void animMoveBack2 (int num1, int num2); // двигаем 2 куба на место
virtual void animSwap12 (int num1, int num2);
virtual void animSwap21 (int num1, int num2);
virtual void animSwap2 (int num1, int num2);
virtual void createFrameListener(void);
virtual bool mouseMoved (const OIS: MouseEvent &arg);
virtual bool mousePressed (const OIS: MouseEvent &arg, OIS: MouseButtonID id);
virtual bool mouseReleased (const OIS: MouseEvent &arg, OIS: MouseButtonID id);
virtual void createGUIEvents(void); // настраивает указатели
bool quit (const CEGUI: EventArgs &e);
void camMove();
void camSetPosition (int x, int y, int z);
void camDefault(void); // set default camera
bool cam1 (const CEGUI: EventArgs &e);
bool cam2 (const CEGUI: EventArgs &e);
bool cam3 (const CEGUI: EventArgs &e);
bool cam4 (const CEGUI: EventArgs &e);
bool listAuto (const CEGUI: EventArgs &e);
bool listOk (const CEGUI: EventArgs &e);
bool algoOff (const CEGUI: EventArgs &e);
bool algoL (const CEGUI: EventArgs &e);
bool algoR (const CEGUI: EventArgs &e);
bool stepStop (const CEGUI: EventArgs &e);
bool stepPlay (const CEGUI: EventArgs &e);
bool stepPause (const CEGUI: EventArgs &e);
bool stepLast (const CEGUI: EventArgs &e);
bool stepNext (const CEGUI: EventArgs &e);
bool speedOn (const CEGUI: EventArgs &e);
bool speedOff (const CEGUI: EventArgs &e);
bool speedReportOk (const CEGUI: EventArgs &e);
bool sceneOn (const CEGUI: EventArgs &e);
bool sceneOff (const CEGUI: EventArgs &e);
bool sky1 (const CEGUI: EventArgs &e);
bool sky2 (const CEGUI: EventArgs &e);
bool sky3 (const CEGUI: EventArgs &e);
bool ground1 (const CEGUI: EventArgs &e);
bool ground2 (const CEGUI: EventArgs &e);
bool ground3 (const CEGUI: EventArgs &e);
bool shadowOn (const CEGUI: EventArgs &e);
bool shadowOff (const CEGUI: EventArgs &e);
};
Листинг файла MainApp.cpp
#include «MainApp.h»
MainApp: MainApp(void)
{
listLength = 1;
list = new ListMember[0];
listCube = new CubeMember[0];
step = 0; // шаг = 0
idSort = 1;
timerEnabled = false;
timerPoint = 0;
shadow = true;
cam = 1;
}
MainApp:~MainApp(void)
{
mSceneMgr->getRootSceneNode()->removeAllChildren();
delete[] list;
delete[] listCube;
operation.clear();
}
void MainApp:createScene(void)
{
mSceneMgr->setAmbientLight (Ogre: ColourValue (0.5, 0.5, 0.5));
mSceneMgr->setShadowTechnique (Ogre:SHADOWTYPE_STENCIL_ADDITIVE);
camDefault();
Ogre: Plane plane (Ogre: Vector3:UNIT_Y, 0);
Ogre: MeshManager:getSingleton().createPlane («ground»,
Ogre: ResourceGroupManager:DEFAULT_RESOURCE_GROUP_NAME,
plane, 150000, 150000, 20, 20, true, 1, 50, 50, Ogre: Vector3:UNIT_Z);
groundEntity = mSceneMgr->createEntity («ground»);
mSceneMgr->getRootSceneNode()->createChildSceneNode()->attachObject(groundEntity);
groundEntity->setCastShadows(false);
groundEntity->setMaterialName («Examples/Asphalt1»); // залили землю материалом
Ogre: Light* directionalLight = mSceneMgr->createLight («DirectionalLight»);
directionalLight->setType (Ogre: Light:LT_DIRECTIONAL);
directionalLight->setDiffuseColour (Ogre: ColourValue (0.4, 0.5, 0.5));
directionalLight->setSpecularColour (Ogre: ColourValue (0.4, 0.5, 0.5));
directionalLight->setDirection (Ogre: Vector3 (0, -1, 1));
mSceneMgr->setSkyBox (true, «Examples/MorningSkyBox», 300);
mRenderer = &CEGUI: OgreRenderer:bootstrapSystem(); // инициализировали СЕГУИ
CEGUI: SchemeManager:getSingleton().create («TaharezLook.scheme»);
CEGUI: System:getSingleton().setDefaultMouseCursor («TaharezLook», «MouseArrow»); CEGUI: Window *sheet = gui.createGUI(); // строим ГУИ
createGUIEvents();
CEGUI: System:getSingleton().setGUISheet(sheet);
}
void MainApp:createListStart (int listIn[])
{
for (int i=0; i<listLength; i++) algo.listStart[i] = listIn[i];
}
void MainApp:createListMember (int listIn[])
{
for (int i=0; i<listLength; i++)
{
list[i].value = listIn[i];
list[i].numCube = i;
}
}
void MainApp:createListCube()
{
for (int i=0; i<listLength; i++)
{
listCube[i].entity = mSceneMgr->createEntity («Cube.mesh»);
listCube[i].entity->setMaterialName («Examples/colorBlue»);
listCube[i].node = mSceneMgr->getRootSceneNode()->createChildSceneNode();
listCube[i].node->setScale (1, (list[i].value*0.1), 1);
listCube[i].node->attachObject (listCube[i].entity);
}
setCubePosition(); // настраиваем позиции
setShadow(); // настраиваем shadow
camMove(); // подвинули камеру
}
void MainApp:deleteListCube()
{
for (int i=0; i<listLength; i++)
mSceneMgr->getRootSceneNode()->removeChild (listCube[i].node);
}
void MainApp:setCubePosition()
{
for (int i=0; i<listLength; i++)
listCube[i].node->setPosition((i*120), (list[i].value*5), 0);
}
void MainApp:setShadow()
{
for (int i=0; i<listLength; i++)
listCube[i].entity->setCastShadows(shadow); // set shadow
gui.shadowOn->setEnabled(! shadow);
gui.shadowOff->setEnabled(shadow);
}
void MainApp:createSort()
{
timerEnabled = false; // остановили таймер, мало ли он включен
algo.logOn = true; // включили логирование в алго
algo.createOperationList (listLength, idSort);
operation = algo.vec; // собрали список операций
step = 0; // обнулили шаг
createListMember (algo.listStart); // собрали исходный список
setCubePosition(); // настроили позиции кубиков
gui.algoText->setText (algo.algoName [idSort-1]);
gui.stepEnableBegin(); // разблокировали шаги
logAlgo = ToRU (L «Построен алгоритм Сортировка»);
logAlgo += algo.algoName [idSort-1];
gui.logText->setText(logAlgo);
}
void MainApp:nextStepSort()
{
std:string oper = operation[step]; // запомнили шаг
vector<int> elem = ToListInt(oper);
switch (oper[0])
{
case 'a': // a - выдвинуть 1 элемент на 200
animMoveFront1 (elem[0], 200); // двигаем 1 куб на себя
break;
case 'b': // b - выдвинуть 1 элемент на 100
animMoveFront1 (elem[0], 100); // двигаем 1 куб на себя
break;
case 'c': // c - вернуть на место 1 элементт ot 200
case 'd': // d - вернуть на место 1 элементт ot 100
animMoveBack1 (elem[0]); // двигаем 1 куб на место
break;
case 'e': // выдвинуть 2 элемента
animMoveFront2 (elem[0], elem[1]); // двигаем 2 куба на место
break;
case 'f': // вернуть на место 2 элемента
animMoveBack2 (elem[0], elem[1]); // двигаем 2 куба на место
break;
case 'q': // двинуть 1 элемент на место перед 2 элементом
animSwap12 (elem[0], elem[1]);
break;
case 'r': // двинуть 1 элемент на место за 2 элементом
animSwap21 (elem[0], elem[1]);
break;
case 's': // s - поменять 2 элемента
animSwap2 (elem[0], elem[1]); // меняем местами 2 куба
break;
default:
break;
}
if (step==(algo.stepSum - 1))
{
gui.logText->setText (ToRU(L «Сортировка завершена!»));
} else {
gui.logText->setText (algo.logSort[step]);
}
step++; // увеличили шаг на 1
}
void MainApp:lastStepSort()
{
step -; // уменьшили шаг на 1
std:string oper = operation[step]; // запомнили этот шаг
vector<int> elem = ToListInt(oper);
switch (oper[0])
{
case 'a': // a - выдвинуть 1 элемент на 200
case 'b': // b - выдвинуть 1 элемент на 100
animMoveBack1 (elem[0]); // двигаем 1 куб на место
break;
case 'c': // c - вернуть на место 1 элементт ot 200
animMoveFront1 (elem[0], 200); // двигаем 1 куб на себя
break;
case 'd': // d - вернуть на место 1 элементт ot 100
animMoveFront1 (elem[0], 100); // двигаем 1 куб на себя
break;
case 'e': // e - выдвинуть 2 элемента
animMoveBack2 (elem[0], elem[1]); // двигаем 2 куба на место
break;
case 'f': // f - вернуть на место 2 элемента
animMoveFront1 (elem[1], 200); // двигаем 1 куб на себя
animMoveFront1 (elem[0], 100); // двигаем 1 куб на себя
break;
case 'q': // двинуть 1 элемент на место перед 2 элементом
animSwap21 (elem[1], elem[0]);
break;
case 'r': // двинуть 1 элемент на место за 2 элементом
animSwap12 (elem[1], elem[0]);
break;
case 's': // s - поменять 2 элемента
animSwap2 (elem[0], elem[1]); // меняем местами 2 куба
break;
default:
break;
}
if (step==0)
{
gui.logText->setText (ToRU(L «Список возвращен к исходному состоянию!»));
} else {
CEGUI: String txt = ToRU (L «Отмена действия:»);
txt += algo.logSort[step];
gui.logText->setText(txt);
}
}
void MainApp:nextStep(void)
{
if ((step < algo.stepSum) && (operation.size()>1))
nextStepSort();
}
void MainApp:lastStep(void)
{
if ((step > 0) && (operation.size()>1))
lastStepSort();
}
void MainApp:stopStep(void)
{
timerEnabled = false;
createSort();
gui.logText->setText (ToRU(L «Список возвращен к исходному состоянию!»));
}
void MainApp:animMoveFront1 (int num, int point)
{
Ogre: Vector3 vec = listCube [list[num].numCube].node->getPosition();
while (vec.z < point)
{
vec.z += 1;
listCube [list[num].numCube].node->setPosition(vec);
}
}
void MainApp:animMoveBack1 (int num)
{
Ogre: Vector3 vec = listCube [list[num].numCube].node->getPosition();
while (vec.z > 0)
{
vec.z -= 1;
listCube [list[num].numCube].node->setPosition(vec);
}
}
void MainApp:animMoveFront2 (int num1, int num2)
{
Ogre: Vector3 vec1 = listCube [list[num1].numCube].node->getPosition();
Ogre: Vector3 vec2 = listCube [list[num2].numCube].node->getPosition();
while (vec1.z < 200)
{
vec1.z += 1;
listCube [list[num1].numCube].node->setPosition(vec1);
if (vec2.z < 100)
{
vec2.z += 1;
listCube [list[num2].numCube].node->setPosition(vec2);
}
}
}
void MainApp:animMoveBack2 (int num1, int num2)
{
Ogre: Vector3 vec1 = listCube [list[num1].numCube].node->getPosition();
Ogre: Vector3 vec2 = listCube [list[num2].numCube].node->getPosition();
while ((vec1.z > 0) || (vec2.z > 0))
{
if (vec1.z > 0)
{
vec1.z -= 1;
listCube [list[num1].numCube].node->setPosition(vec1);
}
if (vec2.z > 0)
{
vec2.z -= 1;
listCube [list[num2].numCube].node->setPosition(vec2);
}
}
}
void MainApp:animSwap12 (int num1, int num2)
{
Ogre: Vector3 vec1 = listCube [list[num1].numCube].node->getPosition();
Ogre: Vector3 vec2 = listCube [list[num2].numCube].node->getPosition();
int point = vec2.x + 120; // запомнили конечную точку перемещения
int between = num1 - num2;
vec1.x = vec2.x;
listCube [list[num1].numCube].node->setPosition(vec1);
while (listCube [list[num2].numCube].node->getPosition().x < point)
{
for (int i=0; i<between; i++)
{
vec2 = listCube [list[num2+i].numCube].node->getPosition();
vec2.x += 1;
listCube [list[num2+i].numCube].node->setPosition(vec2);
}
}
ListMember buff = list[num1];
for (int i=between; i>0; i-)
list [num2+i] = list [num2+i-1];
list[num2] = buff;
}
void MainApp:animSwap21 (int num1, int num2)
{
Ogre: Vector3 vec1 = listCube [list[num1].numCube].node->getPosition();
Ogre: Vector3 vec2 = listCube [list[num2].numCube].node->getPosition();
int point = vec2.x - 120; // запомнили конечную точку перемещения
int between = num2 - num1;
vec1.x = vec2.x;
listCube [list[num1].numCube].node->setPosition(vec1);
while (listCube [list[num2].numCube].node->getPosition().x > point)
{
for (int i=between; i>0; i-)
{
vec2 = listCube [list[num2-i+1].numCube].node->getPosition();
vec2.x -= 1;
listCube [list[num2-i+1].numCube].node->setPosition(vec2);
}
}
ListMember buff = list[num1];
for (int i=0; i<between; i++)
list [num1+i] = list [num1+i+1];
list[num2] = buff;
}
void MainApp:animSwap2 (int num1, int num2)
{
Ogre: Vector3 vec1 = listCube [list[num1].numCube].node->getPosition();
Ogre: Vector3 vec2 = listCube [list[num2].numCube].node->getPosition();
int point = vec2.x; // запомнили конечную точку перемещения
while (vec1.x < point)
{
vec1.x += 1;
vec2.x -= 1;
listCube [list[num1].numCube].node->setPosition(vec1);
listCube [list[num2].numCube].node->setPosition(vec2);
}
ListMember buff = list[num1];
list[num1] = list[num2];
list[num2] = buff;
}
void MainApp:createFrameListener(void)
{
Ogre: LogManager:getSingletonPtr()->logMessage («*** Initializing OIS ***»);
OIS: ParamList pl;
size_t windowHnd = 0;
std:ostringstream windowHndStr;
mWindow->getCustomAttribute («WINDOW», &windowHnd);
windowHndStr << windowHnd;
pl.insert (std:make_pair (std:string («WINDOW»), windowHndStr.str()));
mInputManager = OIS: InputManager:createInputSystem(pl);
mKeyboard = static_cast<OIS: Keyboard*>(mInputManager->createInputObject (OIS:OISKeyboard, true));
mMouse = static_cast<OIS: Mouse*>(mInputManager->createInputObject (OIS:OISMouse, true));
mMouse->setEventCallback(this);
mKeyboard->setEventCallback(this);
windowResized(mWindow);
Ogre: WindowEventUtilities:addWindowEventListener (mWindow, this);
mRoot->addFrameListener(this);
}
bool MainApp:frameRenderingQueued (const Ogre: FrameEvent& fe)
{
if (mWindow->isClosed())
return false;
if(mShutDown)
return false;
mKeyboard->capture();
mMouse->capture();
CEGUI: System:getSingleton().injectTimePulse (fe.timeSinceLastFrame);
if (timerEnabled)
{
timerPoint++;
if (timerPoint>50)
{
nextStep();
timerPoint = 0;
if (step == algo.stepSum)
{
gui.stepEnableEnd();
timerEnabled = false;
}
}
}
return true;
}
bool MainApp:keyPressed (const OIS: KeyEvent& ke)
{
Ogre: Vector3 camMove = mCamera->getPosition();
Ogre: Vector3 camRotate = mCamera->getDirection();
bool camView = true;
switch (ke.key)
{
case OIS:KC_P:
case OIS:KC_ESCAPE:
mShutDown = true;
break;
case OIS:KC_W:
camMove.z -= 100;
break;
case OIS:KC_S:
camMove.z += 100;
break;
case OIS:KC_A:
camMove.x -= 100;
break;
case OIS:KC_D:
camMove.x += 100;
break;
case OIS:KC_Q:
camMove.y -= 100;
break;
case OIS:KC_E:
camMove.y += 100;
break;
case OIS:KC_I:
camRotate.z -= 0.05;
if (camRotate.z==-1)
camRotate.z = 1;
break;
case OIS:KC_K:
camRotate.z += 0.05;
if (camRotate.z==1)
camRotate.z = -1;
break;
case OIS:KC_J:
camRotate.x -= 0.05;
if (camRotate.x==-1)
camRotate.x = 1;
break;
case OIS:KC_L:
camRotate.x += 0.05;
if (camRotate.x==1)
camRotate.x = -1;
break;
case OIS:KC_U:
camRotate.y -= 0.05;
if (camRotate.y==-1)
camRotate.y = 1;
break;
case OIS:KC_O:
camRotate.y += 0.05;
if (camRotate.y==1)
camRotate.y = -1;
break;
default:
camView = false;
break;
}
if (camView)
{
mCamera->setPosition(camMove); // настроили камеру
mCamera->setDirection(camRotate); // rotate камеру
}
CEGUI: System &sys = CEGUI: System:getSingleton();
sys.injectKeyDown (ke.key);
sys.injectChar (ke.text);
return true;
}
bool MainApp:keyReleased (const OIS: KeyEvent& ke)
{
CEGUI: System:getSingleton().injectKeyUp (ke.key);
return true;
}
CEGUI: MouseButton convertButton (OIS: MouseButtonID buttonID)
{
switch (buttonID)
{
case OIS:MB_Left:
return CEGUI: LeftButton;
case OIS:MB_Right:
return CEGUI: RightButton;
case OIS:MB_Middle:
return CEGUI: MiddleButton;
default:
return CEGUI: LeftButton;
}
}
bool MainApp:mouseMoved (const OIS: MouseEvent &arg)
{
CEGUI: System &sys = CEGUI: System:getSingleton();
sys.injectMouseMove (arg.state.X.rel, arg.state.Y.rel);
if (arg.state.Z.rel)
sys.injectMouseWheelChange (arg.state.Z.rel / 120.0f);
return true;
}
bool MainApp:mousePressed (const OIS: MouseEvent &arg, OIS: MouseButtonID id)
{
CEGUI: System:getSingleton().injectMouseButtonDown (convertButton(id));
return true;
}
bool MainApp:mouseReleased (const OIS: MouseEvent &arg, OIS: MouseButtonID id)
{
CEGUI: System:getSingleton().injectMouseButtonUp (convertButton(id));
return true;
}
void MainApp:createGUIEvents(void)
{
gui.quit->subscribeEvent (CEGUI: PushButton: EventClicked, CEGUI: Event: Subscriber (&MainApp:quit, this));
gui.cam1->subscribeEvent (CEGUI: PushButton: EventClicked, CEGUI: Event: Subscriber (&MainApp:cam1, this));
Подобные документы
Общее описание разрабатываемого программного обеспечения, требования к его функциональности и сферы практического применения. Выбор инструментальных средств разработки. Проектирование структур баз данных и алгоритмов, пользовательского интерфейса.
дипломная работа [3,1 M], добавлен 19.01.2017Общая характеристика и структурная схема приложения, требования к нему и функциональные особенности, сферы практического применения. Обоснование выбора языка программирования. Описание интерфейса и инструкция пользователя. Проведение листинга программы.
дипломная работа [1,0 M], добавлен 10.07.2017Разработка адресных и технических требований к игре. Написание сценария. Общая концепция разработки приложения. Разработка схем алгоритмов приложения. Игровые технологии. Выбор среды и программированного языка. Описание пользовательского интерфейса.
курсовая работа [1,6 M], добавлен 14.06.2014Разработка программы создания заметок в любом месте компьютера. Выбор технологии, языка и среды разработки приложения. Описание основных алгоритмов работы программного обеспечения. Проектирование пользовательского интерфейса. Выбор стратегии тестирования.
отчет по практике [700,5 K], добавлен 24.11.2014Общая характеристика и анализ требований к разрабатываемому приложению, функциональные особенности и сферы практического применения. Проектирование базы данных и выбор системы управления ею. Тестирование приложения и выбор языка программирования.
дипломная работа [791,8 K], добавлен 10.07.2017Изучение основных алгоритмов генерации различных видов фракталов. Выбор языка и среды программирования. Характеристика структурных элементов растрового графического редактора фракталов. Описание интерфейса приложения, порядок редактирования изображений.
курсовая работа [1,2 M], добавлен 04.04.2014Использование библиотеки ОpеnGL с целью разработки программ для ОС семейства Windоws с применением технологий трехмерной графики. Прорисовка функциональных частей модели парусника, проектирование интерфейса пользователя и подсистемы управления событиями.
курсовая работа [747,0 K], добавлен 26.06.2011Анализ моделируемого приложения и постановка задачи. Диаграмма прецедентов, деятельности объектов и состояния классов. Разработка приложения-игры, выбор языка программирования и среды для разработки проекта, интерфейс приложения и ресурсы проекта.
курсовая работа [308,5 K], добавлен 14.10.2011Создание, изучение и разработка приложение на Android. Среда разработки приложения DelphiXE5. Установка и настройка среды программирования. Этапы разработки приложения. Инструменты для упрощения конструирования графического интерфейса пользователя.
курсовая работа [1,6 M], добавлен 19.04.2017Основные методы объектно-ориентированного программирования поисковой системы. Выбор языка программирования и среды разработки приложения. Реализация паттерна, использование принципа сохраняемости. Описание пользовательского интерфейса поисковой системы.
курсовая работа [781,4 K], добавлен 29.04.2015