Ignition Common

API Reference

3.14.0
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 <ignition/math/Vector3.hh>
25 #include <ignition/math/Vector2.hh>
26 
28 #include <ignition/common/graphics/Export.hh>
30 
31 namespace ignition
32 {
33  namespace common
34  {
35  class SubMeshPrivate;
36  class Material;
37  class NodeAssignment;
38 
40  class IGNITION_COMMON_GRAPHICS_VISIBLE SubMesh
41  {
43  public: enum PrimitiveType
44  {
61  TRISTRIPS
62  };
63 
65  public: SubMesh();
66 
69  public: explicit SubMesh(const std::string &_name);
70 
73  public: SubMesh(const SubMesh &_other);
74 
76  public: virtual ~SubMesh();
77 
80  public: void SetName(const std::string &_name);
81 
84  public: std::string Name() const;
85 
88  public: void SetPrimitiveType(PrimitiveType _type);
89 
93 
96  public: void AddIndex(const unsigned int _index);
97 
100  public: void AddVertex(const ignition::math::Vector3d &_v);
101 
106  public: void AddVertex(const double _x, const double _y, const double _z);
107 
110  public: void AddNormal(const ignition::math::Vector3d &_n);
111 
116  public: void AddNormal(const double _x, const double _y, const double _z);
117 
125  public: void AddTexCoord(const double _u, const double _v);
126 
133  public: void AddTexCoord(const ignition::math::Vector2d &_uv);
134 
139  public: void AddTexCoordBySet(double _u, double _v,
140  unsigned int _setIndex);
141 
147  unsigned int _setIndex);
148 
153  public: void AddNodeAssignment(const unsigned int _vertex,
154  const unsigned int _node,
155  const float _weight);
161  public: ignition::math::Vector3d Vertex(const unsigned int _index) const;
162 
166  public: void SetVertex(const unsigned int _index,
167  const ignition::math::Vector3d &_v);
168 
174  public: ignition::math::Vector3d Normal(const unsigned int _index) const;
175 
179  public: void SetNormal(const unsigned int _index,
180  const ignition::math::Vector3d &_n);
181 
188  const unsigned int _index) const;
189 
198  unsigned int _index,
199  unsigned int _setIndex) const;
200 
207  public: void SetTexCoord(const unsigned int _index,
208  const ignition::math::Vector2d &_uv);
209 
214  public: void SetTexCoordBySet(unsigned int _index,
215  const ignition::math::Vector2d &_uv,
216  unsigned int _setIdex);
217 
221  public: int Index(const unsigned int _index) const;
222 
226  public: void SetIndex(const unsigned int _index,
227  const unsigned int _i);
228 
236  const unsigned int _index) const;
237 
240  public: ignition::math::Vector3d Max() const;
241 
244  public: ignition::math::Vector3d Min() const;
245 
248  public: unsigned int VertexCount() const;
249 
252  public: unsigned int NormalCount() const;
253 
256  public: unsigned int IndexCount() const;
257 
265  public: unsigned int TexCoordCount() const;
266 
271  public: unsigned int TexCoordCountBySet(unsigned int _setIndex) const;
272 
275  public: unsigned int TexCoordSetCount() const;
276 
279  public: unsigned int NodeAssignmentsCount() const;
280 
283  public: unsigned int MaxIndex() const;
284 
288  public: void SetMaterialIndex(const unsigned int _index);
289 
292  public: unsigned int MaterialIndex() const;
293 
297  public: bool HasVertex(const ignition::math::Vector3d &_v) const;
298 
304  public: bool HasVertex(const unsigned int _index) const;
305 
311  public: bool HasNormal(const unsigned int _index) const;
312 
323  public: bool HasTexCoord(const unsigned int _index) const;
324 
331  public: bool HasTexCoordBySet(unsigned int _index, unsigned int _setIndex)
332  const;
333 
339  public: bool HasNodeAssignment(const unsigned int _index) const;
340 
344  public: int IndexOfVertex(const ignition::math::Vector3d &_v) const;
345 
349  public: void FillArrays(double **_vertArr, int **_indexndArr) const;
350 
352  public: void RecalculateNormals();
353 
357  public: void GenSphericalTexCoord(
358  const ignition::math::Vector3d &_center);
359 
365  const ignition::math::Vector3d &_center,
366  unsigned int _setIndex);
367 
370  public: void Scale(const ignition::math::Vector3d &_factor);
371 
374  public: void Scale(const double &_factor);
375 
379  public: void Center(const ignition::math::Vector3d &_center =
381 
384  public: void Translate(const ignition::math::Vector3d &_vec);
385 
397  public: double Volume() const;
398 
401  private: std::unique_ptr<SubMeshPrivate> dataPtr;
403  };
404 
407  class IGNITION_COMMON_GRAPHICS_VISIBLE NodeAssignment
408  {
410  public: NodeAssignment();
411 
413  public: unsigned int vertexIndex;
414 
416  public: unsigned int nodeIndex;
417 
420  public: float weight;
421  };
422  }
423 }
424 
425 #endif
#define IGN_COMMON_WARN_IGNORE__DLL_INTERFACE_MISSING
Microsoft Visual Studio does not automatically export the interface information for member variables ...
Definition: SuppressWarning.hh:64
#define IGN_COMMON_WARN_RESUME__DLL_INTERFACE_MISSING
Definition: SuppressWarning.hh:67
Vertex to node weighted assignement for skeleton animation visualization.
Definition: SubMesh.hh:408
unsigned int nodeIndex
Node (or bone) index.
Definition: SubMesh.hh:416
float weight
The weight (between 0 and 1). This determines how much the node (bone) affects the vertex in animatio...
Definition: SubMesh.hh:420
unsigned int vertexIndex
Index of the vertex.
Definition: SubMesh.hh:413
A child mesh.
Definition: SubMesh.hh:41
void SetPrimitiveType(PrimitiveType _type)
Set the primitive type.
void Scale(const ignition::math::Vector3d &_factor)
Scale all vertices by _factor.
void GenSphericalTexCoordBySet(const ignition::math::Vector3d &_center, unsigned int _setIndex)
Generate texture coordinates for a texture coordinate set using spherical projection from center.
bool HasTexCoordBySet(unsigned int _index, unsigned int _setIndex) const
Return true if this submesh has the texture coordinate with the given index in a texture coordinate s...
void Translate(const ignition::math::Vector3d &_vec)
Move all vertices by _vec.
void AddVertex(const ignition::math::Vector3d &_v)
Add a vertex to the mesh.
unsigned int IndexCount() const
Return the number of indices.
void SetMaterialIndex(const unsigned int _index)
Set the material index. Relates to the parent mesh material list.
void SetName(const std::string &_name)
Set the name of this mesh.
void Center(const ignition::math::Vector3d &_center=ignition::math::Vector3d::Zero)
Move the center of the submesh to the given coordinate. This will move all the vertices.
int IndexOfVertex(const ignition::math::Vector3d &_v) const
Get the index of the vertex.
PrimitiveType
An enumeration of the geometric mesh primitives.
Definition: SubMesh.hh:44
@ LINES
Line. 2 vertices per line.
Definition: SubMesh.hh:48
@ LINESTRIPS
Connected lines. 2 vertices for the first line and every vertex specified afterwards creates a new li...
Definition: SubMesh.hh:51
@ TRIFANS
Connected triangle in fan shape. 3 vertices for the first triangle and every vertex specified afterwa...
Definition: SubMesh.hh:57
@ TRIANGLES
Triangle type. 3 vertices per triangle.
Definition: SubMesh.hh:53
@ POINTS
Point. 1 vertex per point.
Definition: SubMesh.hh:46
ignition::math::Vector3d Vertex(const unsigned int _index) const
Get a vertex.
bool HasVertex(const ignition::math::Vector3d &_v) const
Return true if this submesh has the vertex.
std::string Name() const
Get the name of this mesh.
void Scale(const double &_factor)
Scale all vertices by _factor.
SubMesh(const SubMesh &_other)
Copy Constructor.
unsigned int TexCoordCountBySet(unsigned int _setIndex) const
Return the number of texture coordinates for a texture coordinate set.
void FillArrays(double **_vertArr, int **_indexndArr) const
Put all the data into flat arrays.
SubMesh(const std::string &_name)
Constructor.
void SetNormal(const unsigned int _index, const ignition::math::Vector3d &_n)
Set a normal.
void RecalculateNormals()
Recalculate all the normals.
double Volume() const
Compute the volume of this submesh. The primitive type must be TRIANGLES.
void AddNodeAssignment(const unsigned int _vertex, const unsigned int _node, const float _weight)
Add a vertex - skeleton node assignment.
unsigned int MaxIndex() const
Get the highest value in the index array.
void SetVertex(const unsigned int _index, const ignition::math::Vector3d &_v)
Set a vertex.
ignition::math::Vector3d Normal(const unsigned int _index) const
Get a normal.
void AddTexCoordBySet(const ignition::math::Vector2d &_uv, unsigned int _setIndex)
Add a texture coord to a texture coordinate set of the mesh.
void AddVertex(const double _x, const double _y, const double _z)
Add a vertex to the mesh.
void SetIndex(const unsigned int _index, const unsigned int _i)
Set an index.
ignition::math::Vector3d Min() const
Get the minimum X, Y, Z values from all the vertices.
unsigned int NormalCount() const
Return the number of normals.
ignition::math::Vector3d Max() const
Get the maximum X, Y, Z values from all the vertices.
int Index(const unsigned int _index) const
Get an index value from the index array.
ignition::math::Vector2d TexCoord(const unsigned int _index) const
Get a texture coordinate.
void AddTexCoordBySet(double _u, double _v, unsigned int _setIndex)
Add a texture coord to a texture coordinate set of the mesh.
virtual ~SubMesh()
Destructor.
unsigned int TexCoordCount() const
Return the number of texture coordinates. If multiple texture coordinate sets exist,...
bool HasNormal(const unsigned int _index) const
Return true if this submesh has the normal with the given index.
void AddIndex(const unsigned int _index)
Add an index to the mesh.
unsigned int TexCoordSetCount() const
Return the number of texture coordinate sets.
void SetTexCoord(const unsigned int _index, const ignition::math::Vector2d &_uv)
Set a texture coordinate. If multiple texture coordinate sets exist, this function sets the texture c...
void GenSphericalTexCoord(const ignition::math::Vector3d &_center)
Generate texture coordinates using spherical projection from center.
ignition::math::Vector2d TexCoordBySet(unsigned int _index, unsigned int _setIndex) const
Get a texture coordinate for a texture coordinate set.
unsigned int NodeAssignmentsCount() const
Get the number of vertex-skeleton node assignments.
void AddTexCoord(const double _u, const double _v)
Add a texture coord to the mesh. If multiple texture coordinate sets exist, this function adds it to ...
bool HasTexCoord(const unsigned int _index) const
Return true if this submesh has the texture coordinate with the given index. If multiple texture coor...
bool HasVertex(const unsigned int _index) const
Return true if this submesh has the vertex with the given index.
bool HasNodeAssignment(const unsigned int _index) const
Return true if this submesh has the node assignment with the given index.
void AddNormal(const ignition::math::Vector3d &_n)
Add a normal to the mesh.
unsigned int MaterialIndex() const
Get the material index.
void SetTexCoordBySet(unsigned int _index, const ignition::math::Vector2d &_uv, unsigned int _setIdex)
Set a texture coordinate for a texture coordinate set.
NodeAssignment NodeAssignmentByIndex(const unsigned int _index) const
Get a vertex - skeleton node assignment.
unsigned int VertexCount() const
Get the number of vertices.
void AddNormal(const double _x, const double _y, const double _z)
Add a normal to the mesh.
PrimitiveType SubMeshPrimitiveType() const
Get the primitive type.
void AddTexCoord(const ignition::math::Vector2d &_uv)
Add a texture coordinate to the mesh. If multiple texture coordinate sets exist, this function adds i...
static const Vector3 Zero
Forward declarations for the common classes.