MeshManager.hh
Go to the documentation of this file.
1/*
2 * Copyright (C) 2012 Open Source Robotics Foundation
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 *
16*/
17#ifndef GAZEBO_COMMON_MESHMANAGER_HH_
18#define GAZEBO_COMMON_MESHMANAGER_HH_
19
20#include <utility>
21#include <string>
22#include <vector>
23
24#include <ignition/math/Plane.hh>
25#include <ignition/math/Pose3.hh>
26#include <ignition/math/Vector2.hh>
27#include <ignition/math/Vector3.hh>
28
31#include "gazebo/util/system.hh"
32
34GZ_SINGLETON_DECLARE(GZ_COMMON_VISIBLE, gazebo, common, MeshManager)
35
36namespace gazebo
37{
38 namespace common
39 {
40 // Forward declarations.
41 class MeshManagerPrivate;
42 class Mesh;
43 class SubMesh;
44
47
50 class GZ_COMMON_VISIBLE MeshManager : public SingletonT<MeshManager>
51 {
53 private: MeshManager();
54
58 private: virtual ~MeshManager();
59
63 public: const Mesh *Load(const std::string &_filename);
64
71 public: void Export(const Mesh *_mesh, const std::string &_filename,
72 const std::string &_extension, bool _exportTextures = false);
73
76 public: bool IsValidFilename(const std::string &_filename);
77
83 public: void GetMeshAABB(const Mesh *_mesh,
84 ignition::math::Vector3d &_center,
85 ignition::math::Vector3d &_min_xyz,
86 ignition::math::Vector3d &_max_xyz);
87
91 public: void GenSphericalTexCoord(const Mesh *_mesh,
92 const ignition::math::Vector3d &_center);
93
99 public: void AddMesh(Mesh *_mesh);
100
104 public: const Mesh *GetMesh(const std::string &_name) const;
105
108 public: bool HasMesh(const std::string &_name) const;
109
115 public: void CreateSphere(const std::string &_name, float _radius,
116 int _rings, int _segments);
117
122 public: void CreateBox(const std::string &_name,
123 const ignition::math::Vector3d &_sides,
124 const ignition::math::Vector2d &_uvCoords);
125
138 public: void CreateExtrudedPolyline(const std::string &_name,
139 const std::vector<std::vector<ignition::math::Vector2d> >
140 &_vertices, double _height);
141
148 public: void CreateCylinder(const std::string &_name,
149 float _radius,
150 float _height,
151 int _rings,
152 int _segments);
153
160 public: void CreateCone(const std::string &_name,
161 float _radius,
162 float _height,
163 int _rings,
164 int _segments);
165
177 public: void CreateTube(const std::string &_name,
178 float _innerRadius,
179 float _outterRadius,
180 float _height,
181 int _rings,
182 int _segments,
183 double _arc = 2.0 * M_PI);
184
190 public: void CreatePlane(const std::string &_name,
191 const ignition::math::Planed &_plane,
192 const ignition::math::Vector2d &_segments,
193 const ignition::math::Vector2d &_uvTile);
194
202 public: void CreatePlane(const std::string &_name,
203 const ignition::math::Vector3d &_normal,
204 const double _d,
205 const ignition::math::Vector2d &_size,
206 const ignition::math::Vector2d &_segments,
207 const ignition::math::Vector2d &_uvTile);
208
216 private: void Tesselate2DMesh(SubMesh *_sm,
217 int _meshWidth,
218 int _meshHeight,
219 bool _doubleSided);
220
224 public: void CreateCamera(const std::string &_name, float _scale);
225
226#ifdef HAVE_GTS
233 public: void CreateBoolean(const std::string &_name, const Mesh *_m1,
234 const Mesh *_m2, const int _operation,
235 const ignition::math::Pose3d &_offset = ignition::math::Pose3d::Zero);
236#endif
237
245 private: static void ConvertPolylinesToVerticesAndEdges(
246 const std::vector<std::vector<ignition::math::Vector2d> >
247 &_polys,
248 double _tol,
249 std::vector<ignition::math::Vector2d> &_vertices,
250 std::vector<ignition::math::Vector2i> &_edges);
251
259 private: static size_t AddUniquePointToVerticesTable(
260 std::vector<ignition::math::Vector2d> &_vertices,
261 const ignition::math::Vector2d &_p,
262 double _tol);
263
265 private: friend class SingletonT<MeshManager>;
266
269 private: MeshManagerPrivate *dataPtr;
270 };
272 }
273}
274#endif
common
Definition FuelModelDatabase.hh:42
gazebo
Definition MeshManager.hh:34
common
Definition MeshManager.hh:34
Singleton template class.
Definition SingletonT.hh:34
Maintains and manages all meshes.
Definition MeshManager.hh:51
void CreateExtrudedPolyline(const std::string &_name, const std::vector< std::vector< ignition::math::Vector2d > > &_vertices, double _height)
Create an extruded mesh from polylines.
void CreateSphere(const std::string &_name, float _radius, int _rings, int _segments)
Create a sphere mesh.
void CreateCamera(const std::string &_name, float _scale)
Create a Camera mesh.
void CreatePlane(const std::string &_name, const ignition::math::Planed &_plane, const ignition::math::Vector2d &_segments, const ignition::math::Vector2d &_uvTile)
Create mesh for a plane.
void CreateCone(const std::string &_name, float _radius, float _height, int _rings, int _segments)
Create a cone mesh.
void AddMesh(Mesh *_mesh)
Add a mesh to the manager.
void CreatePlane(const std::string &_name, const ignition::math::Vector3d &_normal, const double _d, const ignition::math::Vector2d &_size, const ignition::math::Vector2d &_segments, const ignition::math::Vector2d &_uvTile)
Create mesh for a plane.
void Export(const Mesh *_mesh, const std::string &_filename, const std::string &_extension, bool _exportTextures=false)
Export a mesh to a file.
void CreateBox(const std::string &_name, const ignition::math::Vector3d &_sides, const ignition::math::Vector2d &_uvCoords)
Create a Box mesh.
void GetMeshAABB(const Mesh *_mesh, ignition::math::Vector3d &_center, ignition::math::Vector3d &_min_xyz, ignition::math::Vector3d &_max_xyz)
Get mesh aabb and center.
const Mesh * GetMesh(const std::string &_name) const
Get a mesh by name.
bool IsValidFilename(const std::string &_filename)
Checks a path extension against the list of valid extensions.
bool HasMesh(const std::string &_name) const
Return true if the mesh exists.
void CreateTube(const std::string &_name, float _innerRadius, float _outterRadius, float _height, int _rings, int _segments, double _arc=2.0 *M_PI)
Create a tube mesh.
void GenSphericalTexCoord(const Mesh *_mesh, const ignition::math::Vector3d &_center)
generate spherical texture coordinates
void CreateCylinder(const std::string &_name, float _radius, float _height, int _rings, int _segments)
Create a cylinder mesh.
const Mesh * Load(const std::string &_filename)
Load a mesh from a file.
A 3D mesh.
Definition Mesh.hh:43
A child mesh.
Definition Mesh.hh:215
#define GZ_SINGLETON_DECLARE(visibility, n1, n2, singletonType)
Helper to declare typed SingletonT.
Definition SingletonT.hh:61
Forward declarations for the common classes.
Definition Animation.hh:27