Graphite Version 3
An experimental 3D geometry processing program
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
88 void GEOGRAM_API mesh_reorder(
90 MeshElementsFlags elements = MESH_ALL_ELEMENTS
91 );
92
108 const Mesh& M, MeshElementsFlags elements, vector<index_t>& permutation,
110 );
111
112#endif
113
134 void GEOGRAM_API compute_Hilbert_order(
135 index_t total_nb_vertices, const double* vertices,
136 vector<index_t>& sorted_indices,
137 index_t first,
138 index_t last,
139 index_t dimension, index_t stride = 3
140 );
141
161 void GEOGRAM_API compute_BRIO_order(
162 index_t nb_vertices, const double* vertices,
163 vector<index_t>& sorted_indices,
164 index_t dimension,
165 index_t stride = 3,
166 index_t threshold = 64,
167 double ratio = 0.125,
168 vector<index_t>* levels = nullptr
169 );
170
186 void GEOGRAM_API Hilbert_sort_periodic(
187 index_t nb_vertices, const double* vertices,
188 vector<index_t>& sorted_indices,
189 index_t dimension,
190 index_t stride,
193 const vec3& period
194 );
195
213 index_t nb_vertices, const double* vertices,
214 vector<index_t>& sorted_indices,
215 index_t dimension,
216 index_t stride,
219 double period = 1.0
220 ) {
222 nb_vertices, vertices,
223 sorted_indices,
224 dimension,
225 stride,
226 first,
227 last,
228 vec3(period, period, period)
229 );
230 }
231}
232
233#endif
Represents a mesh.
Definition mesh.h:3132
Vector with aligned memory allocation.
Definition memory.h:702
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.
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:330
void mesh_reorder(Mesh &M, MeshOrder order=MESH_ORDER_HILBERT, MeshElementsFlags elements=MESH_ALL_ELEMENTS)
Reorders all the elements of a mesh.
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.