Hide menu
Loading...
Searching...
No Matches
cadex::ModelData::IndexedTriangleSet Class Reference

Defines a polygonal shape consisting of triangles. More...

#include <cadex/ModelData/IndexedTriangleSet.hxx>

Inheritance diagram for cadex::ModelData::IndexedTriangleSet:
cadex::ModelData::MeshShape cadex::BaseObject

Public Types

typedef Geom::Point VertexType
 
typedef Geom::Vector NormalType
 
typedef Materials::Color ColorType
 
typedef std::vector< VertexTypeVertexVecType
 
typedef std::vector< NormalTypeNormalVecType
 
typedef std::vector< ColorType > ColorVecType
 
typedef std::vector< int > IndexVecType
 
- Public Types inherited from cadex::BaseObject
typedef std::shared_ptr< internal::BaseObjectImpl > ImplType
 

Public Member Functions

 IndexedTriangleSet ()
 Constructor.
 
bool AddTriangles (const VertexVecType &theVertices, const IndexVecType &theVertexIndices)
 Adds triangles.
 
bool AddTriangles (const VertexVecType &theVertices, const IndexVecType &theVertexIndices, const NormalVecType &theNormals, const IndexVecType &theNormalIndices)
 Adds triangles.
 
bool AddTriangles (const VertexVecType &theVertices, const IndexVecType &theVertexIndices, const NormalVecType &theNormals, const IndexVecType &theNormalIndices, const ColorVecType &theColors, const IndexVecType &theColorIndices)
 Adds triangles.
 
bool AddTriangles (const IndexedTriangleSet &theTriangleSet)
 Adds triangles from theTriangleSet.
 
IndexedTriangleSet WithColors (const ColorVecType &theColors, const IndexVecType &theColorIndices) const
 Returns a new IndexedTriangleSet. Vertices and Normals copies from the caller.
 
const VertexTypeVertex (int theIndex) const
 Returns a vertex.
 
size_t NumberOfVertices () const
 Returns a number of vertices.
 
bool HasNormals () const
 Returns true if the triangle set has explicitly defined normals.
 
const NormalTypeNormal (int theIndex) const
 Returns a normal.
 
size_t NumberOfNormals () const
 Returns a number of normals.
 
bool HasColors () const
 Returns true if the triangle set has explicitly defined colors.
 
const Materials::Color & Color (int theIndex) const
 Returns a color.
 
size_t NumberOfColors () const
 Returns a number of colors.
 
const VertexTypeTriangleVertex (size_t theTriangleIndex, size_t theVertexSlot) const
 Returns a vertex of a triangle.
 
int TriangleVertexIndex (size_t theTriangleIndex, size_t theVertexSlot) const
 Returns a vertex index in a triangle.
 
const NormalTypeTriangleVertexNormal (size_t theTriangleIndex, size_t theVertexSlot) const
 Returns a normal at vertex in a triangle.
 
int TriangleVertexNormalIndex (size_t theTriangleIndex, size_t theVertexSlot) const
 Returns a normal index for vertex in a triangle.
 
NormalType TriangleNormal (size_t theTriangleIndex) const
 Returns a normal of a triangle.
 
const Materials::Color & TriangleVertexColor (size_t theTriangleIndex, size_t theVertexSlot) const
 Returns a color at vertex in a triangle.
 
int TriangleVertexColorIndex (size_t theTriangleIndex, size_t theVertexSlot) const
 Returns a color index for vertex in a triangle.
 
size_t NumberOfTriangles () const
 Returns a number of triangles.
 
- Public Member Functions inherited from cadex::BaseObject
size_t Id () const
 Return unique identifier of public object.
 
internal::BaseObjectImpl * Impl () const
 
bool IsNull () const
 
 operator bool () const
 
template<typename T >
bool IsOfType () const
 
template<typename T >
T * Impl () const
 Reserved for internal use.
 

Static Public Member Functions

static bool CompareType (const BaseObject &theObject)
 
- Static Public Member Functions inherited from cadex::ModelData::MeshShape
static bool CompareType (const BaseObject &theObject)
 Check the type of object. Returns true if the specified object is this class type.
 

Additional Inherited Members

- Protected Member Functions inherited from cadex::ModelData::MeshShape
 MeshShape (const ImplType &theImpl)
 
- Protected Member Functions inherited from cadex::BaseObject
 BaseObject (const ImplType &theImpl)
 

Detailed Description

Defines a polygonal shape consisting of triangles.

Triangles are defined via array of unique vertices and triplets of indices in this array. This is to describe connectivity and to reduce data required to describe a triangle set.

The triangle set can optionally contain normals and/or colors which are defined per each vertex. Normals and colors also use indexing in the same manner as vertices.

A triangle set can be constructed using AddTriangles(), supplying unique vertices and indices describing triangles, for instance:

