Gazebo Common

API Reference

5.6.0
gz/common/MeshManager.hh
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2016 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 GZ_COMMON_MESHMANAGER_HH_
18 #define GZ_COMMON_MESHMANAGER_HH_
19 
20 #include <map>
21 #include <utility>
22 #include <string>
23 #include <vector>
24 #include <memory>
25 
26 #include <gz/math/Plane.hh>
27 #include <gz/math/Matrix3.hh>
28 #include <gz/math/Matrix4.hh>
29 #include <gz/math/Vector2.hh>
30 #include <gz/math/Vector3.hh>
31 #include <gz/math/Pose3.hh>
32 
33 #include <gz/utils/ImplPtr.hh>
34 
36 #include <gz/common/SingletonT.hh>
37 #include <gz/common/graphics/Export.hh>
38 
39 namespace gz
40 {
41  namespace common
42  {
44  class Mesh;
45  class SubMesh;
46 
53  class GZ_COMMON_GRAPHICS_VISIBLE MeshManager
54  : public SingletonT<MeshManager>
55  {
57  private: MeshManager();
58 
62  private: virtual ~MeshManager();
63 
67  public: static MeshManager* Instance();
68 
74  public: const Mesh *Load(const std::string &_filename);
75 
82  public: void Export(const Mesh *_mesh, const std::string &_filename,
83  const std::string &_extension, bool _exportTextures = false);
84 
87  public: bool IsValidFilename(const std::string &_filename);
88 
94  public: void MeshAABB(const Mesh *_mesh,
95  gz::math::Vector3d &_center,
96  gz::math::Vector3d &_min_xyz,
97  gz::math::Vector3d &_max_xyz);
98 
102  public: void GenSphericalTexCoord(const Mesh *_mesh,
103  const gz::math::Vector3d &_center);
104 
110  public: void AddMesh(Mesh *_mesh);
111 
116  public: bool RemoveMesh(const std::string &_name);
117 
119  public: void RemoveAll();
120 
124  public: const gz::common::Mesh *MeshByName(
125  const std::string &_name) const;
126 
129  public: bool HasMesh(const std::string &_name) const;
130 
136  public: void CreateSphere(const std::string &_name, const float _radius,
137  const int _rings, const int _segments);
138 
143  public: void CreateBox(const std::string &_name,
144  const gz::math::Vector3d &_sides,
145  const gz::math::Vector2d &_uvCoords);
146 
159  public: void CreateExtrudedPolyline(const std::string &_name,
161  &_vertices, const double _height);
162 
169  public: void CreateCylinder(const std::string &_name,
170  const float _radius,
171  const float _height,
172  const int _rings,
173  const int _segments);
174 
180  public: void CreateEllipsoid(const std::string &_name,
181  const gz::math::Vector3d &_radii,
182  const unsigned int _rings,
183  const unsigned int _segments);
184 
191  public: void CreateCapsule(const std::string &_name,
192  const double radius,
193  const double length,
194  const unsigned int _rings,
195  const unsigned int _segments);
196 
203  public: void CreateCone(const std::string &_name,
204  const float _radius,
205  const float _height,
206  const int _rings,
207  const int _segments);
208 
220  public: void CreateTube(const std::string &_name,
221  const float _innerRadius,
222  const float _outterRadius,
223  const float _height,
224  const int _rings,
225  const int _segments,
226  const double _arc = 2.0 * GZ_PI);
227 
233  public: void CreatePlane(const std::string &_name,
234  const gz::math::Planed &_plane,
235  const gz::math::Vector2d &_segments,
236  const gz::math::Vector2d &_uvTile);
237 
245  public: void CreatePlane(const std::string &_name,
246  const gz::math::Vector3d &_normal,
247  const double _d,
248  const gz::math::Vector2d &_size,
249  const gz::math::Vector2d &_segments,
250  const gz::math::Vector2d &_uvTile);
251 
255  public: void SetAssimpEnvs();
256 
263  private: void Tesselate2DMesh(SubMesh *_sm,
264  const int _meshWidth,
265  const int _meshHeight,
266  const bool _doubleSided);
267 
271  public: void CreateCamera(const std::string &_name, const float _scale);
272 
279  public: void CreateBoolean(const std::string &_name, const Mesh *_m1,
280  const Mesh *_m2, const int _operation,
281  const gz::math::Pose3d &_offset = gz::math::Pose3d::Zero);
282 
293  public: static std::vector<SubMesh> ConvexDecomposition(
294  const common::SubMesh &_subMesh,
295  std::size_t _maxConvexHulls = 16u,
296  std::size_t _voxelResolution = 200000u);
297 
301  public: static std::unique_ptr<Mesh> MergeSubMeshes(
302  const common::Mesh &_mesh);
303 
311  private: static void ConvertPolylinesToVerticesAndEdges(
313  &_polys,
314  const double _tol,
317 
325  private: static size_t AddUniquePointToVerticesTable(
327  const gz::math::Vector2d &_p,
328  const double _tol);
329 
331  GZ_UTILS_UNIQUE_IMPL_PTR(dataPtr)
332 
333 
334  private: friend class SingletonT<MeshManager>;
335  };
336  }
337 }
338 #endif