В библиотеке Coin3D есть возможность сохранения и последующей загрузки граф-сцены, полностью или частично.
Для загрузки используется объект класса SoInput и статические функции класса SoDB.
Для сохранения используется объект класса SoOutput.
В этом
примере создаётся утилита для просмотра сохранённых граф-сцен. На её примере можно разобраться, как происходит загрузка граф-сцены из файла и последующая работа с загруженной граф-сценой.
Как видно из кода, это не консольное, а оконное MFC приложение.
Loader.cpp 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
| | #define VC_EXTRALEAN
#include <afxext.h>
#include <Inventor/Win/SoWin.h>
#include <Inventor/Win/viewers/SoWinExaminerViewer.h>
#include <Inventor/nodes/SoSeparator.h>
#include <Inventor/SoInput.h>
class CLoaderApp : public CWinApp
{
public:
virtual BOOL InitInstance()
{
CWinApp::InitInstance();
while(true)
{
if( IDYES != AfxMessageBox( _T("Load next Inventor file?"), MB_YESNO) )
break;
CFileDialog dlg( TRUE, _T(".iv"), NULL, 0, _T("OI Files (*.iv)|*.iv||") );
if( IDOK != dlg.DoModal() )
break;
const CStringA fullPath( dlg.GetPathName() );
HWND wnd = SoWin::init( "Viewer" );
SoInput input;
input.openFile( fullPath.GetString() );
SoSeparator * root = SoDB::readAll( &input );
SoWinExaminerViewer * viewer = new SoWinExaminerViewer(wnd );
viewer->setSceneGraph( root );
viewer->setSize( SbVec2s(800, 600) );
viewer->show();
SoWin::mainLoop();
};
return FALSE;
}
};
CLoaderApp theApp |