| 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 | 251 | void import_arg_group_global() { | |
| 56 |
1/2✓ Branch 1 taken 251 times.
✗ Branch 2 not taken.
|
251 | declare_arg( |
| 57 |
1/2✓ Branch 1 taken 251 times.
✗ Branch 2 not taken.
|
502 | "profile", "scan", |
| 58 |
1/2✓ Branch 1 taken 251 times.
✗ Branch 2 not taken.
|
753 | "Vorpaline mode " |
| 59 | "(scan, convert, repair, heal, cad, tet, poly, hex, quad)" | ||
| 60 | ); | ||
| 61 |
1/2✓ Branch 1 taken 251 times.
✗ Branch 2 not taken.
|
251 | declare_arg( |
| 62 |
1/2✓ Branch 1 taken 251 times.
✗ Branch 2 not taken.
|
502 | "debug", false, |
| 63 |
1/2✓ Branch 1 taken 251 times.
✗ Branch 2 not taken.
|
502 | "Toggles debug mode", ARG_ADVANCED |
| 64 | ); | ||
| 65 | 251 | } | |
| 66 | |||
| 67 | /** | ||
| 68 | * \brief Imports the pre-processing option group | ||
| 69 | */ | ||
| 70 | 48 | void import_arg_group_pre() { | |
| 71 |
3/6✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 48 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 48 times.
✗ Branch 8 not taken.
|
192 | declare_arg_group("pre", "Preprocessing phase"); |
| 72 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
48 | declare_arg( |
| 73 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
96 | "pre", true, |
| 74 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
144 | "Toggles pre-processing phase", ARG_ADVANCED |
| 75 | ); | ||
| 76 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
48 | declare_arg( |
| 77 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
96 | "pre:Nsmooth_iter", 1, |
| 78 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
144 | "Number of iterations for normals smoothing", |
| 79 | ARG_ADVANCED | ||
| 80 | ); | ||
| 81 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
48 | declare_arg_percent( |
| 82 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
96 | "pre:margin", 0, |
| 83 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
144 | "Expand border (in % of bounding box diagonal)", |
| 84 | ARG_ADVANCED | ||
| 85 | ); | ||
| 86 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
48 | declare_arg( |
| 87 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
96 | "pre:repair", false, |
| 88 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
192 | "Repair input mesh" |
| 89 | ); | ||
| 90 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
48 | declare_arg( |
| 91 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
96 | "pre:intersect", false, |
| 92 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
144 | "Remove intersections in input mesh" |
| 93 | ); | ||
| 94 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
48 | declare_arg( |
| 95 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
96 | "pre:remove_internal_shells", true, |
| 96 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
144 | "Remove internal shells after intersection" |
| 97 | ); | ||
| 98 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
48 | declare_arg_percent( |
| 99 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
96 | "pre:epsilon", 0, |
| 100 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
144 | "Colocate tolerance (in % of bounding box diagonal)", |
| 101 | ARG_ADVANCED | ||
| 102 | ); | ||
| 103 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
48 | declare_arg_percent( |
| 104 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
96 | "pre:max_hole_area", 0, |
| 105 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
144 | "Fill holes smaller than (in % total area)" |
| 106 | ); | ||
| 107 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
48 | declare_arg( |
| 108 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
96 | "pre:max_hole_edges", 2000, |
| 109 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
144 | "Fill holes with a smaller nb. of edges" |
| 110 | ); | ||
| 111 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
48 | declare_arg_percent( |
| 112 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
96 | "pre:min_comp_area", 0, |
| 113 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
144 | "Remove small components (in % total area)" |
| 114 | ); | ||
| 115 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
48 | declare_arg( |
| 116 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
96 | "pre:vcluster_bins", 0, |
| 117 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
96 | "Number of bins for vertex clustering" |
| 118 | ); | ||
| 119 | 48 | } | |
| 120 | |||
| 121 | /** | ||
| 122 | * \brief Imports the remeshing option group | ||
| 123 | */ | ||
| 124 | 48 | void import_arg_group_remesh() { | |
| 125 |
3/6✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 48 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 48 times.
✗ Branch 8 not taken.
|
192 | declare_arg_group("remesh", "Remeshing phase"); |
| 126 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
48 | declare_arg( |
| 127 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
96 | "remesh", true, |
| 128 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
144 | "Toggles remeshing phase", ARG_ADVANCED |
| 129 | ); | ||
| 130 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
48 | declare_arg( |
| 131 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
96 | "remesh:nb_pts", 30000, |
| 132 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
144 | "Number of vertices" |
| 133 | ); | ||
| 134 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
48 | declare_arg( |
| 135 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
96 | "remesh:anisotropy", 0.0, |
| 136 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
144 | "Anisotropy factor" |
| 137 | ); | ||
| 138 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
48 | declare_arg( |
| 139 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
96 | "remesh:by_parts", false, |
| 140 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
144 | "Part by part remeshing", ARG_ADVANCED |
| 141 | ); | ||
| 142 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
48 | declare_arg( |
| 143 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
96 | "remesh:gradation", 0.0, |
| 144 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
144 | "Mesh gradation exponent" |
| 145 | ); | ||
| 146 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
48 | declare_arg( |
| 147 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
96 | "remesh:lfs_samples", 10000, |
| 148 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
144 | "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 48 times.
✗ Branch 2 not taken.
|
48 | declare_arg( |
| 165 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
96 | "remesh:multi_nerve", true, |
| 166 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
144 | "Insert new vertices to preserve topology", |
| 167 | ARG_ADVANCED | ||
| 168 | ); | ||
| 169 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
48 | declare_arg( |
| 170 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
96 | "remesh:RVC_centroids", true, |
| 171 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
144 | "Use centroids of restricted Voronoi cells", ARG_ADVANCED |
| 172 | ); | ||
| 173 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
48 | declare_arg( |
| 174 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
96 | "remesh:refine", false, |
| 175 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
144 | "Insert points to lower Hausdorff distance", ARG_ADVANCED |
| 176 | ); | ||
| 177 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
48 | declare_arg( |
| 178 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
96 | "remesh:max_dist", 0.2, |
| 179 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
96 | "Max. distance to source mesh, relative to avg. edge len", |
| 180 | ARG_ADVANCED | ||
| 181 | ); | ||
| 182 | 48 | } | |
| 183 | |||
| 184 | /** | ||
| 185 | * \brief Declares the algorithm option group | ||
| 186 | */ | ||
| 187 | 238 | void import_arg_group_algo() { | |
| 188 |
3/6✓ Branch 1 taken 238 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 238 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 238 times.
✗ Branch 8 not taken.
|
952 | declare_arg_group("algo", "Algorithms", ARG_ADVANCED); |
| 189 |
1/2✓ Branch 1 taken 238 times.
✗ Branch 2 not taken.
|
238 | declare_arg( |
| 190 |
1/2✓ Branch 1 taken 238 times.
✗ Branch 2 not taken.
|
476 | "algo:nn_search", "BNN", |
| 191 |
1/2✓ Branch 1 taken 238 times.
✗ Branch 2 not taken.
|
714 | "Nearest neighbors search (BNN, ...)" |
| 192 | ); | ||
| 193 |
1/2✓ Branch 1 taken 238 times.
✗ Branch 2 not taken.
|
238 | declare_arg( |
| 194 |
1/2✓ Branch 1 taken 238 times.
✗ Branch 2 not taken.
|
476 | "algo:random_seed", -1, |
| 195 |
1/2✓ Branch 1 taken 238 times.
✗ Branch 2 not taken.
|
714 | "seed for random number generator" |
| 196 | " (-1: use default, -2: non-deterministic)" | ||
| 197 | ); | ||
| 198 |
1/2✓ Branch 1 taken 238 times.
✗ Branch 2 not taken.
|
238 | declare_arg( |
| 199 |
1/2✓ Branch 1 taken 238 times.
✗ Branch 2 not taken.
|
476 | "algo:delaunay", "NN", |
| 200 |
1/2✓ Branch 1 taken 238 times.
✗ Branch 2 not taken.
|
714 | "Delaunay algorithm" |
| 201 | ); | ||
| 202 |
1/2✓ Branch 1 taken 238 times.
✗ Branch 2 not taken.
|
238 | declare_arg( |
| 203 |
1/2✓ Branch 1 taken 238 times.
✗ Branch 2 not taken.
|
476 | "algo:hole_filling", "loop_split", |
| 204 |
1/2✓ Branch 1 taken 238 times.
✗ Branch 2 not taken.
|
714 | "Hole filling mode (loop_split, Nloop_split, ear_cut)" |
| 205 | ); | ||
| 206 |
1/2✓ Branch 1 taken 238 times.
✗ Branch 2 not taken.
|
238 | declare_arg( |
| 207 |
1/2✓ Branch 1 taken 238 times.
✗ Branch 2 not taken.
|
476 | "algo:predicates", "fast", |
| 208 |
1/2✓ Branch 1 taken 238 times.
✗ Branch 2 not taken.
|
714 | "Geometric predicates (fast, exact)" |
| 209 | ); | ||
| 210 |
1/2✓ Branch 1 taken 238 times.
✗ Branch 2 not taken.
|
238 | declare_arg( |
| 211 |
1/2✓ Branch 1 taken 238 times.
✗ Branch 2 not taken.
|
476 | "algo:reconstruct", "Co3Ne", |
| 212 |
1/2✓ Branch 1 taken 238 times.
✗ Branch 2 not taken.
|
714 | "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 238 times.
✗ Branch 2 not taken.
|
238 | declare_arg( |
| 223 |
1/2✓ Branch 1 taken 238 times.
✗ Branch 2 not taken.
|
476 | "algo:parallel", true, |
| 224 |
1/2✓ Branch 1 taken 238 times.
✗ Branch 2 not taken.
|
476 | "Use parallel standard algorithms" |
| 225 | ); | ||
| 226 | #endif | ||
| 227 | 238 | } | |
| 228 | |||
| 229 | /** | ||
| 230 | * \brief Imports the post-processing option group | ||
| 231 | */ | ||
| 232 | 48 | void import_arg_group_post() { | |
| 233 |
3/6✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 48 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 48 times.
✗ Branch 8 not taken.
|
192 | declare_arg_group("post", "Postprocessing phase"); |
| 234 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
48 | declare_arg( |
| 235 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
96 | "post", true, |
| 236 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
144 | "Toggles post-processing phase", ARG_ADVANCED |
| 237 | ); | ||
| 238 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
48 | declare_arg( |
| 239 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
96 | "post:repair", false, |
| 240 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
144 | "Repair output mesh" |
| 241 | ); | ||
| 242 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
48 | declare_arg_percent( |
| 243 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
96 | "post:max_hole_area", 0.0, |
| 244 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
144 | "Fill holes smaller than (in % total area)" |
| 245 | ); | ||
| 246 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
48 | declare_arg( |
| 247 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
96 | "post:max_hole_edges", 2000, |
| 248 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
144 | "Fill holes with a smaller nb. of edges than" |
| 249 | ); | ||
| 250 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
48 | declare_arg_percent( |
| 251 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
96 | "post:min_comp_area", 0.0, |
| 252 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
144 | "Remove small components (in % total area)" |
| 253 | ); | ||
| 254 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
48 | declare_arg_percent( |
| 255 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
96 | "post:max_deg3_dist", 0.1, |
| 256 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
144 | "Degree3 vertices threshold (in % bounding box diagonal)" |
| 257 | ); | ||
| 258 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
48 | declare_arg( |
| 259 |
2/4✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 48 times.
✗ Branch 5 not taken.
|
240 | "post:isect", false, "Tentatively remove self-intersections" |
| 260 | ); | ||
| 261 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
48 | declare_arg( |
| 262 |
2/4✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 48 times.
✗ Branch 5 not taken.
|
192 | "post:compute_normals", false, "Compute normals" |
| 263 | ); | ||
| 264 | 48 | } | |
| 265 | |||
| 266 | /** | ||
| 267 | * \brief Imports the optimizer option group | ||
| 268 | */ | ||
| 269 | 48 | void import_arg_group_opt() { | |
| 270 |
3/6✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 48 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 48 times.
✗ Branch 8 not taken.
|
192 | declare_arg_group("opt", "Optimizer fine tuning", ARG_ADVANCED); |
| 271 | #ifdef GEOGRAM_WITH_HLBFGS | ||
| 272 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
48 | declare_arg( |
| 273 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
96 | "opt:nb_Lloyd_iter", 5, |
| 274 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
144 | "Number of iterations for Lloyd pre-smoothing" |
| 275 | ); | ||
| 276 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
48 | declare_arg( |
| 277 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
96 | "opt:nb_Newton_iter", 30, |
| 278 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
144 | "Number of iterations for Newton-CVT" |
| 279 | ); | ||
| 280 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
48 | declare_arg( |
| 281 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
96 | "opt:nb_LpCVT_iter", 30, |
| 282 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
144 | "Number of iterations for LpCVT" |
| 283 | ); | ||
| 284 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
48 | declare_arg( |
| 285 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
96 | "opt:Newton_m", 7, |
| 286 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
96 | "Number of evaluations for Hessian approximation" |
| 287 | ); | ||
| 288 | #else | ||
| 289 | declare_arg( | ||
| 290 | "opt:nb_Lloyd_iter", 40, | ||
| 291 | "Number of iterations for Lloyd pre-smoothing" | ||
| 292 | ); | ||
| 293 | declare_arg( | ||
| 294 | "opt:nb_Newton_iter", 0, | ||
| 295 | "Number of iterations for Newton-CVT" | ||
| 296 | ); | ||
| 297 | declare_arg( | ||
| 298 | "opt:nb_LpCVT_iter", 0, | ||
| 299 | "Number of iterations for LpCVT" | ||
| 300 | ); | ||
| 301 | declare_arg( | ||
| 302 | "opt:Newton_m", 0, | ||
| 303 | "Number of evaluations for Hessian approximation" | ||
| 304 | ); | ||
| 305 | #endif | ||
| 306 | 48 | } | |
| 307 | |||
| 308 | /** | ||
| 309 | * \brief Imports the system option group | ||
| 310 | */ | ||
| 311 | 251 | void import_arg_group_sys() { | |
| 312 |
3/6✓ Branch 1 taken 251 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 251 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 251 times.
✗ Branch 8 not taken.
|
1004 | declare_arg_group("sys", "System fine tuning", ARG_ADVANCED); |
| 313 | |||
| 314 | #ifdef GEO_DEBUG | ||
| 315 |
1/2✓ Branch 1 taken 251 times.
✗ Branch 2 not taken.
|
251 | declare_arg( |
| 316 |
1/2✓ Branch 1 taken 251 times.
✗ Branch 2 not taken.
|
502 | "sys:assert", "abort", |
| 317 |
1/2✓ Branch 1 taken 251 times.
✗ Branch 2 not taken.
|
753 | "Assertion behavior (abort, throw, breakpoint)" |
| 318 | ); | ||
| 319 | #else | ||
| 320 | declare_arg( | ||
| 321 | "sys:assert", "throw", | ||
| 322 | "Assertion behavior (abort, throw, breakpoint)" | ||
| 323 | ); | ||
| 324 | #endif | ||
| 325 | |||
| 326 |
1/2✓ Branch 1 taken 251 times.
✗ Branch 2 not taken.
|
251 | declare_arg( |
| 327 |
2/4✓ Branch 1 taken 251 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 251 times.
✗ Branch 5 not taken.
|
753 | "sys:multithread", Process::multithreading_enabled(), |
| 328 |
1/2✓ Branch 1 taken 251 times.
✗ Branch 2 not taken.
|
753 | "Enables multi-threaded computations" |
| 329 | ); | ||
| 330 |
1/2✓ Branch 1 taken 251 times.
✗ Branch 2 not taken.
|
251 | declare_arg( |
| 331 |
2/4✓ Branch 1 taken 251 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 251 times.
✗ Branch 5 not taken.
|
753 | "sys:FPE", Process::FPE_enabled(), |
| 332 |
1/2✓ Branch 1 taken 251 times.
✗ Branch 2 not taken.
|
753 | "Enables floating-point exceptions" |
| 333 | ); | ||
| 334 |
1/2✓ Branch 1 taken 251 times.
✗ Branch 2 not taken.
|
251 | declare_arg( |
| 335 |
2/4✓ Branch 1 taken 251 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 251 times.
✗ Branch 5 not taken.
|
753 | "sys:cancel", Process::cancel_enabled(), |
| 336 |
1/2✓ Branch 1 taken 251 times.
✗ Branch 2 not taken.
|
753 | "Enables interruption of cancelable tasks" |
| 337 | ); | ||
| 338 |
1/2✓ Branch 1 taken 251 times.
✗ Branch 2 not taken.
|
251 | declare_arg( |
| 339 |
2/4✓ Branch 1 taken 251 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 251 times.
✗ Branch 5 not taken.
|
753 | "sys:max_threads", (int) Process::number_of_cores(), |
| 340 |
1/2✓ Branch 1 taken 251 times.
✗ Branch 2 not taken.
|
753 | "Maximum number of concurrent threads" |
| 341 | ); | ||
| 342 |
1/2✓ Branch 1 taken 251 times.
✗ Branch 2 not taken.
|
251 | declare_arg( |
| 343 |
1/2✓ Branch 1 taken 251 times.
✗ Branch 2 not taken.
|
502 | "sys:use_doubles", false, |
| 344 |
1/2✓ Branch 1 taken 251 times.
✗ Branch 2 not taken.
|
753 | "Uses double precision in output .mesh files" |
| 345 | ); | ||
| 346 |
1/2✓ Branch 1 taken 251 times.
✗ Branch 2 not taken.
|
251 | declare_arg( |
| 347 |
1/2✓ Branch 1 taken 251 times.
✗ Branch 2 not taken.
|
502 | "sys:ascii", false, |
| 348 |
1/2✓ Branch 1 taken 251 times.
✗ Branch 2 not taken.
|
753 | "Use ASCII files whenever supported" |
| 349 | ); | ||
| 350 |
1/2✓ Branch 1 taken 251 times.
✗ Branch 2 not taken.
|
251 | declare_arg( |
| 351 |
1/2✓ Branch 1 taken 251 times.
✗ Branch 2 not taken.
|
502 | "sys:compression_level", 3, |
| 352 |
1/2✓ Branch 1 taken 251 times.
✗ Branch 2 not taken.
|
753 | "Compression level for created .geogram files, in [0..9]" |
| 353 | ); | ||
| 354 |
1/2✓ Branch 1 taken 251 times.
✗ Branch 2 not taken.
|
251 | declare_arg( |
| 355 |
1/2✓ Branch 1 taken 251 times.
✗ Branch 2 not taken.
|
502 | "sys:lowmem", false, |
| 356 |
1/2✓ Branch 1 taken 251 times.
✗ Branch 2 not taken.
|
753 | "Reduces RAM consumption (but slower)" |
| 357 | ); | ||
| 358 |
1/2✓ Branch 1 taken 251 times.
✗ Branch 2 not taken.
|
251 | declare_arg( |
| 359 |
1/2✓ Branch 1 taken 251 times.
✗ Branch 2 not taken.
|
502 | "sys:stats", false, |
| 360 |
1/2✓ Branch 1 taken 251 times.
✗ Branch 2 not taken.
|
502 | "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 | 251 | } | |
| 369 | |||
| 370 | /** | ||
| 371 | * \brief Imports the NL (Numerical Library) option group | ||
| 372 | */ | ||
| 373 | 251 | void import_arg_group_nl() { | |
| 374 |
3/6✓ Branch 1 taken 251 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 251 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 251 times.
✗ Branch 8 not taken.
|
1004 | declare_arg_group("nl", "OpenNL (numerical library)", ARG_ADVANCED); |
| 375 |
1/2✓ Branch 1 taken 251 times.
✗ Branch 2 not taken.
|
251 | declare_arg( |
| 376 |
1/2✓ Branch 1 taken 251 times.
✗ Branch 2 not taken.
|
502 | "nl:MKL", false, |
| 377 |
1/2✓ Branch 1 taken 251 times.
✗ Branch 2 not taken.
|
753 | "Use Intel Math Kernel Library (if available in the system)" |
| 378 | ); | ||
| 379 |
1/2✓ Branch 1 taken 251 times.
✗ Branch 2 not taken.
|
251 | declare_arg( |
| 380 |
1/2✓ Branch 1 taken 251 times.
✗ Branch 2 not taken.
|
502 | "nl:CUDA", false, |
| 381 |
1/2✓ Branch 1 taken 251 times.
✗ Branch 2 not taken.
|
753 | "Use NVidia CUDA (if available in the system)" |
| 382 | ); | ||
| 383 |
1/2✓ Branch 1 taken 251 times.
✗ Branch 2 not taken.
|
251 | declare_arg( |
| 384 |
1/2✓ Branch 1 taken 251 times.
✗ Branch 2 not taken.
|
502 | "nl:CUDA:matrix_format", "fp64", |
| 385 |
1/2✓ Branch 1 taken 251 times.
✗ Branch 2 not taken.
|
502 | "one of fp32, fp64, fp32_precond" |
| 386 | ); | ||
| 387 | 251 | } | |
| 388 | |||
| 389 | /** | ||
| 390 | * \brief Imports the Logger option group | ||
| 391 | */ | ||
| 392 | 251 | void import_arg_group_log() { | |
| 393 |
3/6✓ Branch 1 taken 251 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 251 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 251 times.
✗ Branch 8 not taken.
|
1004 | declare_arg_group("log", "Logger settings", ARG_ADVANCED); |
| 394 |
1/2✓ Branch 1 taken 251 times.
✗ Branch 2 not taken.
|
251 | declare_arg( |
| 395 |
1/2✓ Branch 1 taken 251 times.
✗ Branch 2 not taken.
|
502 | "log:quiet", false, |
| 396 |
1/2✓ Branch 1 taken 251 times.
✗ Branch 2 not taken.
|
753 | "Turns logging on/off" |
| 397 | ); | ||
| 398 |
1/2✓ Branch 1 taken 251 times.
✗ Branch 2 not taken.
|
251 | declare_arg( |
| 399 |
1/2✓ Branch 1 taken 251 times.
✗ Branch 2 not taken.
|
502 | "log:pretty", true, |
| 400 |
1/2✓ Branch 1 taken 251 times.
✗ Branch 2 not taken.
|
753 | "Turns console pretty output on/off" |
| 401 | ); | ||
| 402 |
1/2✓ Branch 1 taken 251 times.
✗ Branch 2 not taken.
|
251 | declare_arg( |
| 403 |
1/2✓ Branch 1 taken 251 times.
✗ Branch 2 not taken.
|
502 | "log:file_name", "", |
| 404 |
1/2✓ Branch 1 taken 251 times.
✗ Branch 2 not taken.
|
753 | "Logs output to the specified file" |
| 405 | ); | ||
| 406 |
1/2✓ Branch 1 taken 251 times.
✗ Branch 2 not taken.
|
251 | declare_arg( |
| 407 |
1/2✓ Branch 1 taken 251 times.
✗ Branch 2 not taken.
|
502 | "log:features", "*", |
| 408 |
1/2✓ Branch 1 taken 251 times.
✗ Branch 2 not taken.
|
753 | "Semicolon separated list of features selected for log" |
| 409 | ); | ||
| 410 |
1/2✓ Branch 1 taken 251 times.
✗ Branch 2 not taken.
|
251 | declare_arg( |
| 411 |
1/2✓ Branch 1 taken 251 times.
✗ Branch 2 not taken.
|
502 | "log:features_exclude", "", |
| 412 |
1/2✓ Branch 1 taken 251 times.
✗ Branch 2 not taken.
|
502 | "Semicolon separated list of features excluded from log" |
| 413 | ); | ||
| 414 | 251 | } | |
| 415 | |||
| 416 | /** | ||
| 417 | * \brief Imports the reconstruction option group | ||
| 418 | */ | ||
| 419 | 48 | void import_arg_group_co3ne() { | |
| 420 |
3/6✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 48 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 48 times.
✗ Branch 8 not taken.
|
192 | declare_arg_group("co3ne", "Reconstruction", ARG_ADVANCED); |
| 421 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
48 | declare_arg( |
| 422 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
96 | "co3ne", false, |
| 423 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
144 | "Use reconstruction", ARG_ADVANCED |
| 424 | ); | ||
| 425 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
48 | declare_arg( |
| 426 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
96 | "co3ne:nb_neighbors", 30, |
| 427 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
144 | "Number of neighbors used in reconstruction" |
| 428 | ); | ||
| 429 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
48 | declare_arg( |
| 430 |
2/4✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 48 times.
✗ Branch 5 not taken.
|
240 | "co3ne:Psmooth_iter", 0, "Number of smoothing iterations" |
| 431 | ); | ||
| 432 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
48 | declare_arg_percent( |
| 433 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
96 | "co3ne:radius", 5, |
| 434 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
144 | "Search radius (in % bounding box diagonal)" |
| 435 | ); | ||
| 436 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
48 | declare_arg( |
| 437 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
96 | "co3ne:repair", true, |
| 438 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
144 | "Repair output surface" |
| 439 | ); | ||
| 440 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
48 | declare_arg( |
| 441 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
96 | "co3ne:max_N_angle", 60.0, |
| 442 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
144 | "Filter bad triangles (in degrees)" |
| 443 | ); | ||
| 444 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
48 | declare_arg_percent( |
| 445 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
96 | "co3ne:max_hole_area", 5, |
| 446 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
144 | "Fill holes smaller than (in % total area)" |
| 447 | ); | ||
| 448 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
48 | declare_arg( |
| 449 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
96 | "co3ne:max_hole_edges", 500, |
| 450 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
144 | "Fill holes with a smaller nb. of edges" |
| 451 | ); | ||
| 452 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
48 | declare_arg_percent( |
| 453 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
96 | "co3ne:min_comp_area", 0.01, |
| 454 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
144 | "Remove small components (in % total area)" |
| 455 | ); | ||
| 456 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
48 | declare_arg( |
| 457 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
96 | "co3ne:min_comp_facets", 10, |
| 458 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
144 | "Remove small components (in facet nb.)" |
| 459 | ); | ||
| 460 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
48 | declare_arg( |
| 461 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
96 | "co3ne:T12", true, |
| 462 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
144 | "Use also triangles seen from 1 and 2 seeds" |
| 463 | ); | ||
| 464 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
48 | declare_arg( |
| 465 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
96 | "co3ne:strict", false, |
| 466 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
144 | "enforce combinatorial tests for triangles seen from 3 seeds as well" |
| 467 | ); | ||
| 468 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
48 | declare_arg( |
| 469 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
96 | "co3ne:use_normals", true, |
| 470 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
144 | "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/6✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 48 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 48 times.
✗ Branch 8 not taken.
|
192 | declare_arg_group("poisson", "Reconstruction", ARG_ADVANCED); |
| 475 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
48 | declare_arg( |
| 476 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
96 | "poisson:octree_depth", 8, |
| 477 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
96 | "Octree depth for Poisson reconstruction if used" |
| 478 | ); | ||
| 479 | 48 | } | |
| 480 | |||
| 481 | /** | ||
| 482 | * \brief Import the statistics option group | ||
| 483 | */ | ||
| 484 | 22 | void import_arg_group_stat() { | |
| 485 |
3/6✓ Branch 1 taken 22 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 22 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 22 times.
✗ Branch 8 not taken.
|
88 | declare_arg_group("stat", "Statistics tuning"); |
| 486 |
1/2✓ Branch 1 taken 22 times.
✗ Branch 2 not taken.
|
22 | declare_arg_percent( |
| 487 |
1/2✓ Branch 1 taken 22 times.
✗ Branch 2 not taken.
|
44 | "stat:sampling_step", 0.5, |
| 488 |
1/2✓ Branch 1 taken 22 times.
✗ Branch 2 not taken.
|
44 | "For Hausdorff distance" |
| 489 | ); | ||
| 490 | 22 | } | |
| 491 | |||
| 492 | /** | ||
| 493 | * \brief Imports the polyhedral meshing option group | ||
| 494 | */ | ||
| 495 | 48 | void import_arg_group_poly() { | |
| 496 |
3/6✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 48 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 48 times.
✗ Branch 8 not taken.
|
192 | declare_arg_group("poly", "Polyhedral meshing", ARG_ADVANCED); |
| 497 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
48 | declare_arg( |
| 498 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
96 | "poly", false, |
| 499 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
144 | "Toggles polyhedral meshing" |
| 500 | ); | ||
| 501 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
48 | declare_arg( |
| 502 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
96 | "poly:simplify", "tets_voronoi", |
| 503 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
144 | "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 48 times.
✗ Branch 2 not taken.
|
48 | declare_arg( |
| 509 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
96 | "poly:normal_angle_threshold", 1e-3, |
| 510 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
144 | "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 48 times.
✗ Branch 2 not taken.
|
48 | declare_arg( |
| 514 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
96 | "poly:cells_shrink", 0.0, |
| 515 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
144 | "Voronoi cells shrink factor (for visualization purposes), between 0.0 and 1.0" |
| 516 | ); | ||
| 517 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
48 | declare_arg( |
| 518 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
96 | "poly:points_file", "", |
| 519 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
144 | "optional points file name (if left blank, generates and optimizes remesh:nb_pts points)" |
| 520 | ); | ||
| 521 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
48 | declare_arg( |
| 522 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
96 | "poly:generate_ids", false, |
| 523 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
144 | "generate unique ids for vertices and cells (saved in geogram, geogram_ascii and ovm file formats only)" |
| 524 | ); | ||
| 525 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
48 | declare_arg( |
| 526 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
96 | "poly:embedding_dim", 0, |
| 527 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
144 | "force embedding dimension (0 = use input dim.)" |
| 528 | ); | ||
| 529 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
48 | declare_arg( |
| 530 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
96 | "poly:tessellate_non_convex_facets", false, |
| 531 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
96 | "tessellate non-convex facets" |
| 532 | ); | ||
| 533 | 48 | } | |
| 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 | 48 | void import_arg_group_tet() { | |
| 649 |
3/6✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 48 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 48 times.
✗ Branch 8 not taken.
|
192 | declare_arg_group("tet", "Tetrahedral meshing", ARG_ADVANCED); |
| 650 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
48 | declare_arg( |
| 651 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
96 | "tet", false, |
| 652 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
144 | "Toggles tetrahedral meshing" |
| 653 | ); | ||
| 654 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
48 | declare_arg( |
| 655 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
96 | "tet:refine", true, |
| 656 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
144 | "Generates additional points to improve mesh quality" |
| 657 | ); | ||
| 658 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
48 | declare_arg( |
| 659 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
96 | "tet:preprocess", true, |
| 660 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
144 | "Pre-processes surface before meshing" |
| 661 | ); | ||
| 662 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
48 | declare_arg( |
| 663 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
96 | "tet:quality", 2.0, |
| 664 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
96 | "desired element quality (the lower, the better, 2.0 means reasonable)" |
| 665 | ); | ||
| 666 | 48 | } | |
| 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 | 251 | void import_arg_group_biblio() { | |
| 730 |
3/6✓ Branch 1 taken 251 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 251 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 251 times.
✗ Branch 8 not taken.
|
1004 | declare_arg_group("biblio", "Bibliography options", ARG_ADVANCED); |
| 731 |
3/6✓ Branch 1 taken 251 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 251 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 251 times.
✗ Branch 8 not taken.
|
1004 | declare_arg("biblio", false, "output bibliography citations"); |
| 732 |
1/2✓ Branch 1 taken 251 times.
✗ Branch 2 not taken.
|
251 | declare_arg( |
| 733 |
1/2✓ Branch 1 taken 251 times.
✗ Branch 2 not taken.
|
502 | "biblio:command_line", false, |
| 734 |
1/2✓ Branch 1 taken 251 times.
✗ Branch 2 not taken.
|
502 | "dump all command line arguments in biblio. report" |
| 735 | ); | ||
| 736 | 251 | } | |
| 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 |
2/4✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
|
4 | set_arg("pre:repair", true); |
| 765 |
2/4✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
|
4 | set_arg_percent("pre:margin", 0.05); |
| 766 |
2/4✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
|
4 | set_arg("post:repair", true); |
| 767 |
2/4✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
|
4 | set_arg("remesh:sharp_edges", true); |
| 768 |
2/4✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
|
2 | set_arg("remesh:RVC_centroids", false); |
| 769 | 2 | } | |
| 770 | |||
| 771 | /** | ||
| 772 | * \brief Sets the scanner profile | ||
| 773 | */ | ||
| 774 | 229 | void set_profile_scan() { | |
| 775 |
2/4✓ Branch 1 taken 229 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 229 times.
✗ Branch 5 not taken.
|
458 | set_arg("pre:Nsmooth_iter", 3); |
| 776 |
2/4✓ Branch 1 taken 229 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 229 times.
✗ Branch 5 not taken.
|
458 | set_arg("pre:repair", true); |
| 777 |
2/4✓ Branch 1 taken 229 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 229 times.
✗ Branch 5 not taken.
|
458 | set_arg_percent("pre:max_hole_area", 10); |
| 778 |
2/4✓ Branch 1 taken 229 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 229 times.
✗ Branch 5 not taken.
|
458 | set_arg("remesh:anisotropy", 1.0); |
| 779 |
2/4✓ Branch 1 taken 229 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 229 times.
✗ Branch 5 not taken.
|
458 | set_arg_percent("pre:min_comp_area", 3); |
| 780 |
2/4✓ Branch 1 taken 229 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 229 times.
✗ Branch 5 not taken.
|
229 | set_arg_percent("post:min_comp_area", 3); |
| 781 | 229 | } | |
| 782 | |||
| 783 | /** | ||
| 784 | * \brief Sets the conversion profile | ||
| 785 | */ | ||
| 786 | 8 | void set_profile_convert() { | |
| 787 |
2/4✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 8 times.
✗ Branch 5 not taken.
|
16 | set_arg("pre", false); |
| 788 |
2/4✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 8 times.
✗ Branch 5 not taken.
|
16 | set_arg("post", false); |
| 789 |
2/4✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 8 times.
✗ Branch 5 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 |
2/4✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
|
4 | set_arg("pre", false); |
| 820 |
2/4✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
|
4 | set_arg("post", false); |
| 821 |
2/4✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
|
4 | set_arg("remesh", false); |
| 822 |
2/4✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 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 | 1 | void set_profile_tet() { | |
| 843 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | set_arg("tet", true); |
| 844 | 1 | } | |
| 845 | |||
| 846 | /** | ||
| 847 | * \brief Sets the polyhedral meshing profile | ||
| 848 | */ | ||
| 849 | 4 | void set_profile_poly() { | |
| 850 |
2/4✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
|
4 | set_arg("poly", true); |
| 851 | 4 | } | |
| 852 | } | ||
| 853 | |||
| 854 | namespace GEO { | ||
| 855 | |||
| 856 | namespace CmdLine { | ||
| 857 | |||
| 858 | 847 | bool import_arg_group( | |
| 859 | const std::string& name | ||
| 860 | ) { | ||
| 861 |
3/4✓ Branch 0 taken 251 times.
✓ Branch 1 taken 596 times.
✓ Branch 3 taken 251 times.
✗ Branch 4 not taken.
|
847 | static std::set<std::string> imported; |
| 862 |
2/4✓ Branch 2 taken 847 times.
✗ Branch 3 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 847 times.
|
847 | if(imported.find(name) != imported.end()) { |
| 863 | ✗ | return true; | |
| 864 | } | ||
| 865 | 847 | imported.insert(name); | |
| 866 | |||
| 867 |
2/2✓ Branch 1 taken 251 times.
✓ Branch 2 taken 596 times.
|
847 | if(name == "standard") { |
| 868 | 251 | import_arg_group_global(); | |
| 869 | 251 | import_arg_group_sys(); | |
| 870 | 251 | import_arg_group_nl(); | |
| 871 | 251 | import_arg_group_log(); | |
| 872 | 251 | import_arg_group_biblio(); | |
| 873 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 596 times.
|
596 | } else if(name == "global") { |
| 874 | ✗ | import_arg_group_global(); | |
| 875 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 596 times.
|
596 | } else if(name == "nl") { |
| 876 | ✗ | import_arg_group_nl(); | |
| 877 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 596 times.
|
596 | } else if(name == "sys") { |
| 878 | ✗ | import_arg_group_sys(); | |
| 879 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 596 times.
|
596 | } else if(name == "log") { |
| 880 | ✗ | import_arg_group_log(); | |
| 881 |
2/2✓ Branch 1 taken 48 times.
✓ Branch 2 taken 548 times.
|
596 | } else if(name == "pre") { |
| 882 | 48 | import_arg_group_pre(); | |
| 883 |
2/2✓ Branch 1 taken 48 times.
✓ Branch 2 taken 500 times.
|
548 | } else if(name == "remesh") { |
| 884 | 48 | import_arg_group_remesh(); | |
| 885 |
2/2✓ Branch 1 taken 238 times.
✓ Branch 2 taken 262 times.
|
500 | } else if(name == "algo") { |
| 886 | 238 | import_arg_group_algo(); | |
| 887 |
2/2✓ Branch 1 taken 48 times.
✓ Branch 2 taken 214 times.
|
262 | } else if(name == "post") { |
| 888 | 48 | import_arg_group_post(); | |
| 889 |
2/2✓ Branch 1 taken 48 times.
✓ Branch 2 taken 166 times.
|
214 | } else if(name == "opt") { |
| 890 | 48 | import_arg_group_opt(); | |
| 891 |
2/2✓ Branch 1 taken 48 times.
✓ Branch 2 taken 118 times.
|
166 | } else if(name == "co3ne") { |
| 892 | 48 | import_arg_group_co3ne(); | |
| 893 |
2/2✓ Branch 1 taken 22 times.
✓ Branch 2 taken 96 times.
|
118 | } else if(name == "stat") { |
| 894 | 22 | import_arg_group_stat(); | |
| 895 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 96 times.
|
96 | } else if(name == "quad") { |
| 896 | ✗ | import_arg_group_quad(); | |
| 897 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 96 times.
|
96 | } else if(name == "hex") { |
| 898 | ✗ | import_arg_group_hex(); | |
| 899 |
2/2✓ Branch 1 taken 48 times.
✓ Branch 2 taken 48 times.
|
96 | } else if(name == "tet") { |
| 900 | 48 | import_arg_group_tet(); | |
| 901 |
1/2✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
|
48 | } else if(name == "poly") { |
| 902 | 48 | 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 | 847 | return true; | |
| 915 | } | ||
| 916 | |||
| 917 | 247 | bool set_profile( | |
| 918 | const std::string& name | ||
| 919 | ) { | ||
| 920 |
2/2✓ Branch 1 taken 2 times.
✓ Branch 2 taken 245 times.
|
247 | if(name == "cad") { |
| 921 | 2 | set_profile_cad(); | |
| 922 |
2/2✓ Branch 1 taken 229 times.
✓ Branch 2 taken 16 times.
|
245 | } else if(name == "scan") { |
| 923 | 229 | set_profile_scan(); | |
| 924 |
2/2✓ Branch 1 taken 8 times.
✓ Branch 2 taken 8 times.
|
16 | } else if(name == "convert") { |
| 925 | 8 | set_profile_convert(); | |
| 926 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 8 times.
|
8 | } else if(name == "repair") { |
| 927 | ✗ | set_profile_repair(); | |
| 928 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 8 times.
|
8 | } else if(name == "heal") { |
| 929 | ✗ | set_profile_heal(); | |
| 930 |
2/2✓ Branch 1 taken 2 times.
✓ Branch 2 taken 6 times.
|
8 | } else if(name == "reconstruct") { |
| 931 | 2 | set_profile_reconstruct(); | |
| 932 |
2/2✓ Branch 1 taken 1 times.
✓ Branch 2 taken 5 times.
|
6 | } else if(name == "tet") { |
| 933 | 1 | set_profile_tet(); | |
| 934 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 5 times.
|
5 | } else if(name == "quad") { |
| 935 | ✗ | set_profile_quad(); | |
| 936 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 5 times.
|
5 | } else if(name == "hex") { |
| 937 | ✗ | set_profile_hex(); | |
| 938 |
2/2✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
|
5 | } else if(name == "poly") { |
| 939 | 4 | set_profile_poly(); | |
| 940 | } else { | ||
| 941 | 1 | Logger::instance()->set_quiet(false); | |
| 942 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | Logger::err("CmdLine") |
| 943 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | << "No such profile: " << name |
| 944 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | << std::endl; |
| 945 | 1 | return false; | |
| 946 | } | ||
| 947 | 246 | return true; | |
| 948 | } | ||
| 949 | } | ||
| 950 | } | ||
| 951 |