Visual Computing Library  devel
Loading...
Searching...
No Matches
export_matrix.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_ALGORITHMS_MESH_IMPORT_EXPORT_EXPORT_MATRIX_H
24#define VCL_ALGORITHMS_MESH_IMPORT_EXPORT_EXPORT_MATRIX_H
25
26#include "export_buffer.h"
27
28#include <vclib/algorithms/mesh/stat/topology.h>
29
30#include <vclib/mesh.h>
31#include <vclib/space/core.h>
32
43namespace vcl {
44
71template<MatrixConcept Matrix, MeshConcept MeshType>
72Matrix vertexPositionsMatrix(const MeshType& mesh)
73{
74 Matrix vM(mesh.vertexNumber(), 3);
75
76 MatrixStorageType stg = matrixStorageType<Matrix>();
77
78 vertexPositionsToBuffer(mesh, vM.data(), stg);
79
80 return vM;
81}
82
115template<typename Vect, FaceMeshConcept MeshType>
116Vect faceSizesVector(const MeshType& mesh)
117{
118 requireVertexContainerCompactness(mesh);
119
120 Vect fM(mesh.faceNumber());
121
122 faceSizesToBuffer(mesh, fM.data());
123
124 return fM;
125}
126
158template<typename Vect, FaceMeshConcept MeshType>
159Vect faceVertexIndicesVector(const MeshType& mesh)
160{
161 requireVertexContainerCompactness(mesh);
162
164
166
167 faceVertexIndicesToBuffer(mesh, fV.data());
168
169 return fV;
170}
171
206template<MatrixConcept Matrix, FaceMeshConcept MeshType>
207Matrix faceVertexIndicesMatrix(const MeshType& mesh)
208{
209 requireVertexContainerCompactness(mesh);
210
211 uint fMaxSize = largestFaceSize(mesh);
212
213 Matrix fM(mesh.faceNumber(), fMaxSize);
214
215 MatrixStorageType stg = matrixStorageType<Matrix>();
216
217 faceVertexIndicesToBuffer(mesh, fM.data(), fMaxSize, stg);
218
219 return fM;
220}
221
249template<MatrixConcept Matrix, FaceMeshConcept MeshType>
250Matrix triangulatedFaceVertexIndicesMatrix(
251 const MeshType& mesh,
252 TriPolyIndexBiMap& indexMap = detail::indexMap)
253{
254 requireVertexContainerCompactness(mesh);
255
256 uint tNumber = vcl::countTriangulatedTriangles(mesh);
257
258 Matrix tM(tNumber, 3);
259
260 MatrixStorageType stg = matrixStorageType<Matrix>();
261
263 mesh, tM.data(), indexMap, stg, tNumber);
264
265 return tM;
266}
267
298template<MatrixConcept Matrix, EdgeMeshConcept MeshType>
299Matrix edgeVertexIndicesMatrix(const MeshType& mesh)
300{
301 requireVertexContainerCompactness(mesh);
302
303 Matrix eM(mesh.edgeNumber(), 2);
304
306
307 edgeVertexIndicesToBuffer(mesh, eM.data(), stg);
308
309 return eM;
310}
311
341template<uint ELEM_ID, typename Vect, MeshConcept MeshType>
342Vect elementSelectionVector(const MeshType& mesh)
343{
344 Vect sV(mesh.template number<ELEM_ID>());
345
347 return sV;
348}
349
377template<typename Vect, MeshConcept MeshType>
378Vect vertexSelectionVector(const MeshType& mesh)
379{
380 return elementSelectionVector<ElemId::VERTEX, Vect>(mesh);
381}
382
411template<typename Vect, FaceMeshConcept MeshType>
412Vect faceSelectionVector(const MeshType& mesh)
413{
414 return elementSelectionVector<ElemId::FACE, Vect>(mesh);
415}
416
445template<typename Vect, EdgeMeshConcept MeshType>
446Vect edgeSelectionVector(const MeshType& mesh)
447{
448 return elementSelectionVector<ElemId::EDGE, Vect>(mesh);
449}
450
480template<uint ELEM_ID, MatrixConcept Matrix, MeshConcept MeshType>
481Matrix elementNormalsMatrix(const MeshType& mesh)
482{
483 Matrix eNM(mesh.template number<ELEM_ID>(), 3);
484
486
488
489 return eNM;
490}
491
518template<MatrixConcept Matrix, MeshConcept MeshType>
519Matrix vertexNormalsMatrix(const MeshType& mesh)
520{
522}
523
550template<MatrixConcept Matrix, FaceMeshConcept MeshType>
551Matrix faceNormalsMatrix(const MeshType& mesh)
552{
554}
555
585template<uint ELEM_ID, MatrixConcept Matrix, MeshConcept MeshType>
586Matrix elementColorsMatrix(const MeshType& mesh)
587{
588 Matrix eCM(mesh.template number<ELEM_ID>(), 4);
589
591
593
594 return eCM;
595}
596
629template<uint ELEM_ID, typename Vect, MeshConcept MeshType>
631{
632 Vect eCV(mesh.template number<ELEM_ID>());
633
635
636 return eCV;
637}
638
665template<MatrixConcept Matrix, MeshConcept MeshType>
666Matrix vertexColorsMatrix(const MeshType& mesh)
667{
669}
670
701template<typename Vect, MeshConcept MeshType>
706
733template<MatrixConcept Matrix, FaceMeshConcept MeshType>
734Matrix faceColorsMatrix(const MeshType& mesh)
735{
737}
738
769template<typename Vect, MeshConcept MeshType>
774
801template<MatrixConcept Matrix, EdgeMeshConcept MeshType>
802Matrix edgeColorsMatrix(const MeshType& mesh)
803{
805}
806
837template<typename Vect, MeshConcept MeshType>
842
873template<uint ELEM_ID, typename Vect, MeshConcept MeshType>
874Vect elementQualityVector(const MeshType& mesh)
875{
876 Vect eQV(mesh.template number<ELEM_ID>());
877
879
880 return eQV;
881}
882
910template<typename Vect, MeshConcept MeshType>
911Vect vertexQualityVector(const MeshType& mesh)
912{
914}
915
943template<typename Vect, FaceMeshConcept MeshType>
944Vect faceQualityVector(const MeshType& mesh)
945{
947}
948
976template<typename Vect, EdgeMeshConcept MeshType>
977Vect edgeQualityVector(const MeshType& mesh)
978{
980}
981
1008template<MatrixConcept Matrix, MeshConcept MeshType>
1009Matrix vertexTexCoordsMatrix(const MeshType& mesh)
1010{
1011 Matrix vTCM(mesh.vertexNumber(), 2);
1012
1014
1015 vertexTexCoordsToBuffer(mesh, vTCM.data(), stg);
1016
1017 return vTCM;
1018}
1019
1048template<typename Vect, MeshConcept MeshType>
1050{
1051 Vect vTCI(mesh.vertexNumber());
1052
1053 vertexMaterialIndicesToBuffer(mesh, vTCI.data());
1054
1055 return vTCI;
1056}
1057
1086template<MatrixConcept Matrix, FaceMeshConcept MeshType>
1088{
1089 uint lfs = vcl::largestFaceSize(mesh);
1090
1091 Matrix fTCM(mesh.faceNumber(), lfs * 2);
1092
1094
1095 faceWedgeTexCoordsToBuffer(mesh, fTCM.data(), lfs, stg);
1096
1097 return fTCM;
1098}
1099
1128template<typename Vect, FaceMeshConcept MeshType>
1129Vect faceMaterialIndicesVector(const MeshType& mesh)
1130{
1131 Vect fTCI(mesh.faceNumber());
1132
1133 faceMaterialIndicesToBuffer(mesh, fTCI.data());
1134
1135 return fTCI;
1136}
1137
1169template<
1170 template<typename, typename...>
1171 typename Container,
1172 typename T,
1173 MeshConcept MeshType>
1174Container<Container<T>> vertexAdjacentVerticesVectors(const MeshType& mesh)
1175{
1176 requireVertexContainerCompactness(mesh);
1177 requirePerVertexAdjacentVertices(mesh);
1178
1179 Container<Container<T>> vv(mesh.vertexNumber());
1180
1181 auto vvIt = vv.begin();
1182 for (const auto& v : mesh.vertices()) {
1183 auto& vec = *vvIt;
1184
1185 vec.resize(v.adjVerticesNumber());
1186 auto vecIt = vec.begin();
1187 for (const auto* ve : v.adjVertices()) {
1188 uint idx = ve ? ve->index() : UINT_NULL;
1189 *vecIt = T(idx);
1190 ++vecIt;
1191 }
1192
1193 ++vvIt;
1194 }
1195
1196 return vv;
1197}
1198
1228template<MatrixConcept Matrix, MeshConcept MeshType>
1229Matrix vertexAdjacentVerticesMatrix(const MeshType& mesh)
1230{
1232
1233 Matrix vAVM(mesh.vertexNumber(), lva);
1234
1235 MatrixStorageType stg = matrixStorageType<Matrix>();
1236
1237 vertexAdjacentVerticesToBuffer(mesh, vAVM.data(), lva, stg);
1238
1239 return vAVM;
1240}
1241
1281template<
1282 uint ELEM_ID,
1283 template<typename, typename...>
1284 typename Container,
1285 typename T,
1286 FaceMeshConcept MeshType>
1287Container<Container<T>> elementAdjacentFacesVectors(const MeshType& mesh)
1288{
1290 requirePerElementComponent<ELEM_ID, CompId::ADJACENT_FACES>(mesh);
1291
1292 Container<Container<T>> vv(mesh.template number<ELEM_ID>());
1293
1294 auto vvIt = vv.begin();
1295 for (const auto& v : mesh.template elements<ELEM_ID>()) {
1296 auto& vec = *vvIt;
1297
1298 vec.resize(v.adjFacesNumber());
1299 auto vecIt = vec.begin();
1300 for (const auto* fe : v.adjFaces()) {
1301 uint idx = fe ? fe->index() : UINT_NULL;
1302 *vecIt = T(idx);
1303 ++vecIt;
1304 }
1305
1306 ++vvIt;
1307 }
1308
1309 return vv;
1310}
1311
1348template<uint ELEM_ID, MatrixConcept Matrix, FaceMeshConcept MeshType>
1349Matrix elementAdjacentFacesMatrix(const MeshType& mesh)
1350{
1352
1353 Matrix eAFM(mesh.template number<ELEM_ID>(), lfa);
1354
1355 MatrixStorageType stg = matrixStorageType<Matrix>();
1356
1357 elementAdjacentFacesToBuffer<ELEM_ID>(mesh, eAFM.data(), lfa, stg);
1358
1359 return eAFM;
1360}
1361
1399template<
1400 template<typename, typename...>
1401 typename Container,
1402 typename T,
1403 FaceMeshConcept MeshType>
1404Container<Container<T>> vertexAdjacentFacesVectors(const MeshType& mesh)
1405{
1406 return elementAdjacentFacesVectors<ElemId::VERTEX, Container, T>(mesh);
1407}
1408
1444template<MatrixConcept Matrix, FaceMeshConcept MeshType>
1445Matrix vertexAdjacentFacesMatrix(const MeshType& mesh)
1446{
1447 return elementAdjacentFacesMatrix<ElemId::VERTEX, Matrix>(mesh);
1448}
1449
1482template<
1483 template<typename, typename...>
1484 typename Container,
1485 typename T,
1486 FaceMeshConcept MeshType>
1487Container<Container<T>> faceAdjacentFacesVectors(const MeshType& mesh)
1488{
1489 return elementAdjacentFacesVectors<ElemId::FACE, Container, T>(mesh);
1490}
1491
1522template<MatrixConcept Matrix, FaceMeshConcept MeshType>
1523Matrix faceAdjacentFacesMatrix(const MeshType& mesh)
1524{
1525 return elementAdjacentFacesMatrix<ElemId::FACE, Matrix>(mesh);
1526}
1527
1565template<
1566 template<typename, typename...>
1567 typename Container,
1568 typename T,
1569 FaceMeshConcept MeshType>
1570Container<Container<T>> edgeAdjacentFacesVectors(const MeshType& mesh)
1571 requires EdgeMeshConcept<MeshType>
1572{
1573 return elementAdjacentFacesVectors<ElemId::EDGE, Container, T>(mesh);
1574}
1575
1611template<MatrixConcept Matrix, FaceMeshConcept MeshType>
1612Matrix edgeAdjacentFacesMatrix(const MeshType& mesh)
1613 requires EdgeMeshConcept<MeshType>
1614{
1615 return elementAdjacentFacesMatrix<ElemId::EDGE, Matrix>(mesh);
1616}
1617
1657template<
1658 uint ELEM_ID,
1659 template<typename, typename...>
1660 typename Container,
1661 typename T,
1662 EdgeMeshConcept MeshType>
1663Container<Container<T>> elementAdjacentEdgesVectors(const MeshType& mesh)
1664{
1666 requirePerElementComponent<ELEM_ID, CompId::ADJACENT_EDGES>(mesh);
1667
1668 Container<Container<T>> vv(mesh.template number<ELEM_ID>());
1669
1670 auto vvIt = vv.begin();
1671 for (const auto& v : mesh.template elements<ELEM_ID>()) {
1672 auto& vec = *vvIt;
1673
1674 vec.resize(v.adjEdgesNumber());
1675 auto vecIt = vec.begin();
1676 for (const auto* fe : v.adjEdges()) {
1677 uint idx = fe ? fe->index() : UINT_NULL;
1678 *vecIt = T(idx);
1679 ++vecIt;
1680 }
1681
1682 ++vvIt;
1683 }
1684
1685 return vv;
1686}
1687
1724template<uint ELEM_ID, MatrixConcept Matrix, EdgeMeshConcept MeshType>
1725Matrix elementAdjacentEdgesMatrix(const MeshType& mesh)
1726{
1728
1729 Matrix eAEM(mesh.template number<ELEM_ID>(), lea);
1730
1731 MatrixStorageType stg = matrixStorageType<Matrix>();
1732
1733 elementAdjacentEdgesToBuffer<ELEM_ID>(mesh, eAEM.data(), lea, stg);
1734
1735 return eAEM;
1736}
1737
1775template<
1776 template<typename, typename...>
1777 typename Container,
1778 typename T,
1779 EdgeMeshConcept MeshType>
1780Container<Container<T>> vertexAdjacentEdgesVectors(const MeshType& mesh)
1781{
1782 return elementAdjacentEdgesVectors<ElemId::VERTEX, Container, T>(mesh);
1783}
1784
1820template<MatrixConcept Matrix, EdgeMeshConcept MeshType>
1821Matrix vertexAdjacentEdgesMatrix(const MeshType& mesh)
1822{
1823 return elementAdjacentEdgesMatrix<ElemId::VERTEX, Matrix>(mesh);
1824}
1825
1863template<
1864 template<typename, typename...>
1865 typename Container,
1866 typename T,
1867 EdgeMeshConcept MeshType>
1868Container<Container<T>> faceAdjacentEdgesVectors(const MeshType& mesh)
1869 requires FaceMeshConcept<MeshType>
1870{
1871 return elementAdjacentEdgesVectors<ElemId::FACE, Container, T>(mesh);
1872}
1873
1909template<MatrixConcept Matrix, EdgeMeshConcept MeshType>
1910Matrix faceAdjacentEdgesMatrix(const MeshType& mesh)
1911 requires FaceMeshConcept<MeshType>
1912{
1913 return elementAdjacentEdgesMatrix<ElemId::FACE, Matrix>(mesh);
1914}
1915
1948template<
1949 template<typename, typename...>
1950 typename Container,
1951 typename T,
1952 EdgeMeshConcept MeshType>
1953Container<Container<T>> edgeAdjacentEdgesVectors(const MeshType& mesh)
1954{
1955 return elementAdjacentEdgesVectors<ElemId::EDGE, Container, T>(mesh);
1956}
1957
1988template<MatrixConcept Matrix, EdgeMeshConcept MeshType>
1989Matrix edgeAdjacentEdgesMatrix(const MeshType& mesh)
1990{
1991 return elementAdjacentEdgesMatrix<ElemId::EDGE, Matrix>(mesh);
1992}
1993
1994} // namespace vcl
1995
1996#endif // VCL_ALGORITHMS_MESH_IMPORT_EXPORT_EXPORT_MATRIX_H
A class representing a box in N-dimensional space.
Definition box.h:46
Format
Color format enumeration.
Definition color.h:77
Definition matrix.h:34
MatrixStorageType
A simple type that enumerates the main storage types for matrices (row or column major).
Definition base.h:88
constexpr uint UINT_NULL
The UINT_NULL value represent a null value of uint that is the maximum value that can be represented ...
Definition base.h:48
void requireEdgeContainerCompactness(const MeshType &m)
This function asserts that a Mesh has the EdgeContainer compact (no elements flagged as deleted).
Definition edge_requirements.h:597
void vertexPositionsToBuffer(const MeshType &mesh, auto *buffer, MatrixStorageType storage=MatrixStorageType::ROW_MAJOR, uint rowNumber=UINT_NULL)
Export the vertex positions of a mesh to a buffer.
Definition export_buffer.h:74
void edgeVertexIndicesToBuffer(const MeshType &mesh, auto *buffer, MatrixStorageType storage=MatrixStorageType::ROW_MAJOR, bool getIndicesAsIfContainerCompact=true, uint rowNumber=UINT_NULL)
Export into a buffer the vertex indices for each edge of a Mesh.
Definition export_buffer.h:456
void triangulatedFaceVertexIndicesToBuffer(const MeshType &mesh, auto *buffer, TriPolyIndexBiMap &indexMap=detail::indexMap, MatrixStorageType storage=MatrixStorageType::ROW_MAJOR, uint numTriangles=UINT_NULL, bool getIndicesAsIfContainerCompact=true)
Export into a buffer the vertex indices for each triangle computed by triangulating the faces of a Me...
Definition export_buffer.h:366
void vertexAdjacentVerticesToBuffer(const MeshType &mesh, auto *buffer, uint largestAdjacentVerticesSize, MatrixStorageType storage=MatrixStorageType::ROW_MAJOR, uint rowNumber=UINT_NULL)
Export into a buffer the adjacent vertex indices for each vertex of a Mesh. The number of adjacent ve...
Definition export_buffer.h:1899
void faceVertexIndicesToBuffer(const MeshType &mesh, auto *buffer, bool getIndicesAsIfContainerCompact=true)
Export into a buffer the vertex indices for each face of a Mesh. Faces can be polygons.
Definition export_buffer.h:226
void faceWedgeTexCoordsToBuffer(const MeshType &mesh, auto *buffer, uint largestFaceSize=3, MatrixStorageType storage=MatrixStorageType::ROW_MAJOR, uint rowNumber=UINT_NULL)
Export the selection status of the elements identified by ELEM_ID of a mesh to a buffer.
Definition export_buffer.h:1599
uint faceSizesToBuffer(const MeshType &mesh, auto *buffer)
Export into a buffer the sizes of the faces of a Mesh, and return the sum of the sizes.
Definition export_buffer.h:164
void faceMaterialIndicesToBuffer(const MeshType &mesh, auto *buffer)
Export into a buffer the per face material indices of a mesh.
Definition export_buffer.h:1650
Matrix vertexColorsMatrix(const MeshType &mesh)
Get a #V*4 Matrix of integers containing the colors of the vertices of a Mesh. The function is templa...
Definition export_matrix.h:666
Vect vertexQualityVector(const MeshType &mesh)
Get a #V Vector of scalars containing the quality of the vertices of a Mesh. The function is template...
Definition export_matrix.h:911
Matrix elementNormalsMatrix(const MeshType &mesh)
Get a #E Vector of booleans (or integers) containing the selection status of the elements identified ...
Definition export_matrix.h:481
Matrix vertexTexCoordsMatrix(const MeshType &mesh)
Get a #V*2 Matrix of scalars containing the texcoords of the vertices of a Mesh. The function is temp...
Definition export_matrix.h:1009
Vect vertexColorsVector(const MeshType &mesh, Color::Format colorFormat)
Get a #V Vector of integers containing the colors of the vertices of a Mesh. The function is template...
Definition export_matrix.h:702
Matrix edgeColorsMatrix(const MeshType &mesh)
Get a #E*4 Matrix of integers containing the colors of the edges of a Mesh. The function is templated...
Definition export_matrix.h:802
Vect faceMaterialIndicesVector(const MeshType &mesh)
Get a #F vector of scalars containing the material indices of the faces of a Mesh....
Definition export_matrix.h:1129
Matrix faceColorsMatrix(const MeshType &mesh)
Get a #F*4 Matrix of integers containing the colors of the faces of a Mesh. The function is templated...
Definition export_matrix.h:734
Vect edgeQualityVector(const MeshType &mesh)
Get a #E Vector of scalars containing the quality of the edges of a Mesh. The function is templated o...
Definition export_matrix.h:977
Matrix faceWedgeTexCoordsMatrix(const MeshType &mesh)
Get a #F*(LFS*2) Matrix of scalars containing the wedge texcoords of the faces of a Mesh....
Definition export_matrix.h:1087
Vect vertexMaterialIndicesVector(const MeshType &mesh)
Get a #V vector of scalars containing the material indices of the vertices of a Mesh....
Definition export_matrix.h:1049
Matrix faceNormalsMatrix(const MeshType &mesh)
Get a #F*3 Matrix of scalars containing the normals of the faces of a Mesh. The function is templated...
Definition export_matrix.h:551
Vect faceQualityVector(const MeshType &mesh)
Get a #F Vector of scalars containing the quality of the faces of a Mesh. The function is templated o...
Definition export_matrix.h:944
Vect elementQualityVector(const MeshType &mesh)
Get a #E Vector of scalars containing the quality of the elements identified by ELEM_ID of a Mesh....
Definition export_matrix.h:874
Vect faceVertexIndicesVector(const MeshType &mesh)
Get a #V*3 Matrix of scalars containing the positions of the vertices of a Mesh. The function is temp...
Definition export_matrix.h:159
Vect elementColorsVector(const MeshType &mesh, Color::Format colorFormat)
Get a #E Vector of integers containing the colors of the elements identified by ELEM_ID of a Mesh....
Definition export_matrix.h:630
Matrix edgeVertexIndicesMatrix(const MeshType &mesh)
Get a #F*LFS Matrix of integers containing the vertex indices for each face of a Mesh....
Definition export_matrix.h:299
Vect edgeColorsVector(const MeshType &mesh, Color::Format colorFormat)
Get a #E Vector of integers containing the colors of the edges of a Mesh. The function is templated o...
Definition export_matrix.h:838
Matrix elementColorsMatrix(const MeshType &mesh)
Get a #E*4 Matrix of integers containing the colors of the elements identified by ELEM_ID of a Mesh....
Definition export_matrix.h:586
Matrix vertexNormalsMatrix(const MeshType &mesh)
Get a #V*3 Matrix of scalars containing the normals of the vertices of a Mesh. The function is templa...
Definition export_matrix.h:519
Vect faceColorsVector(const MeshType &mesh, Color::Format colorFormat)
Get a #F Vector of integers containing the colors of the faces of a Mesh. The function is templated o...
Definition export_matrix.h:770
void requireFaceContainerCompactness(const MeshType &m)
This function asserts that a Mesh has the FaceContainer compact (no elements flagged as deleted).
Definition face_requirements.h:966
uint largestPerVertexAdjacentVerticesNumber(const MeshConcept auto &mesh)
Returns the largest number of per-vertex adjacent vertices in the mesh.
Definition topology.h:268
uint countPerFaceVertexReferences(const FaceMeshConcept auto &mesh)
Count the number of references to vertices in the mesh faces.
Definition topology.h:182
uint largestFaceSize(const FaceMeshConcept auto &mesh)
Returns the largest face size in the mesh.
Definition topology.h:212
uint countTriangulatedTriangles(const FaceMeshConcept auto &mesh)
Counts the number of resulting triangles if the input mesh would be triangulated by splitting each fa...
Definition topology.h:240
constexpr detail::AdjEdgesView adjEdges
The adjEdges view allows to obtain a view that access to the adjacent edges of the object that has be...
Definition adj_edges.h:65
constexpr detail::AdjFacesView adjFaces
The adjFaces view allows to obtain a view that access to the adjacent faces of the object that has be...
Definition adj_faces.h:65