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