How to open a collada file

asked 2014-07-10 03:48:14 -0500

Cabby gravatar image

I am facing a problem in opening a collada file with ros. I am using "ogre:mesh" to display it polygens but in qtcreator an error is being prompted every time I execute the code :"NO EXECUTABLE SPECIFIED"

The code is as followed:

#include <mesh_loader.h> #include <ogremeshserializer.h> #include <ogresubmesh.h> #include <unistd.h> #include <vector> #include <string> #include <iostream> #include <ogre.h> #include "OgreSkeletonSerializer.h" #include "OgreDefaultHardwareBufferManager.h" #include "OgreProgressiveMesh.h"

ogre::MeshPtr loadMeshFromResource(const std::string& resource_path); void main() { struct stat tagStat;

   stat(file_path.c_str(), &tagStat);

   MemoryDataStream* memstream = new MemoryDataStream(file_path, tagStat.st_size, true);

   fread((void*)memstream->getPtr(), tagStat.st_size, 1, pFile);

   fclose(pFile);

   MeshPtr pMesh = MeshManager::getSingleton().createManual("LocalMesh", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
   loadMeshFromResource(model_name);
   /*MeshSerializer meshSerializer;
   DataStreamPtr stream(memstream);
   meshSerializer.importMesh(stream, pMesh.getPointer());*/

} Ogre::MeshPtr loadMeshFromResource(const std::string& resource_path) { if (Ogre::MeshManager::getSingleton().resourceExists(resource_path)) { return Ogre::MeshManager::getSingleton().getByName(resource_path); } else { fs::path model_path(resource_path); #if BOOST_FILESYSTEM_VERSION == 3 std::string ext = model_path.extension().string(); #else std::string ext = model_path.extension(); #endif if (ext == ".mesh" || ext == ".MESH") { resource_retriever::Retriever retriever; resource_retriever::MemoryResource res; try { res = retriever.get(resource_path); } catch (resource_retriever::Exception& e) { ROS_ERROR("%s", e.what()); return Ogre::MeshPtr(); }

     if (res.size == 0)
   {
      return Ogre::MeshPtr();
   }

   Ogre::MeshSerializer ser;
   Ogre::DataStreamPtr stream(new Ogre::MemoryDataStream(res.data.get(), res.size));
   Ogre::MeshPtr mesh = Ogre::MeshManager::getSingleton().createManual(resource_path, "rviz");
   ser.importMesh(stream, mesh.get());

   return mesh;
   }

    else if (ext == ".stl" || ext == ".STL" || ext == ".stlb" || ext == ".STLB")
  {
     resource_retriever::Retriever retriever;
     resource_retriever::MemoryResource res;

      try
    {
      res = retriever.get(resource_path);
    }
    catch (resource_retriever::Exception& e)
    {
      ROS_ERROR("%s", e.what());
      return Ogre::MeshPtr();
    }

    if (res.size == 0)
    {
      return Ogre::MeshPtr();
    }

    ogre_tools::STLLoader loader;
    if (!loader.load(res.data.get()))
    {
      ROS_ERROR("Failed to load file [%s]", resource_path.c_str());
      return Ogre::MeshPtr();
    }

    return loader.toMesh(resource_path);
  }
  else
  {
    Assimp::Importer importer;
    importer.SetIOHandler(new ResourceIOSystem());
    const aiScene* scene = importer.ReadFile(resource_path, aiProcess_SortByPType|aiProcess_GenNormals|aiProcess_Triangulate|aiProcess_GenUVCoords|aiProcess_FlipUVs);
    if (!scene)
    {
      ROS_ERROR("Could not load resource [%s]: %s", resource_path.c_str(), importer.GetErrorString());
      return Ogre::MeshPtr();
    }

    return meshFromAssimpScene(resource_path, scene);
  }
}

return Ogre::MeshPtr();

}

And if there is any other and simpler way to display the polygens of collada file, please recommend!!

edit retag flag offensive close merge delete