Visual Computing Library  devel
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
45namespace vcl {
46
47/************
48 * concepts *
49 ************/
50
62template<typename MeshType>
66
78template<typename MeshType>
82
94template<typename MeshType>
98
109template<typename MeshType>
113
124template<typename MeshType>
128
139template<typename MeshType>
143
155template<typename MeshType>
159
170template<typename MeshType>
174
185template<typename MeshType>
189
199template<typename MeshType>
203
204/*************************
205 * is/enableIf functions *
206 *************************/
207
218template<MeshConcept MeshType>
219bool isVertexContainerCompact(const MeshType& m)
220{
222}
223
224template<MeshConcept MeshType>
225bool isPerVertexAdjacentFacesAvailable(const MeshType& m)
226{
228 ElemId::VERTEX,
229 CompId::ADJACENT_FACES>(m);
230}
231
232template<MeshConcept MeshType>
233bool enableIfPerVertexAdjacentFacesOptional(MeshType& m)
234{
236 ElemId::VERTEX,
237 CompId::ADJACENT_FACES>(m);
238}
239
240template<MeshConcept MeshType>
241bool isPerVertexAdjacentVerticesAvailable(const MeshType& m)
242{
244 ElemId::VERTEX,
245 CompId::ADJACENT_VERTICES>(m);
246}
247
248template<MeshConcept MeshType>
249bool enableIfPerVertexAdjacentVerticesOptional(MeshType& m)
250{
252 ElemId::VERTEX,
253 CompId::ADJACENT_VERTICES>(m);
254}
255
256template<MeshConcept MeshType>
257bool isPerVertexColorAvailable(const MeshType& m)
258{
259 return isPerElementComponentAvailable<ElemId::VERTEX, CompId::COLOR>(m);
260}
261
262template<MeshConcept MeshType>
263bool enableIfPerVertexColorOptional(MeshType& m)
264{
265 return enableIfPerElementComponentOptional<ElemId::VERTEX, CompId::COLOR>(
266 m);
267}
268
269template<MeshConcept MeshType>
270bool isPerVertexMarkAvailable(const MeshType& m)
271{
272 return isPerElementComponentAvailable<ElemId::VERTEX, CompId::MARK>(m);
273}
274
275template<MeshConcept MeshType>
276bool enableIfPerVertexMarkOptional(MeshType& m)
277{
278 return enableIfPerElementComponentOptional<ElemId::VERTEX, CompId::MARK>(m);
279}
280
281template<MeshConcept MeshType>
282bool isPerVertexNormalAvailable(const MeshType& m)
283{
284 return isPerElementComponentAvailable<ElemId::VERTEX, CompId::NORMAL>(m);
285}
286
287template<MeshConcept MeshType>
288bool enableIfPerVertexNormalOptional(MeshType& m)
289{
290 return enableIfPerElementComponentOptional<ElemId::VERTEX, CompId::NORMAL>(
291 m);
292}
293
294template<MeshConcept MeshType>
295bool isPerVertexPrincipalCurvatureAvailable(const MeshType& m)
296{
298 ElemId::VERTEX,
299 CompId::PRINCIPAL_CURVATURE>(m);
300}
301
302template<MeshConcept MeshType>
303bool enableIfPerVertexPrincipalCurvatureOptional(MeshType& m)
304{
306 ElemId::VERTEX,
307 CompId::PRINCIPAL_CURVATURE>(m);
308}
309
310template<MeshConcept MeshType>
311bool isPerVertexQualityAvailable(const MeshType& m)
312{
313 return isPerElementComponentAvailable<ElemId::VERTEX, CompId::QUALITY>(m);
314}
315
316template<MeshConcept MeshType>
317bool enableIfPerVertexQualityOptional(MeshType& m)
318{
319 return enableIfPerElementComponentOptional<ElemId::VERTEX, CompId::QUALITY>(
320 m);
321}
322
323template<MeshConcept MeshType>
324bool isPerVertexTexCoordAvailable(const MeshType& m)
325{
326 return isPerElementComponentAvailable<ElemId::VERTEX, CompId::TEX_COORD>(m);
327}
328
329template<MeshConcept MeshType>
330bool enableIfPerVertexTexCoordOptional(MeshType& m)
331{
333 ElemId::VERTEX,
334 CompId::TEX_COORD>(m);
335}
336
337/*********************
338 * require functions *
339 *********************/
340
341template<MeshConcept MeshType>
342void requireVertexContainerCompactness(const MeshType& m)
343{
344 requireElementContainerCompactness<ElemId::VERTEX>(m);
345}
346
347template<typename MeshType>
348void requirePerVertexAdjacentFaces(const MeshType& m)
349 requires HasPerVertexAdjacentFaces<MeshType>
350{
351 requirePerElementComponent<ElemId::VERTEX, CompId::ADJACENT_FACES>(m);
352}
353
354template<typename MeshType>
355void requirePerVertexAdjacentVertices(const MeshType& m)
356 requires HasPerVertexAdjacentVertices<MeshType>
357{
358 requirePerElementComponent<ElemId::VERTEX, CompId::ADJACENT_VERTICES>(m);
359}
360
361template<typename MeshType>
362void requirePerVertexColor(const MeshType& m)
363 requires HasPerVertexColor<MeshType>
364{
365 requirePerElementComponent<ElemId::VERTEX, CompId::COLOR>(m);
366}
367
368template<typename MeshType>
369void requirePerVertexMark(const MeshType& m) requires HasPerVertexMark<MeshType>
370{
371 requirePerElementComponent<ElemId::VERTEX, CompId::MARK>(m);
372}
373
374template<typename MeshType>
375void requirePerVertexNormal(const MeshType& m)
376 requires HasPerVertexNormal<MeshType>
377{
378 requirePerElementComponent<ElemId::VERTEX, CompId::NORMAL>(m);
379}
380
381template<typename MeshType>
382void requirePerVertexPrincipalCurvature(const MeshType& m)
383 requires HasPerVertexPrincipalCurvature<MeshType>
384{
385 requirePerElementComponent<ElemId::VERTEX, CompId::PRINCIPAL_CURVATURE>(m);
386}
387
388template<typename MeshType>
389void requirePerVertexQuality(const MeshType& m)
390 requires HasPerVertexQuality<MeshType>
391{
392 requirePerElementComponent<ElemId::VERTEX, CompId::QUALITY>(m);
393}
394
395template<typename MeshType>
396void requirePerVertexTexCoord(const MeshType& m)
397 requires HasPerVertexTexCoord<MeshType>
398{
399 requirePerElementComponent<ElemId::VERTEX, CompId::TEX_COORD>(m);
400}
401
402} // namespace vcl
403
404#endif // VCL_MESH_REQUIREMENTS_VERTEX_REQUIREMENTS_H
A class representing a box in N-dimensional space.
Definition box.h:46
Concept that checks if a Mesh has the per Vertex AdjacentEdges component.
Definition vertex_requirements.h:63
Concept that checks if a Mesh has the per Vertex AdjacentFaces component.
Definition vertex_requirements.h:79
Concept that checks if a Mesh has the per Vertex AdjacentVertices component.
Definition vertex_requirements.h:95
Concept that checks if a Mesh has the per Vertex Color component.
Definition vertex_requirements.h:110
Concept that checks if a Mesh has the per Vertex CustomComponents.
Definition vertex_requirements.h:200
Concept that checks if a Mesh has the per Vertex Mark component.
Definition vertex_requirements.h:125
Concept that checks if a Mesh has the per Vertex Normal component.
Definition vertex_requirements.h:140
Concept that checks if a Mesh has the per Vertex PrincipalCurvature component.
Definition vertex_requirements.h:156
Concept that checks if a Mesh has the per Vertex Quality component.
Definition vertex_requirements.h:171
Concept that checks if a Mesh has the per Vertex TexCoord component.
Definition vertex_requirements.h:186
HasVertices concepts is satisfied when at least one of its types is (or inherits from) a vcl::mesh::V...
Definition vertex_container.h:1267
Definition vertex_components.h:67
Definition vertex_components.h:71
Definition vertex_components.h:75
Definition vertex_components.h:81
Definition vertex_components.h:85
Definition vertex_components.h:89
Definition vertex_components.h:93
Definition vertex_components.h:97
Definition vertex_components.h:101
Definition vertex_components.h:105
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:219