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  public: SubMesh(const SubMesh *_mesh);
225 
227  public: virtual ~SubMesh();
228 
231  public: void SetName(const std::string &_n);
232 
235  public: std::string GetName() const;
236 
239  public: void SetPrimitiveType(PrimitiveType _type);
240 
243  public: PrimitiveType GetPrimitiveType() const;
244 
247  public: void CopyVertices(
248  const std::vector<ignition::math::Vector3d> &_verts);
249 
252  public: void CopyNormals(
253  const std::vector<ignition::math::Vector3d> &_norms);
254 
257  public: void SetVertexCount(unsigned int _count);
258 
261  public: void SetIndexCount(unsigned int _count);
262 
265  public: void SetNormalCount(unsigned int _count);
266 
269  public: void SetTexCoordCount(unsigned int _count);
270 
273  public: void AddIndex(unsigned int _i);
274 
277  public: void AddVertex(const ignition::math::Vector3d &_v);
278 
283  public: void AddVertex(double _x, double _y, double _z);
284 
287  public: void AddNormal(const ignition::math::Vector3d &_n);
288 
293  public: void AddNormal(double _x, double _y, double _z);
294 
298  public: void AddTexCoord(double _u, double _v);
299 
304  public: void AddNodeAssignment(unsigned int _vertex, unsigned int _node,
305  float _weight);
306 
310  public: ignition::math::Vector3d Vertex(unsigned int _i) const;
311 
315  public: void SetVertex(unsigned int _i,
316  const ignition::math::Vector3d &_v);
317 
321  public: ignition::math::Vector3d Normal(unsigned int _i) const;
322 
326  public: void SetNormal(unsigned int _i,
327  const ignition::math::Vector3d &_n);
328 
332  public: ignition::math::Vector2d TexCoord(unsigned int _i) const;
333 
336  public: NodeAssignment GetNodeAssignment(unsigned int _i) const;
337 
341  public: void SetTexCoord(unsigned int _i,
342  const ignition::math::Vector2d &_t);
343 
346  public: unsigned int GetIndex(unsigned int _i) const;
347 
350  public: ignition::math::Vector3d Max() const;
351 
354  public: ignition::math::Vector3d Min() const;
355 
357  public: unsigned int GetVertexCount() const;
358 
360  public: unsigned int GetNormalCount() const;
361 
363  public: unsigned int GetIndexCount() const;
364 
366  public: unsigned int GetTexCoordCount() const;
367 
369  public: unsigned int GetNodeAssignmentsCount() const;
370 
372  public: unsigned int GetMaxIndex() const;
373 
377  public: void SetMaterialIndex(unsigned int _index);
378 
380  public: unsigned int GetMaterialIndex() const;
381 
385  public: bool HasVertex(const ignition::math::Vector3d &_v) const;
386 
390  public: unsigned int GetVertexIndex(
391  const ignition::math::Vector3d &_v) const;
392 
396  public: void FillArrays(float **_vertArr, int **_indArr) const;
397 
399  public: void RecalculateNormals();
400 
404  public: void GenSphericalTexCoord(
405  const ignition::math::Vector3d &_center);
406 
409  public: void Scale(double _factor);
410 
414  public: void Center(const ignition::math::Vector3d &_center =
415  ignition::math::Vector3d::Zero);
416 
419  public: void Translate(const ignition::math::Vector3d &_vec);
420 
423  public: void SetScale(const ignition::math::Vector3d &_factor);
424 
426  private: std::vector<ignition::math::Vector3d> vertices;
427 
429  private: std::vector<ignition::math::Vector3d> normals;
430 
432  private: std::vector<ignition::math::Vector2d> texCoords;
433 
435  private: std::vector<unsigned int> indices;
436 
438  private: std::vector<NodeAssignment> nodeAssignments;
439 
441  private: PrimitiveType primitiveType;
442 
445  private: int materialIndex;
446 
448  private: std::string name;
449  };
451  }
452 }
453 
454 #endif
A 3D mesh.
Definition: Mesh.hh:42
PrimitiveType
An enumeration of the geometric mesh primitives.
Definition: Mesh.hh:217
A skeleton.
Definition: Skeleton.hh:52
Encapsulates description of a material.
Definition: common/Material.hh:34
A child mesh.
Definition: Mesh.hh:214
float weight
the weight (between 0 and 1)
Definition: Mesh.hh:210
unsigned int nodeIndex
node (or bone) index
Definition: Mesh.hh:207
Vertex to node weighted assignement for skeleton animation visualization.
Definition: Mesh.hh:198
Definition: Mesh.hh:217
unsigned int vertexIndex
index of the vertex
Definition: Mesh.hh:204