Обзор существующих решений


Скачать 0.66 Mb.
Название Обзор существующих решений
страница 9/10
Тип Обзор
rykovodstvo.ru > Руководство эксплуатация > Обзор
1   2   3   4   5   6   7   8   9   10

rotateLeftModelButton->setPosition(CEGUI::UVector2(CEGUI::UDim(0.5, 0), CEGUI::UDim(0.7, 0)));
//Кнопка возвращения на главное окно

backMainWindowButton = wmgr.createWindow("OgreTray/Button", "CEGUIDemo/backMainWindowButton");

wchar_t saveText[100] = L"Сохранить";

backMainWindowButton->setText(encodeRussian(saveText) );

backMainWindowButton->setSize(CEGUI::UVector2(CEGUI::UDim(0.15, 0), CEGUI::UDim(0.05, 0)));

backMainWindowButton->setPosition(CEGUI::UVector2(CEGUI::UDim(0.85, 0), CEGUI::UDim(0, 0)));
//настройки комнаты
//Кнопка увеличения скейла

scaleRoomPlusButton = wmgr.createWindow("but/scalePlusButton", "CEGUIDemo/scaleRoomPlusButton");

scaleRoomPlusButton->setSize(CEGUI::UVector2(CEGUI::UDim(0.07, 0), CEGUI::UDim(0.07, 0)));

scaleRoomPlusButton->setPosition(CEGUI::UVector2(CEGUI::UDim(0.15, 0), CEGUI::UDim(0.6, 0)));
//Кнопка уменьшения скейла

scaleRoomMinusButton = wmgr.createWindow("but/scaleMinusButton", "CEGUIDemo/scaleRoomMinusButton");

scaleRoomMinusButton->setSize(CEGUI::UVector2(CEGUI::UDim(0.07, 0), CEGUI::UDim(0.07, 0)));

scaleRoomMinusButton->setPosition(CEGUI::UVector2(CEGUI::UDim(0.25, 0), CEGUI::UDim(0.6, 0)));
//типса настроек
tipsSettingText = wmgr.createWindow("OgreTray/StaticText", "CEGUIDemo/tipsTextSettings");

tipsSettingText->setVisible(true);

tipsSettingText->setSize(CEGUI::UVector2(CEGUI::UDim(1, 0), CEGUI::UDim(0.07, 0)));

tipsSettingText->setPosition(CEGUI::UVector2(CEGUI::UDim(0, 0), CEGUI::UDim(0.93, 0)));

wchar_t tipSettingText[150] = L"Режим настроек: удерживайте ПКМ для поворота камеры. WASD - двигать камеру. ЛКМ - выбрать.";

tipsSettingText->setText( encodeRussian(tipSettingText) );
//--------текст типсы главного экрана настроек

tipsText = wmgr.createWindow("OgreTray/StaticText", "CEGUIDemo/tipsText");

tipsText->setVisible(true);

tipsText->setSize(CEGUI::UVector2(CEGUI::UDim(1, 0), CEGUI::UDim(0.07, 0)));

tipsText->setPosition(CEGUI::UVector2(CEGUI::UDim(0, 0), CEGUI::UDim(0.93, 0)));

wchar_t tipText[150] = L"Режим поворота камеры: удерживайте ПКМ для поворота камеры. WASD - двигать камеру. ЛКМ - выбрать.";

tipsText->setText( encodeRussian(tipText) );

//--------текст типсы масштаба зала

tipsRoomText = wmgr.createWindow("OgreTray/StaticText", "CEGUIDemo/tipsRoomText");

tipsRoomText->setVisible(true);

tipsRoomText->setSize(CEGUI::UVector2(CEGUI::UDim(0.22, 0), CEGUI::UDim(0.07, 0)));

tipsRoomText->setPosition(CEGUI::UVector2(CEGUI::UDim(0.12, 0), CEGUI::UDim(0.5, 0)));

wchar_t tipRoomText[150] = L"Масштабировать зал";

tipsRoomText->setText( encodeRussian(tipRoomText) );
//--------текст типсы манипуляции объекта

tipsObjectText = wmgr.createWindow("OgreTray/StaticText", "CEGUIDemo/tipsObjectText");

