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 }