Визуализатор алгоритмов с применением трехмерной графики

Общее описание разрабатываемого приложения, его актуальность и сферы практического применения. Выбор среды разработки и языка программирования, 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

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.