How to open a collada file
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!!