17 #ifndef _GAZEBO_MESHMANAGER_HH_
18 #define _GAZEBO_MESHMANAGER_HH_
24 #include <boost/thread/mutex.hpp>
26 #include <ignition/math/Plane.hh>
27 #include <ignition/math/Matrix3.hh>
28 #include <ignition/math/Matrix4.hh>
29 #include <ignition/math/Vector2.hh>
43 class ColladaExporter;
68 public:
const Mesh *Load(
const std::string &_filename);
76 public:
void Export(
const Mesh *_mesh,
const std::string &_filename,
77 const std::string &_extension,
bool _exportTextures =
false);
81 public:
bool IsValidFilename(
const std::string &_filename);
88 public:
void GetMeshAABB(
const Mesh *_mesh,
89 ignition::math::Vector3d &_center,
90 ignition::math::Vector3d &_min_xyz,
91 ignition::math::Vector3d &_max_xyz);
96 public:
void GenSphericalTexCoord(
const Mesh *_mesh,
97 const ignition::math::Vector3d &_center);
104 public:
void AddMesh(
Mesh *_mesh);
109 public:
const Mesh *GetMesh(
const std::string &_name)
const;
113 public:
bool HasMesh(
const std::string &_name)
const;
120 public:
void CreateSphere(
const std::string &_name,
float _radius,
121 int _rings,
int _segments);
127 public:
void CreateBox(
const std::string &_name,
128 const ignition::math::Vector3d &_sides,
129 const ignition::math::Vector2d &_uvCoords);
143 public:
void CreateExtrudedPolyline(
const std::string &_name,
144 const std::vector<std::vector<ignition::math::Vector2d> >
145 &_vertices,
double _height);
153 public:
void CreateCylinder(
const std::string &_name,
165 public:
void CreateCone(
const std::string &_name,
182 public:
void CreateTube(
const std::string &_name,
188 double _arc = 2.0 * M_PI);
195 public:
void CreatePlane(
const std::string &_name,
196 const ignition::math::Planed &_plane,
197 const ignition::math::Vector2d &_segments,
198 const ignition::math::Vector2d &_uvTile);
207 public:
void CreatePlane(
const std::string &_name,
208 const ignition::math::Vector3d &_normal,
210 const ignition::math::Vector2d &_size,
211 const ignition::math::Vector2d &_segments,
212 const ignition::math::Vector2d &_uvTile);
221 private:
void Tesselate2DMesh(
SubMesh *_sm,
229 public:
void CreateCamera(
const std::string &_name,
float _scale);
232 public:
void CreateBoolean(
const std::string &_name,
const Mesh *_m1,
239 const Mesh *_m2,
const int _operation,
240 const ignition::math::Pose3d &_offset = ignition::math::Pose3d::Zero);
250 private:
static void ConvertPolylinesToVerticesAndEdges(
251 const std::vector<std::vector<ignition::math::Vector2d> >
254 std::vector<ignition::math::Vector2d> &_vertices,
255 std::vector<ignition::math::Vector2i> &_edges);
264 private:
static size_t AddUniquePointToVerticesTable(
265 std::vector<ignition::math::Vector2d> &_vertices,
266 const ignition::math::Vector2d &_p,
280 private: FBXLoader *fbxLoader =
nullptr;
283 private: std::map<std::string, Mesh*> meshes;
286 private: std::vector<std::string> fileExtensions;
288 private: boost::mutex mutex;