tipsObjectText->setVisible(true);

tipsObjectText->setSize(CEGUI::UVector2(CEGUI::UDim(0.3, 0), CEGUI::UDim(0.07, 0)));

tipsObjectText->setPosition(CEGUI::UVector2(CEGUI::UDim(0.535, 0), CEGUI::UDim(0.5, 0)));

wchar_t tipObjectText[150] = L"Манипулирование объектом";

tipsObjectText->setText( encodeRussian(tipObjectText) );
//--------крепим кнопки к виджетам

sheetMgr->addChildWindow(sheetMainWindow);

sheetMgr->addChildWindow(sheetMainMenu);
sheetMainWindow->addChildWindow(buttonQuit);

sheetMainWindow->addChildWindow(buttonCameraSetPosition);

sheetMainWindow->addChildWindow(textbox1);

sheetMainWindow->addChildWindow(menuButton);

sheetMainWindow->addChildWindow(tipsText);
sheetMainMenu->addChildWindow(scaleRoomPlusButton);

sheetMainMenu->addChildWindow(scaleRoomMinusButton);

sheetMainMenu->addChildWindow(scalePlusButton);

sheetMainMenu->addChildWindow(scaleMinusButton);

sheetMainMenu->addChildWindow(translateModelToLeftButton);

sheetMainMenu->addChildWindow(translateModelToRightButton);

sheetMainMenu->addChildWindow(translateModelToTopButton);

sheetMainMenu->addChildWindow(translateModelToBackButton);

sheetMainMenu->addChildWindow(translateModelToUpButton);

sheetMainMenu->addChildWindow(translateModelToDownButton);

sheetMainMenu->addChildWindow(rotateRightModelButton);

sheetMainMenu->addChildWindow(rotateLeftModelButton);

sheetMainMenu->addChildWindow(backMainWindowButton);

sheetMainMenu->addChildWindow(checkShadow);

sheetMainMenu->addChildWindow(textShadow);

sheetMainMenu->addChildWindow(tipsSettingText);

sheetMainMenu->addChildWindow(tipsRoomText);

sheetMainMenu->addChildWindow(tipsObjectText);

sheetMainMenu->hide();
//--------обрабатываем нажатия кнопок

buttonQuit->subscribeEvent(CEGUI::PushButton::EventClicked, CEGUI::Event::Subscriber(&BasicApp::quit, this));

buttonCameraSetPosition->subscribeEvent(CEGUI::PushButton::EventClicked, CEGUI::Event::Subscriber(&BasicApp::setDefaultPosition, this));

menuButton->subscribeEvent(CEGUI::PushButton::EventClicked, CEGUI::Event::Subscriber(&BasicApp::eventMenuButton, this));

backMainWindowButton->subscribeEvent(CEGUI::PushButton::EventClicked, CEGUI::Event::Subscriber(&BasicApp::eventBackWindow, this));
Ogre::Vector3 scaleRoomVector(0, 0, 0);
for(int i = 0; i < myVector.size(); i++)

{

Ogre::Entity* lEntity = mSceneMgr->createEntity(myVector[i], myVector[i] + ".mesh" );

lNode = mSceneMgr->getRootSceneNode()->createChildSceneNode(myVector[i]);

lNode->attachObject(lEntity);
const char * nameModel = nullptr; //преобразования в const char для xml

char stringToChar [100];

std::strcpy( stringToChar, myVector[i].c_str() );

nameModel = stringToChar;
Ogre::Vector3 locationVector(0, 0, 0);//получаем координаты модельки

Ogre::Vector3 scaleVector(0, 0, 0);//её скейл

double rotate = 0.0;//и поворот
configureXmlSettingsD(nameModel, locationVector, scaleVector, rotate, scaleRoomVector);
lNode->setPosition(locationVector);

lNode->setScale(scaleVector);

lNode->yaw(Ogre::Degree(rotate));
removeFromXmlElderData();

}
room = mSceneMgr->createEntity("Cube.001.mesh");

roomNode = mSceneMgr->getRootSceneNode()->createChildSceneNode("room");

roomNode->attachObject(room);

roomNode->setPosition(500,450,200);

roomNode->setScale(scaleRoomVector);

