在../qtOgitor/src/mainwindowactions.cpp中定义了void MainWindow::newScene()
在Qtogitor的新建场景按钮激活后调用
1: void MainWindow::newScene() 2: { 3: const char NewSceneDefinition[] = " <OBJECT typename=/"%s/" scenemanagertype=/"%s/" name=/"SceneManager/"> <PROPERTY id=/"configfile/" type=/"7/" value=/"%s/"></PROPERTY></OBJECT>/n" 4: "</OGITORSCENE>/n"; 5: 6: Ogitors::OgitorsRoot *ogRoot = OgitorsRoot::getSingletonPtr(); 7: 8: if(ogRoot->IsSceneLoaded()) 9: mOgreWidget->setSwitchingScene(true); 10: 11: if(!(ogRoot->TerminateScene())) 12: { 13: mOgreWidget->setSwitchingScene(false); 14: return; 15: } 16: 17: Ogitors::PROJECTOPTIONS *pOpt = ogRoot->GetProjectOptions(); 18: 19: pOpt->IsNewProject = true; 20: pOpt->ProjectName = ""; 21: pOpt->ProjectDir = Ogitors::OgitorsSystem::getSingletonPtr()->getProjectsDirectory(); 22: pOpt->SceneManagerName = "OctreeSceneManager"; 23: pOpt->TerrainDirectory = "Terrain"; 24: pOpt->HydraxDirectory = "Hydrax"; 25: pOpt->CaelumDirectory = "Caelum"; 26: pOpt->PagedGeometryDirectory = "PagedGeometry"; 27: pOpt->SceneManagerConfigFile = ""; 28: pOpt->CameraSaveCount = 0; 29: pOpt->CameraSpeed = 1.0f; 30: pOpt->ResourceDirectories.clear(); 31: pOpt->SelectionRectColour = Ogre::ColourValue(0.5f, 0, 1); 32: pOpt->SelectionBBColour = Ogre::ColourValue(1, 1, 1); 33: pOpt->HighlightBBColour = Ogre::ColourValue(0.91f, 0.19f, 0.19f); 34: pOpt->SelectHighlightBBColour = Ogre::ColourValue(0.19f, 0.91f, 0.19f); 35: pOpt->ObjectCount = 0; 36: 37: for(unsigned int v = 0;v < 31;v++) 38: { 39: pOpt->LayerNames[v] = "Layer " + Ogre::StringConverter::toString(v); 40: pOpt->LayerVisible[v] = true; 41: } 42: 43: pOpt->LayerCount = 1; 44: 45: SettingsDialog dlg(QApplication::activeWindow(), pOpt); 46: 47: if(dlg.exec() == QDialog::Accepted) 48: { 49: char buffer[5000]; 50: Ogre::String filename = ogRoot->GetProjectOptions()->ProjectDir + "/" + ogRoot->GetProjectOptions()->ProjectName + ".ogscene"; 51: filename = Ogitors::OgitorsUtils::QualifyPath(filename); 52: 53: bool succeed = false; 54: 55: try 56: { 57: std::ofstream outfile(filename.c_str()); 58: 59: if(outfile.is_open()) 60: succeed = true; 61: 62: if(succeed) 63: { 64: outfile << "<?xml version=/"1.0/" encoding=/"utf-8/"?>/n"; 65: outfile << "<OGITORSCENE version=/"2/">/n"; 66: ogRoot->WriteProjectOptions(outfile,true); 67: sprintf_s(buffer,5000,NewSceneDefinition,ogRoot->GetProjectOptions()->SceneManagerName.c_str(),ogRoot->GetProjectOptions()->SceneManagerName.c_str(),ogRoot->GetProjectOptions()->SceneManagerConfigFile.c_str()); 68: outfile << buffer; 69: } 70: 71: outfile.close(); 72: } 73: catch(...) 74: { 75: succeed = false; 76: } 77: 78: if(!succeed) 79: { 80: OgitorsSystem::getSingletonPtr()->DisplayMessageDialog("The path is Read-Only. Ogitor can not work with Read-Only Project Paths!", DLGTYPE_OK); 81: return; 82: } 83: 84: ogRoot->LoadScene(filename); 85: } 86: updateRecentFiles(); 87: }void MainWindow::newScene()调用后会将初始场景写入xml格式的.ogscene文件中 请看上面62行代码
其中在66行代码调用的ogRoot->WriteProjectOptions(outfile,true);是将project的options更详细的写入文件
在D:/OgreSDK/ogitor_src/src0_43/Ogitor/src/OgitorsRootUtilityFunctions.cpp文件中定义了
void OgitorsRoot::WriteProjectOptions(std::ostream &outstream, bool newproject)
1: void OgitorsRoot::WriteProjectOptions(std::ostream &outstream, bool newproject) 2: { 3: char buffer[5000]; 4: unsigned int i; 5: 6: PROJECTOPTIONS *pOpt = GetProjectOptions(); 7: 8: outstream << " <PROJECT>/n"; 9: sprintf_s(buffer,5000," <SCENEMANAGER value=/"%s/"></SCENEMANAGER>/n",pOpt->SceneManagerName.c_str()); 10: outstream << buffer; 11: sprintf_s(buffer,5000," <TERRAINDIR value=/"%s/"></TERRAINDIR>/n",pOpt->TerrainDirectory.c_str()); 12: outstream << buffer; 13: sprintf_s(buffer,5000," <HYDRAXDIR value=/"%s/"></HYDRAXDIR>/n",pOpt->HydraxDirectory.c_str()); 14: outstream << buffer; 15: sprintf_s(buffer,5000," <CAELUMDIR value=/"%s/"></CAELUMDIR>/n",pOpt->CaelumDirectory.c_str()); 16: outstream << buffer; 17: sprintf_s(buffer,5000," <PAGEDGEOMETRYDIR value=/"%s/"></PAGEDGEOMETRYDIR>/n",pOpt->PagedGeometryDirectory.c_str()); 18: outstream << buffer; 19: outstream << " <RESOURCEDIRECTORIES>/n"; 20: Ogre::String strtype; 21: Ogre::String value; 22: for(i = 0;i < pOpt->ResourceDirectories.size();i++) 23: { 24: value = pOpt->ResourceDirectories[i]; 25: if(value.substr(0,3) == "FS:") 26: strtype = "FileSystem"; 27: else if(value.substr(0,3) == "ZP:") 28: strtype = "Zip"; 29: else strtype = "Unknown"; 30: value.erase(0,3); 31: sprintf_s(buffer,5000," <DIRECTORY type=/"%s/" value=/"%s/"></DIRECTORY>/n",strtype.c_str(),value.c_str()); 32: outstream << buffer; 33: } 34: outstream << " </RESOURCEDIRECTORIES>/n"; 35: 36: WriteCameraPositions(outstream,!newproject); 37: 38: outstream << " <LAYERS>/n"; 39: for(i = 0;i < 31;i++) 40: { 41: sprintf_s(buffer,5000," <LAYER id=/"%d/" name=/"%s/" visible=/"%s/"></LAYER>/n", i,pOpt->LayerNames[i].c_str(), Ogre::StringConverter::toString(pOpt->LayerVisible[i]).c_str()); 42: outstream << buffer; 43: } 44: outstream << " </LAYERS>/n"; 45: 46: sprintf_s(buffer,5000," <LAYERCOUNT value=/"%s/"></LAYERCOUNT>/n",Ogre::StringConverter::toString(pOpt->LayerCount).c_str()); 47: outstream << buffer; 48: sprintf_s(buffer,5000," <SELECTIONRECTCOLOUR value=/"%s/"></SELECTIONRECTCOLOUR>/n",Ogre::StringConverter::toString(pOpt->SelectionRectColour).c_str()); 49: outstream << buffer; 50: sprintf_s(buffer,5000," <SELECTIONCOLOUR value=/"%s/"></SELECTIONCOLOUR>/n",Ogre::StringConverter::toString(pOpt->SelectionBBColour).c_str()); 51: outstream << buffer; 52: sprintf_s(buffer,5000," <HIGHLIGHTCOLOUR value=/"%s/"></HIGHLIGHTCOLOUR>/n",Ogre::StringConverter::toString(pOpt->HighlightBBColour).c_str()); 53: outstream << buffer; 54: sprintf_s(buffer,5000," <SELECTHIGHLIGHTCOLOUR value=/"%s/"></SELECTHIGHLIGHTCOLOUR>/n",Ogre::StringConverter::toString(pOpt->SelectHighlightBBColour).c_str()); 55: outstream << buffer; 56: sprintf_s(buffer,5000," <GRIDCOLOUR value=/"%s/"></GRIDCOLOUR>/n",Ogre::StringConverter::toString(pOpt->GridColour).c_str()); 57: outstream << buffer; 58: sprintf_s(buffer,5000," <GRIDSPACING value=/"%s/"></GRIDSPACING>/n",Ogre::StringConverter::toString(pOpt->GridSpacing).c_str()); 59: outstream << buffer; 60: sprintf_s(buffer,5000," <SNAPANGLE value=/"%s/"></SNAPANGLE>/n",Ogre::StringConverter::toString(pOpt->SnapAngle).c_str()); 61: outstream << buffer; 62: sprintf_s(buffer,5000," <WALKAROUNDHEIGHT value=/"%s/"></WALKAROUNDHEIGHT>/n",Ogre::StringConverter::toString(pOpt->WalkAroundHeight).c_str()); 63: outstream << buffer; 64: sprintf_s(buffer,5000," <VOLUMESELECTIONDEPTH value=/"%s/"></VOLUMESELECTIONDEPTH>/n",Ogre::StringConverter::toString(pOpt->VolumeSelectionDepth).c_str()); 65: outstream << buffer; 66: sprintf_s(buffer,5000," <OBJECTCOUNT value=/"%s/"></OBJECTCOUNT>/n",Ogre::StringConverter::toString(pOpt->ObjectCount).c_str()); 67: outstream << buffer; 68: outstream << " </PROJECT>/n"; 69: } 在newScene调用后读取用户输入的options和部分默认options写入.ogscene文件中,新建一个scene生成的基本xml文件如下,其中包含的基本的属性 1: <?xml version="1.0" encoding="utf-8"?> 2: <OGITORSCENE version="2"> 3: <PROJECT> 4: <SCENEMANAGER value="OctreeSceneManager"></SCENEMANAGER> 5: <TERRAINDIR value="Terrain"></TERRAINDIR> 6: <HYDRAXDIR value="Hydrax"></HYDRAXDIR> 7: <CAELUMDIR value="Caelum"></CAELUMDIR> 8: <PAGEDGEOMETRYDIR value="PagedGeometry"></PAGEDGEOMETRYDIR> 9: <RESOURCEDIRECTORIES> 10: </RESOURCEDIRECTORIES> 11: <CAMERASPEED value="1"></CAMERASPEED> 12: <CAMERAPOSITIONS count="0"> 13: <OPTION id="0" position="5 10 5" orientation="0.937683 -0.155887 -0.306458 -0.050973"></OPTION> 14: </CAMERAPOSITIONS> 15: <LAYERS> 16: <LAYER id="0" name="Layer 0" visible="true"></LAYER> 17: <LAYER id="1" name="Layer 1" visible="true"></LAYER> 18: <LAYER id="2" name="Layer 2" visible="true"></LAYER> 19: <LAYER id="3" name="Layer 3" visible="true"></LAYER> 20: <LAYER id="4" name="Layer 4" visible="true"></LAYER> 21: <LAYER id="5" name="Layer 5" visible="true"></LAYER> 22: <LAYER id="6" name="Layer 6" visible="true"></LAYER> 23: <LAYER id="7" name="Layer 7" visible="true"></LAYER> 24: <LAYER id="8" name="Layer 8" visible="true"></LAYER> 25: <LAYER id="9" name="Layer 9" visible="true"></LAYER> 26: <LAYER id="10" name="Layer 10" visible="true"></LAYER> 27: <LAYER id="11" name="Layer 11" visible="true"></LAYER> 28: <LAYER id="12" name="Layer 12" visible="true"></LAYER> 29: <LAYER id="13" name="Layer 13" visible="true"></LAYER> 30: <LAYER id="14" name="Layer 14" visible="true"></LAYER> 31: <LAYER id="15" name="Layer 15" visible="true"></LAYER> 32: <LAYER id="16" name="Layer 16" visible="true"></LAYER> 33: <LAYER id="17" name="Layer 17" visible="true"></LAYER> 34: <LAYER id="18" name="Layer 18" visible="true"></LAYER> 35: <LAYER id="19" name="Layer 19" visible="true"></LAYER> 36: <LAYER id="20" name="Layer 20" visible="true"></LAYER> 37: <LAYER id="21" name="Layer 21" visible="true"></LAYER> 38: <LAYER id="22" name="Layer 22" visible="true"></LAYER> 39: <LAYER id="23" name="Layer 23" visible="true"></LAYER> 40: <LAYER id="24" name="Layer 24" visible="true"></LAYER> 41: <LAYER id="25" name="Layer 25" visible="true"></LAYER> 42: <LAYER id="26" name="Layer 26" visible="true"></LAYER> 43: <LAYER id="27" name="Layer 27" visible="true"></LAYER> 44: <LAYER id="28" name="Layer 28" visible="true"></LAYER> 45: <LAYER id="29" name="Layer 29" visible="true"></LAYER> 46: <LAYER id="30" name="Layer 30" visible="true"></LAYER> 47: </LAYERS> 48: <LAYERCOUNT value="1"></LAYERCOUNT> 49: <SELECTIONRECTCOLOUR value="0.498039 0 1 1"></SELECTIONRECTCOLOUR> 50: <SELECTIONCOLOUR value="1 1 1 1"></SELECTIONCOLOUR> 51: <HIGHLIGHTCOLOUR value="0.909804 0.188235 0.188235 1"></HIGHLIGHTCOLOUR> 52: <SELECTHIGHLIGHTCOLOUR value="0.188235 0.909804 0.188235 1"></SELECTHIGHLIGHTCOLOUR> 53: <GRIDCOLOUR value="1 1 1 1"></GRIDCOLOUR> 54: <GRIDSPACING value="1"></GRIDSPACING> 55: <SNAPANGLE value="0"></SNAPANGLE> 56: <WALKAROUNDHEIGHT value="0"></WALKAROUNDHEIGHT> 57: <VOLUMESELECTIONDEPTH value="0"></VOLUMESELECTIONDEPTH> 58: <OBJECTCOUNT value="0"></OBJECTCOUNT> 59: </PROJECT> 60: <OBJECT typename="OctreeSceneManager" scenemanagertype="OctreeSceneManager" name="SceneManager"> <PROPERTY id="configfile" type="7" value=""></PROPERTY></OBJECT> 61: </OGITORSCENE>
