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
140template<typename MeshType>
144
155template<typename MeshType>
159
171template<typename MeshType>
175
186template<typename MeshType>
190
201template<typename MeshType>
205
216template<typename MeshType>
220
230template<typename MeshType>
234
235/*************************
236 * is/enableIf functions *
237 *************************/
238
249template<MeshConcept MeshType>
250bool isVertexContainerCompact(const MeshType& m)
251{
253}
254
255template<MeshConcept MeshType>
256bool isPerVertexAdjacentFacesAvailable(const MeshType& m)
257{
259 ElemId::VERTEX,
260 CompId::ADJACENT_FACES>(m);
261}
262
263template<MeshConcept MeshType>
264bool enableIfPerVertexAdjacentFacesOptional(MeshType& m)
265{
267 ElemId::VERTEX,
268 CompId::ADJACENT_FACES>(m);
269}
270
271template<MeshConcept MeshType>
272bool isPerVertexAdjacentVerticesAvailable(const MeshType& m)
273{
275 ElemId::VERTEX,
276 CompId::ADJACENT_VERTICES>(m);
277}
278
279template<MeshConcept MeshType>
280bool enableIfPerVertexAdjacentVerticesOptional(MeshType& m)
281{
283 ElemId::VERTEX,
284 CompId::ADJACENT_VERTICES>(m);
285}
286
287template<MeshConcept MeshType>
288bool isPerVertexColorAvailable(const MeshType& m)
289{
290 return isPerElementComponentAvailable<ElemId::VERTEX, CompId::COLOR>(m);
291}
292
293template<MeshConcept MeshType>
294bool enableIfPerVertexColorOptional(MeshType& m)
295{
296 return enableIfPerElementComponentOptional<ElemId::VERTEX, CompId::COLOR>(
297 m);
298}
299
300template<MeshConcept MeshType>
301bool isPerVertexMarkAvailable(const MeshType& m)
302{
303 return isPerElementComponentAvailable<ElemId::VERTEX, CompId::MARK>(m);
304}
305
306template<MeshConcept MeshType>
307bool enableIfPerVertexMarkOptional(MeshType& m)
308{
309 return enableIfPerElementComponentOptional<ElemId::VERTEX, CompId::MARK>(m);
310}
311
312template<MeshConcept MeshType>
313bool isPerVertexMaterialIndexAvailable(const MeshType& m)
314{
316 ElemId::VERTEX,
317 CompId::MATERIAL_INDEX>(m);
318}
319
320template<MeshConcept MeshType>
321bool enableIfPerVertexMaterialIndexOptional(MeshType& m)
322{
324 ElemId::VERTEX,
325 CompId::MATERIAL_INDEX>(m);
326}
327
328template<MeshConcept MeshType>
329bool isPerVertexNormalAvailable(const MeshType& m)
330{
331 return isPerElementComponentAvailable<ElemId::VERTEX, CompId::NORMAL>(m);
332}
333
334template<MeshConcept MeshType>
335bool enableIfPerVertexNormalOptional(MeshType& m)
336{
337 return enableIfPerElementComponentOptional<ElemId::VERTEX, CompId::NORMAL>(
338 m);
339}
340
341template<MeshConcept MeshType>
342bool isPerVertexPrincipalCurvatureAvailable(const MeshType& m)
343{
345 ElemId::VERTEX,
346 CompId::PRINCIPAL_CURVATURE>(m);
347}
348
349template<MeshConcept MeshType>
350bool enableIfPerVertexPrincipalCurvatureOptional(MeshType& m)
351{
353 ElemId::VERTEX,
354 CompId::PRINCIPAL_CURVATURE>(m);
355}
356
357template<MeshConcept MeshType>
358bool isPerVertexQualityAvailable(const MeshType& m)
359{
360 return isPerElementComponentAvailable<ElemId::VERTEX, CompId::QUALITY>(m);
361}
362
363template<MeshConcept MeshType>
364bool enableIfPerVertexQualityOptional(MeshType& m)
365{
366 return enableIfPerElementComponentOptional<ElemId::VERTEX, CompId::QUALITY>(
367 m);
368}
369
370template<MeshConcept MeshType>
371bool isPerVertexTangentAvailable(const MeshType& m)
372{
373 return isPerElementComponentAvailable<ElemId::VERTEX, CompId::TANGENT>(m);
374}
375
376template<MeshConcept MeshType>
377bool enableIfPerVertexTangentOptional(MeshType& m)
378{
379 return enableIfPerElementComponentOptional<ElemId::VERTEX, CompId::TANGENT>(
380 m);
381}
382
383template<MeshConcept MeshType>
384bool isPerVertexTexCoordAvailable(const MeshType& m)
385{
386 return isPerElementComponentAvailable<ElemId::VERTEX, CompId::TEX_COORD>(m);
387}
388
389template<MeshConcept MeshType>
390bool enableIfPerVertexTexCoordOptional(MeshType& m)
391{
393 ElemId::VERTEX,
394 CompId::TEX_COORD>(m);
395}
396
397/*********************
398 * require functions *
399 *********************/
400
401template<MeshConcept MeshType>
402void requireVertexContainerCompactness(const MeshType& m)
403{
404 requireElementContainerCompactness<ElemId::VERTEX>(m);
405}
406
407template<typename MeshType>
408void requirePerVertexAdjacentFaces(const MeshType& m)
409 requires HasPerVertexAdjacentFaces<MeshType>
410{
411 requirePerElementComponent<ElemId::VERTEX, CompId::ADJACENT_FACES>(m);
412}
413
414template<typename MeshType>
415void requirePerVertexAdjacentVertices(const MeshType& m)
416 requires HasPerVertexAdjacentVertices<MeshType>
417{
418 requirePerElementComponent<ElemId::VERTEX, CompId::ADJACENT_VERTICES>(m);
419}
420
421template<typename MeshType>
422void requirePerVertexColor(const MeshType& m)
423 requires HasPerVertexColor<MeshType>
424{
425 requirePerElementComponent<ElemId::VERTEX, CompId::COLOR>(m);
426}
427
428template<typename MeshType>
429void requirePerVertexMark(const MeshType& m) requires HasPerVertexMark<MeshType>
430{
431 requirePerElementComponent<ElemId::VERTEX, CompId::MARK>(m);
432}
433
434template<typename MeshType>
435void requirePerVertexMaterialIndex(const MeshType& m)
436 requires HasPerVertexMaterialIndex<MeshType>
437{
438 requirePerElementComponent<ElemId::VERTEX, CompId::MATERIAL_INDEX>(m);
439}
440
441template<typename MeshType>
442void requirePerVertexNormal(const MeshType& m)
443 requires HasPerVertexNormal<MeshType>
444{
445 requirePerElementComponent<ElemId::VERTEX, CompId::NORMAL>(m);
446}
447
448template<typename MeshType>
449void requirePerVertexPrincipalCurvature(const MeshType& m)
450 requires HasPerVertexPrincipalCurvature<MeshType>
451{
452 requirePerElementComponent<ElemId::VERTEX, CompId::PRINCIPAL_CURVATURE>(m);
453}
454
455template<typename MeshType>
456void requirePerVertexQuality(const MeshType& m)
457 requires HasPerVertexQuality<MeshType>
458{
459 requirePerElementComponent<ElemId::VERTEX, CompId::QUALITY>(m);
460}
461
462template<typename MeshType>
463void requirePerVertexTangent(const MeshType& m)
464 requires HasPerVertexTangent<MeshType>
465{
466 requirePerElementComponent<ElemId::VERTEX, CompId::TANGENT>(m);
467}
468
469template<typename MeshType>
470void requirePerVertexTexCoord(const MeshType& m)
471 requires HasPerVertexTexCoord<MeshType>
472{
473 requirePerElementComponent<ElemId::VERTEX, CompId::TEX_COORD>(m);
474}
475
476} // namespace vcl
477
478#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:231
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 MaterialIndex component.
Definition vertex_requirements.h:141
Concept that checks if a Mesh has the per Vertex Normal component.
Definition vertex_requirements.h:156
Concept that checks if a Mesh has the per Vertex PrincipalCurvature component.
Definition vertex_requirements.h:172
Concept that checks if a Mesh has the per Vertex Quality component.
Definition vertex_requirements.h:187
Concept that checks if a Mesh has the per Vertex Tangent component.
Definition vertex_requirements.h:202
Concept that checks if a Mesh has the per Vertex TexCoord component.
Definition vertex_requirements.h:217
HasVertices concepts is satisfied when at least one of its types is (or inherits from) a vcl::mesh::V...
Definition vertex_container.h:1346
Definition vertex_components.h:69
Definition vertex_components.h:73
Definition vertex_components.h:77
Definition vertex_components.h:83
Definition vertex_components.h:87
Definition vertex_components.h:91
Definition vertex_components.h:95
Definition vertex_components.h:99
Definition vertex_components.h:103
Definition vertex_components.h:107
Definition vertex_components.h:111
Definition vertex_components.h:115
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:250