//roomNode->setScale(50,25,50);
static_cast(checkShadow)->setSelected(true);

mSceneMgr->setShadowTechnique(Ogre::SHADOWTYPE_STENCIL_ADDITIVE);
tipsEnabled = true;
CEGUI::System::getSingleton().setGUISheet(sheetMgr);
}

void BasicApp::checkShadows()

{

if ( static_cast(checkShadow)->isSelected() )

{

mSceneMgr->setShadowTechnique(Ogre::SHADOWTYPE_STENCIL_ADDITIVE);

}

else if ( !static_cast(checkShadow)->isSelected() )

{

mSceneMgr->setShadowTechnique(Ogre::SHADOWTYPE_NONE);

}

}

/*

bool BasicApp::releaseCam()

{

return static_cast(releaseCamera)->isSelected();

}

*/

CEGUI::String BasicApp::encodeRussian(wchar_t string[100])

{

wchar_t strw[100] = L"";

wcscat(strw, string);
CEGUI::String str;

for (int i=0; i < wcslen(strw); i++)

{

str += strw[i];

}
return str;

}
bool BasicApp::eventBackWindow(const CEGUI::EventArgs &e)

{

configureXmlSettings();
sheetMainMenu->hide();

sheetMainMenu->disable();

sheetMainMenu->deactivate();

sheetMainWindow->show();

sheetMainWindow->activate();

sheetMainWindow->enable();
for(int i = 0; i < myVector.size(); i++)

{

mSceneMgr->getSceneNode(myVector[i])->showBoundingBox(false); //убираем выделение со всех моделек на сцене

}
textbox1->setVisible(false);
return true;

}


void BasicApp::configureXmlSettingsD(const char * nameModel, Ogre::Vector3 &locationVector, Ogre::Vector3 &scaleVector, double &rotate, Ogre::Vector3 &scaleRoomVector)

{

file_settings->LoadFile();

bool rewrite = false;

bool addNew = false;
TiXmlElement* xml_name_model = new TiXmlElement(nameModel);
TiXmlNode* findModel = file_settings->FirstChildElement(nameModel); //проверяем, есть ли моделька из вектора в xml

if (findModel == nullptr)

{

addNew = true;//если нет, добавляем новую

}

if (!addNew)//иначе обновляем атрибуты (потом можно переписать красивее)

{
for( xml_name_model = file_settings->FirstChildElement(nameModel); xml_name_model != NULL; xml_name_model = xml_name_model->NextSiblingElement(nameModel) )

{
if ( xml_name_model != nullptr)

{

rewrite = true;

break;

}
}

}
if (rewrite)

{

double xPos = 0.0;

double yPos = 0.0;

double zPos = 0.0;

double xScale = 0.0;

double yScale = 0.0;

double zScale = 0.0;

double rotateModel = 0.0;
xml_name_model->QueryDoubleAttribute("xPosition", &xPos);

xml_name_model->QueryDoubleAttribute("yPosition", &yPos);

xml_name_model->QueryDoubleAttribute("zPosition", &zPos);

locationVector.x = xPos;

locationVector.y = yPos;

locationVector.z = zPos;

xml_name_model->QueryDoubleAttribute("xScale", &xScale);

xml_name_model->QueryDoubleAttribute("yScale", &yScale);

xml_name_model->QueryDoubleAttribute("zScale", &zScale);

scaleVector.x = xScale;

scaleVector.y = yScale;

scaleVector.z = zScale;

xml_name_model->QueryDoubleAttribute("rotate", &rotateModel);

rotate = rotateModel;
}
if (addNew)

{

file_settings->LinkEndChild(xml_name_model);

std::srand( std::time(NULL) );

locationVector.x = 0;

locationVector.y = 0;

locationVector.z = std::rand()%300;

xml_name_model->SetDoubleAttribute("xPosition", locationVector.x );

xml_name_model->SetDoubleAttribute("yPosition", locationVector.y );

xml_name_model->SetDoubleAttribute("zPosition", locationVector.z );

scaleVector.x = 1;

scaleVector.y = 1;

scaleVector.z = 1;

xml_name_model->SetDoubleAttribute("xScale", scaleVector.x);

xml_name_model->SetDoubleAttribute("yScale", scaleVector.y);

xml_name_model->SetDoubleAttribute("zScale", scaleVector.z);

rotate = 0.0;

xml_name_model->SetDoubleAttribute("rotate", rotate);

file_settings->SaveFile();

}
file_room_settings->LoadFile();

TiXmlElement* xml_name_room = new TiXmlElement("room");

xml_name_room = file_room_settings->FirstChildElement("room");

double xScale = 0.0;

double yScale = 0.0;

double zScale = 0.0;

xml_name_room->QueryDoubleAttribute("xScale", &xScale);

xml_name_room->QueryDoubleAttribute("yScale", &yScale);

xml_name_room->QueryDoubleAttribute("zScale", &zScale);

scaleRoomVector.x = xScale;

scaleRoomVector.y = yScale;

scaleRoomVector.z = zScale;
}
void BasicApp::configureXmlSettings()

