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
53namespace GEO {
54
55
56#ifndef GEOGRAM_PSM
57 class Mesh;
58
74
82 void GEOGRAM_API mesh_reorder(
84 );
85
86#endif
87
108 void GEOGRAM_API compute_Hilbert_order(
109 index_t total_nb_vertices, const double* vertices,
110 vector<index_t>& sorted_indices,
111 index_t first,
112 index_t last,
113 index_t dimension, index_t stride = 3
114 );
115
135 void GEOGRAM_API compute_BRIO_order(
136 index_t nb_vertices, const double* vertices,
137 vector<index_t>& sorted_indices,
138 index_t dimension,
139 index_t stride = 3,
140 index_t threshold = 64,
141 double ratio = 0.125,
142 vector<index_t>* levels = nullptr
143 );
144
160 void GEOGRAM_API Hilbert_sort_periodic(
161 index_t nb_vertices, const double* vertices,
162 vector<index_t>& sorted_indices,
163 index_t dimension,
164 index_t stride,
167 const vec3& period
168 );
169
170 inline void Hilbert_sort_periodic(
171 index_t nb_vertices, const double* vertices,
172 vector<index_t>& sorted_indices,
173 index_t dimension,
174 index_t stride,
177 double period = 1.0
178 ) {
180 nb_vertices, vertices,
181 sorted_indices,
182 dimension,
183 stride,
184 first,
185 last,
186 vec3(period, period, period)
187 );
188 }
189
190
191
192}
193
194#endif
Represents a mesh.
Definition mesh.h:2701
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.
Global Vorpaline namespace.
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
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.