Visual Computing Library
Loading...
Searching...
No Matches
vertex_requirements.h
1/*****************************************************************************
2 * VCLib *
3 * Visual Computing Library *
4 * *
5 * Copyright(C) 2021-2025 *
6 * Visual Computing Lab *
7 * ISTI - Italian National Research Council *
8 * *
9 * All rights reserved. *
10 * *
11 * This program is free software; you can redistribute it and/or modify *
12 * it under the terms of the Mozilla Public License Version 2.0 as published *
13 * by the Mozilla Foundation; either version 2 of the License, or *
14 * (at your option) any later version. *
15 * *
16 * This program is distributed in the hope that it will be useful, *
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
19 * Mozilla Public License Version 2.0 *
20 * (https://www.mozilla.org/en-US/MPL/2.0/) for more details. *
21 ****************************************************************************/
22
23#ifndef VCL_MESH_REQUIREMENTS_VERTEX_REQUIREMENTS_H
24#define VCL_MESH_REQUIREMENTS_VERTEX_REQUIREMENTS_H
25
26#include "../containers/vertex_container.h"
27#include "element_requirements.h"
28
29#include <vclib/concepts/mesh.h>
30#include <vclib/exceptions/mesh.h>
31
40namespace vcl {
41
42/*************************
43 * is/enableIf functions *
44 *************************/
45
56template<MeshConcept MeshType>
61
62template<MeshConcept MeshType>
63bool isPerVertexAdjacentFacesAvailable(const MeshType& m)
64{
66 ElemId::VERTEX,
67 CompId::ADJACENT_FACES>(m);
68}
69
70template<MeshConcept MeshType>
71bool enableIfPerVertexAdjacentFacesOptional(MeshType& m)
72{
74 ElemId::VERTEX,
75 CompId::ADJACENT_FACES>(m);
76}
77
78template<MeshConcept MeshType>
79bool isPerVertexAdjacentVerticesAvailable(const MeshType& m)
80{
82 ElemId::VERTEX,
83 CompId::ADJACENT_VERTICES>(m);
84}
85
86template<MeshConcept MeshType>
87bool enableIfPerVertexAdjacentVerticesOptional(MeshType& m)
88{
90 ElemId::VERTEX,
91 CompId::ADJACENT_VERTICES>(m);
92}
93
94template<MeshConcept MeshType>
95bool isPerVertexColorAvailable(const MeshType& m)
96{
97 return isPerElementComponentAvailable<ElemId::VERTEX, CompId::COLOR>(m);
98}
99
100template<MeshConcept MeshType>
101bool enableIfPerVertexColorOptional(MeshType& m)
102{
103 return enableIfPerElementComponentOptional<ElemId::VERTEX, CompId::COLOR>(
104 m);
105}
106
107template<MeshConcept MeshType>
108bool isPerVertexMarkAvailable(const MeshType& m)
109{
110 return isPerElementComponentAvailable<ElemId::VERTEX, CompId::MARK>(m);
111}
112
113template<MeshConcept MeshType>
114bool enableIfPerVertexMarkOptional(MeshType& m)
115{
116 return enableIfPerElementComponentOptional<ElemId::VERTEX, CompId::MARK>(m);
117}
118
119template<MeshConcept MeshType>
120bool isPerVertexNormalAvailable(const MeshType& m)
121{
122 return isPerElementComponentAvailable<ElemId::VERTEX, CompId::NORMAL>(m);
123}
124
125template<MeshConcept MeshType>
126bool enableIfPerVertexNormalOptional(MeshType& m)
127{
128 return enableIfPerElementComponentOptional<ElemId::VERTEX, CompId::NORMAL>(
129 m);
130}
131
132template<MeshConcept MeshType>
133bool isPerVertexPrincipalCurvatureAvailable(const MeshType& m)
134{
136 ElemId::VERTEX,
137 CompId::PRINCIPAL_CURVATURE>(m);
138}
139
140template<MeshConcept MeshType>
141bool enableIfPerVertexPrincipalCurvatureOptional(MeshType& m)
142{
144 ElemId::VERTEX,
145 CompId::PRINCIPAL_CURVATURE>(m);
146}
147
148template<MeshConcept MeshType>
149bool isPerVertexQualityAvailable(const MeshType& m)
150{
151 return isPerElementComponentAvailable<ElemId::VERTEX, CompId::QUALITY>(m);
152}
153
154template<MeshConcept MeshType>
155bool enableIfPerVertexQualityOptional(MeshType& m)
156{
157 return enableIfPerElementComponentOptional<ElemId::VERTEX, CompId::QUALITY>(
158 m);
159}
160
161template<MeshConcept MeshType>
162bool isPerVertexTexCoordAvailable(const MeshType& m)
163{
164 return isPerElementComponentAvailable<ElemId::VERTEX, CompId::TEX_COORD>(m);
165}
166
167template<MeshConcept MeshType>
168bool enableIfPerVertexTexCoordOptional(MeshType& m)
169{
171 ElemId::VERTEX,
172 CompId::TEX_COORD>(m);
173}
174
175/*********************
176 * require functions *
177 *********************/
178
179template<MeshConcept MeshType>
180void requireVertexContainerCompactness(const MeshType& m)
181{
182 requireElementContainerCompactness<ElemId::VERTEX>(m);
183}
184
185template<typename MeshType>
186void requirePerVertexAdjacentFaces(const MeshType& m)
187 requires HasPerVertexAdjacentFaces<MeshType>
188{
189 requirePerElementComponent<ElemId::VERTEX, CompId::ADJACENT_FACES>(m);
190}
191
192template<typename MeshType>
193void requirePerVertexAdjacentVertices(const MeshType& m)
194 requires HasPerVertexAdjacentVertices<MeshType>
195{
196 requirePerElementComponent<ElemId::VERTEX, CompId::ADJACENT_VERTICES>(m);
197}
198
199template<typename MeshType>
200void requirePerVertexColor(const MeshType& m)
201 requires HasPerVertexColor<MeshType>
202{
203 requirePerElementComponent<ElemId::VERTEX, CompId::COLOR>(m);
204}
205
206template<typename MeshType>
207void requirePerVertexMark(const MeshType& m) requires HasPerVertexMark<MeshType>
208{
209 requirePerElementComponent<ElemId::VERTEX, CompId::MARK>(m);
210}
211
212template<typename MeshType>
213void requirePerVertexNormal(const MeshType& m)
214 requires HasPerVertexNormal<MeshType>
215{
216 requirePerElementComponent<ElemId::VERTEX, CompId::NORMAL>(m);
217}
218
219template<typename MeshType>
220void requirePerVertexPrincipalCurvature(const MeshType& m)
221 requires HasPerVertexPrincipalCurvature<MeshType>
222{
223 requirePerElementComponent<ElemId::VERTEX, CompId::PRINCIPAL_CURVATURE>(m);
224}
225
226template<typename MeshType>
227void requirePerVertexQuality(const MeshType& m)
228 requires HasPerVertexQuality<MeshType>
229{
230 requirePerElementComponent<ElemId::VERTEX, CompId::QUALITY>(m);
231}
232
233template<typename MeshType>
234void requirePerVertexTexCoord(const MeshType& m)
235 requires HasPerVertexTexCoord<MeshType>
236{
237 requirePerElementComponent<ElemId::VERTEX, CompId::TEX_COORD>(m);
238}
239
240} // namespace vcl
241
242#endif // VCL_MESH_REQUIREMENTS_VERTEX_REQUIREMENTS_H
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