{

file_settings->LoadFile();
for(int i = 0; i < myVector.size(); i++)

{

const char * nameModel = nullptr;//преобразования в const char для xml

char stringToChar [100];

std::strcpy( stringToChar, myVector[i].c_str() );

nameModel = stringToChar;
TiXmlElement* xml_name_model = nullptr;

xml_name_model = file_settings->FirstChildElement(nameModel);
xml_name_model->SetDoubleAttribute("xPosition", mSceneMgr->getSceneNode(nameModel)->getPosition().x);

xml_name_model->SetDoubleAttribute("yPosition", mSceneMgr->getSceneNode(nameModel)->getPosition().y);

xml_name_model->SetDoubleAttribute("zPosition", mSceneMgr->getSceneNode(nameModel)->getPosition().z);

xml_name_model->SetDoubleAttribute("xScale", mSceneMgr->getSceneNode(nameModel)->getScale().x);

xml_name_model->SetDoubleAttribute("yScale", mSceneMgr->getSceneNode(nameModel)->getScale().y);

xml_name_model->SetDoubleAttribute("zScale", mSceneMgr->getSceneNode(nameModel)->getScale().z);
xml_name_model->SetDoubleAttribute("rotate", mSceneMgr->getSceneNode(nameModel)->getOrientation().getYaw().valueDegrees() );
file_settings->SaveFile();

}
file_room_settings->LoadFile();
TiXmlElement* xml_name_model = nullptr;

xml_name_model = file_room_settings->FirstChildElement("room");

xml_name_model->SetDoubleAttribute("xScale", mSceneMgr->getSceneNode("room")->getScale().x);

xml_name_model->SetDoubleAttribute("yScale", mSceneMgr->getSceneNode("room")->getScale().y);

xml_name_model->SetDoubleAttribute("zScale", mSceneMgr->getSceneNode("room")->getScale().z);

file_room_settings->SaveFile();
}
void BasicApp::removeFromXmlElderData()

{

file_settings->LoadFile();
std::vector notExistsModels; //вектор для дальнейшего удаления неиспользованных моделек из xml
//считываем все имена моделек с xml в вектор

TiXmlNode* xml_name = nullptr;
for( xml_name = file_settings->FirstChildElement(); xml_name != NULL; xml_name = xml_name->NextSiblingElement() )

{

std::string name = xml_name->Value();

notExistsModels.push_back(name);

}
if ( notExistsModels.size() >= myVector.size() ) //костыль (падало при запуске при добавлении сразу 3 новых моделек в конфиг

//поэтому ждём пока подгрузит всё из конфига)

{

//удаляем лишние элементы из вектора, которые не используются в приложении
for(int i = 0; i < myVector.size(); i++ )

{

//ищем элемент подгрузочного вектора в векторе из xml

std::vector::iterator it = std::find(notExistsModels.begin(), notExistsModels.end(), myVector[i]);

notExistsModels.erase( it );

std::vector(notExistsModels).swap(notExistsModels); //для освобождения памяти

}
//теперь удаляем из xml всё, что осталось в векторе notExists
for(int i = 0; i < notExistsModels.size(); i++ )

{

const char * nameModel = nullptr; //преобразования в const char для xml

char stringToChar [100];

std::strcpy( stringToChar, notExistsModels[i].c_str() );

nameModel = stringToChar;
TiXmlNode* xml_delete = file_settings->FirstChildElement(nameModel);

file_settings->RemoveChild(xml_delete);

file_settings->SaveFile();

}

}
}
bool BasicApp::eventMenuButton(const CEGUI::EventArgs &e)

