01 SoSeparator* loadGeometry(const char *filename)
02 {
03    // Root of scene graph 
04    SoSeparator *file_scene = new SoSeparator;
05 
06    // Handler for Open Inventor file
07    SoInput myScene;
08 
09    // Open scene file
10    if (!myScene.openFile(filename))
11    {
12       printf("Error loading file '%s'\n", filename);
13       return NULL;
14    }
15 
16    // Is the file format valid?
17    if (!myScene.isValidFile())
18    {
19       printf("File '%s' is not a valid Inventor file\n", filename);
20       return NULL;
21    }
22 
23    // Read scene and add to group node 'file_scene' 
24    file_scene = SoDB::readAll(&myScene);
25 
26    if (file_scene == NULL)
27    {
28       printf("Error reading file '%s'\n", filename);
29       myScene.closeFile();
30       return NULL;
31    }
32 
33    // Close file 
34    myScene.closeFile();
35 
36    return file_scene;
37 }