Visual Computing Library
All Classes Functions Variables Typedefs Enumerations Friends Modules Pages Concepts
edge_components.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_ELEMENTS_EDGE_COMPONENTS_H
24#define VCL_MESH_ELEMENTS_EDGE_COMPONENTS_H
25
26#include "../components/adjacent_edges.h"
27#include "../components/adjacent_faces.h"
28#include "../components/bit_flags.h"
29#include "../components/color.h"
30#include "../components/custom_components.h"
31#include "../components/mark.h"
32#include "../components/normal.h"
33#include "../components/parent_mesh_pointer.h"
34#include "../components/quality.h"
35#include "../components/vertex_references.h"
36
47namespace vcl::edge {
48
54/* Port AdjacentEdges class into edge namespace */
55template<bool INDEXED, typename ParentEdgeType>
56using AdjacentEdges =
57 comp::AdjacentEdges<INDEXED, ParentEdgeType, -1, false, ParentEdgeType>;
58
59template<bool INDEXED, typename ParentEdgeType>
60using VerticalAdjacentEdges = comp::
61 AdjacentEdges<INDEXED, ParentEdgeType, -1, false, ParentEdgeType, true>;
62
63template<bool INDEXED, typename ParentEdgeType>
64using OptionalAdjacentEdges = comp::AdjacentEdges<
65 INDEXED,
66 ParentEdgeType,
67 -1,
68 false,
69 ParentEdgeType,
70 true,
71 true>;
72
73template<typename ParentEdgeType>
74using AdjacentEdgeIndices =
75 comp::AdjacentEdges<true, ParentEdgeType, -1, false, ParentEdgeType>;
76
77template<typename ParentEdgeType>
78using VerticalAdjacentEdgeIndices =
79 comp::AdjacentEdges<true, ParentEdgeType, -1, false, ParentEdgeType, true>;
80
81template<typename ParentEdgeType>
82using OptionalAdjacentEdgeIndices = comp::
83 AdjacentEdges<true, ParentEdgeType, -1, false, ParentEdgeType, true, true>;
84
85template<typename ParentEdgeType>
86using AdjacentEdgePointers =
87 comp::AdjacentEdges<false, ParentEdgeType, -1, false, ParentEdgeType>;
88
89template<typename ParentEdgeType>
90using VerticalAdjacentEdgePointers =
91 comp::AdjacentEdges<false, ParentEdgeType, -1, false, ParentEdgeType, true>;
92
93template<typename ParentEdgeType>
94using OptionalAdjacentEdgePointers = comp::
95 AdjacentEdges<false, ParentEdgeType, -1, false, ParentEdgeType, true, true>;
96
97/* Port AdjacentFaces class into edge namespace */
98template<bool INDEXED, typename FaceType, typename ParentEdgeType>
99using AdjacentFaces =
100 comp::AdjacentFaces<INDEXED, FaceType, -1, false, ParentEdgeType>;
101
102template<bool INDEXED, typename FaceType, typename ParentEdgeType>
103using VerticalAdjacentFaces =
104 comp::AdjacentFaces<INDEXED, FaceType, -1, false, ParentEdgeType, true>;
105
106template<bool INDEXED, typename FaceType, typename ParentEdgeType>
107using OptionalAdjacentFaces = comp::
108 AdjacentFaces<INDEXED, FaceType, -1, false, ParentEdgeType, true, true>;
109
110template<typename FaceType, typename ParentEdgeType>
111using AdjacentFaceIndices =
112 comp::AdjacentFaces<true, FaceType, -1, false, ParentEdgeType>;
113
114template<typename FaceType, typename ParentEdgeType>
115using VerticalAdjacentFaceIndices =
116 comp::AdjacentFaces<true, FaceType, -1, false, ParentEdgeType, true>;
117
118template<typename FaceType, typename ParentEdgeType>
119using OptionalAdjacentFaceIndices =
120 comp::AdjacentFaces<true, FaceType, -1, false, ParentEdgeType, true, true>;
121
122template<typename FaceType, typename ParentEdgeType>
123using AdjacentFacePointers =
124 comp::AdjacentFaces<false, FaceType, -1, false, ParentEdgeType>;
125
126template<typename FaceType, typename ParentEdgeType>
127using VerticalAdjacentFacePointers =
128 comp::AdjacentFaces<false, FaceType, -1, false, ParentEdgeType, true>;
129
130template<typename FaceType, typename ParentEdgeType>
131using OptionalAdjacentFacePointers =
132 comp::AdjacentFaces<false, FaceType, -1, false, ParentEdgeType, true, true>;
133
134/* Port BitFlags class into edge namespace */
135using BitFlags = comp::BitFlags<>;
136
137/* Port Color class into edge namespace */
138using Color = comp::Color<>;
139
140template<typename ParentEdgeType>
141using VerticalColor = comp::Color<ParentEdgeType>;
142
143template<typename ParentEdgeType>
144using OptionalColor = comp::Color<ParentEdgeType, true>;
145
146/* Port CustomComponents class into edge namespace */
147template<typename ParentEdgeType>
148using CustomComponents = comp::CustomComponents<ParentEdgeType>;
149
150/* Port Mark class into edge namespace */
151using Mark = comp::Mark<>;
152
153template<typename ParentEdgeType>
154using VerticalMark = comp::Mark<ParentEdgeType>;
155
156template<typename ParentEdgeType>
157using OptionalMark = comp::Mark<ParentEdgeType, true>;
158
159/* Port Normal classes into edge namespace */
160template<typename ScalarType, int N>
161using Normal = comp::Normal<Point<ScalarType, N>>;
162
163template<typename ScalarType>
164using Normal3 = comp::Normal3<ScalarType>;
165
166using Normal3f = comp::Normal3f<>;
167using Normal3d = comp::Normal3d<>;
168
169template<typename ScalarType, int N, typename ParentEdgeType>
170using VerticalNormal = comp::Normal<Point<ScalarType, N>, ParentEdgeType>;
171
172template<typename ScalarType, typename ParentEdgeType>
173using VerticalNormal3 = comp::Normal3<ScalarType, ParentEdgeType>;
174
175template<typename ParentEdgeType>
176using VerticalNormal3f = comp::Normal3f<ParentEdgeType>;
177
178template<typename ParentEdgeType>
179using VerticalNormal3d = comp::Normal3d<ParentEdgeType>;
180
181template<typename ScalarType, int N, typename ParentEdgeType>
182using OptionalNormal = comp::Normal<Point<ScalarType, N>, ParentEdgeType, true>;
183
184template<typename ScalarType, typename ParentEdgeType>
185using OptionalNormal3 = comp::Normal3<ScalarType, ParentEdgeType, true>;
186
187template<typename ParentEdgeType>
188using OptionalNormal3f = comp::Normal3f<ParentEdgeType, true>;
189
190template<typename ParentEdgeType>
191using OptionalNormal3d = comp::Normal3d<ParentEdgeType, true>;
192
193/* Port ParentMeshPointer class into vert namespace */
194template<typename MeshType>
195using ParentMeshPointer = comp::ParentMeshPointer<MeshType>;
196
197/* Port Quality class into edge namespace */
198template<typename QualityType>
199using Quality = comp::Quality<QualityType>;
200
201using Qualityf = comp::Qualityf<>;
202using Qualityd = comp::Qualityd<>;
203
204template<typename QualityType, typename ParentEdgeType>
205using VerticalQuality = comp::Quality<QualityType, ParentEdgeType>;
206
207template<typename ParentEdgeType>
208using VerticalQualityf = comp::Quality<float, ParentEdgeType>;
209
210template<typename ParentEdgeType>
211using VerticalQualityd = comp::Quality<double, ParentEdgeType>;
212
213template<typename QualityType, typename ParentEdgeType>
214using OptionalQuality = comp::Quality<QualityType, ParentEdgeType, true>;
215
216template<typename ParentEdgeType>
217using OptionalQualityf = comp::Quality<float, ParentEdgeType, true>;
218
219template<typename ParentEdgeType>
220using OptionalQualityd = comp::Quality<double, ParentEdgeType, true>;
221
222/* Port VertexReferences alias into edge namespace */
223template<bool INDEXED, typename VertexType, typename EdgeType>
224using VertexReferences =
225 comp::VertexReferences<INDEXED, VertexType, 2, EdgeType>;
226
227template<typename VertexType, typename EdgeType>
228using VertexIndices = comp::VertexReferences<true, VertexType, 2, EdgeType>;
229
230template<typename VertexType, typename EdgeType>
231using VertexPointers = comp::VertexReferences<false, VertexType, 2, EdgeType>;
232
// end of edge_components group
234
235} // namespace vcl::edge
236
237#endif // VCL_MESH_ELEMENTS_EDGE_COMPONENTS_H
Normal< Point3< Scalar >, ElementType, OPT > Normal3
The Normal3 class is an alias of the Normal component that uses 3 dimensional Points.
Definition normal.h:156
Normal3< double, ElementType, OPT > Normal3d
The Normal3d class is an alias of the Normal component that uses 3 dimensional Points with double pre...
Definition normal.h:186
Quality< float, ElementType, OPT > Qualityf
Definition quality.h:153
Normal3< float, ElementType, OPT > Normal3f
The Normal3f class is an alias of the Normal component that uses 3 dimensional Points with float prec...
Definition normal.h:171
Quality< double, ElementType, OPT > Qualityd
Definition quality.h:168