在../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>