Example #1
0
   //	Obj-file import implementation
   void ObjFileImporter::InternReadFile(const std::string &pFileName, scene::Scene* pScene)
   {
     
      //pFile->Open(pFileName, true);
      //ScopedPtr<File> file(pFileName);

      File *file = new File();

      file->Open(pFileName, true);
      //if (!file->Get()) {
      //   //throw DeadlyImportError("Failed to open file " + pFile + ".");
      //}

      // Get the file-size and validate it, throwing an exception when fails
      size_t fileSize = file->GetSize();
      if (fileSize < ObjMinSize) {
         //throw DeadlyImportError("OBJ-file is too small.");
      }

      // Allocate buffer and read file into it
      //TextFileToBuffer(file.Get(), m_pDataBuffer);
      file->CopyToBuffer(m_pDataBuffer);

      // Get the model name
      std::string strModelName;
      std::string::size_type pos = pFileName.find_last_of("\\/");
      if (pos != std::string::npos)
      {
         strModelName = pFileName.substr(pos + 1, pFileName.size() - pos - 1);
      }
      else
      {
         strModelName = pFileName;
      }

      // process all '\'
      std::vector<char> ::iterator iter = m_pDataBuffer.begin();
      while (iter != m_pDataBuffer.end())
      {
         if (*iter == '\\')
         {
            // remove '\'
            iter = m_pDataBuffer.erase(iter);
            // remove next character
            while (*iter == '\r' || *iter == '\n')
               iter = m_pDataBuffer.erase(iter);
         }
         else
            ++iter;
      }

      // parse the file into a temporary representation
      ObjParser parser(m_pDataBuffer, strModelName, file);

      // And create the proper return structures out of it
      CreateDataFromImport(parser.GetModel(), pScene);

      // Clean up allocated storage for the next import 
      m_pDataBuffer.clear();
      file->Close();
   }