{

sheetMainWindow->hide();

sheetMainWindow->disable();

sheetMainWindow->deactivate();

sheetMainMenu->show();

sheetMainMenu->activate();

sheetMainMenu->enable();
return true;

}
bool BasicApp::quit(const CEGUI::EventArgs &e)

{

mShutdown = true;

return true;

}
bool BasicApp::setDefaultPosition(const CEGUI::EventArgs &e)

{
goDefaultPosition = !goDefaultPosition;

textbox1->setVisible(false);
for(int i = 0; i < myVector.size(); i++)
1   2   3   4   5   6   7   8   9   10

Похожие:

Обзор существующих решений icon Описание предметной области
Обзор существующих программных продуктов систем обработки данных c использованием ip-телефонии 7
Обзор существующих решений icon Метода очистки
Целью настоящей работы является разработка технических решений по усовершенствованию существующих методов зачистки резервуаров с...
Обзор существующих решений icon Генеральный план совмещенный с проектом планировки пояснительная...
Выявление проблем градостроительного развития территории поселения на основе анализа параметров городской среды, существующих ресурсов...
Обзор существующих решений icon Обзор
Оспаривание решений и действий (бездействия) органов государственной власти, органов местного самоуправления, должностных лиц, государственных...
Обзор существующих решений icon Экспериментальная медицина и детская неврология обзор
Системный обзор вмешательств у детей с церебральным параличом: статус доказательности
Обзор существующих решений icon «Выполнение работ по развитию и оказание услуг по сопровождению Федерального...
Целью работы является анализ справочников фргу на соответствие следующим критериям: актуальность и полнота существующих справочных...
Обзор существующих решений icon Теоретические основы анализа и планирования разработки управленческих решений 5
Методы планирования, используемые при разработке и принятии управленческих решений в организации 9
Обзор существующих решений icon Обзор текущего состояния и особенности государственной инновационной политики
Периодический обзор инновационной деятельности стран Европы, Америки, Азии и Африки, СНГ
Обзор существующих решений icon Методические указания Ростов-на-Дону
Целью данного курса является формирование представления о процессе принятия решений, навыков анализа ситуации при принятии решений,...
Обзор существующих решений icon Экспериментальное народное самолетостроение 2 Глава Предварительный анализ и выбор решений 2
«летающих решений», некоего ковра-самолета «небесного катера» для отдыха и путешествий, не требующего летных удостоверений и сертификации....
Обзор существующих решений icon Марка Сергеева государственные и муниципальные библиотеки иркутской...
Г 72 ежегод аналит обзор / Иркут обл гос универс науч б-ка им. И. И. Молчанова-Сибирского
Обзор существующих решений icon Решение это выбор альтернативы
Чтобы оказать вам помощь в этом, ниже мы рассмотрим типы решений, принимаемых управляющими, используемые способы, научные методы...
Обзор существующих решений icon 2 Анализ выполнения решений международных документов/решений, принятых...
На Рис. 133 наглядно представлена оценка Азербайджанской республики с точки зрения реализации основных направлений Плана действий...
Обзор существующих решений icon Учебное пособие. М.: Издательство "Март", 2004. Предыдущая
Моделирование как метод теории принятия решений и анализ ряда конкретных моделей предмет четвертой части. Приводятся методы принятия...
Обзор существующих решений icon Рабочая программа учебной дисциплины б. 3 Методы принятия управленческих...
Будущий менеджер должен научиться правильно применять готовые компьютерные программы, хорошо разработанную технику анализа количественных...
Обзор существующих решений icon Инструкция по эксплуатации на английском языке
Когда то я уже писал обзор на проектор Unic uc40 и когда увидел BlitzWolf (он же unic uc46) то решил взять его на обзор, что бы посмотреть...

Руководство, инструкция по применению




При копировании материала укажите ссылку © 2024
контакты
rykovodstvo.ru
Поиск