//vertices
IndexedTriangleSet::VertexVecType aVertices = {
{ 0., 0., 0. },
{ 1., 0., 0. },
{ 1., 1., 0. },
{ 0., 1., 1. }
};
//triangles (vertex indices)
IndexedTriangleSet::IndexVecType aVertexIndices = {
0, 1, 2,
0, 2, 3
};
//normals
IndexedTriangleSet::NormalVecType aNormals = {
{ 0., 0., 1. }, //to triangle #0: {0, 1, 2}
{ 1., -1., 1. }, //to triangle #1: {0, 2, 3}
};
//normal indices
IndexedTriangleSet::IndexVecType aNormalIndices = {
0, 0, 0,
1, 1, 1
};
ModelData::IndexedTriangleSet aTriangleSet;
aTriangleSet.AddTriangles (aVertices, aVertexIndices, aNormals, aNormalIndices);

The user must ensure data consistency so that the number of added normals and/or colors is equal to number of added vertices. Otherwise, triangles won't be added.

Data can be queried using the rank number of triangle and a vertex slot (0 to 2), for instance:

size_t n = aTriangleSet.NumberOfTriangles();
for (size_t i = 0; i < n; ++i) {
cout << "Triangle " << i << ":" << endl;
for (int j = 0; j < 3; ++j) {
const auto& aVertex = aTriangleSet.TriangleVertex (i, j);
if (aTriangleSet.HasNormals()) {
const auto& aNormal = aTriangleSet.TriangleVertexNormal (i, j);
}
if (aTriangleSet.HasColors()) {
const auto& aColor = aTriangleSet.TriangleVertexColor (i, j);
}
}
}

Coordinate and normal indices into respective arrays of unique values can be queried using TriangleVertexIndex() and TriangleVertexNormalIndex() respectively.

Examples
exploring/mesh/Program.cs, exploring/mesh/main.cxx, helpers/shape_processor.cs, helpers/shape_processor.hxx, machining/dfm_analyzer/Program.cs, machining/dfm_analyzer/main.cxx, machining/feature_recognizer/Program.cs, machining/feature_recognizer/main.cxx, meshing/mesh_generation/Program.cs, meshing/mesh_generation/main.cxx, molding/dfm_analyzer/Program.cs, molding/dfm_analyzer/main.cxx, molding/feature_recognizer/Program.cs, molding/feature_recognizer/main.cxx, sheet_metal/dfm_analyzer/Program.cs, sheet_metal/dfm_analyzer/main.cxx, sheet_metal/feature_recognizer/Program.cs, and sheet_metal/feature_recognizer/main.cxx.

Constructor & Destructor Documentation

◆ IndexedTriangleSet()

cadex::ModelData::IndexedTriangleSet::IndexedTriangleSet ( )
inline

Constructor.

Creates not initialized object, for which IsNull() returns true.

Member Function Documentation

◆ AddTriangles() [1/3]

bool cadex::ModelData::IndexedTriangleSet::AddTriangles ( const VertexVecType & theVertices,
const IndexVecType & theVertexIndices )

Adds triangles.

The number of values ​​in theVertexIndices must be a multiple of three, since each triplet defines a triangle.

Returns true if the triangles were successfully added and false otherwise.

◆ AddTriangles() [2/3]

bool cadex::ModelData::IndexedTriangleSet::AddTriangles ( const VertexVecType & theVertices,
const IndexVecType & theVertexIndices,
const NormalVecType & theNormals,
const IndexVecType & theNormalIndices )

Adds triangles.

The number of values ​​in theVertexIndices and theNormalIndices must be the same and a multiple of three, since each triple defines a vertex and vertex normal of a triangle, respectively.

Returns true if the triangles were successfully added and false otherwise.

◆ AddTriangles() [3/3]

bool cadex::ModelData::IndexedTriangleSet::AddTriangles ( const VertexVecType & theVertices,
const IndexVecType & theVertexIndices,
const NormalVecType & theNormals,
const IndexVecType & theNormalIndices,
const ColorVecType & theColors,
const IndexVecType & theColorIndices )

Adds triangles.

The number of values ​​in theVertexIndices, theNormalIndices and theColorIndices should be the same and a multiple of three, since each triple defines a vertex, vertex normal and vertex color of a triangle, respectively. However, if there is no need to add normals, then theNormals and theNormalIndices can be empty.

Returns true if the triangles were successfully added and false otherwise.

◆ Color()

const Materials::Color & cadex::ModelData::IndexedTriangleSet::Color ( int theIndex) const

Returns a color.

theIndex must be in the range [0, NumberOfColors()-1]. Otherwise the result is undefined.

◆ HasColors()

bool cadex::ModelData::IndexedTriangleSet::HasColors ( ) const

Returns true if the triangle set has explicitly defined colors.

See also
NumberOfColors().

◆ HasNormals()

