| Line | Branch | Exec | Source |
|---|---|---|---|
| 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 | #include <geogram/basic/command_line_args.h> | ||
| 41 | #include <geogram/basic/command_line.h> | ||
| 42 | #include <geogram/basic/process.h> | ||
| 43 | #include <geogram/basic/logger.h> | ||
| 44 | |||
| 45 | #include <set> | ||
| 46 | |||
| 47 | namespace { | ||
| 48 | |||
| 49 | using namespace GEO; | ||
| 50 | using namespace CmdLine; | ||
| 51 | |||
| 52 | /** | ||
| 53 | * \brief Imports the global option group | ||
| 54 | */ | ||
| 55 | 249 | void import_arg_group_global() { | |
| 56 |
1/2✓ Branch 1 taken 249 times.
✗ Branch 2 not taken.
|
249 | declare_arg( |
| 57 |
2/6✓ Branch 1 taken 249 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 249 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
498 | "profile", "scan", |
| 58 | 249 | "Vorpaline mode " | |
| 59 | "(scan, convert, repair, heal, cad, tet, poly, hex, quad)" | ||
| 60 | ); | ||
| 61 |
1/2✓ Branch 1 taken 249 times.
✗ Branch 2 not taken.
|
249 | declare_arg( |
| 62 |
2/6✓ Branch 1 taken 249 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 249 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
498 | "debug", false, |
| 63 | 249 | "Toggles debug mode", ARG_ADVANCED | |
| 64 | ); | ||
| 65 | 249 | } | |
| 66 | |||
| 67 | /** | ||
| 68 | * \brief Imports the pre-processing option group | ||
| 69 | */ | ||
| 70 | 47 | void import_arg_group_pre() { | |
| 71 |
3/8✓ Branch 2 taken 47 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 47 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 47 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
|
94 | declare_arg_group("pre", "Preprocessing phase"); |
| 72 |
1/2✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
|
47 | declare_arg( |
| 73 |
2/6✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 47 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
94 | "pre", true, |
| 74 | 47 | "Toggles pre-processing phase", ARG_ADVANCED | |
| 75 | ); | ||
| 76 |
1/2✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
|
47 | declare_arg( |
| 77 |
2/6✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 47 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
94 | "pre:Nsmooth_iter", 1, |
| 78 | 47 | "Number of iterations for normals smoothing", | |
| 79 | ARG_ADVANCED | ||
| 80 | ); | ||
| 81 |
1/2✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
|
47 | declare_arg_percent( |
| 82 |
2/6✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 47 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
94 | "pre:margin", 0, |
| 83 | 47 | "Expand border (in % of bounding box diagonal)", | |
| 84 | ARG_ADVANCED | ||
| 85 | ); | ||
| 86 |
1/2✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
|
47 | declare_arg( |
| 87 |
2/6✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 47 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
94 | "pre:repair", false, |
| 88 | 47 | "Repair input mesh" | |
| 89 | ); | ||
| 90 |
1/2✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
|
47 | declare_arg( |
| 91 |
2/6✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 47 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
94 | "pre:intersect", false, |
| 92 | 47 | "Remove intersections in input mesh" | |
| 93 | ); | ||
| 94 |
1/2✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
|
47 | declare_arg( |
| 95 |
2/6✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 47 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
94 | "pre:remove_internal_shells", true, |
| 96 | 47 | "Remove internal shells after intersection" | |
| 97 | ); | ||
| 98 |
1/2✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
|
47 | declare_arg_percent( |
| 99 |
2/6✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 47 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
94 | "pre:epsilon", 0, |
| 100 | 47 | "Colocate tolerance (in % of bounding box diagonal)", | |
| 101 | ARG_ADVANCED | ||
| 102 | ); | ||
| 103 |
1/2✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
|
47 | declare_arg_percent( |
| 104 |
2/6✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 47 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
94 | "pre:max_hole_area", 0, |
| 105 | 47 | "Fill holes smaller than (in % total area)" | |
| 106 | ); | ||
| 107 |
1/2✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
|
47 | declare_arg( |
| 108 |
2/6✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 47 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
94 | "pre:max_hole_edges", 2000, |
| 109 | 47 | "Fill holes with a smaller nb. of edges" | |
| 110 | ); | ||
| 111 |
1/2✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
|
47 | declare_arg_percent( |
| 112 |
2/6✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 47 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
94 | "pre:min_comp_area", 0, |
| 113 | 47 | "Remove small components (in % total area)" | |
| 114 | ); | ||
| 115 |
1/2✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
|
47 | declare_arg( |
| 116 |
2/6✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 47 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
94 | "pre:vcluster_bins", 0, |
| 117 | 47 | "Number of bins for vertex clustering" | |
| 118 | ); | ||
| 119 | 47 | } | |
| 120 | |||
| 121 | /** | ||
| 122 | * \brief Imports the remeshing option group | ||
| 123 | */ | ||
| 124 | 47 | void import_arg_group_remesh() { | |
| 125 |
3/8✓ Branch 2 taken 47 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 47 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 47 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
|
94 | declare_arg_group("remesh", "Remeshing phase"); |
| 126 |
1/2✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
|
47 | declare_arg( |
| 127 |
2/6✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 47 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
94 | "remesh", true, |
| 128 | 47 | "Toggles remeshing phase", ARG_ADVANCED | |
| 129 | ); | ||
| 130 |
1/2✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
|
47 | declare_arg( |
| 131 |
2/6✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 47 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
94 | "remesh:nb_pts", 30000, |
| 132 | 47 | "Number of vertices" | |
| 133 | ); | ||
| 134 |
1/2✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
|
47 | declare_arg( |
| 135 |
2/6✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 47 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
94 | "remesh:anisotropy", 0.0, |
| 136 | 47 | "Anisotropy factor" | |
| 137 | ); | ||
| 138 |
1/2✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
|
47 | declare_arg( |
| 139 |
2/6✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 47 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
94 | "remesh:by_parts", false, |
| 140 | 47 | "Part by part remeshing", ARG_ADVANCED | |
| 141 | ); | ||
| 142 |
1/2✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
|
47 | declare_arg( |
| 143 |
2/6✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 47 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
94 | "remesh:gradation", 0.0, |
| 144 | 47 | "Mesh gradation exponent" | |
| 145 | ); | ||
| 146 |
1/2✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
|
47 | declare_arg( |
| 147 |
2/6✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 47 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
94 | "remesh:lfs_samples", 10000, |
| 148 | 47 | "Number of samples for lfs (gradation)", | |
| 149 | ARG_ADVANCED | ||
| 150 | ); | ||
| 151 | |||
| 152 | #ifdef GEOGRAM_WITH_VORPALINE | ||
| 153 | declare_arg( | ||
| 154 | "remesh:sharp_edges", false, | ||
| 155 | "Reconstruct sharp edges", ARG_ADVANCED | ||
| 156 | ); | ||
| 157 | |||
| 158 | declare_arg( | ||
| 159 | "remesh:Nfactor", 5.0, | ||
| 160 | "For sharp_edges", ARG_ADVANCED | ||
| 161 | ); | ||
| 162 | #endif | ||
| 163 | |||
| 164 |
1/2✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
|
47 | declare_arg( |
| 165 |
2/6✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 47 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
94 | "remesh:multi_nerve", true, |
| 166 | 47 | "Insert new vertices to preserve topology", | |
| 167 | ARG_ADVANCED | ||
| 168 | ); | ||
| 169 |
1/2✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
|
47 | declare_arg( |
| 170 |
2/6✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 47 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
94 | "remesh:RVC_centroids", true, |
| 171 | 47 | "Use centroids of restricted Voronoi cells", ARG_ADVANCED | |
| 172 | ); | ||
| 173 |
1/2✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
|
47 | declare_arg( |
| 174 |
2/6✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 47 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
94 | "remesh:refine", false, |
| 175 | 47 | "Insert points to lower Hausdorff distance", ARG_ADVANCED | |
| 176 | ); | ||
| 177 |
1/2✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
|
47 | declare_arg( |
| 178 |
2/6✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 47 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
94 | "remesh:max_dist", 0.2, |
| 179 | 47 | "Max. distance to source mesh, relative to avg. edge len", | |
| 180 | ARG_ADVANCED | ||
| 181 | ); | ||
| 182 | 47 | } | |
| 183 | |||
| 184 | /** | ||
| 185 | * \brief Declares the algorithm option group | ||
| 186 | */ | ||
| 187 | 236 | void import_arg_group_algo() { | |
| 188 |
3/8✓ Branch 2 taken 236 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 236 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 236 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
|
472 | declare_arg_group("algo", "Algorithms", ARG_ADVANCED); |
| 189 |
1/2✓ Branch 1 taken 236 times.
✗ Branch 2 not taken.
|
236 | declare_arg( |
| 190 |
2/6✓ Branch 1 taken 236 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 236 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
472 | "algo:nn_search", "BNN", |
| 191 | 236 | "Nearest neighbors search (BNN, ...)" | |
| 192 | ); | ||
| 193 |
1/2✓ Branch 1 taken 236 times.
✗ Branch 2 not taken.
|
236 | declare_arg( |
| 194 |
2/6✓ Branch 1 taken 236 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 236 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
472 | "algo:random_seed", -1, |
| 195 | 236 | "seed for random number generator" | |
| 196 | " (-1: use default, -2: non-deterministic)" | ||
| 197 | ); | ||
| 198 |
1/2✓ Branch 1 taken 236 times.
✗ Branch 2 not taken.
|
236 | declare_arg( |
| 199 |
2/6✓ Branch 1 taken 236 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 236 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
472 | "algo:delaunay", "NN", |
| 200 | 236 | "Delaunay algorithm" | |
| 201 | ); | ||
| 202 |
1/2✓ Branch 1 taken 236 times.
✗ Branch 2 not taken.
|
236 | declare_arg( |
| 203 |
2/6✓ Branch 1 taken 236 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 236 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
472 | "algo:hole_filling", "loop_split", |
| 204 | 236 | "Hole filling mode (loop_split, Nloop_split, ear_cut)" | |
| 205 | ); | ||
| 206 |
1/2✓ Branch 1 taken 236 times.
✗ Branch 2 not taken.
|
236 | declare_arg( |
| 207 |
2/6✓ Branch 1 taken 236 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 236 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
472 | "algo:predicates", "fast", |
| 208 | 236 | "Geometric predicates (fast, exact)" | |
| 209 | ); | ||
| 210 |
1/2✓ Branch 1 taken 236 times.
✗ Branch 2 not taken.
|
236 | declare_arg( |
| 211 |
2/6✓ Branch 1 taken 236 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 236 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
472 | "algo:reconstruct", "Co3Ne", |
| 212 | 236 | "reconstruction algorithm (Co3Ne, Poisson)" | |
| 213 | ); | ||
| 214 | #ifdef GEO_OS_ANDROID | ||
| 215 | // NDK's default multithreading seems to be not SMP-compliant | ||
| 216 | // (missing memory barriers in synchronization primitives) | ||
| 217 | declare_arg( | ||
| 218 | "algo:parallel", false, | ||
| 219 | "Use parallel standard algorithms" | ||
| 220 | ); | ||
| 221 | #else | ||
| 222 |
1/2✓ Branch 1 taken 236 times.
✗ Branch 2 not taken.
|
236 | declare_arg( |
| 223 |
2/6✓ Branch 1 taken 236 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 236 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
472 | "algo:parallel", true, |
| 224 | 236 | "Use parallel standard algorithms" | |
| 225 | ); | ||
| 226 | #endif | ||
| 227 | 236 | } | |
| 228 | |||
| 229 | /** | ||
| 230 | * \brief Imports the post-processing option group | ||
| 231 | */ | ||
| 232 | 47 | void import_arg_group_post() { | |
| 233 |
3/8✓ Branch 2 taken 47 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 47 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 47 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
|
94 | declare_arg_group("post", "Postprocessing phase"); |
| 234 |
1/2✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
|
47 | declare_arg( |
| 235 |
2/6✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 47 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
94 | "post", true, |
| 236 | 47 | "Toggles post-processing phase", ARG_ADVANCED | |
| 237 | ); | ||
| 238 |
1/2✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
|
47 | declare_arg( |
| 239 |
2/6✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 47 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
94 | "post:repair", false, |
| 240 | 47 | "Repair output mesh" | |
| 241 | ); | ||
| 242 |
1/2✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
|
47 | declare_arg_percent( |
| 243 |
2/6✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 47 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
94 | "post:max_hole_area", 0.0, |
| 244 | 47 | "Fill holes smaller than (in % total area)" | |
| 245 | ); | ||
| 246 |
1/2✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
|
47 | declare_arg( |
| 247 |
2/6✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 47 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
94 | "post:max_hole_edges", 2000, |
| 248 | 47 | "Fill holes with a smaller nb. of edges than" | |
| 249 | ); | ||
| 250 |
1/2✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
|
47 | declare_arg_percent( |
| 251 |
2/6✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 47 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
94 | "post:min_comp_area", 0.0, |
| 252 | 47 | "Remove small components (in % total area)" | |
| 253 | ); | ||
| 254 |
1/2✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
|
47 | declare_arg_percent( |
| 255 |
2/6✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 47 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
94 | "post:max_deg3_dist", 0.1, |
| 256 | 47 | "Degree3 vertices threshold (in % bounding box diagonal)" | |
| 257 | ); | ||
| 258 |
1/2✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
|
47 | declare_arg( |
| 259 |
2/6✓ Branch 2 taken 47 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 47 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
94 | "post:isect", false, "Tentatively remove self-intersections" |
| 260 | ); | ||
| 261 |
1/2✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
|
47 | declare_arg( |
| 262 |
2/6✓ Branch 2 taken 47 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 47 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
94 | "post:compute_normals", false, "Compute normals" |
| 263 | ); | ||
| 264 | 47 | } | |
| 265 | |||
| 266 | /** | ||
| 267 | * \brief Imports the optimizer option group | ||
| 268 | */ | ||
| 269 | 47 | void import_arg_group_opt() { | |
| 270 |
3/8✓ Branch 2 taken 47 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 47 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 47 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
|
94 | declare_arg_group("opt", "Optimizer fine tuning", ARG_ADVANCED); |
| 271 | #ifdef GEOGRAM_WITH_HLBFGS | ||
| 272 | declare_arg( | ||
| 273 | "opt:nb_Lloyd_iter", 5, | ||
| 274 | "Number of iterations for Lloyd pre-smoothing" | ||
| 275 | ); | ||
| 276 | declare_arg( | ||
| 277 | "opt:nb_Newton_iter", 30, | ||
| 278 | "Number of iterations for Newton-CVT" | ||
| 279 | ); | ||
| 280 | declare_arg( | ||
| 281 | "opt:nb_LpCVT_iter", 30, | ||
| 282 | "Number of iterations for LpCVT" | ||
| 283 | ); | ||
| 284 | declare_arg( | ||
| 285 | "opt:Newton_m", 7, | ||
| 286 | "Number of evaluations for Hessian approximation" | ||
| 287 | ); | ||
| 288 | #else | ||
| 289 |
1/2✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
|
47 | declare_arg( |
| 290 |
2/6✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 47 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
94 | "opt:nb_Lloyd_iter", 40, |
| 291 | 47 | "Number of iterations for Lloyd pre-smoothing" | |
| 292 | ); | ||
| 293 |
1/2✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
|
47 | declare_arg( |
| 294 |
2/6✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 47 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
94 | "opt:nb_Newton_iter", 0, |
| 295 | 47 | "Number of iterations for Newton-CVT" | |
| 296 | ); | ||
| 297 |
1/2✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
|
47 | declare_arg( |
| 298 |
2/6✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 47 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
94 | "opt:nb_LpCVT_iter", 0, |
| 299 | 47 | "Number of iterations for LpCVT" | |
| 300 | ); | ||
| 301 |
1/2✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
|
47 | declare_arg( |
| 302 |
2/6✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 47 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
94 | "opt:Newton_m", 0, |
| 303 | 47 | "Number of evaluations for Hessian approximation" | |
| 304 | ); | ||
| 305 | #endif | ||
| 306 | 47 | } | |
| 307 | |||
| 308 | /** | ||
| 309 | * \brief Imports the system option group | ||
| 310 | */ | ||
| 311 | 249 | void import_arg_group_sys() { | |
| 312 |
3/8✓ Branch 2 taken 249 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 249 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 249 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
|
498 | declare_arg_group("sys", "System fine tuning", ARG_ADVANCED); |
| 313 | |||
| 314 | #ifdef GEO_DEBUG | ||
| 315 | declare_arg( | ||
| 316 | "sys:assert", "abort", | ||
| 317 | "Assertion behavior (abort, throw, breakpoint)" | ||
| 318 | ); | ||
| 319 | #else | ||
| 320 |
1/2✓ Branch 1 taken 249 times.
✗ Branch 2 not taken.
|
249 | declare_arg( |
| 321 |
2/6✓ Branch 1 taken 249 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 249 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
498 | "sys:assert", "throw", |
| 322 | 249 | "Assertion behavior (abort, throw, breakpoint)" | |
| 323 | ); | ||
| 324 | #endif | ||
| 325 | |||
| 326 |
1/2✓ Branch 1 taken 249 times.
✗ Branch 2 not taken.
|
249 | declare_arg( |
| 327 |
3/8✓ Branch 1 taken 249 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 249 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 249 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
|
498 | "sys:multithread", Process::multithreading_enabled(), |
| 328 | 249 | "Enables multi-threaded computations" | |
| 329 | ); | ||
| 330 |
1/2✓ Branch 1 taken 249 times.
✗ Branch 2 not taken.
|
249 | declare_arg( |
| 331 |
3/8✓ Branch 1 taken 249 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 249 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 249 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
|
498 | "sys:FPE", Process::FPE_enabled(), |
| 332 | 249 | "Enables floating-point exceptions" | |
| 333 | ); | ||
| 334 |
1/2✓ Branch 1 taken 249 times.
✗ Branch 2 not taken.
|
249 | declare_arg( |
| 335 |
3/8✓ Branch 1 taken 249 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 249 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 249 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
|
498 | "sys:cancel", Process::cancel_enabled(), |
| 336 | 249 | "Enables interruption of cancelable tasks" | |
| 337 | ); | ||
| 338 |
1/2✓ Branch 1 taken 249 times.
✗ Branch 2 not taken.
|
249 | declare_arg( |
| 339 |
3/8✓ Branch 1 taken 249 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 249 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 249 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
|
498 | "sys:max_threads", (int) Process::number_of_cores(), |
| 340 | 249 | "Maximum number of concurrent threads" | |
| 341 | ); | ||
| 342 |
1/2✓ Branch 1 taken 249 times.
✗ Branch 2 not taken.
|
249 | declare_arg( |
| 343 |
2/6✓ Branch 1 taken 249 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 249 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
498 | "sys:use_doubles", false, |
| 344 | 249 | "Uses double precision in output .mesh files" | |
| 345 | ); | ||
| 346 |
1/2✓ Branch 1 taken 249 times.
✗ Branch 2 not taken.
|
249 | declare_arg( |
| 347 |
2/6✓ Branch 1 taken 249 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 249 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
498 | "sys:ascii", false, |
| 348 | 249 | "Use ASCII files whenever supported" | |
| 349 | ); | ||
| 350 |
1/2✓ Branch 1 taken 249 times.
✗ Branch 2 not taken.
|
249 | declare_arg( |
| 351 |
2/6✓ Branch 1 taken 249 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 249 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
498 | "sys:compression_level", 3, |
| 352 | 249 | "Compression level for created .geogram files, in [0..9]" | |
| 353 | ); | ||
| 354 |
1/2✓ Branch 1 taken 249 times.
✗ Branch 2 not taken.
|
249 | declare_arg( |
| 355 |
2/6✓ Branch 1 taken 249 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 249 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
498 | "sys:lowmem", false, |
| 356 | 249 | "Reduces RAM consumption (but slower)" | |
| 357 | ); | ||
| 358 |
1/2✓ Branch 1 taken 249 times.
✗ Branch 2 not taken.
|
249 | declare_arg( |
| 359 |
2/6✓ Branch 1 taken 249 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 249 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
498 | "sys:stats", false, |
| 360 | 249 | "Display statistics on exit" | |
| 361 | ); | ||
| 362 | #ifdef GEO_OS_WINDOWS | ||
| 363 | declare_arg( | ||
| 364 | "sys:show_win32_console", false, | ||
| 365 | "Display MSDOS window" | ||
| 366 | ); | ||
| 367 | #endif | ||
| 368 | 249 | } | |
| 369 | |||
| 370 | /** | ||
| 371 | * \brief Imports the NL (Numerical Library) option group | ||
| 372 | */ | ||
| 373 | 249 | void import_arg_group_nl() { | |
| 374 |
3/8✓ Branch 2 taken 249 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 249 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 249 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
|
498 | declare_arg_group("nl", "OpenNL (numerical library)", ARG_ADVANCED); |
| 375 |
1/2✓ Branch 1 taken 249 times.
✗ Branch 2 not taken.
|
249 | declare_arg( |
| 376 |
2/6✓ Branch 1 taken 249 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 249 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
498 | "nl:MKL", false, |
| 377 | 249 | "Use Intel Math Kernel Library (if available in the system)" | |
| 378 | ); | ||
| 379 |
1/2✓ Branch 1 taken 249 times.
✗ Branch 2 not taken.
|
249 | declare_arg( |
| 380 |
2/6✓ Branch 1 taken 249 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 249 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
498 | "nl:CUDA", false, |
| 381 | 249 | "Use NVidia CUDA (if available in the system)" | |
| 382 | ); | ||
| 383 |
1/2✓ Branch 1 taken 249 times.
✗ Branch 2 not taken.
|
249 | declare_arg( |
| 384 |
2/6✓ Branch 1 taken 249 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 249 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
498 | "nl:CUDA:matrix_format", "fp64", |
| 385 | 249 | "one of fp32, fp64, fp32_precond" | |
| 386 | ); | ||
| 387 | 249 | } | |
| 388 | |||
| 389 | /** | ||
| 390 | * \brief Imports the Logger option group | ||
| 391 | */ | ||
| 392 | 249 | void import_arg_group_log() { | |
| 393 |
3/8✓ Branch 2 taken 249 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 249 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 249 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
|
498 | declare_arg_group("log", "Logger settings", ARG_ADVANCED); |
| 394 |
1/2✓ Branch 1 taken 249 times.
✗ Branch 2 not taken.
|
249 | declare_arg( |
| 395 |
2/6✓ Branch 1 taken 249 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 249 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
498 | "log:quiet", false, |
| 396 | 249 | "Turns logging on/off" | |
| 397 | ); | ||
| 398 |
1/2✓ Branch 1 taken 249 times.
✗ Branch 2 not taken.
|
249 | declare_arg( |
| 399 |
2/6✓ Branch 1 taken 249 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 249 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
498 | "log:pretty", true, |
| 400 | 249 | "Turns console pretty output on/off" | |
| 401 | ); | ||
| 402 |
1/2✓ Branch 1 taken 249 times.
✗ Branch 2 not taken.
|
249 | declare_arg( |
| 403 |
2/6✓ Branch 1 taken 249 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 249 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
498 | "log:file_name", "", |
| 404 | 249 | "Logs output to the specified file" | |
| 405 | ); | ||
| 406 |
1/2✓ Branch 1 taken 249 times.
✗ Branch 2 not taken.
|
249 | declare_arg( |
| 407 |
2/6✓ Branch 1 taken 249 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 249 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
498 | "log:features", "*", |
| 408 | 249 | "Semicolon separated list of features selected for log" | |
| 409 | ); | ||
| 410 |
1/2✓ Branch 1 taken 249 times.
✗ Branch 2 not taken.
|
249 | declare_arg( |
| 411 |
2/6✓ Branch 1 taken 249 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 249 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
498 | "log:features_exclude", "", |
| 412 | 249 | "Semicolon separated list of features excluded from log" | |
| 413 | ); | ||
| 414 | 249 | } | |
| 415 | |||
| 416 | /** | ||
| 417 | * \brief Imports the reconstruction option group | ||
| 418 | */ | ||
| 419 | 47 | void import_arg_group_co3ne() { | |
| 420 |
3/8✓ Branch 2 taken 47 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 47 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 47 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
|
94 | declare_arg_group("co3ne", "Reconstruction", ARG_ADVANCED); |
| 421 |
1/2✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
|
47 | declare_arg( |
| 422 |
2/6✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 47 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
94 | "co3ne", false, |
| 423 | 47 | "Use reconstruction", ARG_ADVANCED | |
| 424 | ); | ||
| 425 |
1/2✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
|
47 | declare_arg( |
| 426 |
2/6✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 47 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
94 | "co3ne:nb_neighbors", 30, |
| 427 | 47 | "Number of neighbors used in reconstruction" | |
| 428 | ); | ||
| 429 |
1/2✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
|
47 | declare_arg( |
| 430 |
2/6✓ Branch 2 taken 47 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 47 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
94 | "co3ne:Psmooth_iter", 0, "Number of smoothing iterations" |
| 431 | ); | ||
| 432 |
1/2✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
|
47 | declare_arg_percent( |
| 433 |
2/6✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 47 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
94 | "co3ne:radius", 5, |
| 434 | 47 | "Search radius (in % bounding box diagonal)" | |
| 435 | ); | ||
| 436 |
1/2✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
|
47 | declare_arg( |
| 437 |
2/6✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 47 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
94 | "co3ne:repair", true, |
| 438 | 47 | "Repair output surface" | |
| 439 | ); | ||
| 440 |
1/2✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
|
47 | declare_arg( |
| 441 |
2/6✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 47 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
94 | "co3ne:max_N_angle", 60.0, |
| 442 | 47 | "Filter bad triangles (in degrees)" | |
| 443 | ); | ||
| 444 |
1/2✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
|
47 | declare_arg_percent( |
| 445 |
2/6✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 47 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
94 | "co3ne:max_hole_area", 5, |
| 446 | 47 | "Fill holes smaller than (in % total area)" | |
| 447 | ); | ||
| 448 |
1/2✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
|
47 | declare_arg( |
| 449 |
2/6✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 47 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
94 | "co3ne:max_hole_edges", 500, |
| 450 | 47 | "Fill holes with a smaller nb. of edges" | |
| 451 | ); | ||
| 452 |
1/2✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
|
47 | declare_arg_percent( |
| 453 |
2/6✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 47 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
94 | "co3ne:min_comp_area", 0.01, |
| 454 | 47 | "Remove small components (in % total area)" | |
| 455 | ); | ||
| 456 |
1/2✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
|
47 | declare_arg( |
| 457 |
2/6✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 47 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
94 | "co3ne:min_comp_facets", 10, |
| 458 | 47 | "Remove small components (in facet nb.)" | |
| 459 | ); | ||
| 460 |
1/2✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
|
47 | declare_arg( |
| 461 |
2/6✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 47 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
94 | "co3ne:T12", true, |
| 462 | 47 | "Use also triangles seen from 1 and 2 seeds" | |
| 463 | ); | ||
| 464 |
1/2✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
|
47 | declare_arg( |
| 465 |
2/6✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 47 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
94 | "co3ne:strict", false, |
| 466 | 47 | "enforce combinatorial tests for triangles seen from 3 seeds as well" | |
| 467 | ); | ||
| 468 |
1/2✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
|
47 | declare_arg( |
| 469 |
2/6✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 47 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
94 | "co3ne:use_normals", true, |
| 470 | 47 | "Use existing normal attached to data if available" | |
| 471 | ); | ||
| 472 | |||
| 473 | // For now, in co3ne import arg group -> todo: create new import func | ||
| 474 |
3/8✓ Branch 2 taken 47 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 47 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 47 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
|
94 | declare_arg_group("poisson", "Reconstruction", ARG_ADVANCED); |
| 475 |
1/2✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
|
47 | declare_arg( |
| 476 |
2/6✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 47 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
94 | "poisson:octree_depth", 8, |
| 477 | 47 | "Octree depth for Poisson reconstruction if used" | |
| 478 | ); | ||
| 479 | 47 | } | |
| 480 | |||
| 481 | /** | ||
| 482 | * \brief Import the statistics option group | ||
| 483 | */ | ||
| 484 | 21 | void import_arg_group_stat() { | |
| 485 |
3/8✓ Branch 2 taken 21 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 21 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 21 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
|
42 | declare_arg_group("stat", "Statistics tuning"); |
| 486 |
1/2✓ Branch 1 taken 21 times.
✗ Branch 2 not taken.
|
21 | declare_arg_percent( |
| 487 |
2/6✓ Branch 1 taken 21 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 21 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
42 | "stat:sampling_step", 0.5, |
| 488 | 21 | "For Hausdorff distance" | |
| 489 | ); | ||
| 490 | 21 | } | |
| 491 | |||
| 492 | /** | ||
| 493 | * \brief Imports the polyhedral meshing option group | ||
| 494 | */ | ||
| 495 | 47 | void import_arg_group_poly() { | |
| 496 |
3/8✓ Branch 2 taken 47 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 47 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 47 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
|
94 | declare_arg_group("poly", "Polyhedral meshing", ARG_ADVANCED); |
| 497 |
1/2✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
|
47 | declare_arg( |
| 498 |
2/6✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 47 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
94 | "poly", false, |
| 499 | 47 | "Toggles polyhedral meshing" | |
| 500 | ); | ||
| 501 |
1/2✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
|
47 | declare_arg( |
| 502 |
2/6✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 47 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
94 | "poly:simplify", "tets_voronoi", |
| 503 | 47 | "one of none (generate all intersections), " | |
| 504 | "tets (regroup Vornoi cells), " | ||
| 505 | "tets_voronoi (one polygon per Voronoi facet), " | ||
| 506 | "tets_voronoi_boundary (simplify boundary)" | ||
| 507 | ); | ||
| 508 |
1/2✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
|
47 | declare_arg( |
| 509 |
2/6✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 47 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
94 | "poly:normal_angle_threshold", 1e-3, |
| 510 | 47 | "maximum normal angle deviation (in degrees) for merging boundary facets" | |
| 511 | " (used if poly:simplify=tets_voronoi_boundary)" | ||
| 512 | ); | ||
| 513 |
1/2✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
|
47 | declare_arg( |
| 514 |
2/6✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 47 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
94 | "poly:cells_shrink", 0.0, |
| 515 | 47 | "Voronoi cells shrink factor (for visualization purposes), between 0.0 and 1.0" | |
| 516 | ); | ||
| 517 |
1/2✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
|
47 | declare_arg( |
| 518 |
2/6✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 47 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
94 | "poly:points_file", "", |
| 519 | 47 | "optional points file name (if left blank, generates and optimizes remesh:nb_pts points)" | |
| 520 | ); | ||
| 521 |
1/2✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
|
47 | declare_arg( |
| 522 |
2/6✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 47 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
94 | "poly:generate_ids", false, |
| 523 | 47 | "generate unique ids for vertices and cells (saved in geogram, geogram_ascii and ovm file formats only)" | |
| 524 | ); | ||
| 525 |
1/2✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
|
47 | declare_arg( |
| 526 |
2/6✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 47 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
94 | "poly:embedding_dim", 0, |
| 527 | 47 | "force embedding dimension (0 = use input dim.)" | |
| 528 | ); | ||
| 529 |
1/2✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
|
47 | declare_arg( |
| 530 |
2/6✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 47 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
94 | "poly:tessellate_non_convex_facets", false, |
| 531 | 47 | "tessellate non-convex facets" | |
| 532 | ); | ||
| 533 | 47 | } | |
| 534 | |||
| 535 | /** | ||
| 536 | * \brief Imports the hex-dominant meshing option group | ||
| 537 | */ | ||
| 538 | ✗ | void import_arg_group_hex() { | |
| 539 | ✗ | declare_arg_group("hex", "Hex-dominant meshing", ARG_ADVANCED); | |
| 540 | ✗ | declare_arg( | |
| 541 | ✗ | "hex", false, | |
| 542 | ✗ | "Toggles hex-dominant meshing" | |
| 543 | ); | ||
| 544 | ✗ | declare_arg( | |
| 545 | ✗ | "hex:save_points", false, | |
| 546 | ✗ | "Save points to points.meshb" | |
| 547 | ); | ||
| 548 | ✗ | declare_arg( | |
| 549 | ✗ | "hex:save_tets", false, | |
| 550 | ✗ | "Save tetrahedra (before primitive merging) to tets.meshb" | |
| 551 | ); | ||
| 552 | ✗ | declare_arg( | |
| 553 | ✗ | "hex:save_surface", false, | |
| 554 | ✗ | "Save surface to surface.meshb" | |
| 555 | ); | ||
| 556 | ✗ | declare_arg( | |
| 557 | ✗ | "hex:save_frames", false, | |
| 558 | ✗ | "Save frames and surface to frames_surface.eobj" | |
| 559 | ); | ||
| 560 | ✗ | declare_arg( | |
| 561 | ✗ | "hex:prefer_seeds", true, | |
| 562 | ✗ | "In constrained mode, use seeds whenever possible" | |
| 563 | ); | ||
| 564 | ✗ | declare_arg( | |
| 565 | ✗ | "hex:constrained", true, | |
| 566 | ✗ | "Use constrained Delaunay triangulation" | |
| 567 | ); | ||
| 568 | ✗ | declare_arg( | |
| 569 | ✗ | "hex:points_file", "", | |
| 570 | ✗ | "Load points from a file" | |
| 571 | ); | ||
| 572 | ✗ | declare_arg( | |
| 573 | ✗ | "hex:tets_file", "", | |
| 574 | ✗ | "Load tetrahedra from a file" | |
| 575 | ); | ||
| 576 | ✗ | declare_arg( | |
| 577 | ✗ | "hex:frames_file", "", | |
| 578 | ✗ | "Load frames from a file" | |
| 579 | ); | ||
| 580 | ✗ | declare_arg( | |
| 581 | ✗ | "hex:prisms", false, | |
| 582 | ✗ | "generate prisms" | |
| 583 | ); | ||
| 584 | ✗ | declare_arg( | |
| 585 | ✗ | "hex:pyramids", false, | |
| 586 | ✗ | "generate pyramids" | |
| 587 | ); | ||
| 588 | ✗ | declare_arg( | |
| 589 | ✗ | "hex:algo", "PGP3d", | |
| 590 | ✗ | "one of (PGP3d, LpCVT)" | |
| 591 | ); | ||
| 592 | ✗ | declare_arg( | |
| 593 | ✗ | "hex:PGP_max_corr_prop", 0.35, | |
| 594 | ✗ | "maximum correction form (0 to deactivate)" | |
| 595 | ); | ||
| 596 | ✗ | declare_arg( | |
| 597 | ✗ | "hex:PGP_FF_free_topo", 1, | |
| 598 | ✗ | "number of free topo. frame field opt. iterations" | |
| 599 | ); | ||
| 600 | ✗ | declare_arg( | |
| 601 | ✗ | "hex:PGP_FF_fixed_topo", 1, | |
| 602 | ✗ | "number of fixed topo. frame field opt. iterations" | |
| 603 | ); | ||
| 604 | ✗ | declare_arg( | |
| 605 | ✗ | "hex:PGP_direct_solver", false, | |
| 606 | ✗ | "(tentatively) use PGP direct solver" | |
| 607 | ); | ||
| 608 | ✗ | declare_arg( | |
| 609 | ✗ | "hex:border_refine", false, | |
| 610 | ✗ | "refine border to lower Hausdorff distance" | |
| 611 | ); | ||
| 612 | ✗ | declare_arg_percent( | |
| 613 | ✗ | "hex:border_max_distance", 20, | |
| 614 | ✗ | "maximum distance to reference (in % of input average edge length)" | |
| 615 | ); | ||
| 616 | ✗ | declare_arg( | |
| 617 | ✗ | "hex:keep_border", false, "keep initial border mesh" | |
| 618 | ); | ||
| 619 | ✗ | } | |
| 620 | |||
| 621 | /** | ||
| 622 | * \brief Imports the quad-dominant meshing option group | ||
| 623 | */ | ||
| 624 | ✗ | void import_arg_group_quad() { | |
| 625 | ✗ | declare_arg_group("quad", "Quad-dominant meshing", ARG_ADVANCED); | |
| 626 | ✗ | declare_arg( | |
| 627 | ✗ | "quad", false, | |
| 628 | ✗ | "Toggles quad-dominant meshing" | |
| 629 | ); | ||
| 630 | ✗ | declare_arg( | |
| 631 | ✗ | "quad:relative_edge_length", | |
| 632 | 1.0, | ||
| 633 | ✗ | "relative edge length" | |
| 634 | ); | ||
| 635 | ✗ | declare_arg( | |
| 636 | ✗ | "quad:optimize_parity", false, | |
| 637 | ✗ | "Optimize quads parity when splitting charts (experimental)" | |
| 638 | ); | ||
| 639 | ✗ | declare_arg( | |
| 640 | ✗ | "quad:max_scaling_correction", 1.0, | |
| 641 | ✗ | "maximum scaling correction factor (use 1.0 to disable)" | |
| 642 | ); | ||
| 643 | ✗ | } | |
| 644 | |||
| 645 | /** | ||
| 646 | * \brief Imports the tetrahedral meshing option group | ||
| 647 | */ | ||
| 648 | 47 | void import_arg_group_tet() { | |
| 649 |
3/8✓ Branch 2 taken 47 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 47 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 47 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
|
94 | declare_arg_group("tet", "Tetrahedral meshing", ARG_ADVANCED); |
| 650 |
1/2✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
|
47 | declare_arg( |
| 651 |
2/6✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 47 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
94 | "tet", false, |
| 652 | 47 | "Toggles tetrahedral meshing" | |
| 653 | ); | ||
| 654 |
1/2✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
|
47 | declare_arg( |
| 655 |
2/6✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 47 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
94 | "tet:refine", true, |
| 656 | 47 | "Generates additional points to improve mesh quality" | |
| 657 | ); | ||
| 658 |
1/2✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
|
47 | declare_arg( |
| 659 |
2/6✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 47 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
94 | "tet:preprocess", true, |
| 660 | 47 | "Pre-processes surface before meshing" | |
| 661 | ); | ||
| 662 |
1/2✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
|
47 | declare_arg( |
| 663 |
2/6✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 47 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
94 | "tet:quality", 2.0, |
| 664 | 47 | "desired element quality (the lower, the better, 2.0 means reasonable)" | |
| 665 | ); | ||
| 666 | 47 | } | |
| 667 | |||
| 668 | /** | ||
| 669 | * \brief Imports the graphics option group | ||
| 670 | */ | ||
| 671 | ✗ | void import_arg_group_gfx() { | |
| 672 | ✗ | declare_arg_group("gfx", "OpenGL graphics options", ARG_ADVANCED); | |
| 673 | ✗ | declare_arg( | |
| 674 | ✗ | "gfx:GL_profile", | |
| 675 | #if defined(GEO_OS_ANDROID) | ||
| 676 | "ES", | ||
| 677 | #else | ||
| 678 | "core", | ||
| 679 | #endif | ||
| 680 | ✗ | "one of core,ES" | |
| 681 | ); | ||
| 682 | ✗ | declare_arg( | |
| 683 | ✗ | "gfx:GL_version", 0.0, | |
| 684 | ✗ | "If non-zero, override GL version detection" | |
| 685 | ); | ||
| 686 | ✗ | declare_arg( | |
| 687 | ✗ | "gfx:GL_debug", false, | |
| 688 | ✗ | "OpenGL debugging context" | |
| 689 | ); | ||
| 690 | ✗ | declare_arg( | |
| 691 | ✗ | "gfx:GLSL_version", 0.0, | |
| 692 | ✗ | "If non-zero, overrides GLSL version detection" | |
| 693 | ); | ||
| 694 | ✗ | declare_arg( | |
| 695 | ✗ | "gfx:GLUP_profile", "auto", | |
| 696 | ✗ | "one of auto, GLUP150, GLUP440, GLUPES2" | |
| 697 | ); | ||
| 698 | ✗ | declare_arg("gfx:full_screen", false, "full screen mode"); | |
| 699 | ✗ | declare_arg( | |
| 700 | ✗ | "gfx:no_decoration", false, | |
| 701 | ✗ | "no window decoration (full screen mode)" | |
| 702 | ); | ||
| 703 | ✗ | declare_arg( | |
| 704 | ✗ | "gfx:transparent", false, | |
| 705 | ✗ | "use transparent backgroung (desktop integration)" | |
| 706 | ); | ||
| 707 | ✗ | declare_arg( | |
| 708 | ✗ | "gfx:GLSL_tesselation", true, "use tesselation shaders if available" | |
| 709 | ); | ||
| 710 | ✗ | declare_arg("gfx:geometry", "1024x1024", "resolution"); | |
| 711 | ✗ | declare_arg("gfx:keypress", "", "initial key sequence sent to viewer"); | |
| 712 | ✗ | declare_arg( | |
| 713 | ✗ | "gfx:adapter", "default", | |
| 714 | ✗ | "one of default, intel, nvidia (for optimus-prime systems)" | |
| 715 | ); | ||
| 716 | ✗ | declare_arg( | |
| 717 | ✗ | "gfx:hidden", false, | |
| 718 | ✗ | "if set, window is hidden (useful for offscreen rendering)" | |
| 719 | ); | ||
| 720 | ✗ | declare_arg( | |
| 721 | ✗ | "gfx:monitor", -1, | |
| 722 | ✗ | "monitor where to open window, or -1 for default" | |
| 723 | ); | ||
| 724 | ✗ | } | |
| 725 | |||
| 726 | /** | ||
| 727 | * \brief Imports the biblio option group | ||
| 728 | */ | ||
| 729 | 249 | void import_arg_group_biblio() { | |
| 730 |
3/8✓ Branch 2 taken 249 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 249 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 249 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
|
498 | declare_arg_group("biblio", "Bibliography options", ARG_ADVANCED); |
| 731 |
3/8✓ Branch 2 taken 249 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 249 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 249 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
|
498 | declare_arg("biblio", false, "output bibliography citations"); |
| 732 |
1/2✓ Branch 1 taken 249 times.
✗ Branch 2 not taken.
|
249 | declare_arg( |
| 733 |
2/6✓ Branch 1 taken 249 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 249 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
498 | "biblio:command_line", false, |
| 734 | 249 | "dump all command line arguments in biblio. report" | |
| 735 | ); | ||
| 736 | 249 | } | |
| 737 | |||
| 738 | /** | ||
| 739 | * \brief Imports the gui option group. | ||
| 740 | */ | ||
| 741 | ✗ | void import_arg_group_gui() { | |
| 742 | ✗ | declare_arg_group("gui", "gui options", ARG_ADVANCED); | |
| 743 | ✗ | declare_arg("gui:state", "", "gui layout state"); | |
| 744 | ✗ | declare_arg("gui:style", "Dark", "gui style, one of Dark,Light"); | |
| 745 | ✗ | declare_arg("gui:font_size", 18, "font size"); | |
| 746 | ✗ | declare_arg("gui:expert", false, "expert mode for developpers"); | |
| 747 | #ifdef GEO_OS_ANDROID | ||
| 748 | declare_arg( | ||
| 749 | "gui:phone_screen", true, "running on a phone (or testing)" | ||
| 750 | ); | ||
| 751 | #else | ||
| 752 | ✗ | declare_arg( | |
| 753 | ✗ | "gui:phone_screen", false, "running on a phone (or testing)" | |
| 754 | ); | ||
| 755 | #endif | ||
| 756 | ✗ | } | |
| 757 | |||
| 758 | /************************************************************************/ | ||
| 759 | |||
| 760 | /** | ||
| 761 | * \brief Sets the CAD profile | ||
| 762 | */ | ||
| 763 | 2 | void set_profile_cad() { | |
| 764 |
1/2✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
2 | set_arg("pre:repair", true); |
| 765 |
1/2✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
2 | set_arg_percent("pre:margin", 0.05); |
| 766 |
1/2✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
2 | set_arg("post:repair", true); |
| 767 |
1/2✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
2 | set_arg("remesh:sharp_edges", true); |
| 768 |
1/2✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
2 | set_arg("remesh:RVC_centroids", false); |
| 769 | 2 | } | |
| 770 | |||
| 771 | /** | ||
| 772 | * \brief Sets the scanner profile | ||
| 773 | */ | ||
| 774 | 228 | void set_profile_scan() { | |
| 775 |
1/2✓ Branch 2 taken 228 times.
✗ Branch 3 not taken.
|
228 | set_arg("pre:Nsmooth_iter", 3); |
| 776 |
1/2✓ Branch 2 taken 228 times.
✗ Branch 3 not taken.
|
228 | set_arg("pre:repair", true); |
| 777 |
1/2✓ Branch 2 taken 228 times.
✗ Branch 3 not taken.
|
228 | set_arg_percent("pre:max_hole_area", 10); |
| 778 |
1/2✓ Branch 2 taken 228 times.
✗ Branch 3 not taken.
|
228 | set_arg("remesh:anisotropy", 1.0); |
| 779 |
1/2✓ Branch 2 taken 228 times.
✗ Branch 3 not taken.
|
228 | set_arg_percent("pre:min_comp_area", 3); |
| 780 |
1/2✓ Branch 2 taken 228 times.
✗ Branch 3 not taken.
|
228 | set_arg_percent("post:min_comp_area", 3); |
| 781 | 228 | } | |
| 782 | |||
| 783 | /** | ||
| 784 | * \brief Sets the conversion profile | ||
| 785 | */ | ||
| 786 | 8 | void set_profile_convert() { | |
| 787 |
1/2✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
|
8 | set_arg("pre", false); |
| 788 |
1/2✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
|
8 | set_arg("post", false); |
| 789 |
1/2✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
|
8 | set_arg("remesh", false); |
| 790 | 8 | } | |
| 791 | |||
| 792 | /** | ||
| 793 | * \brief Sets the repair profile | ||
| 794 | */ | ||
| 795 | ✗ | void set_profile_repair() { | |
| 796 | ✗ | set_arg("pre", true); | |
| 797 | ✗ | set_arg("pre:repair", true); | |
| 798 | ✗ | set_arg("pre:intersect", true); | |
| 799 | ✗ | set_arg("pre:intersect_remove_internal_shells",true); | |
| 800 | ✗ | set_arg("post", false); | |
| 801 | ✗ | set_arg("remesh", false); | |
| 802 | ✗ | } | |
| 803 | |||
| 804 | /** | ||
| 805 | * \brief Sets the heal profile | ||
| 806 | */ | ||
| 807 | ✗ | void set_profile_heal() { | |
| 808 | ✗ | set_arg("remesh", true); | |
| 809 | ✗ | set_arg("remesh:multi_nerve", false); | |
| 810 | ✗ | set_arg("post", true); | |
| 811 | ✗ | set_arg_percent("post:max_hole_area", 10); | |
| 812 | ✗ | set_arg_percent("post:min_comp_area", 3); | |
| 813 | ✗ | } | |
| 814 | |||
| 815 | /** | ||
| 816 | * \brief Sets the reconstruction profile | ||
| 817 | */ | ||
| 818 | 2 | void set_profile_reconstruct() { | |
| 819 |
1/2✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
2 | set_arg("pre", false); |
| 820 |
1/2✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
2 | set_arg("post", false); |
| 821 |
1/2✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
2 | set_arg("remesh", false); |
| 822 |
1/2✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
2 | set_arg("co3ne", true); |
| 823 | 2 | } | |
| 824 | |||
| 825 | /** | ||
| 826 | * \brief Sets the hex-dominant meshing profile | ||
| 827 | */ | ||
| 828 | ✗ | void set_profile_hex() { | |
| 829 | ✗ | set_arg("hex", true); | |
| 830 | ✗ | } | |
| 831 | |||
| 832 | /** | ||
| 833 | * \brief Sets the quad-dominant meshing profile | ||
| 834 | */ | ||
| 835 | ✗ | void set_profile_quad() { | |
| 836 | ✗ | set_arg("quad", true); | |
| 837 | ✗ | } | |
| 838 | |||
| 839 | /** | ||
| 840 | * \brief Sets the tetrahedral meshing profile | ||
| 841 | */ | ||
| 842 | ✗ | void set_profile_tet() { | |
| 843 | ✗ | set_arg("tet", true); | |
| 844 | ✗ | } | |
| 845 | |||
| 846 | /** | ||
| 847 | * \brief Sets the polyhedral meshing profile | ||
| 848 | */ | ||
| 849 | 4 | void set_profile_poly() { | |
| 850 |
1/2✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
|
4 | set_arg("poly", true); |
| 851 | 4 | } | |
| 852 | } | ||
| 853 | |||
| 854 | namespace GEO { | ||
| 855 | |||
| 856 | namespace CmdLine { | ||
| 857 | |||
| 858 | 835 | bool import_arg_group( | |
| 859 | const std::string& name | ||
| 860 | ) { | ||
| 861 |
3/4✓ Branch 0 taken 249 times.
✓ Branch 1 taken 586 times.
✓ Branch 3 taken 249 times.
✗ Branch 4 not taken.
|
835 | static std::set<std::string> imported; |
| 862 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 835 times.
|
835 | if(imported.find(name) != imported.end()) { |
| 863 | return true; | ||
| 864 | } | ||
| 865 | imported.insert(name); | ||
| 866 | |||
| 867 |
2/2✓ Branch 0 taken 249 times.
✓ Branch 1 taken 586 times.
|
835 | if(name == "standard") { |
| 868 | 249 | import_arg_group_global(); | |
| 869 | 249 | import_arg_group_sys(); | |
| 870 | 249 | import_arg_group_nl(); | |
| 871 | 249 | import_arg_group_log(); | |
| 872 | 249 | import_arg_group_biblio(); | |
| 873 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 586 times.
|
586 | } else if(name == "global") { |
| 874 | ✗ | import_arg_group_global(); | |
| 875 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 586 times.
|
586 | } else if(name == "nl") { |
| 876 | ✗ | import_arg_group_nl(); | |
| 877 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 586 times.
|
586 | } else if(name == "sys") { |
| 878 | ✗ | import_arg_group_sys(); | |
| 879 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 586 times.
|
586 | } else if(name == "log") { |
| 880 | ✗ | import_arg_group_log(); | |
| 881 |
2/2✓ Branch 0 taken 47 times.
✓ Branch 1 taken 539 times.
|
586 | } else if(name == "pre") { |
| 882 | 47 | import_arg_group_pre(); | |
| 883 |
2/2✓ Branch 0 taken 47 times.
✓ Branch 1 taken 492 times.
|
539 | } else if(name == "remesh") { |
| 884 | 47 | import_arg_group_remesh(); | |
| 885 |
2/2✓ Branch 0 taken 236 times.
✓ Branch 1 taken 256 times.
|
492 | } else if(name == "algo") { |
| 886 | 236 | import_arg_group_algo(); | |
| 887 |
2/2✓ Branch 0 taken 47 times.
✓ Branch 1 taken 209 times.
|
256 | } else if(name == "post") { |
| 888 | 47 | import_arg_group_post(); | |
| 889 |
2/2✓ Branch 0 taken 47 times.
✓ Branch 1 taken 162 times.
|
209 | } else if(name == "opt") { |
| 890 | 47 | import_arg_group_opt(); | |
| 891 |
2/2✓ Branch 0 taken 47 times.
✓ Branch 1 taken 115 times.
|
162 | } else if(name == "co3ne") { |
| 892 | 47 | import_arg_group_co3ne(); | |
| 893 |
2/2✓ Branch 0 taken 21 times.
✓ Branch 1 taken 94 times.
|
115 | } else if(name == "stat") { |
| 894 | 21 | import_arg_group_stat(); | |
| 895 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 94 times.
|
94 | } else if(name == "quad") { |
| 896 | ✗ | import_arg_group_quad(); | |
| 897 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 94 times.
|
94 | } else if(name == "hex") { |
| 898 | ✗ | import_arg_group_hex(); | |
| 899 |
2/2✓ Branch 0 taken 47 times.
✓ Branch 1 taken 47 times.
|
94 | } else if(name == "tet") { |
| 900 | 47 | import_arg_group_tet(); | |
| 901 |
1/2✓ Branch 0 taken 47 times.
✗ Branch 1 not taken.
|
47 | } else if(name == "poly") { |
| 902 | 47 | import_arg_group_poly(); | |
| 903 | ✗ | } else if(name == "gfx") { | |
| 904 | ✗ | import_arg_group_gfx(); | |
| 905 | ✗ | } else if(name == "gui") { | |
| 906 | ✗ | import_arg_group_gui(); | |
| 907 | } else { | ||
| 908 | ✗ | Logger::instance()->set_quiet(false); | |
| 909 | ✗ | Logger::err("CmdLine") | |
| 910 | << "No such option group: " << name | ||
| 911 | << std::endl; | ||
| 912 | ✗ | return false; | |
| 913 | } | ||
| 914 | return true; | ||
| 915 | } | ||
| 916 | |||
| 917 | 245 | bool set_profile( | |
| 918 | const std::string& name | ||
| 919 | ) { | ||
| 920 |
2/2✓ Branch 0 taken 2 times.
✓ Branch 1 taken 243 times.
|
245 | if(name == "cad") { |
| 921 | 2 | set_profile_cad(); | |
| 922 |
2/2✓ Branch 0 taken 228 times.
✓ Branch 1 taken 15 times.
|
243 | } else if(name == "scan") { |
| 923 | 228 | set_profile_scan(); | |
| 924 |
2/2✓ Branch 0 taken 8 times.
✓ Branch 1 taken 7 times.
|
15 | } else if(name == "convert") { |
| 925 | 8 | set_profile_convert(); | |
| 926 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 7 times.
|
7 | } else if(name == "repair") { |
| 927 | ✗ | set_profile_repair(); | |
| 928 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 7 times.
|
7 | } else if(name == "heal") { |
| 929 | ✗ | set_profile_heal(); | |
| 930 |
2/2✓ Branch 0 taken 2 times.
✓ Branch 1 taken 5 times.
|
7 | } else if(name == "reconstruct") { |
| 931 | 2 | set_profile_reconstruct(); | |
| 932 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
|
5 | } else if(name == "tet") { |
| 933 | ✗ | set_profile_tet(); | |
| 934 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
|
5 | } else if(name == "quad") { |
| 935 | ✗ | set_profile_quad(); | |
| 936 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
|
5 | } else if(name == "hex") { |
| 937 | ✗ | set_profile_hex(); | |
| 938 |
2/2✓ Branch 0 taken 4 times.
✓ Branch 1 taken 1 times.
|
5 | } else if(name == "poly") { |
| 939 | 4 | set_profile_poly(); | |
| 940 | } else { | ||
| 941 | 1 | Logger::instance()->set_quiet(false); | |
| 942 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | Logger::err("CmdLine") |
| 943 | << "No such profile: " << name | ||
| 944 | << std::endl; | ||
| 945 | 1 | return false; | |
| 946 | } | ||
| 947 | return true; | ||
| 948 | } | ||
| 949 | } | ||
| 950 | } | ||
| 951 |