Gazebo Common

API Reference

4.7.0
gz/common/SubMesh.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 IGNITION_COMMON_SUBMESH_HH_
18 #define IGNITION_COMMON_SUBMESH_HH_
19 
20 #include <memory>
21 #include <string>
22 #include <vector>
23 
24 #include <gz/math/Vector3.hh>
25 #include <gz/math/Vector2.hh>
26 
27 #include <ignition/utils/ImplPtr.hh>
28 
29 #include <gz/common/config.hh>
31 #include <gz/common/graphics/Export.hh>
33 
34 namespace ignition
35 {
36  namespace common
37  {
38  class Material;
39  class NodeAssignment;
40 
42  class IGNITION_COMMON_GRAPHICS_VISIBLE SubMesh
43  {
45  public: enum PrimitiveType
46  {
63  TRISTRIPS
64  };
65 
67  public: SubMesh();
68 
71  public: explicit SubMesh(const std::string &_name);
72 
74  public: virtual ~SubMesh();
75 
78  public: void SetName(const std::string &_name);
79 
82  public: std::string Name() const;
83 
86  public: void SetPrimitiveType(PrimitiveType _type);
87 
90  public: PrimitiveType SubMeshPrimitiveType() const;
91 
94  public: void AddIndex(const unsigned int _index);
95 
98  public: void AddVertex(const ignition::math::Vector3d &_v);
99 
104  public: void AddVertex(const double _x, const double _y, const double _z);
105 
108  public: void AddNormal(const ignition::math::Vector3d &_n);
109 
114  public: void AddNormal(const double _x, const double _y, const double _z);
115 
123  public: void AddTexCoord(const double _u, const double _v);
124 
131  public: void AddTexCoord(const ignition::math::Vector2d &_uv);
132 
137  public: void AddTexCoordBySet(double _u, double _v,
138  unsigned int _setIndex);
139 
144  public: void AddTexCoordBySet(const ignition::math::Vector2d &_uv,
145  unsigned int _setIndex);
146 
151  public: void AddNodeAssignment(const unsigned int _vertex,
152  const unsigned int _node,
153  const float _weight);
159  public: ignition::math::Vector3d Vertex(const unsigned int _index) const;
160 
164  public: void SetVertex(const unsigned int _index,
165  const ignition::math::Vector3d &_v);
166 
172  public: ignition::math::Vector3d Normal(const unsigned int _index) const;
173 
177  public: void SetNormal(const unsigned int _index,
178  const ignition::math::Vector3d &_n);
179 
185  public: ignition::math::Vector2d TexCoord(
186  const unsigned int _index) const;
187 
195  public: ignition::math::Vector2d TexCoordBySet(
196  unsigned int _index,
197  unsigned int _setIndex) const;
198 
205  public: void SetTexCoord(const unsigned int _index,
206  const ignition::math::Vector2d &_uv);
207 
212  public: void SetTexCoordBySet(unsigned int _index,
213  const ignition::math::Vector2d &_uv,
214  unsigned int _setIdex);
215 
219  public: int Index(const unsigned int _index) const;
220 
224  public: void SetIndex(const unsigned int _index,
225  const unsigned int _i);
226 
233  public: NodeAssignment NodeAssignmentByIndex(
234  const unsigned int _index) const;
235 
238  public: ignition::math::Vector3d Max() const;
239 
242  public: ignition::math::Vector3d Min() const;
243 
246  public: unsigned int VertexCount() const;
247 
250  public: unsigned int NormalCount() const;
251 
254  public: unsigned int IndexCount() const;
255 
263  public: unsigned int TexCoordCount() const;
264 
269  public: unsigned int TexCoordCountBySet(unsigned int _setIndex) const;
270 
273  public: unsigned int TexCoordSetCount() const;
274 
277  public: unsigned int NodeAssignmentsCount() const;
278 
281  public: unsigned int MaxIndex() const;
282 
286  public: void SetMaterialIndex(const unsigned int _index);
287 
290  public: unsigned int MaterialIndex() const;
291 
295  public: bool HasVertex(const ignition::math::Vector3d &_v) const;
296 
302  public: bool HasVertex(const unsigned int _index) const;
303 
309  public: bool HasNormal(const unsigned int _index) const;
310 
321  public: bool HasTexCoord(const unsigned int _index) const;
322 
329  public: bool HasTexCoordBySet(unsigned int _index, unsigned int _setIndex)
330  const;
331 
337  public: bool HasNodeAssignment(const unsigned int _index) const;
338 
342  public: int IndexOfVertex(const ignition::math::Vector3d &_v) const;
343 
347  public: void FillArrays(double **_vertArr, int **_indexndArr) const;
348 
350  public: void RecalculateNormals();
351 
355  public: void GenSphericalTexCoord(
356  const ignition::math::Vector3d &_center);
357 
362  public: void GenSphericalTexCoordBySet(
363  const ignition::math::Vector3d &_center,
364  unsigned int _setIndex);
365 
368  public: void Scale(const ignition::math::Vector3d &_factor);
369 
372  public: void Scale(const double &_factor);
373 
377  public: void Center(const ignition::math::Vector3d &_center =
379 
382  public: void Translate(const ignition::math::Vector3d &_vec);
383 
395  public: double Volume() const;
396 
398  IGN_UTILS_IMPL_PTR(dataPtr)
399  };
400 
403  class IGNITION_COMMON_GRAPHICS_VISIBLE NodeAssignment
404  {
406  public: NodeAssignment();
407 
409  public: unsigned int vertexIndex;
410 
412  public: unsigned int nodeIndex;
413 
416  public: float weight;
417  };
418  }
419 }
420 
421 #endif
@ TRIFANS
Connected triangle in fan shape. 3 vertices for the first triangle and every vertex specified afterwa...
Definition: gz/common/SubMesh.hh:59
@ LINESTRIPS
Connected lines. 2 vertices for the first line and every vertex specified afterwards creates a new li...
Definition: gz/common/SubMesh.hh:53
Forward declarations for the common classes.
STL class.
Vertex to node weighted assignement for skeleton animation visualization.
Definition: gz/common/SubMesh.hh:403
@ POINTS
Point. 1 vertex per point.
Definition: gz/common/SubMesh.hh:48
float weight
The weight (between 0 and 1). This determines how much the node (bone) affects the vertex in animatio...
Definition: gz/common/SubMesh.hh:416
@ TRIANGLES
Triangle type. 3 vertices per triangle.
Definition: gz/common/SubMesh.hh:55
static const Vector3 Zero
unsigned int nodeIndex
Node (or bone) index.
Definition: gz/common/SubMesh.hh:412
@ LINES
Line. 2 vertices per line.
Definition: gz/common/SubMesh.hh:50
PrimitiveType
An enumeration of the geometric mesh primitives.
Definition: gz/common/SubMesh.hh:45
unsigned int vertexIndex
Index of the vertex.
Definition: gz/common/SubMesh.hh:409
A child mesh.
Definition: gz/common/SubMesh.hh:42