bool cadex::ModelData::IndexedTriangleSet::HasNormals ( ) const

Returns true if the triangle set has explicitly defined normals.

See also
NumberOfNormals().
Examples
exploring/mesh/Program.cs, and exploring/mesh/main.cxx.

◆ Normal()

const IndexedTriangleSet::NormalType & cadex::ModelData::IndexedTriangleSet::Normal ( int theIndex) const

Returns a normal.

theIndex must be in the range [0, NumberOfNormals()-1]. Otherwise the result is undefined.

◆ TriangleNormal()

IndexedTriangleSet::NormalType cadex::ModelData::IndexedTriangleSet::TriangleNormal ( size_t theTriangleIndex) const

Returns a normal of a triangle.

theTriangleIndex must be in the range [0, NumberOfTriangles()-1]. Otherwise the result is undefined.

The normal is calculated on the fly based on the vertices of the triangle.

In case of a degenerate triangle the zero vector will be returned.

◆ TriangleVertex()

const IndexedTriangleSet::VertexType & cadex::ModelData::IndexedTriangleSet::TriangleVertex ( size_t theTriangleIndex,
size_t theVertexSlot ) const

Returns a vertex of a triangle.

theTriangleIndex must be in the range [0, NumberOfTriangles()-1]. Otherwise the result is undefined. theVertexSlot must be in the range [0, 2]. Otherwise the result is undefined.

See also
TriangleVertexIndex().
Examples
exploring/mesh/Program.cs, exploring/mesh/main.cxx, meshing/mesh_generation/Program.cs, and meshing/mesh_generation/main.cxx.

◆ TriangleVertexColor()

const Materials::Color & cadex::ModelData::IndexedTriangleSet::TriangleVertexColor ( size_t theTriangleIndex,
size_t theVertexSlot ) const

Returns a color at vertex in a triangle.

theTriangleIndex must be in the range [0, NumberOfTriangles()-1]. Otherwise the result is undefined. theVertexSlot must be in the range [0, 2]. Otherwise the result is undefined.

See also
TriangleVertexColorIndex().

◆ TriangleVertexColorIndex()

int cadex::ModelData::IndexedTriangleSet::TriangleVertexColorIndex ( size_t theTriangleIndex,
size_t theVertexSlot ) const

Returns a color index for vertex in a triangle.

theTriangleIndex must be in the range [0, NumberOfTriangles()-1]. theVertexSlot must be in the range [0, 2].

If the color index was not found -1 will be returned.

See also
TriangleVertexColor().

◆ TriangleVertexIndex()

int cadex::ModelData::IndexedTriangleSet::TriangleVertexIndex ( size_t theTriangleIndex,
size_t theVertexSlot ) const

Returns a vertex index in a triangle.

theTriangleIndex must be in the range [0, NumberOfTriangles()-1]. theVertexSlot must be in the range [0, 2].

If the vertex index was not found -1 will be returned.

See also
TriangleVertex().
Examples
exploring/mesh/Program.cs, exploring/mesh/main.cxx, meshing/mesh_generation/Program.cs, and meshing/mesh_generation/main.cxx.

◆ TriangleVertexNormal()

const IndexedTriangleSet::NormalType & cadex::ModelData::IndexedTriangleSet::TriangleVertexNormal ( size_t theTriangleIndex,
size_t theVertexSlot ) const

Returns a normal at vertex in a triangle.

theTriangleIndex must be in the range [0, NumberOfTriangles()-1]. Otherwise the result is undefined. theVertexSlot must be in the range [0, 2]. Otherwise the result is undefined.

See also
TriangleVertexNormalIndex().
Examples
exploring/mesh/Program.cs, and exploring/mesh/main.cxx.

◆ TriangleVertexNormalIndex()

int cadex::ModelData::IndexedTriangleSet::TriangleVertexNormalIndex ( size_t theTriangleIndex,
size_t theVertexSlot ) const

Returns a normal index for vertex in a triangle.

theTriangleIndex must be in the range [0, NumberOfTriangles()-1]. theVertexSlot must be in the range [0, 2].

If the normal index was not found -1 will be returned.

See also
TriangleVertexNormal().

◆ Vertex()

const IndexedTriangleSet::VertexType & cadex::ModelData::IndexedTriangleSet::Vertex ( int theIndex) const

Returns a vertex.

theIndex must be in the range [0, NumberOfVertices()-1]. Otherwise the result is undefined.

◆ WithColors()

IndexedTriangleSet cadex::ModelData::IndexedTriangleSet::WithColors ( const ColorVecType & theColors,
const IndexVecType & theColorIndices ) const

Returns a new IndexedTriangleSet. Vertices and Normals copies from the caller.

The size of theColorIndices must be equal to the size of theVertexIndices (NumberOfTriangles() * 3). Otherwise an empty IndexedTriangleSet will be returned.