Mesh.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_MESH_HH_
18 #define _GAZEBO_MESH_HH_
19 
20 #include <vector>
21 #include <string>
22 
23 #include <ignition/math/Vector3.hh>
24 #include <ignition/math/Vector2.hh>
25 
27 #include "gazebo/util/system.hh"
28 
29 namespace gazebo
30 {
31  namespace common
32  {
33  class Material;
34  class SubMesh;
35  class Skeleton;
36 
39 
42  class GZ_COMMON_VISIBLE Mesh
43  {
45  public: Mesh();
46 
48  public: virtual ~Mesh();
49 
52  public: void SetPath(const std::string &_path);
53 
56  public: std::string GetPath() const;
57 
60  public: void SetName(const std::string &_n);
61 
64  public: std::string GetName() const;
65 
68  public: ignition::math::Vector3d Max() const;
69 
72  public: ignition::math::Vector3d Min() const;
73 
76  public: unsigned int GetVertexCount() const;
77 
80  public: unsigned int GetNormalCount() const;
81 
84  public: unsigned int GetIndexCount() const;
85 
88  public: unsigned int GetTexCoordCount() const;
89 
93  public: void AddSubMesh(SubMesh *_child);
94 
97  public: unsigned int GetSubMeshCount() const;
98 
102  public: int AddMaterial(Material *_mat);
103 
106  public: unsigned int GetMaterialCount() const;
107 
111  public: const Material *GetMaterial(int _index) const;
112 
116  public: int GetMaterialIndex(const Material *_mat) const;
117 
122  public: const SubMesh *GetSubMesh(unsigned int _i) const;
123 
127  public: const SubMesh *GetSubMesh(const std::string &_name) const;
128 
132  public: void FillArrays(float **_vertArr, int **_indArr) const;
133 
136  public: void RecalculateNormals();
137 
142  public: void GetAABB(ignition::math::Vector3d &_center,
143  ignition::math::Vector3d &_minXYZ,
144  ignition::math::Vector3d &_maxXYZ) const;
145 
149  public: void GenSphericalTexCoord(
150  const ignition::math::Vector3d &_center);
151 
154  public: Skeleton* GetSkeleton() const;
155 
157  public: void SetSkeleton(Skeleton *_skel);
158 
160  public: bool HasSkeleton() const;
161 
164  public: void Scale(double _factor);
165 
168  public: void SetScale(const ignition::math::Vector3d &_factor);
169 
173  public: void Center(const ignition::math::Vector3d &_center =
174  ignition::math::Vector3d::Zero);
175 
178  public: void Translate(const ignition::math::Vector3d &_vec);
179 
181  private: std::string name;
182 
184  private: std::string path;
185 
187  private: std::vector<SubMesh *> submeshes;
188 
190  private: std::vector<Material *> materials;
191 
193  private: Skeleton *skeleton;
194  };
195 
198  class GZ_COMMON_VISIBLE NodeAssignment
199  {
201  public: NodeAssignment();
202 
204  public: unsigned int vertexIndex;
205 
207  public: unsigned int nodeIndex;
208 
210  public: float weight;
211  };
212 
214  class GZ_COMMON_VISIBLE SubMesh
215  {
217  public: enum PrimitiveType {POINTS, LINES, LINESTRIPS, TRIANGLES,
218  TRIFANS, TRISTRIPS};
219 
221  public: SubMesh();
222 
224  // cppcheck-suppress noExplicitConstructor
225  public: SubMesh(const SubMesh *_mesh);
226 
228  public: virtual ~SubMesh();
229 
232  public: void SetName(const std::string &_n);
233 
236  public: std::string GetName() const;
237 
240  public: void SetPrimitiveType(PrimitiveType _type);
241 
245 
248  public: void CopyVertices(
249  const std::vector<ignition::math::Vector3d> &_verts);
250 
253  public: void CopyNormals(
254  const std::vector<ignition::math::Vector3d> &_norms);
255 
258  public: void SetVertexCount(unsigned int _count);
259 
262  public: void SetIndexCount(unsigned int _count);
263 
266  public: void SetNormalCount(unsigned int _count);
267 
270  public: void SetTexCoordCount(unsigned int _count);
271 
274  public: void AddIndex(unsigned int _i);
275 
278  public: void AddVertex(const ignition::math::Vector3d &_v);
279 
284  public: void AddVertex(double _x, double _y, double _z);
285 
288  public: void AddNormal(const ignition::math::Vector3d &_n);
289 
294  public: void AddNormal(double _x, double _y, double _z);
295 
299  public: void AddTexCoord(double _u, double _v);
300 
305  public: void AddNodeAssignment(unsigned int _vertex, unsigned int _node,
306  float _weight);
307 
311  public: ignition::math::Vector3d Vertex(unsigned int _i) const;
312 
316  public: void SetVertex(unsigned int _i,
317  const ignition::math::Vector3d &_v);
318 
322  public: ignition::math::Vector3d Normal(unsigned int _i) const;
323 
327  public: void SetNormal(unsigned int _i,
328  const ignition::math::Vector3d &_n);
329 
333  public: ignition::math::Vector2d TexCoord(unsigned int _i) const;
334 
337  public: NodeAssignment GetNodeAssignment(unsigned int _i) const;
338 
342  public: void SetTexCoord(unsigned int _i,
343  const ignition::math::Vector2d &_t);
344 
347  public: unsigned int GetIndex(unsigned int _i) const;
348 
351  public: ignition::math::Vector3d Max() const;
352 
355  public: ignition::math::Vector3d Min() const;
356 
358  public: unsigned int GetVertexCount() const;
359 
361  public: unsigned int GetNormalCount() const;
362 
364  public: unsigned int GetIndexCount() const;
365 
367  public: unsigned int GetTexCoordCount() const;
368 
370  public: unsigned int GetNodeAssignmentsCount() const;
371 
373  public: unsigned int GetMaxIndex() const;
374 
378  public: void SetMaterialIndex(unsigned int _index);
379 
381  public: unsigned int GetMaterialIndex() const;
382 
386  public: bool HasVertex(const ignition::math::Vector3d &_v) const;
387 
391  public: unsigned int GetVertexIndex(
392  const ignition::math::Vector3d &_v) const;
393 
397  public: void FillArrays(float **_vertArr, int **_indArr) const;
398 
400  public: void RecalculateNormals();
401 
405  public: void GenSphericalTexCoord(
406  const ignition::math::Vector3d &_center);
407 
410  public: void Scale(double _factor);
411 
415  public: void Center(const ignition::math::Vector3d &_center =
416  ignition::math::Vector3d::Zero);
417 
420  public: void Translate(const ignition::math::Vector3d &_vec);
421 
424  public: void SetScale(const ignition::math::Vector3d &_factor);
425 
427  private: std::vector<ignition::math::Vector3d> vertices;
428 
430  private: std::vector<ignition::math::Vector3d> normals;
431 
433  private: std::vector<ignition::math::Vector2d> texCoords;
434 
436  private: std::vector<unsigned int> indices;
437 
439  private: std::vector<NodeAssignment> nodeAssignments;
440 
442  private: PrimitiveType primitiveType;
443 
446  private: int materialIndex;
447 
449  private: std::string name;
450  };
452  }
453 }
454 
455 #endif
void FillArrays(float **_vertArr, int **_indArr) const
Put all the data into flat arrays.
unsigned int GetMaterialCount() const
Get the number of materials.
void Center(const ignition::math::Vector3d &_center=ignition::math::Vector3d::Zero)
Move the center of the submesh to the given coordinate.
unsigned int GetSubMeshCount() const
Get the number of children.
void SetTexCoordCount(unsigned int _count)
Resize the texture coordinate array.
@ TRIFANS
Definition: Mesh.hh:218
void Center(const ignition::math::Vector3d &_center=ignition::math::Vector3d::Zero)
Move the center of the mesh to the given coordinate.
void RecalculateNormals()
Recalculate all the normals.
void Scale(double _factor)
Scale all vertices by _factor.
void SetVertex(unsigned int _i, const ignition::math::Vector3d &_v)
Set a vertex.
Forward declarations for the common classes.
Definition: Animation.hh:27
unsigned int GetIndex(unsigned int _i) const
Get an index.
int AddMaterial(Material *_mat)
Add a material to the mesh.
ignition::math::Vector3d Min() const
Get the minimum X, Y, Z values.
@ POINTS
Definition: Mesh.hh:217
float weight
the weight (between 0 and 1)
Definition: Mesh.hh:210
ignition::math::Vector3d Min() const
Get the minimum X, Y, Z values from all the vertices.
@ LINESTRIPS
Definition: Mesh.hh:217
@ TRISTRIPS
Definition: Mesh.hh:218
SubMesh()
Constructor.
void SetMaterialIndex(unsigned int _index)
Set the material index.
common
Definition: FuelModelDatabase.hh:37
unsigned int GetMaterialIndex() const
Get the material index.
void AddNormal(double _x, double _y, double _z)
Add a normal to the mesh.
virtual ~SubMesh()
Destructor.
Vertex to node weighted assignement for skeleton animation visualization.
Definition: Mesh.hh:199
void SetVertexCount(unsigned int _count)
Resize the vertex array.
void GetAABB(ignition::math::Vector3d &_center, ignition::math::Vector3d &_minXYZ, ignition::math::Vector3d &_maxXYZ) const
Get AABB coordinate.
void AddSubMesh(SubMesh *_child)
Add a submesh mesh.
ignition::math::Vector2d TexCoord(unsigned int _i) const
Get a tex coord.
void CopyVertices(const std::vector< ignition::math::Vector3d > &_verts)
Copy vertices from a vector.
void AddNormal(const ignition::math::Vector3d &_n)
Add a normal to the mesh.
@ TRIANGLES
Definition: Mesh.hh:217
void SetPath(const std::string &_path)
Set the path which contains the mesh resource.
void Scale(double _factor)
Scale all vertices by _factor.
std::string GetName() const
Get the name of this mesh.
A child mesh.
Definition: Mesh.hh:215
void SetIndexCount(unsigned int _count)
Resize the index array.
const SubMesh * GetSubMesh(const std::string &_name) const
Get a child mesh by name.
void AddNodeAssignment(unsigned int _vertex, unsigned int _node, float _weight)
Add a vertex - skeleton node assignment.
void GenSphericalTexCoord(const ignition::math::Vector3d &_center)
Generate texture coordinates using spherical projection from center.
std::string GetPath() const
Get the path which contains the mesh resource.
void SetNormalCount(unsigned int _count)
Resize the normal array.
int GetMaterialIndex(const Material *_mat) const
Get the index of material.
ignition::math::Vector3d Normal(unsigned int _i) const
Get a normal.
bool HasSkeleton() const
Return true if mesh is attached to a skeleton.
ignition::math::Vector3d Max() const
Get the maximun X, Y, Z values.
unsigned int GetVertexIndex(const ignition::math::Vector3d &_v) const
Get the index of the vertex.
unsigned int GetNormalCount() const
Return the number of normals.
unsigned int GetMaxIndex() const
Get the highest index value.
void AddIndex(unsigned int _i)
Add an index to the mesh.
bool HasVertex(const ignition::math::Vector3d &_v) const
Return true if this submesh has the vertex.
PrimitiveType
An enumeration of the geometric mesh primitives.
Definition: Mesh.hh:217
unsigned int GetIndexCount() const
Return the number of indices.
void SetScale(const ignition::math::Vector3d &_factor)
Scale all vertices by the _factor vector.
void SetScale(const ignition::math::Vector3d &_factor)
Scale all vertices by the _factor vector.
A skeleton.
Definition: Skeleton.hh:53
void SetTexCoord(unsigned int _i, const ignition::math::Vector2d &_t)
Set a tex coord.
void AddVertex(const ignition::math::Vector3d &_v)
Add a vertex to the mesh.
const SubMesh * GetSubMesh(unsigned int _i) const
Get a child mesh.
void SetName(const std::string &_n)
Set the name of this mesh.
NodeAssignment GetNodeAssignment(unsigned int _i) const
Get a vertex - skeleton node assignment.
PrimitiveType GetPrimitiveType() const
Get the primitive type.
unsigned int GetVertexCount() const
Return the number of vertices.
@ LINES
Definition: Mesh.hh:217
unsigned int GetNodeAssignmentsCount() const
Return the number of vertex - skeleton node assignments.
Encapsulates description of a material.
Definition: common/Material.hh:35
void FillArrays(float **_vertArr, int **_indArr) const
Put all the data into flat arrays.
unsigned int nodeIndex
node (or bone) index
Definition: Mesh.hh:207
Skeleton * GetSkeleton() const
Get the skeleton to which this mesh is attached.
NodeAssignment()
Constructor.
unsigned int GetNormalCount() const
Return the number of normals.
unsigned int GetIndexCount() const
Return the number of indicies.
void SetNormal(unsigned int _i, const ignition::math::Vector3d &_n)
Set a normal.
void SetPrimitiveType(PrimitiveType _type)
Set the primitive type.
ignition::math::Vector3d Max() const
Get the maximum X, Y, Z values from all the vertices.
void CopyNormals(const std::vector< ignition::math::Vector3d > &_norms)
Copy normals from a vector.
A 3D mesh.
Definition: Mesh.hh:43
void Translate(const ignition::math::Vector3d &_vec)
Move all vertices in all submeshes by _vec.
void Translate(const ignition::math::Vector3d &_vec)
Move all vertices by _vec.
void SetName(const std::string &_n)
Set the name of this mesh.
ignition::math::Vector3d Vertex(unsigned int _i) const
Get a vertex.
unsigned int GetTexCoordCount() const
Return the number of texture coordinates.
void GenSphericalTexCoord(const ignition::math::Vector3d &_center)
Generate texture coordinates using spherical projection from center.
virtual ~Mesh()
Destructor.
void SetSkeleton(Skeleton *_skel)
Set the mesh skeleton.
SubMesh(const SubMesh *_mesh)
Copy Constructor.
unsigned int GetTexCoordCount() const
Return the number of texture coordinates.
unsigned int GetVertexCount() const
Return the number of vertices.
std::string GetName() const
Get the name of this mesh.
void RecalculateNormals()
Recalculate all the normals of each face defined by three indices.
Mesh()
Constructor.
void AddVertex(double _x, double _y, double _z)
Add a vertex to the mesh.
void AddTexCoord(double _u, double _v)
Add a texture coord to the mesh.
unsigned int vertexIndex
index of the vertex
Definition: Mesh.hh:204
const Material * GetMaterial(int _index) const
Get a material.