Geogram Version 1.9.6
A programming library of geometric algorithms
Loading...
Searching...
No Matches
mesh_reorder.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2000-2022 Inria
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 *
8 * * Redistributions of source code must retain the above copyright notice,
9 * this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above copyright notice,
11 * this list of conditions and the following disclaimer in the documentation
12 * and/or other materials provided with the distribution.
13 * * Neither the name of the ALICE Project-Team nor the names of its
14 * contributors may be used to endorse or promote products derived from this
15 * software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
21 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 * POSSIBILITY OF SUCH DAMAGE.
28 *
29 * Contact: Bruno Levy
30 *
31 * https://www.inria.fr/fr/bruno-levy
32 *
33 * Inria,
34 * Domaine de Voluceau,
35 * 78150 Le Chesnay - Rocquencourt
36 * FRANCE
37 *
38 */
39
40#ifndef GEOGRAM_MESH_MESH_REORDER
41#define GEOGRAM_MESH_MESH_REORDER
42
47
48#ifndef GEOGRAM_PSM
49#include <geogram/mesh/mesh.h>
50#endif
51
57namespace GEO {
58
59
60#ifndef GEOGRAM_PSM
61
77
86 void GEOGRAM_API mesh_reorder(
88 );
89
105 const Mesh& M, MeshElementsFlags elements, vector<index_t>& permutation,
107 );
108
109#endif
110
131 void GEOGRAM_API compute_Hilbert_order(
132 index_t total_nb_vertices, const double* vertices,
133 vector<index_t>& sorted_indices,
134 index_t first,
135 index_t last,
136 index_t dimension, index_t stride = 3
137 );
138
158 void GEOGRAM_API compute_BRIO_order(
159 index_t nb_vertices, const double* vertices,
160 vector<index_t>& sorted_indices,
161 index_t dimension,
162 index_t stride = 3,
163 index_t threshold = 64,
164 double ratio = 0.125,
165 vector<index_t>* levels = nullptr
166 );
167
183 void GEOGRAM_API Hilbert_sort_periodic(
184 index_t nb_vertices, const double* vertices,
185 vector<index_t>& sorted_indices,
186 index_t dimension,
187 index_t stride,
190 const vec3& period
191 );
192
210 index_t nb_vertices, const double* vertices,
211 vector<index_t>& sorted_indices,
212 index_t dimension,
213 index_t stride,
216 double period = 1.0
217 ) {
219 nb_vertices, vertices,
220 sorted_indices,
221 dimension,
222 stride,
223 first,
224 last,
225 vec3(period, period, period)
226 );
227 }
228}
229
230#endif
Represents a mesh.
Definition mesh.h:3068
Vector with aligned memory allocation.
Definition memory.h:660
Common include file, providing basic definitions. Should be included before anything else by all head...
Geometric functions in 2d and 3d.
Types and functions for memory manipulation.
The class that represents a mesh.
Global Vorpaline namespace.
Definition basic.h:55
void mesh_reorder(Mesh &M, MeshOrder order=MESH_ORDER_HILBERT)
Reorders all the elements of a mesh.
vecng< 3, Numeric::float64 > vec3
Represents points and vectors in 3d.
Definition geometry.h:65
void compute_mesh_elements_spatial_order(const Mesh &M, MeshElementsFlags elements, vector< index_t > &permutation, MeshOrder order=MESH_ORDER_HILBERT)
Computes the spatial order of mesh elements in 3d.
geo_index_t index_t
The type for storing and manipulating indices.
Definition numeric.h:329
MeshOrder
Strategy for spatial sorting.
@ MESH_ORDER_MORTON
@ MESH_ORDER_HILBERT
void compute_Hilbert_order(index_t total_nb_vertices, const double *vertices, vector< index_t > &sorted_indices, index_t first, index_t last, index_t dimension, index_t stride=3)
Computes the Hilbert order for a set of 3D points.
void compute_BRIO_order(index_t nb_vertices, const double *vertices, vector< index_t > &sorted_indices, index_t dimension, index_t stride=3, index_t threshold=64, double ratio=0.125, vector< index_t > *levels=nullptr)
Computes the BRIO order for a set of 3D points.
void Hilbert_sort_periodic(index_t nb_vertices, const double *vertices, vector< index_t > &sorted_indices, index_t dimension, index_t stride, vector< index_t >::iterator first, vector< index_t >::iterator last, const vec3 &period)
Spatially sort a set of vertices in periodic space.
Types and functions for numbers manipulation.