23#ifndef VCL_MESH_REQUIREMENTS_VERTEX_REQUIREMENTS_H
24#define VCL_MESH_REQUIREMENTS_VERTEX_REQUIREMENTS_H
26#include "../containers/vertex_container.h"
27#include "element_requirements.h"
29#include <vclib/concepts/mesh.h>
30#include <vclib/exceptions/mesh.h>
56template<MeshConcept MeshType>
62template<MeshConcept MeshType>
63bool isPerVertexAdjacentFacesAvailable(
const MeshType& m)
67 CompId::ADJACENT_FACES>(m);
70template<MeshConcept MeshType>
71bool enableIfPerVertexAdjacentFacesOptional(MeshType& m)
75 CompId::ADJACENT_FACES>(m);
78template<MeshConcept MeshType>
79bool isPerVertexAdjacentVerticesAvailable(
const MeshType& m)
83 CompId::ADJACENT_VERTICES>(m);
86template<MeshConcept MeshType>
87bool enableIfPerVertexAdjacentVerticesOptional(MeshType& m)
91 CompId::ADJACENT_VERTICES>(m);
94template<MeshConcept MeshType>
95bool isPerVertexColorAvailable(
const MeshType& m)
97 return isPerElementComponentAvailable<ElemId::VERTEX, CompId::COLOR>(m);
100template<MeshConcept MeshType>
101bool enableIfPerVertexColorOptional(MeshType& m)
103 return enableIfPerElementComponentOptional<ElemId::VERTEX, CompId::COLOR>(
107template<MeshConcept MeshType>
108bool isPerVertexMarkAvailable(
const MeshType& m)
110 return isPerElementComponentAvailable<ElemId::VERTEX, CompId::MARK>(m);
113template<MeshConcept MeshType>
114bool enableIfPerVertexMarkOptional(MeshType& m)
116 return enableIfPerElementComponentOptional<ElemId::VERTEX, CompId::MARK>(m);
119template<MeshConcept MeshType>
120bool isPerVertexNormalAvailable(
const MeshType& m)
122 return isPerElementComponentAvailable<ElemId::VERTEX, CompId::NORMAL>(m);
125template<MeshConcept MeshType>
126bool enableIfPerVertexNormalOptional(MeshType& m)
128 return enableIfPerElementComponentOptional<ElemId::VERTEX, CompId::NORMAL>(
132template<MeshConcept MeshType>
133bool isPerVertexPrincipalCurvatureAvailable(
const MeshType& m)
137 CompId::PRINCIPAL_CURVATURE>(m);
140template<MeshConcept MeshType>
141bool enableIfPerVertexPrincipalCurvatureOptional(MeshType& m)
145 CompId::PRINCIPAL_CURVATURE>(m);
148template<MeshConcept MeshType>
149bool isPerVertexQualityAvailable(
const MeshType& m)
151 return isPerElementComponentAvailable<ElemId::VERTEX, CompId::QUALITY>(m);
154template<MeshConcept MeshType>
155bool enableIfPerVertexQualityOptional(MeshType& m)
157 return enableIfPerElementComponentOptional<ElemId::VERTEX, CompId::QUALITY>(
161template<MeshConcept MeshType>
162bool isPerVertexTexCoordAvailable(
const MeshType& m)
164 return isPerElementComponentAvailable<ElemId::VERTEX, CompId::TEX_COORD>(m);
167template<MeshConcept MeshType>
168bool enableIfPerVertexTexCoordOptional(MeshType& m)
172 CompId::TEX_COORD>(m);
179template<MeshConcept MeshType>
180void requireVertexContainerCompactness(
const MeshType& m)
182 requireElementContainerCompactness<ElemId::VERTEX>(m);
185template<
typename MeshType>
186void requirePerVertexAdjacentFaces(
const MeshType& m)
187 requires HasPerVertexAdjacentFaces<MeshType>
189 requirePerElementComponent<ElemId::VERTEX, CompId::ADJACENT_FACES>(m);
192template<
typename MeshType>
193void requirePerVertexAdjacentVertices(
const MeshType& m)
194 requires HasPerVertexAdjacentVertices<MeshType>
196 requirePerElementComponent<ElemId::VERTEX, CompId::ADJACENT_VERTICES>(m);
199template<
typename MeshType>
200void requirePerVertexColor(
const MeshType& m)
201 requires HasPerVertexColor<MeshType>
203 requirePerElementComponent<ElemId::VERTEX, CompId::COLOR>(m);
206template<
typename MeshType>
207void requirePerVertexMark(
const MeshType& m)
requires HasPerVertexMark<MeshType>
209 requirePerElementComponent<ElemId::VERTEX, CompId::MARK>(m);
212template<
typename MeshType>
213void requirePerVertexNormal(
const MeshType& m)
214 requires HasPerVertexNormal<MeshType>
216 requirePerElementComponent<ElemId::VERTEX, CompId::NORMAL>(m);
219template<
typename MeshType>
220void requirePerVertexPrincipalCurvature(
const MeshType& m)
221 requires HasPerVertexPrincipalCurvature<MeshType>
223 requirePerElementComponent<ElemId::VERTEX, CompId::PRINCIPAL_CURVATURE>(m);
226template<
typename MeshType>
227void requirePerVertexQuality(
const MeshType& m)
228 requires HasPerVertexQuality<MeshType>
230 requirePerElementComponent<ElemId::VERTEX, CompId::QUALITY>(m);
233template<
typename MeshType>
234void requirePerVertexTexCoord(
const MeshType& m)
235 requires HasPerVertexTexCoord<MeshType>
237 requirePerElementComponent<ElemId::VERTEX, CompId::TEX_COORD>(m);
A class representing a line segment in n-dimensional space. The class is parameterized by a PointConc...
Definition segment.h:43
bool isPerElementComponentAvailable(const MeshType &m)
Returns true if the given component is available in the given element of the input mesh m.
Definition element_requirements.h:82
bool enableIfPerElementComponentOptional(MeshType &m)
Makes available the given Component in the given Element of the input mesh m, and returns true if it ...
Definition element_requirements.h:120
bool isVertexContainerCompact(const MeshType &m)
Returns true if the given mesh has its Vertex Container compact.
Definition vertex_requirements.h:57