Full Code of nicopietroni/quadwild for AI

master 9d1f27ad3c6e cached
3943 files
29.2 MB
7.9M tokens
14875 symbols
1 requests
Copy disabled (too large) Download .txt
Showing preview only (31,460K chars total). Download the full file to get everything.
Repository: nicopietroni/quadwild
Branch: master
Commit: 9d1f27ad3c6e
Files: 3943
Total size: 29.2 MB

Directory structure:
gitextract_86hlkog7/

├── .gitignore
├── .gitmodules
├── LICENSE
├── README.md
├── components/
│   ├── field_computation/
│   │   ├── AutoRemesher.h
│   │   ├── AutoRemesherMio.h
│   │   ├── basic_setup.txt
│   │   ├── basic_setup_mechanical.txt
│   │   ├── basic_setup_organic.txt
│   │   ├── compute_field_300_mechanical.command
│   │   ├── compute_field_300_organic.command
│   │   ├── field_computation
│   │   ├── field_computation.pro
│   │   ├── fields/
│   │   │   ├── field_smoother.h
│   │   │   ├── n_polyvector.cpp
│   │   │   ├── n_polyvector.h
│   │   │   ├── polyroots.cpp
│   │   │   └── polyroots.h
│   │   ├── gl_utils.h
│   │   ├── glwidget.cpp
│   │   ├── glwidget.h
│   │   ├── main.cpp
│   │   ├── mesh_field_smoother.h
│   │   ├── mesh_manager.h
│   │   ├── poly_mesh_type.h
│   │   └── triangle_mesh_type.h
│   ├── field_tracing/
│   │   ├── basic_setup.txt
│   │   ├── field_tracing
│   │   ├── field_tracing.pro
│   │   ├── glwidget.cpp
│   │   ├── glwidget.h
│   │   ├── main.cpp
│   │   ├── moc_glwidget.cpp
│   │   ├── trace_field_300_mechanical.command
│   │   └── trace_field_300_organic.command
│   ├── quad_from_patches/
│   │   ├── basic_setup.txt
│   │   ├── configuration.pri
│   │   ├── field_smoother.h
│   │   ├── load_save.cpp
│   │   ├── load_save.h
│   │   ├── local_para_smooth.h
│   │   ├── main.cpp
│   │   ├── mesh_types.h
│   │   ├── quad_from_patches.cpp
│   │   ├── quad_from_patches.h
│   │   ├── quad_from_patches.pro
│   │   ├── quad_mesh_tracer.cpp
│   │   ├── quad_mesh_tracer.h
│   │   ├── quadrangulate_300_mechanical.command
│   │   ├── quadrangulate_300_organic.command
│   │   ├── quadrangulate_loopy_cuts.command
│   │   ├── quadrangulatedataset.sh
│   │   ├── smooth_mesh.h
│   │   ├── test_edge.obj
│   │   ├── test_tri.obj
│   │   └── test_tri.obj.mtl
│   ├── results_processing/
│   │   ├── lazy_website/
│   │   │   └── index.php
│   │   ├── libs.pri
│   │   ├── orientability_check/
│   │   │   ├── main.cpp
│   │   │   ├── mesh_def.h
│   │   │   ├── orientability_check.pro
│   │   │   └── readme.txt
│   │   ├── polyMetrics/
│   │   │   ├── external/
│   │   │   │   ├── matplotlib-cpp/
│   │   │   │   │   ├── .gitignore
│   │   │   │   │   ├── LICENSE
│   │   │   │   │   ├── LICENSE.matplotlib
│   │   │   │   │   ├── README.md
│   │   │   │   │   ├── contrib/
│   │   │   │   │   │   ├── CMakeLists.txt
│   │   │   │   │   │   └── README.md
│   │   │   │   │   ├── examples/
│   │   │   │   │   │   ├── .gitignore
│   │   │   │   │   │   ├── animation.cpp
│   │   │   │   │   │   ├── bar.cpp
│   │   │   │   │   │   ├── basic.cpp
│   │   │   │   │   │   ├── fill.cpp
│   │   │   │   │   │   ├── fill_inbetween.cpp
│   │   │   │   │   │   ├── imshow.cpp
│   │   │   │   │   │   ├── minimal.cpp
│   │   │   │   │   │   ├── modern.cpp
│   │   │   │   │   │   ├── nonblock.cpp
│   │   │   │   │   │   ├── quiver.cpp
│   │   │   │   │   │   ├── subplot.cpp
│   │   │   │   │   │   ├── subplot2grid.cpp
│   │   │   │   │   │   ├── surface.cpp
│   │   │   │   │   │   ├── update.cpp
│   │   │   │   │   │   └── xkcd.cpp
│   │   │   │   │   ├── matplotlibcpp.h
│   │   │   │   │   └── numpy_flags.py
│   │   │   │   └── nlohmann/
│   │   │   │       └── json.hpp
│   │   │   ├── main.cpp
│   │   │   ├── mesh_def.h
│   │   │   ├── polyMetrics.pro
│   │   │   └── readme.txt
│   │   └── snapshotRenderer/
│   │       ├── blenderBatchFolderRender.py
│   │       ├── blenderBatchRender.py
│   │       ├── readme.txt
│   │       └── snapshots.blend
│   └── viz_mesh_results/
│       ├── configuration.pri
│       ├── main.cpp
│       ├── mesh_types.h
│       ├── viz_mesh_result
│       └── viz_mesh_results.pro
├── libs/
│   ├── CoMISo/
│   │   ├── CHANGELOG
│   │   ├── CMakeLists LIBIGL.txt
│   │   ├── CMakeLists.txt
│   │   ├── CMakeListsOLD.txt
│   │   ├── COPYING
│   │   ├── CoMISo.cmake
│   │   ├── CoMISo_BUILD_LINUX.txt
│   │   ├── Config/
│   │   │   ├── CoMISoDefines.hh
│   │   │   ├── config.hh
│   │   │   └── config.hh.in
│   │   ├── EigenSolver/
│   │   │   ├── ArpackSolver.cc
│   │   │   ├── ArpackSolver.hh
│   │   │   ├── EigenArpackMatrixT.cc
│   │   │   └── EigenArpackMatrixT.hh
│   │   ├── Examples/
│   │   │   ├── factored_solver/
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   └── main.cc
│   │   │   ├── quadratic_solver/
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   └── main.cc
│   │   │   ├── small_eigenproblem/
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   └── main.cc
│   │   │   ├── small_factored_example/
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   └── main.cc
│   │   │   ├── small_miqp/
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   └── main.cc
│   │   │   ├── small_nleast_squares/
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   └── main.cc
│   │   │   ├── small_nsolver/
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   └── main.cc
│   │   │   ├── small_quadratic_example/
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   └── main.cc
│   │   │   ├── small_quadratic_resolve_example/
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   └── main.cc
│   │   │   └── small_sparseqr/
│   │   │       ├── CMakeLists.txt
│   │   │       └── main.cc
│   │   ├── NSolver/
│   │   │   ├── BoundConstraint.cc
│   │   │   ├── BoundConstraint.hh
│   │   │   ├── COMISOSolver.cc
│   │   │   ├── COMISOSolver.hh
│   │   │   ├── CPLEXSolver.cc
│   │   │   ├── CPLEXSolver.hh
│   │   │   ├── CPLEXSolverT.cc
│   │   │   ├── GUROBISolver.cc
│   │   │   ├── GUROBISolver.hh
│   │   │   ├── GurobiHelper.cc
│   │   │   ├── GurobiHelper.hh
│   │   │   ├── IPOPTSolver.cc
│   │   │   ├── IPOPTSolver.hh
│   │   │   ├── LeastSquaresProblem.cc
│   │   │   ├── LeastSquaresProblem.hh
│   │   │   ├── LinearConstraint.cc
│   │   │   ├── LinearConstraint.hh
│   │   │   ├── LinearConstraintHandlerElimination.cc
│   │   │   ├── LinearConstraintHandlerElimination.hh
│   │   │   ├── LinearConstraintHandlerEliminationT.cc
│   │   │   ├── LinearConstraintHandlerPenalty.cc
│   │   │   ├── LinearConstraintHandlerPenalty.hh
│   │   │   ├── LinearConstraintHandlerPenaltyT.cc
│   │   │   ├── NConstraintInterface.hh
│   │   │   ├── NPDerivativeChecker.hh
│   │   │   ├── NPLinearConstraints.cc
│   │   │   ├── NPLinearConstraints.hh
│   │   │   ├── NPLinearConstraintsT.cc
│   │   │   ├── NPTiming.cc
│   │   │   ├── NPTiming.hh
│   │   │   ├── NProblemGmmInterface.hh
│   │   │   ├── NProblemInterface.cc
│   │   │   ├── NProblemInterface.hh
│   │   │   ├── NewtonSolver.cc
│   │   │   ├── NewtonSolver.hh
│   │   │   ├── SuperSparseMatrixT.cc
│   │   │   ├── SuperSparseMatrixT.hh
│   │   │   ├── TAOSolver.cc
│   │   │   ├── TAOSolver.hh
│   │   │   ├── TestInterface.hh
│   │   │   └── VariableType.hh
│   │   ├── QtWidgets/
│   │   │   ├── MISolverDialogUI.cc
│   │   │   ├── MISolverDialogUI.hh
│   │   │   └── QtMISolverDialogBaseUI.ui
│   │   ├── README.txt
│   │   ├── Solver/
│   │   │   ├── CholmodSolver.cc
│   │   │   ├── CholmodSolver.hh
│   │   │   ├── CholmodSolverT.cc
│   │   │   ├── ConstrainedSolver.cc
│   │   │   ├── ConstrainedSolver.hh
│   │   │   ├── ConstrainedSolverT.cc
│   │   │   ├── EigenLDLTSolver.cc
│   │   │   ├── EigenLDLTSolver.hh
│   │   │   ├── EigenLDLTSolverT.cc
│   │   │   ├── Eigen_Tools.cc
│   │   │   ├── Eigen_Tools.hh
│   │   │   ├── GMM_Tools.cc
│   │   │   ├── GMM_Tools.hh
│   │   │   ├── IterativeSolverT.cc
│   │   │   ├── IterativeSolverT.hh
│   │   │   ├── MISolver.cc
│   │   │   ├── MISolver.hh
│   │   │   ├── MISolverT.cc
│   │   │   ├── SparseQRSolver.cc
│   │   │   ├── SparseQRSolver.hh
│   │   │   ├── SparseQRSolverT.cc
│   │   │   ├── TaucsSolver.cc
│   │   │   ├── TaucsSolver.hh
│   │   │   ├── TaucsSolverT.cc
│   │   │   ├── UMFPACKSolver.cc
│   │   │   ├── UMFPACKSolver.hh
│   │   │   └── UMFPACKSolverT.cc
│   │   ├── Utils/
│   │   │   ├── MutablePriorityQueueT.hh
│   │   │   ├── StopWatch.hh
│   │   │   └── VSToolsT.hh
│   │   ├── VERSION
│   │   ├── cmake/
│   │   │   ├── ACGCommon.cmake
│   │   │   ├── ACGCompiler.cmake
│   │   │   ├── ACGOutput.cmake
│   │   │   ├── CGAL_FindPackageHandleStandardArgs.cmake
│   │   │   ├── CGAL_GeneratorSpecificSettings.cmake
│   │   │   ├── CGAL_Locate_CGAL_TAUCS.cmake
│   │   │   ├── CGAL_Macros.cmake
│   │   │   ├── CheckCSourceRuns.cmake
│   │   │   ├── CoMISoExample.cmake
│   │   │   ├── FindARPACK.cmake
│   │   │   ├── FindBLAS.cmake
│   │   │   ├── FindCGAL.cmake
│   │   │   ├── FindCPLEX.cmake
│   │   │   ├── FindCoMISo.cmake
│   │   │   ├── FindEigen3.cmake
│   │   │   ├── FindGMM.cmake
│   │   │   ├── FindGMP.cmake
│   │   │   ├── FindGUROBI.cmake
│   │   │   ├── FindIPOPT.cmake
│   │   │   ├── FindLAPACK.cmake
│   │   │   ├── FindMETIS.cmake
│   │   │   ├── FindMPI.cmake
│   │   │   ├── FindMUMPS.cmake
│   │   │   ├── FindPETSC.cmake
│   │   │   ├── FindPackageHandleStandardArgs.cmake
│   │   │   ├── FindPackageMultipass.cmake
│   │   │   ├── FindQt4.cmake
│   │   │   ├── FindSUITESPARSE.cmake
│   │   │   ├── FindTAO.cmake
│   │   │   ├── FindTaucs.cmake
│   │   │   └── ResolveCompilerPaths.cmake
│   │   └── gmm/
│   │       ├── AUTHORS
│   │       ├── COPYING
│   │       ├── ChangeLog
│   │       ├── INSTALL
│   │       ├── Makefile.am
│   │       ├── Makefile.in
│   │       ├── NEWS
│   │       ├── README
│   │       ├── aclocal.m4
│   │       ├── config.guess
│   │       ├── config.h.in
│   │       ├── config.sub
│   │       ├── configure
│   │       ├── configure.in
│   │       ├── depcomp
│   │       ├── gmm-config.in
│   │       ├── include/
│   │       │   ├── Makefile.am
│   │       │   ├── Makefile.in
│   │       │   └── gmm/
│   │       │       ├── gmm.h
│   │       │       ├── gmm_MUMPS_interface.h
│   │       │       ├── gmm_algobase.h
│   │       │       ├── gmm_blas.h
│   │       │       ├── gmm_blas_interface.h
│   │       │       ├── gmm_condition_number.h
│   │       │       ├── gmm_conjugated.h
│   │       │       ├── gmm_def.h
│   │       │       ├── gmm_dense_Householder.h
│   │       │       ├── gmm_dense_lu.h
│   │       │       ├── gmm_dense_qr.h
│   │       │       ├── gmm_dense_sylvester.h
│   │       │       ├── gmm_domain_decomp.h
│   │       │       ├── gmm_except.h
│   │       │       ├── gmm_inoutput.h
│   │       │       ├── gmm_interface.h
│   │       │       ├── gmm_interface_bgeot.h
│   │       │       ├── gmm_iter.h
│   │       │       ├── gmm_iter_solvers.h
│   │       │       ├── gmm_kernel.h
│   │       │       ├── gmm_lapack_interface.h
│   │       │       ├── gmm_least_squares_cg.h
│   │       │       ├── gmm_matrix.h
│   │       │       ├── gmm_modified_gram_schmidt.h
│   │       │       ├── gmm_opt.h
│   │       │       ├── gmm_precond.h
│   │       │       ├── gmm_precond_diagonal.h
│   │       │       ├── gmm_precond_ildlt.h
│   │       │       ├── gmm_precond_ildltt.h
│   │       │       ├── gmm_precond_ilu.h
│   │       │       ├── gmm_precond_ilut.h
│   │       │       ├── gmm_precond_ilutp.h
│   │       │       ├── gmm_precond_mr_approx_inverse.h
│   │       │       ├── gmm_range_basis.h
│   │       │       ├── gmm_real_part.h
│   │       │       ├── gmm_ref.h
│   │       │       ├── gmm_scaled.h
│   │       │       ├── gmm_solver_Schwarz_additive.h
│   │       │       ├── gmm_solver_bfgs.h
│   │       │       ├── gmm_solver_bicgstab.h
│   │       │       ├── gmm_solver_cg.h
│   │       │       ├── gmm_solver_constrained_cg.h
│   │       │       ├── gmm_solver_gmres.h
│   │       │       ├── gmm_solver_idgmres.h
│   │       │       ├── gmm_solver_qmr.h
│   │       │       ├── gmm_std.h
│   │       │       ├── gmm_sub_index.h
│   │       │       ├── gmm_sub_matrix.h
│   │       │       ├── gmm_sub_vector.h
│   │       │       ├── gmm_superlu_interface.h
│   │       │       ├── gmm_transposed.h
│   │       │       ├── gmm_tri_solve.h
│   │       │       ├── gmm_vector.h
│   │       │       └── gmm_vector_to_matrix.h
│   │       ├── install-sh
│   │       ├── ltmain.sh
│   │       ├── m4/
│   │       │   ├── ax_check_cxx_flag.m4
│   │       │   ├── ax_prefix_config_h.m4
│   │       │   ├── libtool.m4
│   │       │   ├── ltoptions.m4
│   │       │   ├── ltsugar.m4
│   │       │   ├── ltversion.m4
│   │       │   └── lt~obsolete.m4
│   │       ├── missing
│   │       └── tests/
│   │           ├── Makefile.am
│   │           ├── Makefile.in
│   │           ├── dummy.cc
│   │           ├── gmm_torture01_lusolve.cc
│   │           ├── gmm_torture02_baseop.cc
│   │           ├── gmm_torture05_mult.cc
│   │           ├── gmm_torture06_mat_mult.cc
│   │           ├── gmm_torture10_qr.cc
│   │           ├── gmm_torture15_sub.cc
│   │           ├── gmm_torture20_iterative_solvers.cc
│   │           └── make_gmm_test.pl
│   ├── eigen/
│   │   ├── CMakeLists.txt
│   │   ├── COPYING.BSD
│   │   ├── COPYING.GPL
│   │   ├── COPYING.LGPL
│   │   ├── COPYING.MINPACK
│   │   ├── COPYING.MPL2
│   │   ├── COPYING.README
│   │   ├── CTestConfig.cmake
│   │   ├── CTestCustom.cmake.in
│   │   ├── Eigen/
│   │   │   ├── Array
│   │   │   ├── CMakeLists.txt
│   │   │   ├── Cholesky
│   │   │   ├── CholmodSupport
│   │   │   ├── Core
│   │   │   ├── Dense
│   │   │   ├── Eigen
│   │   │   ├── Eigen2Support
│   │   │   ├── Eigenvalues
│   │   │   ├── Geometry
│   │   │   ├── Householder
│   │   │   ├── IterativeLinearSolvers
│   │   │   ├── Jacobi
│   │   │   ├── LU
│   │   │   ├── LeastSquares
│   │   │   ├── MetisSupport
│   │   │   ├── OrderingMethods
│   │   │   ├── PaStiXSupport
│   │   │   ├── PardisoSupport
│   │   │   ├── QR
│   │   │   ├── QtAlignedMalloc
│   │   │   ├── SPQRSupport
│   │   │   ├── SVD
│   │   │   ├── Sparse
│   │   │   ├── SparseCholesky
│   │   │   ├── SparseCore
│   │   │   ├── SparseLU
│   │   │   ├── SparseQR
│   │   │   ├── StdDeque
│   │   │   ├── StdList
│   │   │   ├── StdVector
│   │   │   ├── SuperLUSupport
│   │   │   ├── UmfPackSupport
│   │   │   └── src/
│   │   │       ├── CMakeLists.txt
│   │   │       ├── Cholesky/
│   │   │       │   ├── CMakeLists.txt
│   │   │       │   ├── LDLT.h
│   │   │       │   ├── LLT.h
│   │   │       │   └── LLT_MKL.h
│   │   │       ├── CholmodSupport/
│   │   │       │   ├── CMakeLists.txt
│   │   │       │   └── CholmodSupport.h
│   │   │       ├── Core/
│   │   │       │   ├── Array.h
│   │   │       │   ├── ArrayBase.h
│   │   │       │   ├── ArrayWrapper.h
│   │   │       │   ├── Assign.h
│   │   │       │   ├── Assign_MKL.h
│   │   │       │   ├── BandMatrix.h
│   │   │       │   ├── Block.h
│   │   │       │   ├── BooleanRedux.h
│   │   │       │   ├── CMakeLists.txt
│   │   │       │   ├── CommaInitializer.h
│   │   │       │   ├── CoreIterators.h
│   │   │       │   ├── CwiseBinaryOp.h
│   │   │       │   ├── CwiseNullaryOp.h
│   │   │       │   ├── CwiseUnaryOp.h
│   │   │       │   ├── CwiseUnaryView.h
│   │   │       │   ├── DenseBase.h
│   │   │       │   ├── DenseCoeffsBase.h
│   │   │       │   ├── DenseStorage.h
│   │   │       │   ├── Diagonal.h
│   │   │       │   ├── DiagonalMatrix.h
│   │   │       │   ├── DiagonalProduct.h
│   │   │       │   ├── Dot.h
│   │   │       │   ├── EigenBase.h
│   │   │       │   ├── Flagged.h
│   │   │       │   ├── ForceAlignedAccess.h
│   │   │       │   ├── Functors.h
│   │   │       │   ├── Fuzzy.h
│   │   │       │   ├── GeneralProduct.h
│   │   │       │   ├── GenericPacketMath.h
│   │   │       │   ├── GlobalFunctions.h
│   │   │       │   ├── IO.h
│   │   │       │   ├── Map.h
│   │   │       │   ├── MapBase.h
│   │   │       │   ├── MathFunctions.h
│   │   │       │   ├── Matrix.h
│   │   │       │   ├── MatrixBase.h
│   │   │       │   ├── NestByValue.h
│   │   │       │   ├── NoAlias.h
│   │   │       │   ├── NumTraits.h
│   │   │       │   ├── PermutationMatrix.h
│   │   │       │   ├── PlainObjectBase.h
│   │   │       │   ├── ProductBase.h
│   │   │       │   ├── Random.h
│   │   │       │   ├── Redux.h
│   │   │       │   ├── Ref.h
│   │   │       │   ├── Replicate.h
│   │   │       │   ├── ReturnByValue.h
│   │   │       │   ├── Reverse.h
│   │   │       │   ├── Select.h
│   │   │       │   ├── SelfAdjointView.h
│   │   │       │   ├── SelfCwiseBinaryOp.h
│   │   │       │   ├── SolveTriangular.h
│   │   │       │   ├── StableNorm.h
│   │   │       │   ├── Stride.h
│   │   │       │   ├── Swap.h
│   │   │       │   ├── Transpose.h
│   │   │       │   ├── Transpositions.h
│   │   │       │   ├── TriangularMatrix.h
│   │   │       │   ├── VectorBlock.h
│   │   │       │   ├── VectorwiseOp.h
│   │   │       │   ├── Visitor.h
│   │   │       │   ├── arch/
│   │   │       │   │   ├── AltiVec/
│   │   │       │   │   │   ├── CMakeLists.txt
│   │   │       │   │   │   ├── Complex.h
│   │   │       │   │   │   └── PacketMath.h
│   │   │       │   │   ├── CMakeLists.txt
│   │   │       │   │   ├── Default/
│   │   │       │   │   │   ├── CMakeLists.txt
│   │   │       │   │   │   └── Settings.h
│   │   │       │   │   ├── NEON/
│   │   │       │   │   │   ├── CMakeLists.txt
│   │   │       │   │   │   ├── Complex.h
│   │   │       │   │   │   └── PacketMath.h
│   │   │       │   │   └── SSE/
│   │   │       │   │       ├── CMakeLists.txt
│   │   │       │   │       ├── Complex.h
│   │   │       │   │       ├── MathFunctions.h
│   │   │       │   │       └── PacketMath.h
│   │   │       │   ├── products/
│   │   │       │   │   ├── CMakeLists.txt
│   │   │       │   │   ├── CoeffBasedProduct.h
│   │   │       │   │   ├── GeneralBlockPanelKernel.h
│   │   │       │   │   ├── GeneralMatrixMatrix.h
│   │   │       │   │   ├── GeneralMatrixMatrixTriangular.h
│   │   │       │   │   ├── GeneralMatrixMatrixTriangular_MKL.h
│   │   │       │   │   ├── GeneralMatrixMatrix_MKL.h
│   │   │       │   │   ├── GeneralMatrixVector.h
│   │   │       │   │   ├── GeneralMatrixVector_MKL.h
│   │   │       │   │   ├── Parallelizer.h
│   │   │       │   │   ├── SelfadjointMatrixMatrix.h
│   │   │       │   │   ├── SelfadjointMatrixMatrix_MKL.h
│   │   │       │   │   ├── SelfadjointMatrixVector.h
│   │   │       │   │   ├── SelfadjointMatrixVector_MKL.h
│   │   │       │   │   ├── SelfadjointProduct.h
│   │   │       │   │   ├── SelfadjointRank2Update.h
│   │   │       │   │   ├── TriangularMatrixMatrix.h
│   │   │       │   │   ├── TriangularMatrixMatrix_MKL.h
│   │   │       │   │   ├── TriangularMatrixVector.h
│   │   │       │   │   ├── TriangularMatrixVector_MKL.h
│   │   │       │   │   ├── TriangularSolverMatrix.h
│   │   │       │   │   ├── TriangularSolverMatrix_MKL.h
│   │   │       │   │   └── TriangularSolverVector.h
│   │   │       │   └── util/
│   │   │       │       ├── BlasUtil.h
│   │   │       │       ├── CMakeLists.txt
│   │   │       │       ├── Constants.h
│   │   │       │       ├── DisableStupidWarnings.h
│   │   │       │       ├── ForwardDeclarations.h
│   │   │       │       ├── MKL_support.h
│   │   │       │       ├── Macros.h
│   │   │       │       ├── Memory.h
│   │   │       │       ├── Meta.h
│   │   │       │       ├── NonMPL2.h
│   │   │       │       ├── ReenableStupidWarnings.h
│   │   │       │       ├── StaticAssert.h
│   │   │       │       └── XprHelper.h
│   │   │       ├── Eigen2Support/
│   │   │       │   ├── Block.h
│   │   │       │   ├── CMakeLists.txt
│   │   │       │   ├── Cwise.h
│   │   │       │   ├── CwiseOperators.h
│   │   │       │   ├── Geometry/
│   │   │       │   │   ├── AlignedBox.h
│   │   │       │   │   ├── All.h
│   │   │       │   │   ├── AngleAxis.h
│   │   │       │   │   ├── CMakeLists.txt
│   │   │       │   │   ├── Hyperplane.h
│   │   │       │   │   ├── ParametrizedLine.h
│   │   │       │   │   ├── Quaternion.h
│   │   │       │   │   ├── Rotation2D.h
│   │   │       │   │   ├── RotationBase.h
│   │   │       │   │   ├── Scaling.h
│   │   │       │   │   ├── Transform.h
│   │   │       │   │   └── Translation.h
│   │   │       │   ├── LU.h
│   │   │       │   ├── Lazy.h
│   │   │       │   ├── LeastSquares.h
│   │   │       │   ├── Macros.h
│   │   │       │   ├── MathFunctions.h
│   │   │       │   ├── Memory.h
│   │   │       │   ├── Meta.h
│   │   │       │   ├── Minor.h
│   │   │       │   ├── QR.h
│   │   │       │   ├── SVD.h
│   │   │       │   ├── TriangularSolver.h
│   │   │       │   └── VectorBlock.h
│   │   │       ├── Eigenvalues/
│   │   │       │   ├── CMakeLists.txt
│   │   │       │   ├── ComplexEigenSolver.h
│   │   │       │   ├── ComplexSchur.h
│   │   │       │   ├── ComplexSchur_MKL.h
│   │   │       │   ├── EigenSolver.h
│   │   │       │   ├── GeneralizedEigenSolver.h
│   │   │       │   ├── GeneralizedSelfAdjointEigenSolver.h
│   │   │       │   ├── HessenbergDecomposition.h
│   │   │       │   ├── MatrixBaseEigenvalues.h
│   │   │       │   ├── RealQZ.h
│   │   │       │   ├── RealSchur.h
│   │   │       │   ├── RealSchur_MKL.h
│   │   │       │   ├── SelfAdjointEigenSolver.h
│   │   │       │   ├── SelfAdjointEigenSolver_MKL.h
│   │   │       │   └── Tridiagonalization.h
│   │   │       ├── Geometry/
│   │   │       │   ├── AlignedBox.h
│   │   │       │   ├── AngleAxis.h
│   │   │       │   ├── CMakeLists.txt
│   │   │       │   ├── EulerAngles.h
│   │   │       │   ├── Homogeneous.h
│   │   │       │   ├── Hyperplane.h
│   │   │       │   ├── OrthoMethods.h
│   │   │       │   ├── ParametrizedLine.h
│   │   │       │   ├── Quaternion.h
│   │   │       │   ├── Rotation2D.h
│   │   │       │   ├── RotationBase.h
│   │   │       │   ├── Scaling.h
│   │   │       │   ├── Transform.h
│   │   │       │   ├── Translation.h
│   │   │       │   ├── Umeyama.h
│   │   │       │   └── arch/
│   │   │       │       ├── CMakeLists.txt
│   │   │       │       └── Geometry_SSE.h
│   │   │       ├── Householder/
│   │   │       │   ├── BlockHouseholder.h
│   │   │       │   ├── CMakeLists.txt
│   │   │       │   ├── Householder.h
│   │   │       │   └── HouseholderSequence.h
│   │   │       ├── IterativeLinearSolvers/
│   │   │       │   ├── BasicPreconditioners.h
│   │   │       │   ├── BiCGSTAB.h
│   │   │       │   ├── CMakeLists.txt
│   │   │       │   ├── ConjugateGradient.h
│   │   │       │   ├── IncompleteLUT.h
│   │   │       │   └── IterativeSolverBase.h
│   │   │       ├── Jacobi/
│   │   │       │   ├── CMakeLists.txt
│   │   │       │   └── Jacobi.h
│   │   │       ├── LU/
│   │   │       │   ├── CMakeLists.txt
│   │   │       │   ├── Determinant.h
│   │   │       │   ├── FullPivLU.h
│   │   │       │   ├── Inverse.h
│   │   │       │   ├── PartialPivLU.h
│   │   │       │   ├── PartialPivLU_MKL.h
│   │   │       │   └── arch/
│   │   │       │       ├── CMakeLists.txt
│   │   │       │       └── Inverse_SSE.h
│   │   │       ├── MetisSupport/
│   │   │       │   ├── CMakeLists.txt
│   │   │       │   └── MetisSupport.h
│   │   │       ├── OrderingMethods/
│   │   │       │   ├── Amd.h
│   │   │       │   ├── CMakeLists.txt
│   │   │       │   ├── Eigen_Colamd.h
│   │   │       │   └── Ordering.h
│   │   │       ├── PaStiXSupport/
│   │   │       │   ├── CMakeLists.txt
│   │   │       │   └── PaStiXSupport.h
│   │   │       ├── PardisoSupport/
│   │   │       │   ├── CMakeLists.txt
│   │   │       │   └── PardisoSupport.h
│   │   │       ├── QR/
│   │   │       │   ├── CMakeLists.txt
│   │   │       │   ├── ColPivHouseholderQR.h
│   │   │       │   ├── ColPivHouseholderQR_MKL.h
│   │   │       │   ├── FullPivHouseholderQR.h
│   │   │       │   ├── HouseholderQR.h
│   │   │       │   └── HouseholderQR_MKL.h
│   │   │       ├── SPQRSupport/
│   │   │       │   ├── CMakeLists.txt
│   │   │       │   └── SuiteSparseQRSupport.h
│   │   │       ├── SVD/
│   │   │       │   ├── CMakeLists.txt
│   │   │       │   ├── JacobiSVD.h
│   │   │       │   ├── JacobiSVD_MKL.h
│   │   │       │   └── UpperBidiagonalization.h
│   │   │       ├── SparseCholesky/
│   │   │       │   ├── CMakeLists.txt
│   │   │       │   ├── SimplicialCholesky.h
│   │   │       │   └── SimplicialCholesky_impl.h
│   │   │       ├── SparseCore/
│   │   │       │   ├── AmbiVector.h
│   │   │       │   ├── CMakeLists.txt
│   │   │       │   ├── CompressedStorage.h
│   │   │       │   ├── ConservativeSparseSparseProduct.h
│   │   │       │   ├── MappedSparseMatrix.h
│   │   │       │   ├── SparseBlock.h
│   │   │       │   ├── SparseColEtree.h
│   │   │       │   ├── SparseCwiseBinaryOp.h
│   │   │       │   ├── SparseCwiseUnaryOp.h
│   │   │       │   ├── SparseDenseProduct.h
│   │   │       │   ├── SparseDiagonalProduct.h
│   │   │       │   ├── SparseDot.h
│   │   │       │   ├── SparseFuzzy.h
│   │   │       │   ├── SparseMatrix.h
│   │   │       │   ├── SparseMatrixBase.h
│   │   │       │   ├── SparsePermutation.h
│   │   │       │   ├── SparseProduct.h
│   │   │       │   ├── SparseRedux.h
│   │   │       │   ├── SparseSelfAdjointView.h
│   │   │       │   ├── SparseSparseProductWithPruning.h
│   │   │       │   ├── SparseTranspose.h
│   │   │       │   ├── SparseTriangularView.h
│   │   │       │   ├── SparseUtil.h
│   │   │       │   ├── SparseVector.h
│   │   │       │   ├── SparseView.h
│   │   │       │   └── TriangularSolver.h
│   │   │       ├── SparseLU/
│   │   │       │   ├── CMakeLists.txt
│   │   │       │   ├── SparseLU.h
│   │   │       │   ├── SparseLUImpl.h
│   │   │       │   ├── SparseLU_Memory.h
│   │   │       │   ├── SparseLU_Structs.h
│   │   │       │   ├── SparseLU_SupernodalMatrix.h
│   │   │       │   ├── SparseLU_Utils.h
│   │   │       │   ├── SparseLU_column_bmod.h
│   │   │       │   ├── SparseLU_column_dfs.h
│   │   │       │   ├── SparseLU_copy_to_ucol.h
│   │   │       │   ├── SparseLU_gemm_kernel.h
│   │   │       │   ├── SparseLU_heap_relax_snode.h
│   │   │       │   ├── SparseLU_kernel_bmod.h
│   │   │       │   ├── SparseLU_panel_bmod.h
│   │   │       │   ├── SparseLU_panel_dfs.h
│   │   │       │   ├── SparseLU_pivotL.h
│   │   │       │   ├── SparseLU_pruneL.h
│   │   │       │   └── SparseLU_relax_snode.h
│   │   │       ├── SparseQR/
│   │   │       │   ├── CMakeLists.txt
│   │   │       │   └── SparseQR.h
│   │   │       ├── StlSupport/
│   │   │       │   ├── CMakeLists.txt
│   │   │       │   ├── StdDeque.h
│   │   │       │   ├── StdList.h
│   │   │       │   ├── StdVector.h
│   │   │       │   └── details.h
│   │   │       ├── SuperLUSupport/
│   │   │       │   ├── CMakeLists.txt
│   │   │       │   └── SuperLUSupport.h
│   │   │       ├── UmfPackSupport/
│   │   │       │   ├── CMakeLists.txt
│   │   │       │   └── UmfPackSupport.h
│   │   │       ├── misc/
│   │   │       │   ├── CMakeLists.txt
│   │   │       │   ├── Image.h
│   │   │       │   ├── Kernel.h
│   │   │       │   ├── Solve.h
│   │   │       │   ├── SparseSolve.h
│   │   │       │   └── blas.h
│   │   │       └── plugins/
│   │   │           ├── ArrayCwiseBinaryOps.h
│   │   │           ├── ArrayCwiseUnaryOps.h
│   │   │           ├── BlockMethods.h
│   │   │           ├── CMakeLists.txt
│   │   │           ├── CommonCwiseBinaryOps.h
│   │   │           ├── CommonCwiseUnaryOps.h
│   │   │           ├── MatrixCwiseBinaryOps.h
│   │   │           └── MatrixCwiseUnaryOps.h
│   │   ├── INSTALL
│   │   ├── bench/
│   │   │   ├── BenchSparseUtil.h
│   │   │   ├── BenchTimer.h
│   │   │   ├── BenchUtil.h
│   │   │   ├── README.txt
│   │   │   ├── basicbench.cxxlist
│   │   │   ├── basicbenchmark.cpp
│   │   │   ├── basicbenchmark.h
│   │   │   ├── benchBlasGemm.cpp
│   │   │   ├── benchCholesky.cpp
│   │   │   ├── benchEigenSolver.cpp
│   │   │   ├── benchFFT.cpp
│   │   │   ├── benchGeometry.cpp
│   │   │   ├── benchVecAdd.cpp
│   │   │   ├── bench_gemm.cpp
│   │   │   ├── bench_multi_compilers.sh
│   │   │   ├── bench_norm.cpp
│   │   │   ├── bench_reverse.cpp
│   │   │   ├── bench_sum.cpp
│   │   │   ├── bench_unrolling
│   │   │   ├── benchmark.cpp
│   │   │   ├── benchmarkSlice.cpp
│   │   │   ├── benchmarkX.cpp
│   │   │   ├── benchmarkXcwise.cpp
│   │   │   ├── benchmark_suite
│   │   │   ├── btl/
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   ├── COPYING
│   │   │   │   ├── README
│   │   │   │   ├── actions/
│   │   │   │   │   ├── action_aat_product.hh
│   │   │   │   │   ├── action_ata_product.hh
│   │   │   │   │   ├── action_atv_product.hh
│   │   │   │   │   ├── action_axpby.hh
│   │   │   │   │   ├── action_axpy.hh
│   │   │   │   │   ├── action_cholesky.hh
│   │   │   │   │   ├── action_ger.hh
│   │   │   │   │   ├── action_hessenberg.hh
│   │   │   │   │   ├── action_lu_decomp.hh
│   │   │   │   │   ├── action_lu_solve.hh
│   │   │   │   │   ├── action_matrix_matrix_product.hh
│   │   │   │   │   ├── action_matrix_matrix_product_bis.hh
│   │   │   │   │   ├── action_matrix_vector_product.hh
│   │   │   │   │   ├── action_partial_lu.hh
│   │   │   │   │   ├── action_rot.hh
│   │   │   │   │   ├── action_symv.hh
│   │   │   │   │   ├── action_syr2.hh
│   │   │   │   │   ├── action_trisolve.hh
│   │   │   │   │   ├── action_trisolve_matrix.hh
│   │   │   │   │   ├── action_trmm.hh
│   │   │   │   │   └── basic_actions.hh
│   │   │   │   ├── cmake/
│   │   │   │   │   ├── FindACML.cmake
│   │   │   │   │   ├── FindATLAS.cmake
│   │   │   │   │   ├── FindBlitz.cmake
│   │   │   │   │   ├── FindCBLAS.cmake
│   │   │   │   │   ├── FindGMM.cmake
│   │   │   │   │   ├── FindGOTO.cmake
│   │   │   │   │   ├── FindGOTO2.cmake
│   │   │   │   │   ├── FindMKL.cmake
│   │   │   │   │   ├── FindMTL4.cmake
│   │   │   │   │   ├── FindPackageHandleStandardArgs.cmake
│   │   │   │   │   ├── FindTvmet.cmake
│   │   │   │   │   └── MacroOptionalAddSubdirectory.cmake
│   │   │   │   ├── data/
│   │   │   │   │   ├── CMakeLists.txt
│   │   │   │   │   ├── action_settings.txt
│   │   │   │   │   ├── gnuplot_common_settings.hh
│   │   │   │   │   ├── go_mean
│   │   │   │   │   ├── mean.cxx
│   │   │   │   │   ├── mk_gnuplot_script.sh
│   │   │   │   │   ├── mk_mean_script.sh
│   │   │   │   │   ├── mk_new_gnuplot.sh
│   │   │   │   │   ├── perlib_plot_settings.txt
│   │   │   │   │   ├── regularize.cxx
│   │   │   │   │   ├── smooth.cxx
│   │   │   │   │   └── smooth_all.sh
│   │   │   │   ├── generic_bench/
│   │   │   │   │   ├── bench.hh
│   │   │   │   │   ├── bench_parameter.hh
│   │   │   │   │   ├── btl.hh
│   │   │   │   │   ├── init/
│   │   │   │   │   │   ├── init_function.hh
│   │   │   │   │   │   ├── init_matrix.hh
│   │   │   │   │   │   └── init_vector.hh
│   │   │   │   │   ├── static/
│   │   │   │   │   │   ├── bench_static.hh
│   │   │   │   │   │   ├── intel_bench_fixed_size.hh
│   │   │   │   │   │   └── static_size_generator.hh
│   │   │   │   │   ├── timers/
│   │   │   │   │   │   ├── STL_perf_analyzer.hh
│   │   │   │   │   │   ├── STL_timer.hh
│   │   │   │   │   │   ├── mixed_perf_analyzer.hh
│   │   │   │   │   │   ├── portable_perf_analyzer.hh
│   │   │   │   │   │   ├── portable_perf_analyzer_old.hh
│   │   │   │   │   │   ├── portable_timer.hh
│   │   │   │   │   │   ├── x86_perf_analyzer.hh
│   │   │   │   │   │   └── x86_timer.hh
│   │   │   │   │   └── utils/
│   │   │   │   │       ├── size_lin_log.hh
│   │   │   │   │       ├── size_log.hh
│   │   │   │   │       ├── utilities.h
│   │   │   │   │       └── xy_file.hh
│   │   │   │   └── libs/
│   │   │   │       ├── BLAS/
│   │   │   │       │   ├── CMakeLists.txt
│   │   │   │       │   ├── blas.h
│   │   │   │       │   ├── blas_interface.hh
│   │   │   │       │   ├── blas_interface_impl.hh
│   │   │   │       │   ├── c_interface_base.h
│   │   │   │       │   └── main.cpp
│   │   │   │       ├── STL/
│   │   │   │       │   ├── CMakeLists.txt
│   │   │   │       │   ├── STL_interface.hh
│   │   │   │       │   └── main.cpp
│   │   │   │       ├── blitz/
│   │   │   │       │   ├── CMakeLists.txt
│   │   │   │       │   ├── blitz_LU_solve_interface.hh
│   │   │   │       │   ├── blitz_interface.hh
│   │   │   │       │   ├── btl_blitz.cpp
│   │   │   │       │   ├── btl_tiny_blitz.cpp
│   │   │   │       │   └── tiny_blitz_interface.hh
│   │   │   │       ├── eigen2/
│   │   │   │       │   ├── CMakeLists.txt
│   │   │   │       │   ├── btl_tiny_eigen2.cpp
│   │   │   │       │   ├── eigen2_interface.hh
│   │   │   │       │   ├── main_adv.cpp
│   │   │   │       │   ├── main_linear.cpp
│   │   │   │       │   ├── main_matmat.cpp
│   │   │   │       │   └── main_vecmat.cpp
│   │   │   │       ├── eigen3/
│   │   │   │       │   ├── CMakeLists.txt
│   │   │   │       │   ├── btl_tiny_eigen3.cpp
│   │   │   │       │   ├── eigen3_interface.hh
│   │   │   │       │   ├── main_adv.cpp
│   │   │   │       │   ├── main_linear.cpp
│   │   │   │       │   ├── main_matmat.cpp
│   │   │   │       │   └── main_vecmat.cpp
│   │   │   │       ├── gmm/
│   │   │   │       │   ├── CMakeLists.txt
│   │   │   │       │   ├── gmm_LU_solve_interface.hh
│   │   │   │       │   ├── gmm_interface.hh
│   │   │   │       │   └── main.cpp
│   │   │   │       ├── mtl4/
│   │   │   │       │   ├── .kdbgrc.main
│   │   │   │       │   ├── CMakeLists.txt
│   │   │   │       │   ├── main.cpp
│   │   │   │       │   ├── mtl4_LU_solve_interface.hh
│   │   │   │       │   └── mtl4_interface.hh
│   │   │   │       ├── tvmet/
│   │   │   │       │   ├── CMakeLists.txt
│   │   │   │       │   ├── main.cpp
│   │   │   │       │   └── tvmet_interface.hh
│   │   │   │       └── ublas/
│   │   │   │           ├── CMakeLists.txt
│   │   │   │           ├── main.cpp
│   │   │   │           └── ublas_interface.hh
│   │   │   ├── check_cache_queries.cpp
│   │   │   ├── eig33.cpp
│   │   │   ├── geometry.cpp
│   │   │   ├── product_threshold.cpp
│   │   │   ├── quat_slerp.cpp
│   │   │   ├── quatmul.cpp
│   │   │   ├── sparse_cholesky.cpp
│   │   │   ├── sparse_dense_product.cpp
│   │   │   ├── sparse_lu.cpp
│   │   │   ├── sparse_product.cpp
│   │   │   ├── sparse_randomsetter.cpp
│   │   │   ├── sparse_setter.cpp
│   │   │   ├── sparse_transpose.cpp
│   │   │   ├── sparse_trisolver.cpp
│   │   │   ├── spbench/
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   ├── sp_solver.cpp
│   │   │   │   ├── spbench.dtd
│   │   │   │   ├── spbenchsolver.cpp
│   │   │   │   ├── spbenchsolver.h
│   │   │   │   ├── spbenchstyle.h
│   │   │   │   └── test_sparseLU.cpp
│   │   │   ├── spmv.cpp
│   │   │   └── vdw_new.cpp
│   │   ├── blas/
│   │   │   ├── BandTriangularSolver.h
│   │   │   ├── CMakeLists.txt
│   │   │   ├── GeneralRank1Update.h
│   │   │   ├── PackedSelfadjointProduct.h
│   │   │   ├── PackedTriangularMatrixVector.h
│   │   │   ├── PackedTriangularSolverVector.h
│   │   │   ├── README.txt
│   │   │   ├── Rank2Update.h
│   │   │   ├── chbmv.f
│   │   │   ├── chpmv.f
│   │   │   ├── common.h
│   │   │   ├── complex_double.cpp
│   │   │   ├── complex_single.cpp
│   │   │   ├── complexdots.f
│   │   │   ├── ctbmv.f
│   │   │   ├── double.cpp
│   │   │   ├── drotm.f
│   │   │   ├── drotmg.f
│   │   │   ├── dsbmv.f
│   │   │   ├── dspmv.f
│   │   │   ├── dtbmv.f
│   │   │   ├── level1_cplx_impl.h
│   │   │   ├── level1_impl.h
│   │   │   ├── level1_real_impl.h
│   │   │   ├── level2_cplx_impl.h
│   │   │   ├── level2_impl.h
│   │   │   ├── level2_real_impl.h
│   │   │   ├── level3_impl.h
│   │   │   ├── lsame.f
│   │   │   ├── single.cpp
│   │   │   ├── srotm.f
│   │   │   ├── srotmg.f
│   │   │   ├── ssbmv.f
│   │   │   ├── sspmv.f
│   │   │   ├── stbmv.f
│   │   │   ├── testing/
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   ├── cblat1.f
│   │   │   │   ├── cblat2.f
│   │   │   │   ├── cblat3.f
│   │   │   │   ├── dblat1.f
│   │   │   │   ├── dblat2.f
│   │   │   │   ├── dblat3.f
│   │   │   │   ├── runblastest.sh
│   │   │   │   ├── sblat1.f
│   │   │   │   ├── sblat2.f
│   │   │   │   ├── sblat3.f
│   │   │   │   ├── zblat1.f
│   │   │   │   ├── zblat2.f
│   │   │   │   └── zblat3.f
│   │   │   ├── xerbla.cpp
│   │   │   ├── zhbmv.f
│   │   │   ├── zhpmv.f
│   │   │   └── ztbmv.f
│   │   ├── cmake/
│   │   │   ├── EigenConfigureTesting.cmake
│   │   │   ├── EigenDetermineOSVersion.cmake
│   │   │   ├── EigenDetermineVSServicePack.cmake
│   │   │   ├── EigenTesting.cmake
│   │   │   ├── FindAdolc.cmake
│   │   │   ├── FindBLAS.cmake
│   │   │   ├── FindCholmod.cmake
│   │   │   ├── FindEigen2.cmake
│   │   │   ├── FindEigen3.cmake
│   │   │   ├── FindFFTW.cmake
│   │   │   ├── FindGLEW.cmake
│   │   │   ├── FindGMP.cmake
│   │   │   ├── FindGSL.cmake
│   │   │   ├── FindGoogleHash.cmake
│   │   │   ├── FindLAPACK.cmake
│   │   │   ├── FindMPFR.cmake
│   │   │   ├── FindMetis.cmake
│   │   │   ├── FindPastix.cmake
│   │   │   ├── FindSPQR.cmake
│   │   │   ├── FindScotch.cmake
│   │   │   ├── FindStandardMathLibrary.cmake
│   │   │   ├── FindSuperLU.cmake
│   │   │   ├── FindUmfpack.cmake
│   │   │   ├── RegexUtils.cmake
│   │   │   └── language_support.cmake
│   │   ├── debug/
│   │   │   ├── gdb/
│   │   │   │   ├── __init__.py
│   │   │   │   └── printers.py
│   │   │   └── msvc/
│   │   │       └── eigen.natvis
│   │   ├── demos/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── mandelbrot/
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   ├── README
│   │   │   │   ├── mandelbrot.cpp
│   │   │   │   └── mandelbrot.h
│   │   │   ├── mix_eigen_and_c/
│   │   │   │   ├── README
│   │   │   │   ├── binary_library.cpp
│   │   │   │   ├── binary_library.h
│   │   │   │   └── example.c
│   │   │   └── opengl/
│   │   │       ├── CMakeLists.txt
│   │   │       ├── README
│   │   │       ├── camera.cpp
│   │   │       ├── camera.h
│   │   │       ├── gpuhelper.cpp
│   │   │       ├── gpuhelper.h
│   │   │       ├── icosphere.cpp
│   │   │       ├── icosphere.h
│   │   │       ├── quaternion_demo.cpp
│   │   │       ├── quaternion_demo.h
│   │   │       ├── trackball.cpp
│   │   │       └── trackball.h
│   │   ├── doc/
│   │   │   ├── A05_PortingFrom2To3.dox
│   │   │   ├── A10_Eigen2SupportModes.dox
│   │   │   ├── AsciiQuickReference.txt
│   │   │   ├── B01_Experimental.dox
│   │   │   ├── CMakeLists.txt
│   │   │   ├── ClassHierarchy.dox
│   │   │   ├── CustomizingEigen.dox
│   │   │   ├── Doxyfile.in
│   │   │   ├── FixedSizeVectorizable.dox
│   │   │   ├── FunctionsTakingEigenTypes.dox
│   │   │   ├── HiPerformance.dox
│   │   │   ├── InsideEigenExample.dox
│   │   │   ├── Manual.dox
│   │   │   ├── MatrixfreeSolverExample.dox
│   │   │   ├── Overview.dox
│   │   │   ├── PassingByValue.dox
│   │   │   ├── Pitfalls.dox
│   │   │   ├── PreprocessorDirectives.dox
│   │   │   ├── QuickReference.dox
│   │   │   ├── QuickStartGuide.dox
│   │   │   ├── SparseLinearSystems.dox
│   │   │   ├── SparseQuickReference.dox
│   │   │   ├── StlContainers.dox
│   │   │   ├── StorageOrders.dox
│   │   │   ├── StructHavingEigenMembers.dox
│   │   │   ├── TemplateKeyword.dox
│   │   │   ├── TopicAliasing.dox
│   │   │   ├── TopicAssertions.dox
│   │   │   ├── TopicEigenExpressionTemplates.dox
│   │   │   ├── TopicLazyEvaluation.dox
│   │   │   ├── TopicLinearAlgebraDecompositions.dox
│   │   │   ├── TopicMultithreading.dox
│   │   │   ├── TopicResizing.dox
│   │   │   ├── TopicScalarTypes.dox
│   │   │   ├── TopicVectorization.dox
│   │   │   ├── TutorialAdvancedInitialization.dox
│   │   │   ├── TutorialArrayClass.dox
│   │   │   ├── TutorialBlockOperations.dox
│   │   │   ├── TutorialGeometry.dox
│   │   │   ├── TutorialLinearAlgebra.dox
│   │   │   ├── TutorialMapClass.dox
│   │   │   ├── TutorialMatrixArithmetic.dox
│   │   │   ├── TutorialMatrixClass.dox
│   │   │   ├── TutorialReductionsVisitorsBroadcasting.dox
│   │   │   ├── TutorialSparse.dox
│   │   │   ├── TutorialSparse_example_details.dox
│   │   │   ├── UnalignedArrayAssert.dox
│   │   │   ├── UsingIntelMKL.dox
│   │   │   ├── WrongStackAlignment.dox
│   │   │   ├── eigen_navtree_hacks.js
│   │   │   ├── eigendoxy.css
│   │   │   ├── eigendoxy_footer.html.in
│   │   │   ├── eigendoxy_header.html.in
│   │   │   ├── eigendoxy_layout.xml.in
│   │   │   ├── eigendoxy_tabs.css
│   │   │   ├── examples/
│   │   │   │   ├── .krazy
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   ├── DenseBase_middleCols_int.cpp
│   │   │   │   ├── DenseBase_middleRows_int.cpp
│   │   │   │   ├── DenseBase_template_int_middleCols.cpp
│   │   │   │   ├── DenseBase_template_int_middleRows.cpp
│   │   │   │   ├── MatrixBase_cwise_const.cpp
│   │   │   │   ├── QuickStart_example.cpp
│   │   │   │   ├── QuickStart_example2_dynamic.cpp
│   │   │   │   ├── QuickStart_example2_fixed.cpp
│   │   │   │   ├── TemplateKeyword_flexible.cpp
│   │   │   │   ├── TemplateKeyword_simple.cpp
│   │   │   │   ├── TutorialLinAlgComputeTwice.cpp
│   │   │   │   ├── TutorialLinAlgExComputeSolveError.cpp
│   │   │   │   ├── TutorialLinAlgExSolveColPivHouseholderQR.cpp
│   │   │   │   ├── TutorialLinAlgExSolveLDLT.cpp
│   │   │   │   ├── TutorialLinAlgInverseDeterminant.cpp
│   │   │   │   ├── TutorialLinAlgRankRevealing.cpp
│   │   │   │   ├── TutorialLinAlgSVDSolve.cpp
│   │   │   │   ├── TutorialLinAlgSelfAdjointEigenSolver.cpp
│   │   │   │   ├── TutorialLinAlgSetThreshold.cpp
│   │   │   │   ├── Tutorial_ArrayClass_accessors.cpp
│   │   │   │   ├── Tutorial_ArrayClass_addition.cpp
│   │   │   │   ├── Tutorial_ArrayClass_cwise_other.cpp
│   │   │   │   ├── Tutorial_ArrayClass_interop.cpp
│   │   │   │   ├── Tutorial_ArrayClass_interop_matrix.cpp
│   │   │   │   ├── Tutorial_ArrayClass_mult.cpp
│   │   │   │   ├── Tutorial_BlockOperations_block_assignment.cpp
│   │   │   │   ├── Tutorial_BlockOperations_colrow.cpp
│   │   │   │   ├── Tutorial_BlockOperations_corner.cpp
│   │   │   │   ├── Tutorial_BlockOperations_print_block.cpp
│   │   │   │   ├── Tutorial_BlockOperations_vector.cpp
│   │   │   │   ├── Tutorial_PartialLU_solve.cpp
│   │   │   │   ├── Tutorial_ReductionsVisitorsBroadcasting_broadcast_1nn.cpp
│   │   │   │   ├── Tutorial_ReductionsVisitorsBroadcasting_broadcast_simple.cpp
│   │   │   │   ├── Tutorial_ReductionsVisitorsBroadcasting_broadcast_simple_rowwise.cpp
│   │   │   │   ├── Tutorial_ReductionsVisitorsBroadcasting_colwise.cpp
│   │   │   │   ├── Tutorial_ReductionsVisitorsBroadcasting_maxnorm.cpp
│   │   │   │   ├── Tutorial_ReductionsVisitorsBroadcasting_reductions_bool.cpp
│   │   │   │   ├── Tutorial_ReductionsVisitorsBroadcasting_reductions_norm.cpp
│   │   │   │   ├── Tutorial_ReductionsVisitorsBroadcasting_rowwise.cpp
│   │   │   │   ├── Tutorial_ReductionsVisitorsBroadcasting_visitors.cpp
│   │   │   │   ├── Tutorial_simple_example_dynamic_size.cpp
│   │   │   │   ├── Tutorial_simple_example_fixed_size.cpp
│   │   │   │   ├── class_Block.cpp
│   │   │   │   ├── class_CwiseBinaryOp.cpp
│   │   │   │   ├── class_CwiseUnaryOp.cpp
│   │   │   │   ├── class_CwiseUnaryOp_ptrfun.cpp
│   │   │   │   ├── class_FixedBlock.cpp
│   │   │   │   ├── class_FixedVectorBlock.cpp
│   │   │   │   ├── class_VectorBlock.cpp
│   │   │   │   ├── function_taking_eigenbase.cpp
│   │   │   │   ├── function_taking_ref.cpp
│   │   │   │   ├── matrixfree_cg.cpp
│   │   │   │   ├── tut_arithmetic_add_sub.cpp
│   │   │   │   ├── tut_arithmetic_dot_cross.cpp
│   │   │   │   ├── tut_arithmetic_matrix_mul.cpp
│   │   │   │   ├── tut_arithmetic_redux_basic.cpp
│   │   │   │   ├── tut_arithmetic_scalar_mul_div.cpp
│   │   │   │   ├── tut_matrix_coefficient_accessors.cpp
│   │   │   │   ├── tut_matrix_resize.cpp
│   │   │   │   └── tut_matrix_resize_fixed_size.cpp
│   │   │   ├── snippets/
│   │   │   │   ├── .krazy
│   │   │   │   ├── AngleAxis_mimic_euler.cpp
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   ├── ColPivHouseholderQR_solve.cpp
│   │   │   │   ├── ComplexEigenSolver_compute.cpp
│   │   │   │   ├── ComplexEigenSolver_eigenvalues.cpp
│   │   │   │   ├── ComplexEigenSolver_eigenvectors.cpp
│   │   │   │   ├── ComplexSchur_compute.cpp
│   │   │   │   ├── ComplexSchur_matrixT.cpp
│   │   │   │   ├── ComplexSchur_matrixU.cpp
│   │   │   │   ├── Cwise_abs.cpp
│   │   │   │   ├── Cwise_abs2.cpp
│   │   │   │   ├── Cwise_acos.cpp
│   │   │   │   ├── Cwise_asin.cpp
│   │   │   │   ├── Cwise_boolean_and.cpp
│   │   │   │   ├── Cwise_boolean_or.cpp
│   │   │   │   ├── Cwise_cos.cpp
│   │   │   │   ├── Cwise_cube.cpp
│   │   │   │   ├── Cwise_equal_equal.cpp
│   │   │   │   ├── Cwise_exp.cpp
│   │   │   │   ├── Cwise_greater.cpp
│   │   │   │   ├── Cwise_greater_equal.cpp
│   │   │   │   ├── Cwise_inverse.cpp
│   │   │   │   ├── Cwise_less.cpp
│   │   │   │   ├── Cwise_less_equal.cpp
│   │   │   │   ├── Cwise_log.cpp
│   │   │   │   ├── Cwise_max.cpp
│   │   │   │   ├── Cwise_min.cpp
│   │   │   │   ├── Cwise_minus.cpp
│   │   │   │   ├── Cwise_minus_equal.cpp
│   │   │   │   ├── Cwise_not_equal.cpp
│   │   │   │   ├── Cwise_plus.cpp
│   │   │   │   ├── Cwise_plus_equal.cpp
│   │   │   │   ├── Cwise_pow.cpp
│   │   │   │   ├── Cwise_product.cpp
│   │   │   │   ├── Cwise_quotient.cpp
│   │   │   │   ├── Cwise_sin.cpp
│   │   │   │   ├── Cwise_slash_equal.cpp
│   │   │   │   ├── Cwise_sqrt.cpp
│   │   │   │   ├── Cwise_square.cpp
│   │   │   │   ├── Cwise_tan.cpp
│   │   │   │   ├── Cwise_times_equal.cpp
│   │   │   │   ├── DenseBase_LinSpaced.cpp
│   │   │   │   ├── DenseBase_LinSpaced_seq.cpp
│   │   │   │   ├── DenseBase_setLinSpaced.cpp
│   │   │   │   ├── DirectionWise_replicate.cpp
│   │   │   │   ├── DirectionWise_replicate_int.cpp
│   │   │   │   ├── EigenSolver_EigenSolver_MatrixType.cpp
│   │   │   │   ├── EigenSolver_compute.cpp
│   │   │   │   ├── EigenSolver_eigenvalues.cpp
│   │   │   │   ├── EigenSolver_eigenvectors.cpp
│   │   │   │   ├── EigenSolver_pseudoEigenvectors.cpp
│   │   │   │   ├── FullPivHouseholderQR_solve.cpp
│   │   │   │   ├── FullPivLU_image.cpp
│   │   │   │   ├── FullPivLU_kernel.cpp
│   │   │   │   ├── FullPivLU_solve.cpp
│   │   │   │   ├── GeneralizedEigenSolver.cpp
│   │   │   │   ├── HessenbergDecomposition_compute.cpp
│   │   │   │   ├── HessenbergDecomposition_matrixH.cpp
│   │   │   │   ├── HessenbergDecomposition_packedMatrix.cpp
│   │   │   │   ├── HouseholderQR_householderQ.cpp
│   │   │   │   ├── HouseholderQR_solve.cpp
│   │   │   │   ├── HouseholderSequence_HouseholderSequence.cpp
│   │   │   │   ├── IOFormat.cpp
│   │   │   │   ├── JacobiSVD_basic.cpp
│   │   │   │   ├── Jacobi_makeGivens.cpp
│   │   │   │   ├── Jacobi_makeJacobi.cpp
│   │   │   │   ├── LLT_example.cpp
│   │   │   │   ├── LLT_solve.cpp
│   │   │   │   ├── Map_general_stride.cpp
│   │   │   │   ├── Map_inner_stride.cpp
│   │   │   │   ├── Map_outer_stride.cpp
│   │   │   │   ├── Map_placement_new.cpp
│   │   │   │   ├── Map_simple.cpp
│   │   │   │   ├── MatrixBase_adjoint.cpp
│   │   │   │   ├── MatrixBase_all.cpp
│   │   │   │   ├── MatrixBase_applyOnTheLeft.cpp
│   │   │   │   ├── MatrixBase_applyOnTheRight.cpp
│   │   │   │   ├── MatrixBase_array.cpp
│   │   │   │   ├── MatrixBase_array_const.cpp
│   │   │   │   ├── MatrixBase_asDiagonal.cpp
│   │   │   │   ├── MatrixBase_block_int_int.cpp
│   │   │   │   ├── MatrixBase_block_int_int_int_int.cpp
│   │   │   │   ├── MatrixBase_bottomLeftCorner_int_int.cpp
│   │   │   │   ├── MatrixBase_bottomRightCorner_int_int.cpp
│   │   │   │   ├── MatrixBase_bottomRows_int.cpp
│   │   │   │   ├── MatrixBase_cast.cpp
│   │   │   │   ├── MatrixBase_col.cpp
│   │   │   │   ├── MatrixBase_colwise.cpp
│   │   │   │   ├── MatrixBase_computeInverseAndDetWithCheck.cpp
│   │   │   │   ├── MatrixBase_computeInverseWithCheck.cpp
│   │   │   │   ├── MatrixBase_cwiseAbs.cpp
│   │   │   │   ├── MatrixBase_cwiseAbs2.cpp
│   │   │   │   ├── MatrixBase_cwiseEqual.cpp
│   │   │   │   ├── MatrixBase_cwiseInverse.cpp
│   │   │   │   ├── MatrixBase_cwiseMax.cpp
│   │   │   │   ├── MatrixBase_cwiseMin.cpp
│   │   │   │   ├── MatrixBase_cwiseNotEqual.cpp
│   │   │   │   ├── MatrixBase_cwiseProduct.cpp
│   │   │   │   ├── MatrixBase_cwiseQuotient.cpp
│   │   │   │   ├── MatrixBase_cwiseSqrt.cpp
│   │   │   │   ├── MatrixBase_diagonal.cpp
│   │   │   │   ├── MatrixBase_diagonal_int.cpp
│   │   │   │   ├── MatrixBase_diagonal_template_int.cpp
│   │   │   │   ├── MatrixBase_eigenvalues.cpp
│   │   │   │   ├── MatrixBase_end_int.cpp
│   │   │   │   ├── MatrixBase_eval.cpp
│   │   │   │   ├── MatrixBase_extract.cpp
│   │   │   │   ├── MatrixBase_fixedBlock_int_int.cpp
│   │   │   │   ├── MatrixBase_identity.cpp
│   │   │   │   ├── MatrixBase_identity_int_int.cpp
│   │   │   │   ├── MatrixBase_inverse.cpp
│   │   │   │   ├── MatrixBase_isDiagonal.cpp
│   │   │   │   ├── MatrixBase_isIdentity.cpp
│   │   │   │   ├── MatrixBase_isOnes.cpp
│   │   │   │   ├── MatrixBase_isOrthogonal.cpp
│   │   │   │   ├── MatrixBase_isUnitary.cpp
│   │   │   │   ├── MatrixBase_isZero.cpp
│   │   │   │   ├── MatrixBase_leftCols_int.cpp
│   │   │   │   ├── MatrixBase_marked.cpp
│   │   │   │   ├── MatrixBase_noalias.cpp
│   │   │   │   ├── MatrixBase_ones.cpp
│   │   │   │   ├── MatrixBase_ones_int.cpp
│   │   │   │   ├── MatrixBase_ones_int_int.cpp
│   │   │   │   ├── MatrixBase_operatorNorm.cpp
│   │   │   │   ├── MatrixBase_part.cpp
│   │   │   │   ├── MatrixBase_prod.cpp
│   │   │   │   ├── MatrixBase_random.cpp
│   │   │   │   ├── MatrixBase_random_int.cpp
│   │   │   │   ├── MatrixBase_random_int_int.cpp
│   │   │   │   ├── MatrixBase_replicate.cpp
│   │   │   │   ├── MatrixBase_replicate_int_int.cpp
│   │   │   │   ├── MatrixBase_reverse.cpp
│   │   │   │   ├── MatrixBase_rightCols_int.cpp
│   │   │   │   ├── MatrixBase_row.cpp
│   │   │   │   ├── MatrixBase_rowwise.cpp
│   │   │   │   ├── MatrixBase_segment_int_int.cpp
│   │   │   │   ├── MatrixBase_select.cpp
│   │   │   │   ├── MatrixBase_set.cpp
│   │   │   │   ├── MatrixBase_setIdentity.cpp
│   │   │   │   ├── MatrixBase_setOnes.cpp
│   │   │   │   ├── MatrixBase_setRandom.cpp
│   │   │   │   ├── MatrixBase_setZero.cpp
│   │   │   │   ├── MatrixBase_start_int.cpp
│   │   │   │   ├── MatrixBase_template_int_bottomRows.cpp
│   │   │   │   ├── MatrixBase_template_int_end.cpp
│   │   │   │   ├── MatrixBase_template_int_int_block_int_int_int_int.cpp
│   │   │   │   ├── MatrixBase_template_int_int_bottomLeftCorner.cpp
│   │   │   │   ├── MatrixBase_template_int_int_bottomLeftCorner_int_int.cpp
│   │   │   │   ├── MatrixBase_template_int_int_bottomRightCorner.cpp
│   │   │   │   ├── MatrixBase_template_int_int_bottomRightCorner_int_int.cpp
│   │   │   │   ├── MatrixBase_template_int_int_topLeftCorner.cpp
│   │   │   │   ├── MatrixBase_template_int_int_topLeftCorner_int_int.cpp
│   │   │   │   ├── MatrixBase_template_int_int_topRightCorner.cpp
│   │   │   │   ├── MatrixBase_template_int_int_topRightCorner_int_int.cpp
│   │   │   │   ├── MatrixBase_template_int_leftCols.cpp
│   │   │   │   ├── MatrixBase_template_int_rightCols.cpp
│   │   │   │   ├── MatrixBase_template_int_segment.cpp
│   │   │   │   ├── MatrixBase_template_int_start.cpp
│   │   │   │   ├── MatrixBase_template_int_topRows.cpp
│   │   │   │   ├── MatrixBase_topLeftCorner_int_int.cpp
│   │   │   │   ├── MatrixBase_topRightCorner_int_int.cpp
│   │   │   │   ├── MatrixBase_topRows_int.cpp
│   │   │   │   ├── MatrixBase_transpose.cpp
│   │   │   │   ├── MatrixBase_zero.cpp
│   │   │   │   ├── MatrixBase_zero_int.cpp
│   │   │   │   ├── MatrixBase_zero_int_int.cpp
│   │   │   │   ├── Matrix_resize_NoChange_int.cpp
│   │   │   │   ├── Matrix_resize_int.cpp
│   │   │   │   ├── Matrix_resize_int_NoChange.cpp
│   │   │   │   ├── Matrix_resize_int_int.cpp
│   │   │   │   ├── Matrix_setConstant_int.cpp
│   │   │   │   ├── Matrix_setConstant_int_int.cpp
│   │   │   │   ├── Matrix_setIdentity_int_int.cpp
│   │   │   │   ├── Matrix_setOnes_int.cpp
│   │   │   │   ├── Matrix_setOnes_int_int.cpp
│   │   │   │   ├── Matrix_setRandom_int.cpp
│   │   │   │   ├── Matrix_setRandom_int_int.cpp
│   │   │   │   ├── Matrix_setZero_int.cpp
│   │   │   │   ├── Matrix_setZero_int_int.cpp
│   │   │   │   ├── PartialPivLU_solve.cpp
│   │   │   │   ├── PartialRedux_count.cpp
│   │   │   │   ├── PartialRedux_maxCoeff.cpp
│   │   │   │   ├── PartialRedux_minCoeff.cpp
│   │   │   │   ├── PartialRedux_norm.cpp
│   │   │   │   ├── PartialRedux_prod.cpp
│   │   │   │   ├── PartialRedux_squaredNorm.cpp
│   │   │   │   ├── PartialRedux_sum.cpp
│   │   │   │   ├── RealQZ_compute.cpp
│   │   │   │   ├── RealSchur_RealSchur_MatrixType.cpp
│   │   │   │   ├── RealSchur_compute.cpp
│   │   │   │   ├── SelfAdjointEigenSolver_SelfAdjointEigenSolver.cpp
│   │   │   │   ├── SelfAdjointEigenSolver_SelfAdjointEigenSolver_MatrixType.cpp
│   │   │   │   ├── SelfAdjointEigenSolver_SelfAdjointEigenSolver_MatrixType2.cpp
│   │   │   │   ├── SelfAdjointEigenSolver_compute_MatrixType.cpp
│   │   │   │   ├── SelfAdjointEigenSolver_compute_MatrixType2.cpp
│   │   │   │   ├── SelfAdjointEigenSolver_eigenvalues.cpp
│   │   │   │   ├── SelfAdjointEigenSolver_eigenvectors.cpp
│   │   │   │   ├── SelfAdjointEigenSolver_operatorInverseSqrt.cpp
│   │   │   │   ├── SelfAdjointEigenSolver_operatorSqrt.cpp
│   │   │   │   ├── SelfAdjointView_eigenvalues.cpp
│   │   │   │   ├── SelfAdjointView_operatorNorm.cpp
│   │   │   │   ├── TopicAliasing_block.cpp
│   │   │   │   ├── TopicAliasing_block_correct.cpp
│   │   │   │   ├── TopicAliasing_cwise.cpp
│   │   │   │   ├── TopicAliasing_mult1.cpp
│   │   │   │   ├── TopicAliasing_mult2.cpp
│   │   │   │   ├── TopicAliasing_mult3.cpp
│   │   │   │   ├── TopicStorageOrders_example.cpp
│   │   │   │   ├── Tridiagonalization_Tridiagonalization_MatrixType.cpp
│   │   │   │   ├── Tridiagonalization_compute.cpp
│   │   │   │   ├── Tridiagonalization_decomposeInPlace.cpp
│   │   │   │   ├── Tridiagonalization_diagonal.cpp
│   │   │   │   ├── Tridiagonalization_householderCoefficients.cpp
│   │   │   │   ├── Tridiagonalization_packedMatrix.cpp
│   │   │   │   ├── Tutorial_AdvancedInitialization_Block.cpp
│   │   │   │   ├── Tutorial_AdvancedInitialization_CommaTemporary.cpp
│   │   │   │   ├── Tutorial_AdvancedInitialization_Join.cpp
│   │   │   │   ├── Tutorial_AdvancedInitialization_LinSpaced.cpp
│   │   │   │   ├── Tutorial_AdvancedInitialization_ThreeWays.cpp
│   │   │   │   ├── Tutorial_AdvancedInitialization_Zero.cpp
│   │   │   │   ├── Tutorial_Map_rowmajor.cpp
│   │   │   │   ├── Tutorial_Map_using.cpp
│   │   │   │   ├── Tutorial_commainit_01.cpp
│   │   │   │   ├── Tutorial_commainit_01b.cpp
│   │   │   │   ├── Tutorial_commainit_02.cpp
│   │   │   │   ├── Tutorial_solve_matrix_inverse.cpp
│   │   │   │   ├── Tutorial_solve_multiple_rhs.cpp
│   │   │   │   ├── Tutorial_solve_reuse_decomposition.cpp
│   │   │   │   ├── Tutorial_solve_singular.cpp
│   │   │   │   ├── Tutorial_solve_triangular.cpp
│   │   │   │   ├── Tutorial_solve_triangular_inplace.cpp
│   │   │   │   ├── Vectorwise_reverse.cpp
│   │   │   │   ├── class_FullPivLU.cpp
│   │   │   │   ├── compile_snippet.cpp.in
│   │   │   │   ├── tut_arithmetic_redux_minmax.cpp
│   │   │   │   ├── tut_arithmetic_transpose_aliasing.cpp
│   │   │   │   ├── tut_arithmetic_transpose_conjugate.cpp
│   │   │   │   ├── tut_arithmetic_transpose_inplace.cpp
│   │   │   │   └── tut_matrix_assignment_resizing.cpp
│   │   │   ├── special_examples/
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   ├── Tutorial_sparse_example.cpp
│   │   │   │   └── Tutorial_sparse_example_details.cpp
│   │   │   └── tutorial.cpp
│   │   ├── eigen3.pc.in
│   │   ├── failtest/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── block_nonconst_ctor_on_const_xpr_0.cpp
│   │   │   ├── block_nonconst_ctor_on_const_xpr_1.cpp
│   │   │   ├── block_nonconst_ctor_on_const_xpr_2.cpp
│   │   │   ├── block_on_const_type_actually_const_0.cpp
│   │   │   ├── block_on_const_type_actually_const_1.cpp
│   │   │   ├── colpivqr_int.cpp
│   │   │   ├── const_qualified_block_method_retval_0.cpp
│   │   │   ├── const_qualified_block_method_retval_1.cpp
│   │   │   ├── const_qualified_diagonal_method_retval.cpp
│   │   │   ├── const_qualified_transpose_method_retval.cpp
│   │   │   ├── diagonal_nonconst_ctor_on_const_xpr.cpp
│   │   │   ├── diagonal_on_const_type_actually_const.cpp
│   │   │   ├── eigensolver_cplx.cpp
│   │   │   ├── eigensolver_int.cpp
│   │   │   ├── failtest_sanity_check.cpp
│   │   │   ├── fullpivlu_int.cpp
│   │   │   ├── fullpivqr_int.cpp
│   │   │   ├── jacobisvd_int.cpp
│   │   │   ├── ldlt_int.cpp
│   │   │   ├── llt_int.cpp
│   │   │   ├── map_nonconst_ctor_on_const_ptr_0.cpp
│   │   │   ├── map_nonconst_ctor_on_const_ptr_1.cpp
│   │   │   ├── map_nonconst_ctor_on_const_ptr_2.cpp
│   │   │   ├── map_nonconst_ctor_on_const_ptr_3.cpp
│   │   │   ├── map_nonconst_ctor_on_const_ptr_4.cpp
│   │   │   ├── map_on_const_type_actually_const_0.cpp
│   │   │   ├── map_on_const_type_actually_const_1.cpp
│   │   │   ├── partialpivlu_int.cpp
│   │   │   ├── qr_int.cpp
│   │   │   ├── ref_1.cpp
│   │   │   ├── ref_2.cpp
│   │   │   ├── ref_3.cpp
│   │   │   ├── ref_4.cpp
│   │   │   ├── ref_5.cpp
│   │   │   ├── transpose_nonconst_ctor_on_const_xpr.cpp
│   │   │   └── transpose_on_const_type_actually_const.cpp
│   │   ├── lapack/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── cholesky.cpp
│   │   │   ├── clacgv.f
│   │   │   ├── cladiv.f
│   │   │   ├── clarf.f
│   │   │   ├── clarfb.f
│   │   │   ├── clarfg.f
│   │   │   ├── clarft.f
│   │   │   ├── complex_double.cpp
│   │   │   ├── complex_single.cpp
│   │   │   ├── dladiv.f
│   │   │   ├── dlamch.f
│   │   │   ├── dlapy2.f
│   │   │   ├── dlapy3.f
│   │   │   ├── dlarf.f
│   │   │   ├── dlarfb.f
│   │   │   ├── dlarfg.f
│   │   │   ├── dlarft.f
│   │   │   ├── double.cpp
│   │   │   ├── dsecnd_NONE.f
│   │   │   ├── eigenvalues.cpp
│   │   │   ├── ilaclc.f
│   │   │   ├── ilaclr.f
│   │   │   ├── iladlc.f
│   │   │   ├── iladlr.f
│   │   │   ├── ilaslc.f
│   │   │   ├── ilaslr.f
│   │   │   ├── ilazlc.f
│   │   │   ├── ilazlr.f
│   │   │   ├── lapack_common.h
│   │   │   ├── lu.cpp
│   │   │   ├── second_NONE.f
│   │   │   ├── single.cpp
│   │   │   ├── sladiv.f
│   │   │   ├── slamch.f
│   │   │   ├── slapy2.f
│   │   │   ├── slapy3.f
│   │   │   ├── slarf.f
│   │   │   ├── slarfb.f
│   │   │   ├── slarfg.f
│   │   │   ├── slarft.f
│   │   │   ├── zlacgv.f
│   │   │   ├── zladiv.f
│   │   │   ├── zlarf.f
│   │   │   ├── zlarfb.f
│   │   │   ├── zlarfg.f
│   │   │   └── zlarft.f
│   │   ├── scripts/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── cdashtesting.cmake.in
│   │   │   ├── check.in
│   │   │   ├── debug.in
│   │   │   ├── eigen_gen_credits.cpp
│   │   │   ├── eigen_gen_docs
│   │   │   ├── release.in
│   │   │   └── relicense.py
│   │   ├── signature_of_eigen3_matrix_library
│   │   ├── test/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── adjoint.cpp
│   │   │   ├── array.cpp
│   │   │   ├── array_for_matrix.cpp
│   │   │   ├── array_replicate.cpp
│   │   │   ├── array_reverse.cpp
│   │   │   ├── bandmatrix.cpp
│   │   │   ├── basicstuff.cpp
│   │   │   ├── bicgstab.cpp
│   │   │   ├── block.cpp
│   │   │   ├── cholesky.cpp
│   │   │   ├── cholmod_support.cpp
│   │   │   ├── commainitializer.cpp
│   │   │   ├── conjugate_gradient.cpp
│   │   │   ├── conservative_resize.cpp
│   │   │   ├── corners.cpp
│   │   │   ├── cwiseop.cpp
│   │   │   ├── denseLM.cpp
│   │   │   ├── determinant.cpp
│   │   │   ├── diagonal.cpp
│   │   │   ├── diagonalmatrices.cpp
│   │   │   ├── dontalign.cpp
│   │   │   ├── dynalloc.cpp
│   │   │   ├── eigen2/
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   ├── eigen2_adjoint.cpp
│   │   │   │   ├── eigen2_alignedbox.cpp
│   │   │   │   ├── eigen2_array.cpp
│   │   │   │   ├── eigen2_basicstuff.cpp
│   │   │   │   ├── eigen2_bug_132.cpp
│   │   │   │   ├── eigen2_cholesky.cpp
│   │   │   │   ├── eigen2_commainitializer.cpp
│   │   │   │   ├── eigen2_cwiseop.cpp
│   │   │   │   ├── eigen2_determinant.cpp
│   │   │   │   ├── eigen2_dynalloc.cpp
│   │   │   │   ├── eigen2_eigensolver.cpp
│   │   │   │   ├── eigen2_first_aligned.cpp
│   │   │   │   ├── eigen2_geometry.cpp
│   │   │   │   ├── eigen2_geometry_with_eigen2_prefix.cpp
│   │   │   │   ├── eigen2_hyperplane.cpp
│   │   │   │   ├── eigen2_inverse.cpp
│   │   │   │   ├── eigen2_linearstructure.cpp
│   │   │   │   ├── eigen2_lu.cpp
│   │   │   │   ├── eigen2_map.cpp
│   │   │   │   ├── eigen2_meta.cpp
│   │   │   │   ├── eigen2_miscmatrices.cpp
│   │   │   │   ├── eigen2_mixingtypes.cpp
│   │   │   │   ├── eigen2_newstdvector.cpp
│   │   │   │   ├── eigen2_nomalloc.cpp
│   │   │   │   ├── eigen2_packetmath.cpp
│   │   │   │   ├── eigen2_parametrizedline.cpp
│   │   │   │   ├── eigen2_prec_inverse_4x4.cpp
│   │   │   │   ├── eigen2_product_large.cpp
│   │   │   │   ├── eigen2_product_small.cpp
│   │   │   │   ├── eigen2_qr.cpp
│   │   │   │   ├── eigen2_qtvector.cpp
│   │   │   │   ├── eigen2_regression.cpp
│   │   │   │   ├── eigen2_sizeof.cpp
│   │   │   │   ├── eigen2_smallvectors.cpp
│   │   │   │   ├── eigen2_sparse_basic.cpp
│   │   │   │   ├── eigen2_sparse_product.cpp
│   │   │   │   ├── eigen2_sparse_solvers.cpp
│   │   │   │   ├── eigen2_sparse_vector.cpp
│   │   │   │   ├── eigen2_stdvector.cpp
│   │   │   │   ├── eigen2_submatrices.cpp
│   │   │   │   ├── eigen2_sum.cpp
│   │   │   │   ├── eigen2_svd.cpp
│   │   │   │   ├── eigen2_swap.cpp
│   │   │   │   ├── eigen2_triangular.cpp
│   │   │   │   ├── eigen2_unalignedassert.cpp
│   │   │   │   ├── eigen2_visitor.cpp
│   │   │   │   ├── gsl_helper.h
│   │   │   │   ├── main.h
│   │   │   │   ├── product.h
│   │   │   │   ├── runtest.sh
│   │   │   │   ├── sparse.h
│   │   │   │   └── testsuite.cmake
│   │   │   ├── eigen2support.cpp
│   │   │   ├── eigensolver_complex.cpp
│   │   │   ├── eigensolver_generalized_real.cpp
│   │   │   ├── eigensolver_generic.cpp
│   │   │   ├── eigensolver_selfadjoint.cpp
│   │   │   ├── exceptions.cpp
│   │   │   ├── first_aligned.cpp
│   │   │   ├── geo_alignedbox.cpp
│   │   │   ├── geo_eulerangles.cpp
│   │   │   ├── geo_homogeneous.cpp
│   │   │   ├── geo_hyperplane.cpp
│   │   │   ├── geo_orthomethods.cpp
│   │   │   ├── geo_parametrizedline.cpp
│   │   │   ├── geo_quaternion.cpp
│   │   │   ├── geo_transformations.cpp
│   │   │   ├── hessenberg.cpp
│   │   │   ├── householder.cpp
│   │   │   ├── integer_types.cpp
│   │   │   ├── inverse.cpp
│   │   │   ├── jacobi.cpp
│   │   │   ├── jacobisvd.cpp
│   │   │   ├── linearstructure.cpp
│   │   │   ├── lu.cpp
│   │   │   ├── main.h
│   │   │   ├── mapped_matrix.cpp
│   │   │   ├── mapstaticmethods.cpp
│   │   │   ├── mapstride.cpp
│   │   │   ├── meta.cpp
│   │   │   ├── metis_support.cpp
│   │   │   ├── miscmatrices.cpp
│   │   │   ├── mixingtypes.cpp
│   │   │   ├── mpl2only.cpp
│   │   │   ├── nesting_ops.cpp
│   │   │   ├── nomalloc.cpp
│   │   │   ├── nullary.cpp
│   │   │   ├── packetmath.cpp
│   │   │   ├── pardiso_support.cpp
│   │   │   ├── pastix_support.cpp
│   │   │   ├── permutationmatrices.cpp
│   │   │   ├── prec_inverse_4x4.cpp
│   │   │   ├── product.h
│   │   │   ├── product_extra.cpp
│   │   │   ├── product_large.cpp
│   │   │   ├── product_mmtr.cpp
│   │   │   ├── product_notemporary.cpp
│   │   │   ├── product_selfadjoint.cpp
│   │   │   ├── product_small.cpp
│   │   │   ├── product_symm.cpp
│   │   │   ├── product_syrk.cpp
│   │   │   ├── product_trmm.cpp
│   │   │   ├── product_trmv.cpp
│   │   │   ├── product_trsolve.cpp
│   │   │   ├── qr.cpp
│   │   │   ├── qr_colpivoting.cpp
│   │   │   ├── qr_fullpivoting.cpp
│   │   │   ├── qtvector.cpp
│   │   │   ├── real_qz.cpp
│   │   │   ├── redux.cpp
│   │   │   ├── ref.cpp
│   │   │   ├── resize.cpp
│   │   │   ├── runtest.sh
│   │   │   ├── rvalue_types.cpp
│   │   │   ├── schur_complex.cpp
│   │   │   ├── schur_real.cpp
│   │   │   ├── selfadjoint.cpp
│   │   │   ├── simplicial_cholesky.cpp
│   │   │   ├── sizeof.cpp
│   │   │   ├── sizeoverflow.cpp
│   │   │   ├── smallvectors.cpp
│   │   │   ├── sparse.h
│   │   │   ├── sparseLM.cpp
│   │   │   ├── sparse_basic.cpp
│   │   │   ├── sparse_permutations.cpp
│   │   │   ├── sparse_product.cpp
│   │   │   ├── sparse_solver.h
│   │   │   ├── sparse_solvers.cpp
│   │   │   ├── sparse_vector.cpp
│   │   │   ├── sparselu.cpp
│   │   │   ├── sparseqr.cpp
│   │   │   ├── special_numbers.cpp
│   │   │   ├── spqr_support.cpp
│   │   │   ├── stable_norm.cpp
│   │   │   ├── stddeque.cpp
│   │   │   ├── stddeque_overload.cpp
│   │   │   ├── stdlist.cpp
│   │   │   ├── stdlist_overload.cpp
│   │   │   ├── stdvector.cpp
│   │   │   ├── stdvector_overload.cpp
│   │   │   ├── superlu_support.cpp
│   │   │   ├── swap.cpp
│   │   │   ├── testsuite.cmake
│   │   │   ├── triangular.cpp
│   │   │   ├── umeyama.cpp
│   │   │   ├── umfpack_support.cpp
│   │   │   ├── unalignedassert.cpp
│   │   │   ├── unalignedcount.cpp
│   │   │   ├── upperbidiagonalization.cpp
│   │   │   ├── vectorization_logic.cpp
│   │   │   ├── vectorwiseop.cpp
│   │   │   ├── visitor.cpp
│   │   │   └── zerosized.cpp
│   │   └── unsupported/
│   │       ├── CMakeLists.txt
│   │       ├── Eigen/
│   │       │   ├── AdolcForward
│   │       │   ├── AlignedVector3
│   │       │   ├── ArpackSupport
│   │       │   ├── AutoDiff
│   │       │   ├── BVH
│   │       │   ├── CMakeLists.txt
│   │       │   ├── FFT
│   │       │   ├── IterativeSolvers
│   │       │   ├── KroneckerProduct
│   │       │   ├── LevenbergMarquardt
│   │       │   ├── MPRealSupport
│   │       │   ├── MatrixFunctions
│   │       │   ├── MoreVectorization
│   │       │   ├── NonLinearOptimization
│   │       │   ├── NumericalDiff
│   │       │   ├── OpenGLSupport
│   │       │   ├── Polynomials
│   │       │   ├── SVD
│   │       │   ├── Skyline
│   │       │   ├── SparseExtra
│   │       │   ├── Splines
│   │       │   └── src/
│   │       │       ├── AutoDiff/
│   │       │       │   ├── AutoDiffJacobian.h
│   │       │       │   ├── AutoDiffScalar.h
│   │       │       │   ├── AutoDiffVector.h
│   │       │       │   └── CMakeLists.txt
│   │       │       ├── BVH/
│   │       │       │   ├── BVAlgorithms.h
│   │       │       │   ├── CMakeLists.txt
│   │       │       │   └── KdBVH.h
│   │       │       ├── CMakeLists.txt
│   │       │       ├── Eigenvalues/
│   │       │       │   ├── ArpackSelfAdjointEigenSolver.h
│   │       │       │   └── CMakeLists.txt
│   │       │       ├── FFT/
│   │       │       │   ├── CMakeLists.txt
│   │       │       │   ├── ei_fftw_impl.h
│   │       │       │   └── ei_kissfft_impl.h
│   │       │       ├── IterativeSolvers/
│   │       │       │   ├── CMakeLists.txt
│   │       │       │   ├── ConstrainedConjGrad.h
│   │       │       │   ├── DGMRES.h
│   │       │       │   ├── GMRES.h
│   │       │       │   ├── IncompleteCholesky.h
│   │       │       │   ├── IncompleteLU.h
│   │       │       │   ├── IterationController.h
│   │       │       │   ├── MINRES.h
│   │       │       │   └── Scaling.h
│   │       │       ├── KroneckerProduct/
│   │       │       │   ├── CMakeLists.txt
│   │       │       │   └── KroneckerTensorProduct.h
│   │       │       ├── LevenbergMarquardt/
│   │       │       │   ├── CMakeLists.txt
│   │       │       │   ├── CopyrightMINPACK.txt
│   │       │       │   ├── LMcovar.h
│   │       │       │   ├── LMonestep.h
│   │       │       │   ├── LMpar.h
│   │       │       │   ├── LMqrsolv.h
│   │       │       │   └── LevenbergMarquardt.h
│   │       │       ├── MatrixFunctions/
│   │       │       │   ├── CMakeLists.txt
│   │       │       │   ├── MatrixExponential.h
│   │       │       │   ├── MatrixFunction.h
│   │       │       │   ├── MatrixFunctionAtomic.h
│   │       │       │   ├── MatrixLogarithm.h
│   │       │       │   ├── MatrixPower.h
│   │       │       │   ├── MatrixSquareRoot.h
│   │       │       │   └── StemFunction.h
│   │       │       ├── MoreVectorization/
│   │       │       │   ├── CMakeLists.txt
│   │       │       │   └── MathFunctions.h
│   │       │       ├── NonLinearOptimization/
│   │       │       │   ├── CMakeLists.txt
│   │       │       │   ├── HybridNonLinearSolver.h
│   │       │       │   ├── LevenbergMarquardt.h
│   │       │       │   ├── chkder.h
│   │       │       │   ├── covar.h
│   │       │       │   ├── dogleg.h
│   │       │       │   ├── fdjac1.h
│   │       │       │   ├── lmpar.h
│   │       │       │   ├── qrsolv.h
│   │       │       │   ├── r1mpyq.h
│   │       │       │   ├── r1updt.h
│   │       │       │   └── rwupdt.h
│   │       │       ├── NumericalDiff/
│   │       │       │   ├── CMakeLists.txt
│   │       │       │   └── NumericalDiff.h
│   │       │       ├── Polynomials/
│   │       │       │   ├── CMakeLists.txt
│   │       │       │   ├── Companion.h
│   │       │       │   ├── PolynomialSolver.h
│   │       │       │   └── PolynomialUtils.h
│   │       │       ├── SVD/
│   │       │       │   ├── BDCSVD.h
│   │       │       │   ├── CMakeLists.txt
│   │       │       │   ├── JacobiSVD.h
│   │       │       │   ├── SVDBase.h
│   │       │       │   ├── TODOBdcsvd.txt
│   │       │       │   └── doneInBDCSVD.txt
│   │       │       ├── Skyline/
│   │       │       │   ├── CMakeLists.txt
│   │       │       │   ├── SkylineInplaceLU.h
│   │       │       │   ├── SkylineMatrix.h
│   │       │       │   ├── SkylineMatrixBase.h
│   │       │       │   ├── SkylineProduct.h
│   │       │       │   ├── SkylineStorage.h
│   │       │       │   └── SkylineUtil.h
│   │       │       ├── SparseExtra/
│   │       │       │   ├── BlockOfDynamicSparseMatrix.h
│   │       │       │   ├── CMakeLists.txt
│   │       │       │   ├── DynamicSparseMatrix.h
│   │       │       │   ├── MarketIO.h
│   │       │       │   ├── MatrixMarketIterator.h
│   │       │       │   └── RandomSetter.h
│   │       │       └── Splines/
│   │       │           ├── CMakeLists.txt
│   │       │           ├── Spline.h
│   │       │           ├── SplineFitting.h
│   │       │           └── SplineFwd.h
│   │       ├── README.txt
│   │       ├── bench/
│   │       │   └── bench_svd.cpp
│   │       ├── doc/
│   │       │   ├── CMakeLists.txt
│   │       │   ├── Overview.dox
│   │       │   ├── eigendoxy_layout.xml.in
│   │       │   ├── examples/
│   │       │   │   ├── BVH_Example.cpp
│   │       │   │   ├── CMakeLists.txt
│   │       │   │   ├── FFT.cpp
│   │       │   │   ├── MatrixExponential.cpp
│   │       │   │   ├── MatrixFunction.cpp
│   │       │   │   ├── MatrixLogarithm.cpp
│   │       │   │   ├── MatrixPower.cpp
│   │       │   │   ├── MatrixPower_optimal.cpp
│   │       │   │   ├── MatrixSine.cpp
│   │       │   │   ├── MatrixSinh.cpp
│   │       │   │   ├── MatrixSquareRoot.cpp
│   │       │   │   ├── PolynomialSolver1.cpp
│   │       │   │   └── PolynomialUtils1.cpp
│   │       │   └── snippets/
│   │       │       └── CMakeLists.txt
│   │       └── test/
│   │           ├── BVH.cpp
│   │           ├── CMakeLists.txt
│   │           ├── FFT.cpp
│   │           ├── FFTW.cpp
│   │           ├── NonLinearOptimization.cpp
│   │           ├── NumericalDiff.cpp
│   │           ├── alignedvector3.cpp
│   │           ├── autodiff.cpp
│   │           ├── bdcsvd.cpp
│   │           ├── dgmres.cpp
│   │           ├── forward_adolc.cpp
│   │           ├── gmres.cpp
│   │           ├── jacobisvd.cpp
│   │           ├── kronecker_product.cpp
│   │           ├── levenberg_marquardt.cpp
│   │           ├── matrix_exponential.cpp
│   │           ├── matrix_function.cpp
│   │           ├── matrix_functions.h
│   │           ├── matrix_power.cpp
│   │           ├── matrix_square_root.cpp
│   │           ├── minres.cpp
│   │           ├── mpreal/
│   │           │   └── mpreal.h
│   │           ├── mpreal_support.cpp
│   │           ├── openglsupport.cpp
│   │           ├── polynomialsolver.cpp
│   │           ├── polynomialutils.cpp
│   │           ├── sparse_extra.cpp
│   │           ├── splines.cpp
│   │           └── svd_common.h
│   ├── glew/
│   │   ├── LICENSE.txt
│   │   ├── README.txt
│   │   ├── TODO.txt
│   │   ├── auto/
│   │   │   ├── bin/
│   │   │   │   ├── fix_OML_sync_control.sh
│   │   │   │   ├── make.pl
│   │   │   │   ├── make_def_fun.pl
│   │   │   │   ├── make_def_var.pl
│   │   │   │   ├── make_header.pl
│   │   │   │   ├── make_html.pl
│   │   │   │   ├── make_info.pl
│   │   │   │   ├── make_info_list.pl
│   │   │   │   ├── make_init.pl
│   │   │   │   ├── make_list.pl
│   │   │   │   ├── make_str.pl
│   │   │   │   ├── make_struct_fun.pl
│   │   │   │   ├── make_struct_var.pl
│   │   │   │   ├── parse_spec.pl
│   │   │   │   ├── update_ext.sh
│   │   │   │   └── update_registry.sh
│   │   │   ├── blacklist
│   │   │   ├── core/
│   │   │   │   ├── GLX_ARB_get_proc_address
│   │   │   │   ├── GLX_ATI_pixel_format_float
│   │   │   │   ├── GLX_ATI_render_texture
│   │   │   │   ├── GLX_EXT_fbconfig_packed_float
│   │   │   │   ├── GLX_EXT_framebuffer_sRGB
│   │   │   │   ├── GLX_NV_float_buffer
│   │   │   │   ├── GLX_NV_vertex_array_range
│   │   │   │   ├── GLX_SGIS_shared_multisample
│   │   │   │   ├── GLX_SGIX_hyperpipe
│   │   │   │   ├── GLX_SGIX_swap_barrier
│   │   │   │   ├── GLX_SGIX_swap_group
│   │   │   │   ├── GLX_SUN_video_resize
│   │   │   │   ├── GLX_VERSION_1_2
│   │   │   │   ├── GLX_VERSION_1_3
│   │   │   │   ├── GLX_VERSION_1_4
│   │   │   │   ├── GL_APPLE_float_pixels
│   │   │   │   ├── GL_APPLE_pixel_buffer
│   │   │   │   ├── GL_APPLE_texture_range
│   │   │   │   ├── GL_ARB_imaging
│   │   │   │   ├── GL_ARB_matrix_palette
│   │   │   │   ├── GL_ARB_multitexture
│   │   │   │   ├── GL_ARB_vertex_blend
│   │   │   │   ├── GL_ATIX_point_sprites
│   │   │   │   ├── GL_ATIX_texture_env_combine3
│   │   │   │   ├── GL_ATIX_texture_env_route
│   │   │   │   ├── GL_ATIX_vertex_shader_output_point_size
│   │   │   │   ├── GL_ATI_envmap_bumpmap
│   │   │   │   ├── GL_ATI_map_object_buffer
│   │   │   │   ├── GL_ATI_pn_triangles
│   │   │   │   ├── GL_ATI_separate_stencil
│   │   │   │   ├── GL_ATI_shader_texture_lod
│   │   │   │   ├── GL_ATI_texture_compression_3dc
│   │   │   │   ├── GL_ATI_vertex_streams
│   │   │   │   ├── GL_EXT_Cg_shader
│   │   │   │   ├── GL_EXT_bindable_uniform
│   │   │   │   ├── GL_EXT_depth_bounds_test
│   │   │   │   ├── GL_EXT_draw_instanced
│   │   │   │   ├── GL_EXT_draw_range_elements
│   │   │   │   ├── GL_EXT_fog_coord
│   │   │   │   ├── GL_EXT_framebuffer_sRGB
│   │   │   │   ├── GL_EXT_geometry_shader4
│   │   │   │   ├── GL_EXT_gpu_program_parameters
│   │   │   │   ├── GL_EXT_gpu_shader4
│   │   │   │   ├── GL_EXT_packed_float
│   │   │   │   ├── GL_EXT_pixel_buffer_object
│   │   │   │   ├── GL_EXT_secondary_color
│   │   │   │   ├── GL_EXT_texture_array
│   │   │   │   ├── GL_EXT_texture_buffer_object
│   │   │   │   ├── GL_EXT_texture_compression_latc
│   │   │   │   ├── GL_EXT_texture_compression_rgtc
│   │   │   │   ├── GL_EXT_texture_cube_map
│   │   │   │   ├── GL_EXT_texture_edge_clamp
│   │   │   │   ├── GL_EXT_texture_integer
│   │   │   │   ├── GL_EXT_texture_rectangle
│   │   │   │   ├── GL_EXT_texture_shared_exponent
│   │   │   │   ├── GL_EXT_timer_query
│   │   │   │   ├── GL_EXT_vertex_shader
│   │   │   │   ├── GL_KTX_buffer_region
│   │   │   │   ├── GL_NV_depth_buffer_float
│   │   │   │   ├── GL_NV_depth_range_unclamped
│   │   │   │   ├── GL_NV_fragment_program2
│   │   │   │   ├── GL_NV_fragment_program4
│   │   │   │   ├── GL_NV_fragment_program_option
│   │   │   │   ├── GL_NV_framebuffer_multisample_coverage
│   │   │   │   ├── GL_NV_geometry_program4
│   │   │   │   ├── GL_NV_geometry_shader4
│   │   │   │   ├── GL_NV_gpu_program4
│   │   │   │   ├── GL_NV_parameter_buffer_object
│   │   │   │   ├── GL_NV_transform_feedback
│   │   │   │   ├── GL_NV_vertex_program2_option
│   │   │   │   ├── GL_NV_vertex_program3
│   │   │   │   ├── GL_NV_vertex_program4
│   │   │   │   ├── GL_SGIX_shadow
│   │   │   │   ├── GL_SUN_read_video_pixels
│   │   │   │   ├── GL_VERSION_1_2
│   │   │   │   ├── GL_VERSION_1_3
│   │   │   │   ├── GL_VERSION_1_4
│   │   │   │   ├── GL_VERSION_1_5
│   │   │   │   ├── GL_VERSION_2_0
│   │   │   │   ├── GL_VERSION_2_1
│   │   │   │   ├── GL_VERSION_3_0
│   │   │   │   ├── GL_VERSION_3_1
│   │   │   │   ├── GL_VERSION_3_2
│   │   │   │   ├── GL_WIN_swap_hint
│   │   │   │   ├── WGL_ATI_render_texture_rectangle
│   │   │   │   ├── WGL_EXT_framebuffer_sRGB
│   │   │   │   ├── WGL_EXT_pixel_format_packed_float
│   │   │   │   ├── WGL_NV_gpu_affinity
│   │   │   │   └── WGL_NV_vertex_array_range
│   │   │   ├── custom.txt
│   │   │   ├── doc/
│   │   │   │   ├── advanced.html
│   │   │   │   ├── basic.html
│   │   │   │   ├── credits.html
│   │   │   │   ├── index.html
│   │   │   │   ├── install.html
│   │   │   │   └── log.html
│   │   │   ├── extensions/
│   │   │   │   ├── .dummy
│   │   │   │   ├── GLX_3DFX_multisample
│   │   │   │   ├── GLX_ARB_create_context
│   │   │   │   ├── GLX_ARB_create_context_profile
│   │   │   │   ├── GLX_ARB_fbconfig_float
│   │   │   │   ├── GLX_ARB_framebuffer_sRGB
│   │   │   │   ├── GLX_ARB_get_proc_address
│   │   │   │   ├── GLX_ARB_multisample
│   │   │   │   ├── GLX_ATI_pixel_format_float
│   │   │   │   ├── GLX_ATI_render_texture
│   │   │   │   ├── GLX_EXT_fbconfig_packed_float
│   │   │   │   ├── GLX_EXT_framebuffer_sRGB
│   │   │   │   ├── GLX_EXT_import_context
│   │   │   │   ├── GLX_EXT_scene_marker
│   │   │   │   ├── GLX_EXT_swap_control
│   │   │   │   ├── GLX_EXT_texture_from_pixmap
│   │   │   │   ├── GLX_EXT_visual_info
│   │   │   │   ├── GLX_EXT_visual_rating
│   │   │   │   ├── GLX_INTEL_swap_event
│   │   │   │   ├── GLX_MESA_agp_offset
│   │   │   │   ├── GLX_MESA_copy_sub_buffer
│   │   │   │   ├── GLX_MESA_pixmap_colormap
│   │   │   │   ├── GLX_MESA_release_buffers
│   │   │   │   ├── GLX_MESA_set_3dfx_mode
│   │   │   │   ├── GLX_NV_copy_image
│   │   │   │   ├── GLX_NV_float_buffer
│   │   │   │   ├── GLX_NV_present_video
│   │   │   │   ├── GLX_NV_swap_group
│   │   │   │   ├── GLX_NV_vertex_array_range
│   │   │   │   ├── GLX_NV_video_output
│   │   │   │   ├── GLX_OML_swap_method
│   │   │   │   ├── GLX_OML_sync_control
│   │   │   │   ├── GLX_SGIS_blended_overlay
│   │   │   │   ├── GLX_SGIS_color_range
│   │   │   │   ├── GLX_SGIS_multisample
│   │   │   │   ├── GLX_SGIS_shared_multisample
│   │   │   │   ├── GLX_SGIX_fbconfig
│   │   │   │   ├── GLX_SGIX_hyperpipe
│   │   │   │   ├── GLX_SGIX_pbuffer
│   │   │   │   ├── GLX_SGIX_swap_barrier
│   │   │   │   ├── GLX_SGIX_swap_group
│   │   │   │   ├── GLX_SGIX_video_resize
│   │   │   │   ├── GLX_SGIX_visual_select_group
│   │   │   │   ├── GLX_SGI_cushion
│   │   │   │   ├── GLX_SGI_make_current_read
│   │   │   │   ├── GLX_SGI_swap_control
│   │   │   │   ├── GLX_SGI_video_sync
│   │   │   │   ├── GLX_SUN_get_transparent_index
│   │   │   │   ├── GLX_SUN_video_resize
│   │   │   │   ├── GL_3DFX_multisample
│   │   │   │   ├── GL_3DFX_tbuffer
│   │   │   │   ├── GL_3DFX_texture_compression_FXT1
│   │   │   │   ├── GL_AMD_draw_buffers_blend
│   │   │   │   ├── GL_AMD_performance_monitor
│   │   │   │   ├── GL_AMD_seamless_cubemap_per_texture
│   │   │   │   ├── GL_AMD_shader_stencil_export
│   │   │   │   ├── GL_AMD_texture_texture4
│   │   │   │   ├── GL_AMD_vertex_shader_tessellator
│   │   │   │   ├── GL_APPLE_aux_depth_stencil
│   │   │   │   ├── GL_APPLE_client_storage
│   │   │   │   ├── GL_APPLE_element_array
│   │   │   │   ├── GL_APPLE_fence
│   │   │   │   ├── GL_APPLE_float_pixels
│   │   │   │   ├── GL_APPLE_flush_buffer_range
│   │   │   │   ├── GL_APPLE_object_purgeable
│   │   │   │   ├── GL_APPLE_pixel_buffer
│   │   │   │   ├── GL_APPLE_rgb_422
│   │   │   │   ├── GL_APPLE_row_bytes
│   │   │   │   ├── GL_APPLE_specular_vector
│   │   │   │   ├── GL_APPLE_texture_range
│   │   │   │   ├── GL_APPLE_transform_hint
│   │   │   │   ├── GL_APPLE_vertex_array_object
│   │   │   │   ├── GL_APPLE_vertex_array_range
│   │   │   │   ├── GL_APPLE_vertex_program_evaluators
│   │   │   │   ├── GL_APPLE_ycbcr_422
│   │   │   │   ├── GL_ARB_color_buffer_float
│   │   │   │   ├── GL_ARB_compatibility
│   │   │   │   ├── GL_ARB_copy_buffer
│   │   │   │   ├── GL_ARB_depth_buffer_float
│   │   │   │   ├── GL_ARB_depth_clamp
│   │   │   │   ├── GL_ARB_depth_texture
│   │   │   │   ├── GL_ARB_draw_buffers
│   │   │   │   ├── GL_ARB_draw_buffers_blend
│   │   │   │   ├── GL_ARB_draw_elements_base_vertex
│   │   │   │   ├── GL_ARB_draw_instanced
│   │   │   │   ├── GL_ARB_fragment_coord_conventions
│   │   │   │   ├── GL_ARB_fragment_program
│   │   │   │   ├── GL_ARB_fragment_program_shadow
│   │   │   │   ├── GL_ARB_fragment_shader
│   │   │   │   ├── GL_ARB_framebuffer_object
│   │   │   │   ├── GL_ARB_framebuffer_sRGB
│   │   │   │   ├── GL_ARB_geometry_shader4
│   │   │   │   ├── GL_ARB_half_float_pixel
│   │   │   │   ├── GL_ARB_half_float_vertex
│   │   │   │   ├── GL_ARB_imaging
│   │   │   │   ├── GL_ARB_instanced_arrays
│   │   │   │   ├── GL_ARB_map_buffer_range
│   │   │   │   ├── GL_ARB_matrix_palette
│   │   │   │   ├── GL_ARB_multisample
│   │   │   │   ├── GL_ARB_multitexture
│   │   │   │   ├── GL_ARB_occlusion_query
│   │   │   │   ├── GL_ARB_pixel_buffer_object
│   │   │   │   ├── GL_ARB_point_parameters
│   │   │   │   ├── GL_ARB_point_sprite
│   │   │   │   ├── GL_ARB_provoking_vertex
│   │   │   │   ├── GL_ARB_sample_shading
│   │   │   │   ├── GL_ARB_seamless_cube_map
│   │   │   │   ├── GL_ARB_shader_objects
│   │   │   │   ├── GL_ARB_shader_texture_lod
│   │   │   │   ├── GL_ARB_shading_language_100
│   │   │   │   ├── GL_ARB_shadow
│   │   │   │   ├── GL_ARB_shadow_ambient
│   │   │   │   ├── GL_ARB_sync
│   │   │   │   ├── GL_ARB_texture_border_clamp
│   │   │   │   ├── GL_ARB_texture_buffer_object
│   │   │   │   ├── GL_ARB_texture_compression
│   │   │   │   ├── GL_ARB_texture_compression_rgtc
│   │   │   │   ├── GL_ARB_texture_cube_map
│   │   │   │   ├── GL_ARB_texture_cube_map_array
│   │   │   │   ├── GL_ARB_texture_env_add
│   │   │   │   ├── GL_ARB_texture_env_combine
│   │   │   │   ├── GL_ARB_texture_env_crossbar
│   │   │   │   ├── GL_ARB_texture_env_dot3
│   │   │   │   ├── GL_ARB_texture_float
│   │   │   │   ├── GL_ARB_texture_gather
│   │   │   │   ├── GL_ARB_texture_mirrored_repeat
│   │   │   │   ├── GL_ARB_texture_multisample
│   │   │   │   ├── GL_ARB_texture_non_power_of_two
│   │   │   │   ├── GL_ARB_texture_query_lod
│   │   │   │   ├── GL_ARB_texture_rectangle
│   │   │   │   ├── GL_ARB_texture_rg
│   │   │   │   ├── GL_ARB_transpose_matrix
│   │   │   │   ├── GL_ARB_uniform_buffer_object
│   │   │   │   ├── GL_ARB_vertex_array_bgra
│   │   │   │   ├── GL_ARB_vertex_array_object
│   │   │   │   ├── GL_ARB_vertex_blend
│   │   │   │   ├── GL_ARB_vertex_buffer_object
│   │   │   │   ├── GL_ARB_vertex_program
│   │   │   │   ├── GL_ARB_vertex_shader
│   │   │   │   ├── GL_ARB_window_pos
│   │   │   │   ├── GL_ATIX_point_sprites
│   │   │   │   ├── GL_ATIX_texture_env_combine3
│   │   │   │   ├── GL_ATIX_texture_env_route
│   │   │   │   ├── GL_ATIX_vertex_shader_output_point_size
│   │   │   │   ├── GL_ATI_draw_buffers
│   │   │   │   ├── GL_ATI_element_array
│   │   │   │   ├── GL_ATI_envmap_bumpmap
│   │   │   │   ├── GL_ATI_fragment_shader
│   │   │   │   ├── GL_ATI_map_object_buffer
│   │   │   │   ├── GL_ATI_meminfo
│   │   │   │   ├── GL_ATI_pn_triangles
│   │   │   │   ├── GL_ATI_separate_stencil
│   │   │   │   ├── GL_ATI_shader_texture_lod
│   │   │   │   ├── GL_ATI_text_fragment_shader
│   │   │   │   ├── GL_ATI_texture_compression_3dc
│   │   │   │   ├── GL_ATI_texture_env_combine3
│   │   │   │   ├── GL_ATI_texture_float
│   │   │   │   ├── GL_ATI_texture_mirror_once
│   │   │   │   ├── GL_ATI_vertex_array_object
│   │   │   │   ├── GL_ATI_vertex_attrib_array_object
│   │   │   │   ├── GL_ATI_vertex_streams
│   │   │   │   ├── GL_EXT_422_pixels
│   │   │   │   ├── GL_EXT_Cg_shader
│   │   │   │   ├── GL_EXT_abgr
│   │   │   │   ├── GL_EXT_bgra
│   │   │   │   ├── GL_EXT_bindable_uniform
│   │   │   │   ├── GL_EXT_blend_color
│   │   │   │   ├── GL_EXT_blend_equation_separate
│   │   │   │   ├── GL_EXT_blend_func_separate
│   │   │   │   ├── GL_EXT_blend_logic_op
│   │   │   │   ├── GL_EXT_blend_minmax
│   │   │   │   ├── GL_EXT_blend_subtract
│   │   │   │   ├── GL_EXT_clip_volume_hint
│   │   │   │   ├── GL_EXT_cmyka
│   │   │   │   ├── GL_EXT_color_subtable
│   │   │   │   ├── GL_EXT_compiled_vertex_array
│   │   │   │   ├── GL_EXT_convolution
│   │   │   │   ├── GL_EXT_coordinate_frame
│   │   │   │   ├── GL_EXT_copy_texture
│   │   │   │   ├── GL_EXT_cull_vertex
│   │   │   │   ├── GL_EXT_depth_bounds_test
│   │   │   │   ├── GL_EXT_direct_state_access
│   │   │   │   ├── GL_EXT_draw_buffers2
│   │   │   │   ├── GL_EXT_draw_instanced
│   │   │   │   ├── GL_EXT_draw_range_elements
│   │   │   │   ├── GL_EXT_fog_coord
│   │   │   │   ├── GL_EXT_fragment_lighting
│   │   │   │   ├── GL_EXT_framebuffer_blit
│   │   │   │   ├── GL_EXT_framebuffer_multisample
│   │   │   │   ├── GL_EXT_framebuffer_object
│   │   │   │   ├── GL_EXT_framebuffer_sRGB
│   │   │   │   ├── GL_EXT_geometry_shader4
│   │   │   │   ├── GL_EXT_gpu_program_parameters
│   │   │   │   ├── GL_EXT_gpu_shader4
│   │   │   │   ├── GL_EXT_histogram
│   │   │   │   ├── GL_EXT_index_array_formats
│   │   │   │   ├── GL_EXT_index_func
│   │   │   │   ├── GL_EXT_index_material
│   │   │   │   ├── GL_EXT_index_texture
│   │   │   │   ├── GL_EXT_light_texture
│   │   │   │   ├── GL_EXT_misc_attribute
│   │   │   │   ├── GL_EXT_multi_draw_arrays
│   │   │   │   ├── GL_EXT_multisample
│   │   │   │   ├── GL_EXT_packed_depth_stencil
│   │   │   │   ├── GL_EXT_packed_float
│   │   │   │   ├── GL_EXT_packed_pixels
│   │   │   │   ├── GL_EXT_paletted_texture
│   │   │   │   ├── GL_EXT_pixel_buffer_object
│   │   │   │   ├── GL_EXT_pixel_transform
│   │   │   │   ├── GL_EXT_pixel_transform_color_table
│   │   │   │   ├── GL_EXT_point_parameters
│   │   │   │   ├── GL_EXT_polygon_offset
│   │   │   │   ├── GL_EXT_provoking_vertex
│   │   │   │   ├── GL_EXT_rescale_normal
│   │   │   │   ├── GL_EXT_scene_marker
│   │   │   │   ├── GL_EXT_secondary_color
│   │   │   │   ├── GL_EXT_separate_shader_objects
│   │   │   │   ├── GL_EXT_separate_specular_color
│   │   │   │   ├── GL_EXT_shadow_funcs
│   │   │   │   ├── GL_EXT_shared_texture_palette
│   │   │   │   ├── GL_EXT_stencil_clear_tag
│   │   │   │   ├── GL_EXT_stencil_two_side
│   │   │   │   ├── GL_EXT_stencil_wrap
│   │   │   │   ├── GL_EXT_subtexture
│   │   │   │   ├── GL_EXT_texture
│   │   │   │   ├── GL_EXT_texture3D
│   │   │   │   ├── GL_EXT_texture_array
│   │   │   │   ├── GL_EXT_texture_buffer_object
│   │   │   │   ├── GL_EXT_texture_compression_dxt1
│   │   │   │   ├── GL_EXT_texture_compression_latc
│   │   │   │   ├── GL_EXT_texture_compression_rgtc
│   │   │   │   ├── GL_EXT_texture_compression_s3tc
│   │   │   │   ├── GL_EXT_texture_cube_map
│   │   │   │   ├── GL_EXT_texture_edge_clamp
│   │   │   │   ├── GL_EXT_texture_env
│   │   │   │   ├── GL_EXT_texture_env_add
│   │   │   │   ├── GL_EXT_texture_env_combine
│   │   │   │   ├── GL_EXT_texture_env_dot3
│   │   │   │   ├── GL_EXT_texture_filter_anisotropic
│   │   │   │   ├── GL_EXT_texture_integer
│   │   │   │   ├── GL_EXT_texture_lod_bias
│   │   │   │   ├── GL_EXT_texture_mirror_clamp
│   │   │   │   ├── GL_EXT_texture_object
│   │   │   │   ├── GL_EXT_texture_perturb_normal
│   │   │   │   ├── GL_EXT_texture_rectangle
│   │   │   │   ├── GL_EXT_texture_sRGB
│   │   │   │   ├── GL_EXT_texture_shared_exponent
│   │   │   │   ├── GL_EXT_texture_snorm
│   │   │   │   ├── GL_EXT_texture_swizzle
│   │   │   │   ├── GL_EXT_timer_query
│   │   │   │   ├── GL_EXT_transform_feedback
│   │   │   │   ├── GL_EXT_vertex_array
│   │   │   │   ├── GL_EXT_vertex_array_bgra
│   │   │   │   ├── GL_EXT_vertex_shader
│   │   │   │   ├── GL_EXT_vertex_weighting
│   │   │   │   ├── GL_GREMEDY_frame_terminator
│   │   │   │   ├── GL_GREMEDY_string_marker
│   │   │   │   ├── GL_HP_convolution_border_modes
│   │   │   │   ├── GL_HP_image_transform
│   │   │   │   ├── GL_HP_occlusion_test
│   │   │   │   ├── GL_HP_texture_lighting
│   │   │   │   ├── GL_IBM_cull_vertex
│   │   │   │   ├── GL_IBM_multimode_draw_arrays
│   │   │   │   ├── GL_IBM_rasterpos_clip
│   │   │   │   ├── GL_IBM_static_data
│   │   │   │   ├── GL_IBM_texture_mirrored_repeat
│   │   │   │   ├── GL_IBM_vertex_array_lists
│   │   │   │   ├── GL_INGR_color_clamp
│   │   │   │   ├── GL_INGR_interlace_read
│   │   │   │   ├── GL_INTEL_parallel_arrays
│   │   │   │   ├── GL_INTEL_texture_scissor
│   │   │   │   ├── GL_KTX_buffer_region
│   │   │   │   ├── GL_MESAX_texture_stack
│   │   │   │   ├── GL_MESA_pack_invert
│   │   │   │   ├── GL_MESA_resize_buffers
│   │   │   │   ├── GL_MESA_window_pos
│   │   │   │   ├── GL_MESA_ycbcr_texture
│   │   │   │   ├── GL_NV_blend_square
│   │   │   │   ├── GL_NV_conditional_render
│   │   │   │   ├── GL_NV_copy_depth_to_color
│   │   │   │   ├── GL_NV_copy_image
│   │   │   │   ├── GL_NV_depth_buffer_float
│   │   │   │   ├── GL_NV_depth_clamp
│   │   │   │   ├── GL_NV_depth_range_unclamped
│   │   │   │   ├── GL_NV_evaluators
│   │   │   │   ├── GL_NV_explicit_multisample
│   │   │   │   ├── GL_NV_fence
│   │   │   │   ├── GL_NV_float_buffer
│   │   │   │   ├── GL_NV_fog_distance
│   │   │   │   ├── GL_NV_fragment_program
│   │   │   │   ├── GL_NV_fragment_program2
│   │   │   │   ├── GL_NV_fragment_program4
│   │   │   │   ├── GL_NV_fragment_program_option
│   │   │   │   ├── GL_NV_framebuffer_multisample_coverage
│   │   │   │   ├── GL_NV_geometry_program4
│   │   │   │   ├── GL_NV_geometry_shader4
│   │   │   │   ├── GL_NV_gpu_program4
│   │   │   │   ├── GL_NV_half_float
│   │   │   │   ├── GL_NV_light_max_exponent
│   │   │   │   ├── GL_NV_multisample_filter_hint
│   │   │   │   ├── GL_NV_occlusion_query
│   │   │   │   ├── GL_NV_packed_depth_stencil
│   │   │   │   ├── GL_NV_parameter_buffer_object
│   │   │   │   ├── GL_NV_parameter_buffer_object2
│   │   │   │   ├── GL_NV_pixel_data_range
│   │   │   │   ├── GL_NV_point_sprite
│   │   │   │   ├── GL_NV_present_video
│   │   │   │   ├── GL_NV_primitive_restart
│   │   │   │   ├── GL_NV_register_combiners
│   │   │   │   ├── GL_NV_register_combiners2
│   │   │   │   ├── GL_NV_shader_buffer_load
│   │   │   │   ├── GL_NV_texgen_emboss
│   │   │   │   ├── GL_NV_texgen_reflection
│   │   │   │   ├── GL_NV_texture_barrier
│   │   │   │   ├── GL_NV_texture_compression_vtc
│   │   │   │   ├── GL_NV_texture_env_combine4
│   │   │   │   ├── GL_NV_texture_expand_normal
│   │   │   │   ├── GL_NV_texture_rectangle
│   │   │   │   ├── GL_NV_texture_shader
│   │   │   │   ├── GL_NV_texture_shader2
│   │   │   │   ├── GL_NV_texture_shader3
│   │   │   │   ├── GL_NV_transform_feedback
│   │   │   │   ├── GL_NV_transform_feedback2
│   │   │   │   ├── GL_NV_vertex_array_range
│   │   │   │   ├── GL_NV_vertex_array_range2
│   │   │   │   ├── GL_NV_vertex_buffer_unified_memory
│   │   │   │   ├── GL_NV_vertex_program
│   │   │   │   ├── GL_NV_vertex_program1_1
│   │   │   │   ├── GL_NV_vertex_program2
│   │   │   │   ├── GL_NV_vertex_program2_option
│   │   │   │   ├── GL_NV_vertex_program3
│   │   │   │   ├── GL_NV_vertex_program4
│   │   │   │   ├── GL_OES_byte_coordinates
│   │   │   │   ├── GL_OES_compressed_paletted_texture
│   │   │   │   ├── GL_OES_read_format
│   │   │   │   ├── GL_OES_single_precision
│   │   │   │   ├── GL_OML_interlace
│   │   │   │   ├── GL_OML_resample
│   │   │   │   ├── GL_OML_subsample
│   │   │   │   ├── GL_PGI_misc_hints
│   │   │   │   ├── GL_PGI_vertex_hints
│   │   │   │   ├── GL_REND_screen_coordinates
│   │   │   │   ├── GL_S3_s3tc
│   │   │   │   ├── GL_SGIS_color_range
│   │   │   │   ├── GL_SGIS_detail_texture
│   │   │   │   ├── GL_SGIS_fog_function
│   │   │   │   ├── GL_SGIS_generate_mipmap
│   │   │   │   ├── GL_SGIS_multisample
│   │   │   │   ├── GL_SGIS_pixel_texture
│   │   │   │   ├── GL_SGIS_point_line_texgen
│   │   │   │   ├── GL_SGIS_sharpen_texture
│   │   │   │   ├── GL_SGIS_texture4D
│   │   │   │   ├── GL_SGIS_texture_border_clamp
│   │   │   │   ├── GL_SGIS_texture_edge_clamp
│   │   │   │   ├── GL_SGIS_texture_filter4
│   │   │   │   ├── GL_SGIS_texture_lod
│   │   │   │   ├── GL_SGIS_texture_select
│   │   │   │   ├── GL_SGIX_async
│   │   │   │   ├── GL_SGIX_async_histogram
│   │   │   │   ├── GL_SGIX_async_pixel
│   │   │   │   ├── GL_SGIX_blend_alpha_minmax
│   │   │   │   ├── GL_SGIX_clipmap
│   │   │   │   ├── GL_SGIX_convolution_accuracy
│   │   │   │   ├── GL_SGIX_depth_texture
│   │   │   │   ├── GL_SGIX_flush_raster
│   │   │   │   ├── GL_SGIX_fog_offset
│   │   │   │   ├── GL_SGIX_fog_texture
│   │   │   │   ├── GL_SGIX_fragment_specular_lighting
│   │   │   │   ├── GL_SGIX_framezoom
│   │   │   │   ├── GL_SGIX_interlace
│   │   │   │   ├── GL_SGIX_ir_instrument1
│   │   │   │   ├── GL_SGIX_list_priority
│   │   │   │   ├── GL_SGIX_pixel_texture
│   │   │   │   ├── GL_SGIX_pixel_texture_bits
│   │   │   │   ├── GL_SGIX_reference_plane
│   │   │   │   ├── GL_SGIX_resample
│   │   │   │   ├── GL_SGIX_shadow
│   │   │   │   ├── GL_SGIX_shadow_ambient
│   │   │   │   ├── GL_SGIX_sprite
│   │   │   │   ├── GL_SGIX_tag_sample_buffer
│   │   │   │   ├── GL_SGIX_texture_add_env
│   │   │   │   ├── GL_SGIX_texture_coordinate_clamp
│   │   │   │   ├── GL_SGIX_texture_lod_bias
│   │   │   │   ├── GL_SGIX_texture_multi_buffer
│   │   │   │   ├── GL_SGIX_texture_range
│   │   │   │   ├── GL_SGIX_texture_scale_bias
│   │   │   │   ├── GL_SGIX_vertex_preclip
│   │   │   │   ├── GL_SGIX_vertex_preclip_hint
│   │   │   │   ├── GL_SGIX_ycrcb
│   │   │   │   ├── GL_SGI_color_matrix
│   │   │   │   ├── GL_SGI_color_table
│   │   │   │   ├── GL_SGI_texture_color_table
│   │   │   │   ├── GL_SUNX_constant_data
│   │   │   │   ├── GL_SUN_convolution_border_modes
│   │   │   │   ├── GL_SUN_global_alpha
│   │   │   │   ├── GL_SUN_mesh_array
│   │   │   │   ├── GL_SUN_read_video_pixels
│   │   │   │   ├── GL_SUN_slice_accum
│   │   │   │   ├── GL_SUN_triangle_list
│   │   │   │   ├── GL_SUN_vertex
│   │   │   │   ├── GL_WIN_phong_shading
│   │   │   │   ├── GL_WIN_specular_fog
│   │   │   │   ├── GL_WIN_swap_hint
│   │   │   │   ├── WGL_3DFX_multisample
│   │   │   │   ├── WGL_3DL_stereo_control
│   │   │   │   ├── WGL_AMD_gpu_association
│   │   │   │   ├── WGL_ARB_buffer_region
│   │   │   │   ├── WGL_ARB_create_context
│   │   │   │   ├── WGL_ARB_create_context_profile
│   │   │   │   ├── WGL_ARB_extensions_string
│   │   │   │   ├── WGL_ARB_framebuffer_sRGB
│   │   │   │   ├── WGL_ARB_make_current_read
│   │   │   │   ├── WGL_ARB_multisample
│   │   │   │   ├── WGL_ARB_pbuffer
│   │   │   │   ├── WGL_ARB_pixel_format
│   │   │   │   ├── WGL_ARB_pixel_format_float
│   │   │   │   ├── WGL_ARB_render_texture
│   │   │   │   ├── WGL_ATI_pixel_format_float
│   │   │   │   ├── WGL_ATI_render_texture_rectangle
│   │   │   │   ├── WGL_EXT_depth_float
│   │   │   │   ├── WGL_EXT_display_color_table
│   │   │   │   ├── WGL_EXT_extensions_string
│   │   │   │   ├── WGL_EXT_framebuffer_sRGB
│   │   │   │   ├── WGL_EXT_make_current_read
│   │   │   │   ├── WGL_EXT_multisample
│   │   │   │   ├── WGL_EXT_pbuffer
│   │   │   │   ├── WGL_EXT_pixel_format
│   │   │   │   ├── WGL_EXT_pixel_format_packed_float
│   │   │   │   ├── WGL_EXT_swap_control
│   │   │   │   ├── WGL_I3D_digital_video_control
│   │   │   │   ├── WGL_I3D_gamma
│   │   │   │   ├── WGL_I3D_genlock
│   │   │   │   ├── WGL_I3D_image_buffer
│   │   │   │   ├── WGL_I3D_swap_frame_lock
│   │   │   │   ├── WGL_I3D_swap_frame_usage
│   │   │   │   ├── WGL_NV_copy_image
│   │   │   │   ├── WGL_NV_float_buffer
│   │   │   │   ├── WGL_NV_gpu_affinity
│   │   │   │   ├── WGL_NV_present_video
│   │   │   │   ├── WGL_NV_render_depth_texture
│   │   │   │   ├── WGL_NV_render_texture_rectangle
│   │   │   │   ├── WGL_NV_swap_group
│   │   │   │   ├── WGL_NV_vertex_array_range
│   │   │   │   ├── WGL_NV_video_output
│   │   │   │   └── WGL_OML_sync_control
│   │   │   ├── lib/
│   │   │   │   └── OpenGL/
│   │   │   │       └── Spec.pm
│   │   │   └── src/
│   │   │       ├── footer.html
│   │   │       ├── glew.rc
│   │   │       ├── glew_head.c
│   │   │       ├── glew_head.h
│   │   │       ├── glew_init_gl.c
│   │   │       ├── glew_init_glx.c
│   │   │       ├── glew_init_tail.c
│   │   │       ├── glew_init_wgl.c
│   │   │       ├── glew_license.h
│   │   │       ├── glew_str_glx.c
│   │   │       ├── glew_str_head.c
│   │   │       ├── glew_str_tail.c
│   │   │       ├── glew_str_wgl.c
│   │   │       ├── glew_tail.h
│   │   │       ├── glew_utils.c
│   │   │       ├── glew_utils.h
│   │   │       ├── glewinfo.rc
│   │   │       ├── glewinfo_gl.c
│   │   │       ├── glewinfo_glx.c
│   │   │       ├── glewinfo_head.c
│   │   │       ├── glewinfo_tail.c
│   │   │       ├── glewinfo_wgl.c
│   │   │       ├── glxew_head.h
│   │   │       ├── glxew_tail.h
│   │   │       ├── header.html
│   │   │       ├── khronos_license.h
│   │   │       ├── mesa_license.h
│   │   │       ├── visualinfo.rc
│   │   │       ├── wglew_head.h
│   │   │       └── wglew_tail.h
│   │   ├── config/
│   │   │   ├── Makefile.cygming
│   │   │   ├── Makefile.cygwin
│   │   │   ├── Makefile.darwin
│   │   │   ├── Makefile.freebsd
│   │   │   ├── Makefile.gnu
│   │   │   ├── Makefile.irix
│   │   │   ├── Makefile.kfreebsd
│   │   │   ├── Makefile.linux
│   │   │   ├── Makefile.mingw
│   │   │   ├── Makefile.solaris
│   │   │   ├── config.guess
│   │   │   └── version
│   │   ├── doc/
│   │   │   ├── advanced.html
│   │   │   ├── basic.html
│   │   │   ├── credits.html
│   │   │   ├── glew.css
│   │   │   ├── glew.html
│   │   │   ├── glew.txt
│   │   │   ├── glxew.html
│   │   │   ├── gpl.txt
│   │   │   ├── index.html
│   │   │   ├── install.html
│   │   │   ├── khronos.txt
│   │   │   ├── log.html
│   │   │   ├── mesa.txt
│   │   │   └── wglew.html
│   │   ├── glew.pc
│   │   ├── glew.pc.in
│   │   ├── include/
│   │   │   └── GL/
│   │   │       ├── glew.h
│   │   │       ├── glxew.h
│   │   │       └── wglew.h
│   │   ├── lib/
│   │   │   ├── glew32.exp
│   │   │   ├── glew32d.exp
│   │   │   ├── glew32d.pdb
│   │   │   ├── glew32mx.exp
│   │   │   ├── glew32mxd.exp
│   │   │   └── glew32mxd.pdb
│   │   └── src/
│   │       ├── glew.c
│   │       ├── glewinfo.c
│   │       └── visualinfo.c
│   ├── libigl/
│   │   ├── ACKNOWLEDGEMENTS
│   │   ├── LICENSE
│   │   ├── LICENSE.GPL
│   │   ├── LICENSE.MPL2
│   │   ├── VERSION.txt
│   │   └── include/
│   │       └── igl/
│   │           ├── AABB.cpp
│   │           ├── AABB.h
│   │           ├── ARAPEnergyType.h
│   │           ├── C_STR.h
│   │           ├── Camera.h
│   │           ├── ConjugateFFSolverData.h
│   │           ├── EPS.cpp
│   │           ├── EPS.h
│   │           ├── HalfEdgeIterator.h
│   │           ├── Hit.h
│   │           ├── IO
│   │           ├── IndexComparison.h
│   │           ├── LinSpaced.h
│   │           ├── MCTables.hh
│   │           ├── MeshBooleanType.h
│   │           ├── MouseController.h
│   │           ├── NormalType.h
│   │           ├── ONE.h
│   │           ├── OpenGL_convenience.h
│   │           ├── PI.h
│   │           ├── REDRUM.h
│   │           ├── ReAntTweakBar.cpp
│   │           ├── ReAntTweakBar.h
│   │           ├── RotateWidget.h
│   │           ├── STR.h
│   │           ├── Singular_Value_Decomposition_Givens_QR_Factorization_Kernel.hpp
│   │           ├── Singular_Value_Decomposition_Jacobi_Conjugation_Kernel.hpp
│   │           ├── Singular_Value_Decomposition_Kernel_Declarations.hpp
│   │           ├── Singular_Value_Decomposition_Main_Kernel_Body.hpp
│   │           ├── Singular_Value_Decomposition_Preamble.hpp
│   │           ├── SolverStatus.h
│   │           ├── SortableRow.h
│   │           ├── Timer.h
│   │           ├── Viewport.h
│   │           ├── WindingNumberAABB.h
│   │           ├── WindingNumberMethod.h
│   │           ├── WindingNumberTree.h
│   │           ├── ZERO.h
│   │           ├── active_set.cpp
│   │           ├── active_set.h
│   │           ├── adjacency_list.cpp
│   │           ├── adjacency_list.h
│   │           ├── adjacency_matrix.cpp
│   │           ├── adjacency_matrix.h
│   │           ├── all.cpp
│   │           ├── all.h
│   │           ├── all_edges.cpp
│   │           ├── all_edges.h
│   │           ├── all_pairs_distances.cpp
│   │           ├── all_pairs_distances.h
│   │           ├── ambient_occlusion.cpp
│   │           ├── ambient_occlusion.h
│   │           ├── angle_bound_frame_fields.cpp
│   │           ├── angle_bound_frame_fields.h
│   │           ├── angles.cpp
│   │           ├── angles.h
│   │           ├── angular_distance.cpp
│   │           ├── angular_distance.h
│   │           ├── anttweakbar/
│   │           │   ├── ReAntTweakBar.cpp
│   │           │   ├── ReAntTweakBar.h
│   │           │   ├── cocoa_key_to_anttweakbar_key.cpp
│   │           │   └── cocoa_key_to_anttweakbar_key.h
│   │           ├── any.cpp
│   │           ├── any.h
│   │           ├── any_of.cpp
│   │           ├── any_of.h
│   │           ├── arap.cpp
│   │           ├── arap.h
│   │           ├── arap_dof.cpp
│   │           ├── arap_dof.h
│   │           ├── arap_linear_block.cpp
│   │           ├── arap_linear_block.h
│   │           ├── arap_rhs.cpp
│   │           ├── arap_rhs.h
│   │           ├── average_onto_faces.cpp
│   │           ├── average_onto_faces.h
│   │           ├── average_onto_vertices.cpp
│   │           ├── average_onto_vertices.h
│   │           ├── avg_edge_length.cpp
│   │           ├── avg_edge_length.h
│   │           ├── axis_angle_to_quat.cpp
│   │           ├── axis_angle_to_quat.h
│   │           ├── barycenter.cpp
│   │           ├── barycenter.h
│   │           ├── barycentric_coordinates.cpp
│   │           ├── barycentric_coordinates.h
│   │           ├── barycentric_to_global.cpp
│   │           ├── barycentric_to_global.h
│   │           ├── basename.cpp
│   │           ├── basename.h
│   │           ├── bbw/
│   │           │   ├── bbw.cpp
│   │           │   └── bbw.h
│   │           ├── bbw.cpp
│   │           ├── bbw.h
│   │           ├── bfs.cpp
│   │           ├── bfs.h
│   │           ├── bfs_orient.cpp
│   │           ├── bfs_orient.h
│   │           ├── biharmonic_coordinates.cpp
│   │           ├── biharmonic_coordinates.h
│   │           ├── bijective_composite_harmonic_mapping.cpp
│   │           ├── bijective_composite_harmonic_mapping.h
│   │           ├── bone_parents.cpp
│   │           ├── bone_parents.h
│   │           ├── boolean/
│   │           │   ├── MeshBooleanType.h
│   │           │   ├── from_cork_mesh.cpp
│   │           │   ├── from_cork_mesh.h
│   │           │   ├── mesh_boolean.cpp
│   │           │   ├── mesh_boolean.h
│   │           │   ├── mesh_boolean_cork.cpp
│   │           │   ├── mesh_boolean_cork.h
│   │           │   ├── to_cork_mesh.cpp
│   │           │   └── to_cork_mesh.h
│   │           ├── boost/
│   │           │   ├── bfs_orient.cpp
│   │           │   ├── bfs_orient.h
│   │           │   ├── components.cpp
│   │           │   ├── components.h
│   │           │   ├── orientable_patches.cpp
│   │           │   └── orientable_patches.h
│   │           ├── boundary_conditions.cpp
│   │           ├── boundary_conditions.h
│   │           ├── boundary_facets.cpp
│   │           ├── boundary_facets.h
│   │           ├── boundary_loop.cpp
│   │           ├── boundary_loop.h
│   │           ├── bounding_box.cpp
│   │           ├── bounding_box.h
│   │           ├── bounding_box_diagonal.cpp
│   │           ├── bounding_box_diagonal.h
│   │           ├── canonical_quaternions.cpp
│   │           ├── canonical_quaternions.h
│   │           ├── cat.cpp
│   │           ├── cat.h
│   │           ├── ceil.cpp
│   │           ├── ceil.h
│   │           ├── centroid.cpp
│   │           ├── centroid.h
│   │           ├── cgal/
│   │           │   ├── CGAL_includes.hpp
│   │           │   ├── RemeshSelfIntersectionsParam.h
│   │           │   ├── SelfIntersectMesh.h
│   │           │   ├── complex_to_mesh.cpp
│   │           │   ├── complex_to_mesh.h
│   │           │   ├── intersect_other.cpp
│   │           │   ├── intersect_other.h
│   │           │   ├── mesh_to_cgal_triangle_list.cpp
│   │           │   ├── mesh_to_cgal_triangle_list.h
│   │           │   ├── mesh_to_polyhedron.cpp
│   │           │   ├── mesh_to_polyhedron.h
│   │           │   ├── order_facets_around_edges.cpp
│   │           │   ├── order_facets_around_edges.h
│   │           │   ├── outer_hull.cpp
│   │           │   ├── outer_hull.h
│   │           │   ├── peel_outer_hull_layers.cpp
│   │           │   ├── peel_outer_hull_layers.h
│   │           │   ├── point_mesh_squared_distance.cpp
│   │           │   ├── point_mesh_squared_distance.h
│   │           │   ├── polyhedron_to_mesh.cpp
│   │           │   ├── polyhedron_to_mesh.h
│   │           │   ├── remesh_self_intersections.cpp
│   │           │   ├── remesh_self_intersections.h
│   │           │   ├── signed_distance_isosurface.cpp
│   │           │   └── signed_distance_isosurface.h
│   │           ├── circulation.cpp
│   │           ├── circulation.h
│   │           ├── circumradius.cpp
│   │           ├── circumradius.h
│   │           ├── cocoa_key_to_anttweakbar_key.cpp
│   │           ├── cocoa_key_to_anttweakbar_key.h
│   │           ├── collapse_edge.cpp
│   │           ├── collapse_edge.h
│   │           ├── collapse_small_triangles.cpp
│   │           ├── collapse_small_triangles.h
│   │           ├── colon.cpp
│   │           ├── colon.h
│   │           ├── column_to_quats.cpp
│   │           ├── column_to_quats.h
│   │           ├── columnize.cpp
│   │           ├── columnize.h
│   │           ├── comb_cross_field.cpp
│   │           ├── comb_cross_field.h
│   │           ├── comb_frame_field.cpp
│   │           ├── comb_frame_field.h
│   │           ├── comb_line_field.cpp
│   │           ├── comb_line_field.h
│   │           ├── combine.cpp
│   │           ├── combine.h
│   │           ├── comiso/
│   │           │   ├── frame_field.cpp
│   │           │   ├── frame_field.h
│   │           │   ├── miq.cpp
│   │           │   ├── miq.h
│   │           │   ├── nrosy.cpp
│   │           │   └── nrosy.h
│   │           ├── compile_and_link_program.cpp
│   │           ├── compile_and_link_program.h
│   │           ├── compile_shader.cpp
│   │           ├── compile_shader.h
│   │           ├── components.cpp
│   │           ├── components.h
│   │           ├── compute_frame_field_bisectors.cpp
│   │           ├── compute_frame_field_bisectors.h
│   │           ├── conjugate_frame_fields.cpp
│   │           ├── conjugate_frame_fields.h
│   │           ├── connect_boundary_to_infinity.cpp
│   │           ├── connect_boundary_to_infinity.h
│   │           ├── copyleft/
│   │           │   ├── README.md
│   │           │   ├── cgal/
│   │           │   │   ├── BinaryWindingNumberOperations.h
│   │           │   │   ├── CGAL_includes.hpp
│   │           │   │   ├── CSGTree.h
│   │           │   │   ├── RemeshSelfIntersectionsParam.h
│   │           │   │   ├── SelfIntersectMesh.h
│   │           │   │   ├── assign.cpp
│   │           │   │   ├── assign.h
│   │           │   │   ├── assign_scalar.cpp
│   │           │   │   ├── assign_scalar.h
│   │           │   │   ├── barycenter.cpp
│   │           │   │   ├── cell_adjacency.cpp
│   │           │   │   ├── cell_adjacency.h
│   │           │   │   ├── closest_facet.cpp
│   │           │   │   ├── closest_facet.h
│   │           │   │   ├── complex_to_mesh.cpp
│   │           │   │   ├── complex_to_mesh.h
│   │           │   │   ├── component_inside_component.cpp
│   │           │   │   ├── component_inside_component.h
│   │           │   │   ├── delaunay_triangulation.cpp
│   │           │   │   ├── delaunay_triangulation.h
│   │           │   │   ├── extract_cells.cpp
│   │           │   │   ├── extract_cells.h
│   │           │   │   ├── extract_feature.cpp
│   │           │   │   ├── extract_feature.h
│   │           │   │   ├── half_space_box.cpp
│   │           │   │   ├── half_space_box.h
│   │           │   │   ├── incircle.cpp
│   │           │   │   ├── incircle.h
│   │           │   │   ├── insert_into_cdt.cpp
│   │           │   │   ├── insert_into_cdt.h
│   │           │   │   ├── insphere.cpp
│   │           │   │   ├── insphere.h
│   │           │   │   ├── intersect_other.cpp
│   │           │   │   ├── intersect_other.h
│   │           │   │   ├── intersect_with_half_space.cpp
│   │           │   │   ├── intersect_with_half_space.h
│   │           │   │   ├── lexicographic_triangulation.cpp
│   │           │   │   ├── lexicographic_triangulation.h
│   │           │   │   ├── mesh_boolean.cpp
│   │           │   │   ├── mesh_boolean.h
│   │           │   │   ├── mesh_boolean_type_to_funcs.cpp
│   │           │   │   ├── mesh_boolean_type_to_funcs.h
│   │           │   │   ├── mesh_to_cgal_triangle_list.cpp
│   │           │   │   ├── mesh_to_cgal_triangle_list.h
│   │           │   │   ├── mesh_to_polyhedron.cpp
│   │           │   │   ├── mesh_to_polyhedron.h
│   │           │   │   ├── minkowski_sum.cpp
│   │           │   │   ├── minkowski_sum.h
│   │           │   │   ├── order_facets_around_edge.cpp
│   │           │   │   ├── order_facets_around_edge.h
│   │           │   │   ├── order_facets_around_edges.cpp
│   │           │   │   ├── order_facets_around_edges.h
│   │           │   │   ├── orient2D.cpp
│   │           │   │   ├── orient2D.h
│   │           │   │   ├── orient3D.cpp
│   │           │   │   ├── orient3D.h
│   │           │   │   ├── outer_element.cpp
│   │           │   │   ├── outer_element.h
│   │           │   │   ├── outer_facet.cpp
│   │           │   │   ├── outer_facet.h
│   │           │   │   ├── outer_hull.cpp
│   │           │   │   ├── outer_hull.h
│   │           │   │   ├── peel_outer_hull_layers.cpp
│   │           │   │   ├── peel_outer_hull_layers.h
│   │           │   │   ├── peel_winding_number_layers.cpp
│   │           │   │   ├── peel_winding_number_layers.h
│   │           │   │   ├── piecewise_constant_winding_number.cpp
│   │           │   │   ├── piecewise_constant_winding_number.h
│   │           │   │   ├── point_mesh_squared_distance.cpp
│   │           │   │   ├── point_mesh_squared_distance.h
│   │           │   │   ├── point_segment_squared_distance.cpp
│   │           │   │   ├── point_segment_squared_distance.h
│   │           │   │   ├── point_solid_signed_squared_distance.cpp
│   │           │   │   ├── point_solid_signed_squared_distance.h
│   │           │   │   ├── point_triangle_squared_distance.cpp
│   │           │   │   ├── point_triangle_squared_distance.h
│   │           │   │   ├── points_inside_component.cpp
│   │           │   │   ├── points_inside_component.h
│   │           │   │   ├── polyhedron_to_mesh.cpp
│   │           │   │   ├── polyhedron_to_mesh.h
│   │           │   │   ├── projected_cdt.cpp
│   │           │   │   ├── projected_cdt.h
│   │           │   │   ├── projected_delaunay.cpp
│   │           │   │   ├── projected_delaunay.h
│   │           │   │   ├── propagate_winding_numbers.cpp
│   │           │   │   ├── propagate_winding_numbers.h
│   │           │   │   ├── read_triangle_mesh.cpp
│   │           │   │   ├── read_triangle_mesh.h
│   │           │   │   ├── relabel_small_immersed_cells.cpp
│   │           │   │   ├── relabel_small_immersed_cells.h
│   │           │   │   ├── remesh_intersections.cpp
│   │           │   │   ├── remesh_intersections.h
│   │           │   │   ├── remesh_self_intersections.cpp
│   │           │   │   ├── remesh_self_intersections.h
│   │           │   │   ├── remove_unreferenced.cpp
│   │           │   │   ├── resolve_intersections.cpp
│   │           │   │   ├── resolve_intersections.h
│   │           │   │   ├── row_to_point.cpp
│   │           │   │   ├── row_to_point.h
│   │           │   │   ├── segment_segment_squared_distance.cpp
│   │           │   │   ├── segment_segment_squared_distance.h
│   │           │   │   ├── signed_distance_isosurface.cpp
│   │           │   │   ├── signed_distance_isosurface.h
│   │           │   │   ├── slice.cpp
│   │           │   │   ├── snap_rounding.cpp
│   │           │   │   ├── snap_rounding.h
│   │           │   │   ├── string_to_mesh_boolean_type.cpp
│   │           │   │   ├── string_to_mesh_boolean_type.h
│   │           │   │   ├── subdivide_segments.cpp
│   │           │   │   ├── subdivide_segments.h
│   │           │   │   ├── submesh_aabb_tree.cpp
│   │           │   │   ├── submesh_aabb_tree.h
│   │           │   │   ├── triangle_triangle_squared_distance.cpp
│   │           │   │   ├── triangle_triangle_squared_distance.h
│   │           │   │   ├── trim_with_solid.cpp
│   │           │   │   ├── trim_with_solid.h
│   │           │   │   └── unique.cpp
│   │           │   ├── comiso/
│   │           │   │   ├── frame_field.cpp
│   │           │   │   ├── frame_field.h
│   │           │   │   ├── miq.cpp
│   │           │   │   ├── miq.h
│   │           │   │   ├── miqNew.cpp
│   │           │   │   ├── miqNew.h
│   │           │   │   ├── nrosy.cpp
│   │           │   │   └── nrosy.h
│   │           │   ├── cork/
│   │           │   │   ├── from_cork_mesh.cpp
│   │           │   │   ├── from_cork_mesh.h
│   │           │   │   ├── mesh_boolean.cpp
│   │           │   │   ├── mesh_boolean.h
│   │           │   │   ├── to_cork_mesh.cpp
│   │           │   │   └── to_cork_mesh.h
│   │           │   ├── marching_cubes.cpp
│   │           │   ├── marching_cubes.h
│   │           │   ├── marching_cubes_tables.h
│   │           │   ├── progressive_hulls.cpp
│   │           │   ├── progressive_hulls.h
│   │           │   ├── progressive_hulls_cost_and_placement.cpp
│   │           │   ├── progressive_hulls_cost_and_placement.h
│   │           │   ├── quadprog.cpp
│   │           │   ├── quadprog.h
│   │           │   ├── swept_volume.cpp
│   │           │   ├── swept_volume.h
│   │           │   └── tetgen/
│   │           │       ├── README
│   │           │       ├── cdt.cpp
│   │           │       ├── cdt.h
│   │           │       ├── mesh_to_tetgenio.cpp
│   │           │       ├── mesh_to_tetgenio.h
│   │           │       ├── mesh_with_skeleton.cpp
│   │           │       ├── mesh_with_skeleton.h
│   │           │       ├── read_into_tetgenio.cpp
│   │           │       ├── read_into_tetgenio.h
│   │           │       ├── tetgenio_to_tetmesh.cpp
│   │           │       ├── tetgenio_to_tetmesh.h
│   │           │       ├── tetrahedralize.cpp
│   │           │       └── tetrahedralize.h
│   │           ├── cotmatrix.cpp
│   │           ├── cotmatrix.h
│   │           ├── cotmatrix_entries.cpp
│   │           ├── cotmatrix_entries.h
│   │           ├── count.cpp
│   │           ├── count.h
│   │           ├── covariance_scatter_matrix.cpp
│   │           ├── covariance_scatter_matrix.h
│   │           ├── create_index_vbo.cpp
│   │           ├── create_index_vbo.h
│   │           ├── create_mesh_vbo.cpp
│   │           ├── create_mesh_vbo.h
│   │           ├── create_shader_program.cpp
│   │           ├── create_shader_program.h
│   │           ├── create_vector_vbo.cpp
│   │           ├── create_vector_vbo.h
│   │           ├── cross.cpp
│   │           ├── cross.h
│   │           ├── cross_field_missmatch.cpp
│   │           ├── cross_field_missmatch.h
│   │           ├── crouzeix_raviart_massmatrix.cpp
│   │           ├── crouzeix_raviart_massmatrix.h
│   │           ├── cumsum.cpp
│   │           ├── cumsum.h
│   │           ├── cut_mesh.cpp
│   │           ├── cut_mesh.h
│   │           ├── cut_mesh_from_singularities.cpp
│   │           ├── cut_mesh_from_singularities.h
│   │           ├── cylinder.cpp
│   │           ├── cylinder.h
│   │           ├── dated_copy.cpp
│   │           ├── dated_copy.h
│   │           ├── decimate.cpp
│   │           ├── decimate.h
│   │           ├── deform_skeleton.cpp
│   │           ├── deform_skeleton.h
│   │           ├── delaunay_triangulation.cpp
│   │           ├── delaunay_triangulation.h
│   │           ├── deprecated.h
│   │           ├── destroy_shader_program.cpp
│   │           ├── destroy_shader_program.h
│   │           ├── dfs.cpp
│   │           ├── dfs.h
│   │           ├── diag.cpp
│   │           ├── diag.h
│   │           ├── dihedral_angles.cpp
│   │           ├── dihedral_angles.h
│   │           ├── dijkstra.cpp
│   │           ├── dijkstra.h
│   │           ├── directed_edge_orientations.cpp
│   │           ├── directed_edge_orientations.h
│   │           ├── directed_edge_parents.cpp
│   │           ├── directed_edge_parents.h
│   │           ├── dirname.cpp
│   │           ├── dirname.h
│   │           ├── dot.cpp
│   │           ├── dot.h
│   │           ├── dot_row.cpp
│   │           ├── dot_row.h
│   │           ├── doublearea.cpp
│   │           ├── doublearea.h
│   │           ├── dqs.cpp
│   │           ├── dqs.h
│   │           ├── draw_beach_ball.cpp
│   │           ├── draw_beach_ball.h
│   │           ├── draw_floor.cpp
│   │           ├── draw_floor.h
│   │           ├── draw_mesh.cpp
│   │           ├── draw_mesh.h
│   │           ├── draw_point.cpp
│   │           ├── draw_point.h
│   │           ├── draw_rectangular_marquee.cpp
│   │           ├── draw_rectangular_marquee.h
│   │           ├── draw_skeleton_3d.cpp
│   │           ├── draw_skeleton_3d.h
│   │           ├── draw_skeleton_vector_graphics.cpp
│   │           ├── draw_skeleton_vector_graphics.h
│   │           ├── ears.cpp
│   │           ├── ears.h
│   │           ├── edge_collapse_is_valid.cpp
│   │           ├── edge_collapse_is_valid.h
│   │           ├── edge_flaps.cpp
│   │           ├── edge_flaps.h
│   │           ├── edge_lengths.cpp
│   │           ├── edge_lengths.h
│   │           ├── edge_topology.cpp
│   │           ├── edge_topology.h
│   │           ├── edges.cpp
│   │           ├── edges.h
│   │           ├── edges_to_path.cpp
│   │           ├── edges_to_path.h
│   │           ├── eigs.cpp
│   │           ├── eigs.h
│   │           ├── embree/
│   │           │   ├── EmbreeIntersector.h
│   │           │   ├── Embree_convenience.h
│   │           │   ├── Hit.h
│   │           │   ├── ambient_occlusion.cpp
│   │           │   ├── ambient_occlusion.h
│   │           │   ├── bone_heat.cpp
│   │           │   ├── bone_heat.h
│   │           │   ├── bone_visible.cpp
│   │           │   ├── bone_visible.h
│   │           │   ├── line_mesh_intersection.cpp
│   │           │   ├── line_mesh_intersection.h
│   │           │   ├── reorient_facets_raycast.cpp
│   │           │   ├── reorient_facets_raycast.h
│   │           │   ├── unproject_in_mesh.cpp
│   │           │   ├── unproject_in_mesh.h
│   │           │   ├── unproject_onto_mesh.cpp
│   │           │   └── unproject_onto_mesh.h
│   │           ├── euler_characteristic.cpp
│   │           ├── euler_characteristic.h
│   │           ├── example_fun.cpp
│   │           ├── example_fun.h
│   │           ├── exterior_edges.cpp
│   │           ├── exterior_edges.h
│   │           ├── extract_manifold_patches.cpp
│   │           ├── extract_manifold_patches.h
│   │           ├── extract_non_manifold_edge_curves.cpp
│   │           ├── extract_non_manifold_edge_curves.h
│   │           ├── face_areas.cpp
│   │           ├── face_areas.h
│   │           ├── face_occurrences.cpp
│   │           ├── face_occurrences.h
│   │           ├── faces_first.cpp
│   │           ├── faces_first.h
│   │           ├── facet_components.cpp
│   │           ├── facet_components.h
│   │           ├── false_barycentric_subdivision.cpp
│   │           ├── false_barycentric_subdivision.h
│   │           ├── field_local_global_conversions.cpp
│   │           ├── field_local_global_conversions.h
│   │           ├── file_contents_as_string.cpp
│   │           ├── file_contents_as_string.h
│   │           ├── file_dialog_open.cpp
│   │           ├── file_dialog_open.h
│   │           ├── file_dialog_save.cpp
│   │           ├── file_dialog_save.h
│   │           ├── file_exists.cpp
│   │           ├── file_exists.h
│   │           ├── find.cpp
│   │           ├── find.h
│   │           ├── find_cross_field_singularities.cpp
│   │           ├── find_cross_field_singularities.h
│   │           ├── find_zero.cpp
│   │           ├── find_zero.h
│   │           ├── fit_plane.cpp
│   │           ├── fit_plane.h
│   │           ├── fit_rigid.cpp
│   │           ├── fit_rigid.h
│   │           ├── fit_rotations.cpp
│   │           ├── fit_rotations.h
│   │           ├── flare_textures.h
│   │           ├── flip_avoiding_line_search.cpp
│   │           ├── flip_avoiding_line_search.h
│   │           ├── flip_edge.cpp
│   │           ├── flip_edge.h
│   │           ├── flipped_triangles.cpp
│   │           ├── flipped_triangles.h
│   │           ├── flood_fill.cpp
│   │           ├── flood_fill.h
│   │           ├── floor.cpp
│   │           ├── floor.h
│   │           ├── for_each.h
│   │           ├── forward_kinematics.cpp
│   │           ├── forward_kinematics.h
│   │           ├── frame_field_deformer.cpp
│   │           ├── frame_field_deformer.h
│   │           ├── frame_to_cross_field.cpp
│   │           ├── frame_to_cross_field.h
│   │           ├── frustum.cpp
│   │           ├── frustum.h
│   │           ├── full.cpp
│   │           ├── full.h
│   │           ├── gaussian_curvature.cpp
│   │           ├── gaussian_curvature.h
│   │           ├── get_modifiers.h
│   │           ├── get_seconds.cpp
│   │           ├── get_seconds.h
│   │           ├── get_seconds_hires.cpp
│   │           ├── get_seconds_hires.h
│   │           ├── gl_type_size.cpp
│   │           ├── gl_type_size.h
│   │           ├── grad.cpp
│   │           ├── grad.h
│   │           ├── grid.cpp
│   │           ├── grid.h
│   │           ├── group_sum_matrix.cpp
│   │           ├── group_sum_matrix.h
│   │           ├── guess_extension.cpp
│   │           ├── guess_extension.h
│   │           ├── harmonic.cpp
│   │           ├── harmonic.h
│   │           ├── harwell_boeing.cpp
│   │           ├── harwell_boeing.h
│   │           ├── hausdorff.cpp
│   │           ├── hausdorff.h
│   │           ├── histc.cpp
│   │           ├── histc.h
│   │           ├── hsv_to_rgb.cpp
│   │           ├── hsv_to_rgb.h
│   │           ├── igl_inline.h
│   │           ├── in_element.cpp
│   │           ├── in_element.h
│   │           ├── infinite_cost_stopping_condition.cpp
│   │           ├── infinite_cost_stopping_condition.h
│   │           ├── init_render_to_texture.cpp
│   │           ├── init_render_to_texture.h
│   │           ├── inradius.cpp
│   │           ├── inradius.h
│   │           ├── integrable_polyvector_fields.cpp
│   │           ├── integrable_polyvector_fields.h
│   │           ├── internal_angles.cpp
│   │           ├── internal_angles.h
│   │           ├── intersect.cpp
│   │           ├── intersect.h
│   │           ├── invert_diag.cpp
│   │           ├── invert_diag.h
│   │           ├── is_border_vertex.cpp
│   │           ├── is_border_vertex.h
│   │           ├── is_boundary_edge.cpp
│   │           ├── is_boundary_edge.h
│   │           ├── is_dir.cpp
│   │           ├── is_dir.h
│   │           ├── is_edge_manifold.cpp
│   │           ├── is_edge_manifold.h
│   │           ├── is_file.cpp
│   │           ├── is_file.h
│   │           ├── is_irregular_vertex.cpp
│   │           ├── is_irregular_vertex.h
│   │           ├── is_planar.cpp
│   │           ├── is_planar.h
│   │           ├── is_readable.cpp
│   │           ├── is_readable.h
│   │           ├── is_sparse.cpp
│   │           ├── is_sparse.h
│   │           ├── is_stl.cpp
│   │           ├── is_stl.h
│   │           ├── is_symmetric.cpp
│   │           ├── is_symmetric.h
│   │           ├── is_vertex_manifold.cpp
│   │           ├── is_vertex_manifold.h
│   │           ├── is_writable.cpp
│   │           ├── is_writable.h
│   │           ├── isdiag.cpp
│   │           ├── isdiag.h
│   │           ├── ismember.cpp
│   │           ├── ismember.h
│   │           ├── jet.cpp
│   │           ├── jet.h
│   │           ├── kronecker_product.cpp
│   │           ├── kronecker_product.h
│   │           ├── launch_medit.cpp
│   │           ├── launch_medit.h
│   │           ├── lbs_matrix.cpp
│   │           ├── lbs_matrix.h
│   │           ├── lens_flare.cpp
│   │           ├── lens_flare.h
│   │           ├── lexicographic_triangulation.cpp
│   │           ├── lexicographic_triangulation.h
│   │           ├── lim/
│   │           │   ├── lim.cpp
│   │           │   └── lim.h
│   │           ├── limit_faces.cpp
│   │           ├── limit_faces.h
│   │           ├── line_field_missmatch.cpp
│   │           ├── line_field_missmatch.h
│   │           ├── line_search.cpp
│   │           ├── line_search.h
│   │           ├── line_segment_in_rectangle.cpp
│   │           ├── line_segment_in_rectangle.h
│   │           ├── linprog.cpp
│   │           ├── linprog.h
│   │           ├── list_to_matrix.cpp
│   │           ├── list_to_matrix.h
│   │           ├── load_shader.cpp
│   │           ├── load_shader.h
│   │           ├── local_basis.cpp
│   │           ├── local_basis.h
│   │           ├── look_at.cpp
│   │           ├── look_at.h
│   │           ├── loop.cpp
│   │           ├── loop.h
│   │           ├── lscm.cpp
│   │           ├── lscm.h
│   │           ├── lu_lagrange.cpp
│   │           ├── lu_lagrange.h
│   │           ├── map_vertices_to_circle.cpp
│   │           ├── map_vertices_to_circle.h
│   │           ├── marching_cubes.cpp
│   │           ├── marching_cubes.h
│   │           ├── massmatrix.cpp
│   │           ├── massmatrix.h
│   │           ├── mat_max.cpp
│   │           ├── mat_max.h
│   │           ├── mat_min.cpp
│   │           ├── mat_min.h
│   │           ├── mat_to_quat.cpp
│   │           ├── mat_to_quat.h
│   │           ├── material_colors.h
│   │           ├── matlab/
│   │           │   ├── MatlabWorkspace.h
│   │           │   ├── MexStream.h
│   │           │   ├── matlabinterface.cpp
│   │           │   ├── matlabinterface.h
│   │           │   ├── mexErrMsgTxt.cpp
│   │           │   ├── mexErrMsgTxt.h
│   │           │   ├── parse_rhs.cpp
│   │           │   ├── parse_rhs.h
│   │           │   ├── prepare_lhs.cpp
│   │           │   ├── prepare_lhs.h
│   │           │   ├── requires_arg.cpp
│   │           │   ├── requires_arg.h
│   │           │   ├── validate_arg.cpp
│   │           │   └── validate_arg.h
│   │           ├── matlab_format.cpp
│   │           ├── matlab_format.h
│   │           ├── matrix_to_list.cpp
│   │           ├── matrix_to_list.h
│   │           ├── max.cpp
│   │           ├── max.h
│   │           ├── max_faces_stopping_condition.cpp
│   │           ├── max_faces_stopping_condition.h
│   │           ├── max_size.cpp
│   │           ├── max_size.h
│   │           ├── median.cpp
│   │           ├── median.h
│   │           ├── min.cpp
│   │           ├── min.h
│   │           ├── min_quad_dense.cpp
│   │           ├── min_quad_dense.h
│   │           ├── min_quad_with_fixed.cpp
│   │           ├── min_quad_with_fixed.h
│   │           ├── min_size.cpp
│   │           ├── min_size.h
│   │           ├── mod.cpp
│   │           ├── mod.h
│   │           ├── mode.cpp
│   │           ├── mode.h
│   │           ├── mosek/
│   │           │   ├── bbw.cpp
│   │           │   ├── bbw.h
│   │           │   ├── mosek_guarded.cpp
│   │           │   ├── mosek_guarded.h
│   │           │   ├── mosek_linprog.cpp
│   │           │   ├── mosek_linprog.h
│   │           │   ├── mosek_quadprog.cpp
│   │           │   └── mosek_quadprog.h
│   │           ├── mvc.cpp
│   │           ├── mvc.h
│   │           ├── n_polyvector.cpp
│   │           ├── n_polyvector.h
│   │           ├── n_polyvector_general.cpp
│   │           ├── n_polyvector_general.h
│   │           ├── nchoosek.cpp
│   │           ├── nchoosek.h
│   │           ├── next_filename.cpp
│   │           ├── next_filename.h
│   │           ├── normal_derivative.cpp
│   │           ├── normal_derivative.h
│   │           ├── normalize_quat.cpp
│   │           ├── normalize_quat.h
│   │           ├── normalize_row_lengths.cpp
│   │           ├── normalize_row_lengths.h
│   │           ├── normalize_row_sums.cpp
│   │           ├── normalize_row_sums.h
│   │           ├── null.cpp
│   │           ├── null.h
│   │           ├── on_boundary.cpp
│   │           ├── on_boundary.h
│   │           ├── opengl/
│   │           │   ├── compile_and_link_program.cpp
│   │           │   ├── compile_and_link_program.h
│   │           │   ├── compile_shader.cpp
│   │           │   ├── compile_shader.h
│   │           │   ├── create_index_vbo.cpp
│   │           │   ├── create_index_vbo.h
│   │           │   ├── create_mesh_vbo.cpp
│   │           │   ├── create_mesh_vbo.h
│   │           │   ├── create_shader_program.cpp
│   │           │   ├── create_shader_program.h
│   │           │   ├── create_vector_vbo.cpp
│   │           │   ├── create_vector_vbo.h
│   │           │   ├── destroy_shader_program.cpp
│   │           │   ├── destroy_shader_program.h
│   │           │   ├── gl 12.56.14.h
│   │           │   ├── gl_type_size.cpp
│   │           │   ├── gl_type_size.h
│   │           │   ├── glfw/
│   │           │   │   ├── map_texture.cpp
│   │           │   │   └── map_texture.h
│   │           │   ├── init_render_to_texture.cpp
│   │           │   ├── init_render_to_texture.h
│   │           │   ├── load_shader.cpp
│   │           │   ├── load_shader.h
│   │           │   ├── print_program_info_log.cpp
│   │           │   ├── print_program_info_log.h
│   │           │   ├── print_shader_info_log.cpp
│   │           │   ├── print_shader_info_log.h
│   │           │   ├── report_gl_error.cpp
│   │           │   ├── report_gl_error.h
│   │           │   ├── uniform_type_to_string.cpp
│   │           │   └── uniform_type_to_string.h
│   │           ├── opengl2/
│   │           │   ├── MouseController.h
│   │           │   ├── RotateWidget.h
│   │           │   ├── TranslateWidget.h
│   │           │   ├── draw_beach_ball.cpp
│   │           │   ├── draw_beach_ball.h
│   │           │   ├── draw_floor.cpp
│   │           │   ├── draw_floor.h
│   │           │   ├── draw_mesh.cpp
│   │           │   ├── draw_mesh.h
│   │           │   ├── draw_point.cpp
│   │           │   ├── draw_point.h
│   │           │   ├── draw_rectangular_marquee.cpp
│   │           │   ├── draw_rectangular_marquee.h
│   │           │   ├── draw_skeleton_3d.cpp
│   │           │   ├── draw_skeleton_3d.h
│   │           │   ├── draw_skeleton_vector_graphics.cpp
│   │           │   ├── draw_skeleton_vector_graphics.h
│   │           │   ├── flare_textures.h
│   │           │   ├── gl.h
│   │           │   ├── glext.h
│   │           │   ├── glu.h
│   │           │   ├── lens_flare.cpp
│   │           │   ├── lens_flare.h
│   │           │   ├── model_proj_viewport.cpp
│   │           │   ├── model_proj_viewport.h
│   │           │   ├── print_gl_get.cpp
│   │           │   ├── print_gl_get.h
│   │           │   ├── project.cpp
│   │           │   ├── project.h
│   │           │   ├── render_to_tga.cpp
│   │           │   ├── render_to_tga.h
│   │           │   ├── right_axis.cpp
│   │           │   ├── right_axis.h
│   │           │   ├── shine_textures.h
│   │           │   ├── sort_triangles.cpp
│   │           │   ├── sort_triangles.h
│   │           │   ├── texture_from_tga.cpp
│   │           │   ├── texture_from_tga.h
│   │           │   ├── tga.cpp
│   │           │   ├── tga.h
│   │           │   ├── unproject.cpp
│   │           │   ├── unproject.h
│   │           │   ├── unproject_to_zero_plane.cpp
│   │           │   ├── unproject_to_zero_plane.h
│   │           │   ├── up_axis.cpp
│   │           │   ├── up_axis.h
│   │           │   ├── view_axis.cpp
│   │           │   └── view_axis.h
│   │           ├── orient_outward.cpp
│   │           ├── orient_outward.h
│   │           ├── orientable_patches.cpp
│   │           ├── orientable_patches.h
│   │           ├── orth.cpp
│   │           ├── orth.h
│   │           ├── ortho.cpp
│   │           ├── ortho.h
│   │           ├── outer_element.cpp
│   │           ├── outer_element.h
│   │           ├── outer_facet.cpp
│   │           ├── outer_facet.h
│   │           ├── parallel_for.h
│   │           ├── parallel_transport_angles.cpp
│   │           ├── parallel_transport_angles.h
│   │           ├── partition.cpp
│   │           ├── partition.h
│   │           ├── parula.cpp
│   │           ├── parula.h
│   │           ├── path_to_executable.cpp
│   │           ├── path_to_executable.h
│   │           ├── pathinfo.cpp
│   │           ├── pathinfo.h
│   │           ├── per_corner_normals.cpp
│   │           ├── per_corner_normals.h
│   │           ├── per_edge_normals.cpp
│   │           ├── per_edge_normals.h
│   │           ├── per_face_normals.cpp
│   │           ├── per_face_normals.h
│   │           ├── per_vertex_attribute_smoothing.cpp
│   │           ├── per_vertex_attribute_smoothing.h
│   │           ├── per_vertex_normals.cpp
│   │           ├── per_vertex_normals.h
│   │           ├── per_vertex_point_to_plane_quadrics.cpp
│   │           ├── per_vertex_point_to_plane_quadrics.h
│   │           ├── piecewise_constant_winding_number.cpp
│   │           ├── piecewise_constant_winding_number.h
│   │           ├── planarize_quad_mesh.cpp
│   │           ├── planarize_quad_mesh.h
│   │           ├── ply.h
│   │           ├── png/
│   │           │   ├── readPNG.cpp
│   │           │   ├── readPNG.h
│   │           │   ├── render_to_png.cpp
│   │           │   ├── render_to_png.h
│   │           │   ├── render_to_png_async.cpp
│   │           │   ├── render_to_png_async.h
│   │           │   ├── texture_from_file.cpp
│   │           │   ├── texture_from_file.h
│   │           │   ├── texture_from_png.cpp
│   │           │   ├── texture_from_png.h
│   │           │   ├── writePNG.cpp
│   │           │   └── writePNG.h
│   │           ├── point_in_circle.cpp
│   │           ├── point_in_circle.h
│   │           ├── point_in_poly.cpp
│   │           ├── point_in_poly.h
│   │           ├── point_mesh_squared_distance.cpp
│   │           ├── point_mesh_squared_distance.h
│   │           ├── point_simplex_squared_distance.cpp
│   │           ├── point_simplex_squared_distance.h
│   │           ├── polar_dec.cpp
│   │           ├── polar_dec.h
│   │           ├── polar_svd.cpp
│   │           ├── polar_svd.h
│   │           ├── polar_svd3x3.cpp
│   │           ├── polar_svd3x3.h
│   │           ├── polygon_mesh_to_triangle_mesh.cpp
│   │           ├── polygon_mesh_to_triangle_mesh.h
│   │           ├── polyroots.cpp
│   │           ├── polyroots.h
│   │           ├── polyvector_field_comb_from_matchings_and_cuts.cpp
│   │           ├── polyvector_field_comb_from_matchings_and_cuts.h
│   │           ├── polyvector_field_cut_mesh_with_singularities.cpp
│   │           ├── polyvector_field_cut_mesh_with_singularities.h
│   │           ├── polyvector_field_matchings.cpp
│   │           ├── polyvector_field_matchings.h
│   │           ├── polyvector_field_poisson_reconstruction.cpp
│   │           ├── polyvector_field_poisson_reconstruction.h
│   │           ├── polyvector_field_singularities_from_matchings.cpp
│   │           ├── polyvector_field_singularities_from_matchings.h
│   │           ├── principal_curvature.cpp
│   │           ├── principal_curvature.h
│   │           ├── print_gl_get.cpp
│   │           ├── print_gl_get.h
│   │           ├── print_ijv.cpp
│   │           ├── print_ijv.h
│   │           ├── print_program_info_log.cpp
│   │           ├── print_program_info_log.h
│   │           ├── print_shader_info_log.cpp
│   │           ├── print_shader_info_log.h
│   │           ├── print_vector.cpp
│   │           ├── print_vector.h
│   │           ├── procrustes.cpp
│   │           ├── procrustes.h
│   │           ├── project.cpp
│   │           ├── project.h
│   │           ├── project_isometrically_to_plane.cpp
│   │           ├── project_isometrically_to_plane.h
│   │           ├── project_to_line.cpp
│   │           ├── project_to_line.h
│   │           ├── project_to_line_segment.cpp
│   │           ├── project_to_line_segment.h
│   │           ├── pseudonormal_test.cpp
│   │           ├── pseudonormal_test.h
│   │           ├── qslim.cpp
│   │           ├── qslim.h
│   │           ├── qslim_optimal_collapse_edge_callbacks.cpp
│   │           ├── qslim_optimal_collapse_edge_callbacks.h
│   │           ├── quad_planarity.cpp
│   │           ├── quad_planarity.h
│   │           ├── quadric_binary_plus_operator.cpp
│   │           ├── quadric_binary_plus_operator.h
│   │           ├── quat_conjugate.cpp
│   │           ├── quat_conjugate.h
│   │           ├── quat_mult.cpp
│   │           ├── quat_mult.h
│   │           ├── quat_to_axis_angle.cpp
│   │           ├── quat_to_axis_angle.h
│   │           ├── quat_to_mat.cpp
│   │           ├── quat_to_mat.h
│   │           ├── quats_to_column.cpp
│   │           ├── quats_to_column.h
│   │           ├── ramer_douglas_peucker.cpp
│   │           ├── ramer_douglas_peucker.h
│   │           ├── random_dir.cpp
│   │           ├── random_dir.h
│   │           ├── random_points_on_mesh.cpp
│   │           ├── random_points_on_mesh.h
│   │           ├── random_quaternion.cpp
│   │           ├── random_quaternion.h
│   │           ├── randperm.cpp
│   │           ├── randperm.h
│   │           ├── ray_box_intersect.cpp
│   │           ├── ray_box_intersect.h
│   │           ├── ray_mesh_intersect.cpp
│   │           ├── ray_mesh_intersect.h
│   │           ├── ray_sphere_intersect.cpp
│   │           ├── ray_sphere_intersect.h
│   │           ├── raytri.c
│   │           ├── readBF.cpp
│   │           ├── readBF.h
│   │           ├── readCSV.cpp
│   │           ├── readCSV.h
│   │           ├── readDMAT.cpp
│   │           ├── readDMAT.h
│   │           ├── readMESH.cpp
│   │           ├── readMESH.h
│   │           ├── readNODE.cpp
│   │           ├── readNODE.h
│   │           ├── readOBJ.cpp
│   │           ├── readOBJ.h
│   │           ├── readOFF.cpp
│   │           ├── readOFF.h
│   │           ├── readPLY.cpp
│   │           ├── readPLY.h
│   │           ├── readSTL.cpp
│   │           ├── readSTL.h
│   │           ├── readTGF.cpp
│   │           ├── readTGF.h
│   │           ├── readWRL.cpp
│   │           ├── readWRL.h
│   │           ├── read_triangle_mesh.cpp
│   │           ├── read_triangle_mesh.h
│   │           ├── redux.h
│   │           ├── remove_duplicate_vertices.cpp
│   │           ├── remove_duplicate_vertices.h
│   │           ├── remove_duplicates.cpp
│   │           ├── remove_duplicates.h
│   │           ├── remove_unreferenced.cpp
│   │           ├── remove_unreferenced.h
│   │           ├── render_to_tga.cpp
│   │           ├── render_to_tga.h
│   │           ├── reorder.cpp
│   │           ├── reorder.h
│   │           ├── repdiag.cpp
│   │           ├── repdiag.h
│   │           ├── repmat.cpp
│   │           ├── repmat.h
│   │           ├── report_gl_error.cpp
│   │           ├── report_gl_error.h
│   │           ├── resolve_duplicated_faces.cpp
│   │           ├── resolve_duplicated_faces.h
│   │           ├── rgb_to_hsv.cpp
│   │           ├── rgb_to_hsv.h
│   │           ├── right_axis.cpp
│   │           ├── right_axis.h
│   │           ├── rotate_by_quat.cpp
│   │           ├── rotate_by_quat.h
│   │           ├── rotate_vectors.cpp
│   │           ├── rotate_vectors.h
│   │           ├── rotation_matrix_from_directions.cpp
│   │           ├── rotation_matrix_from_directions.h
│   │           ├── round.cpp
│   │           ├── round.h
│   │           ├── rows_to_matrix.cpp
│   │           ├── rows_to_matrix.h
│   │           ├── sample_edges.cpp
│   │           ├── sample_edges.h
│   │           ├── seam_edges.cpp
│   │           ├── seam_edges.h
│   │           ├── segment_segment_intersect.cpp
│   │           ├── segment_segment_intersect.h
│   │           ├── serialize.h
│   │           ├── setdiff.cpp
│   │           ├── setdiff.h
│   │           ├── setunion.cpp
│   │           ├── setunion.h
│   │           ├── setxor.cpp
│   │           ├── setxor.h
│   │           ├── shine_textures.h
│   │           ├── shortest_edge_and_midpoint.cpp
│   │           ├── shortest_edge_and_midpoint.h
│   │           ├── signed_distance.cpp
│   │           ├── signed_distance.h
│   │           ├── simplify_polyhedron.cpp
│   │           ├── simplify_polyhedron.h
│   │           ├── slice.cpp
│   │           ├── slice.h
│   │           ├── slice_into.cpp
│   │           ├── slice_into.h
│   │           ├── slice_mask.cpp
│   │           ├── slice_mask.h
│   │           ├── slice_tets.cpp
│   │           ├── slice_tets.h
│   │           ├── slim.cpp
│   │           ├── slim.h
│   │           ├── snap_points.cpp
│   │           ├── snap_points.h
│   │           ├── snap_to_canonical_view_quat.cpp
│   │           ├── snap_to_canonical_view_quat.h
│   │           ├── snap_to_fixed_up.cpp
│   │           ├── snap_to_fixed_up.h
│   │           ├── sort.cpp
│   │           ├── sort.h
│   │           ├── sort_angles.cpp
│   │           ├── sort_angles.h
│   │           ├── sort_triangles.cpp
│   │           ├── sort_triangles.h
│   │           ├── sort_vectors_ccw.cpp
│   │           ├── sort_vectors_ccw.h
│   │           ├── sortrows.cpp
│   │           ├── sortrows.h
│   │           ├── sparse.cpp
│   │           ├── sparse.h
│   │           ├── speye.cpp
│   │           ├── speye.h
│   │           ├── squared_edge_lengths.cpp
│   │           ├── squared_edge_lengths.h
│   │           ├── stdin_to_temp.cpp
│   │           ├── stdin_to_temp.h
│   │           ├── straighten_seams.cpp
│   │           ├── straighten_seams.h
│   │           ├── streamlines.cpp
│   │           ├── streamlines.h
│   │           ├── sum.cpp
│   │           ├── sum.h
│   │           ├── svd3x3/
│   │           │   ├── arap.cpp
│   │           │   ├── arap.h
│   │           │   ├── arap_dof.cpp
│   │           │   ├── arap_dof.h
│   │           │   ├── fit_rotations.cpp
│   │           │   ├── fit_rotations.h
│   │           │   ├── polar_svd3x3.cpp
│   │           │   ├── polar_svd3x3.h
│   │           │   ├── svd3x3.cpp
│   │           │   ├── svd3x3.h
│   │           │   ├── svd3x3_avx.cpp
│   │           │   ├── svd3x3_avx.h
│   │           │   ├── svd3x3_sse.cpp
│   │           │   └── svd3x3_sse.h
│   │           ├── svd3x3.cpp
│   │           ├── svd3x3.h
│   │           ├── svd3x3_avx.cpp
│   │           ├── svd3x3_avx.h
│   │           ├── svd3x3_sse.cpp
│   │           ├── svd3x3_sse.h
│   │           ├── swept_volume_bounding_box.cpp
│   │           ├── swept_volume_bounding_box.h
│   │           ├── swept_volume_signed_distance.cpp
│   │           ├── swept_volume_signed_distance.h
│   │           ├── tetgen/
│   │           │   ├── README
│   │           │   ├── cdt.cpp
│   │           │   ├── cdt.h
│   │           │   ├── mesh_to_tetgenio.cpp
│   │           │   ├── mesh_to_tetgenio.h
│   │           │   ├── mesh_with_skeleton.cpp
│   │           │   ├── mesh_with_skeleton.h
│   │           │   ├── read_into_tetgenio.cpp
│   │           │   ├── read_into_tetgenio.h
│   │           │   ├── tetgenio_to_tetmesh.cpp
│   │           │   ├── tetgenio_to_tetmesh.h
│   │           │   ├── tetrahedralize.cpp
│   │           │   └── tetrahedralize.h
│   │           ├── texture_from_tga.cpp
│   │           ├── texture_from_tga.h
│   │           ├── tga.cpp
│   │           ├── tga.h
│   │           ├── trackball.cpp
│   │           ├── trackball.h
│   │           ├── transpose_blocks.cpp
│   │           ├── transpose_blocks.h
│   │           ├── triangle/
│   │           │   ├── cdt.cpp
│   │           │   ├── cdt.h
│   │           │   ├── triangulate.cpp
│   │           │   └── triangulate.h
│   │           ├── triangle_fan.cpp
│   │           ├── triangle_fan.h
│   │           ├── triangle_triangle_adjacency.cpp
│   │           ├── triangle_triangle_adjacency.h
│   │           ├── triangles_from_strip.cpp
│   │           ├── triangles_from_strip.h
│   │           ├── two_axis_valuator_fixed_up.cpp
│   │           ├── two_axis_valuator_fixed_up.h
│   │           ├── uniform_type_to_string.cpp
│   │           ├── uniform_type_to_string.h
│   │           ├── uniformly_sample_two_manifold.cpp
│   │           ├── uniformly_sample_two_manifold.h
│   │           ├── unique.cpp
│   │           ├── unique.h
│   │           ├── unique_edge_map.cpp
│   │           ├── unique_edge_map.h
│   │           ├── unique_simplices.cpp
│   │           ├── unique_simplices.h
│   │           ├── unproject.cpp
│   │           ├── unproject.h
│   │           ├── unproject_in_mesh.cpp
│   │           ├── unproject_in_mesh.h
│   │           ├── unproject_onto_mesh.cpp
│   │           ├── unproject_onto_mesh.h
│   │           ├── unproject_ray.cpp
│   │           ├── unproject_ray.h
│   │           ├── unproject_to_zero_plane.cpp
│   │           ├── unproject_to_zero_plane.h
│   │           ├── unzip_corners.cpp
│   │           ├── unzip_corners.h
│   │           ├── up_axis.cpp
│   │           ├── up_axis.h
│   │           ├── upsample.cpp
│   │           ├── upsample.h
│   │           ├── vector_area_matrix.cpp
│   │           ├── vector_area_matrix.h
│   │           ├── verbose.h
│   │           ├── vertex_triangle_adjacency.cpp
│   │           ├── vertex_triangle_adjacency.h
│   │           ├── view_axis.cpp
│   │           ├── view_axis.h
│   │           ├── viewer/
│   │           │   ├── OpenGL_shader.cpp
│   │           │   ├── OpenGL_shader.h
│   │           │   ├── OpenGL_state.cpp
│   │           │   ├── OpenGL_state.h
│   │           │   ├── TODOs.txt
│   │           │   ├── TextRenderer.cpp
│   │           │   ├── TextRenderer.h
│   │           │   ├── TextRenderer_fonts.cpp
│   │           │   ├── TextRenderer_fonts.h
│   │           │   ├── Viewer.cpp
│   │           │   ├── Viewer.h
│   │           │   ├── ViewerCore.cpp
│   │           │   ├── ViewerCore.h
│   │           │   ├── ViewerData.cpp
│   │           │   ├── ViewerData.h
│   │           │   └── ViewerPlugin.h
│   │           ├── volume.cpp
│   │           ├── volume.h
│   │           ├── voxel_grid.cpp
│   │           ├── voxel_grid.h
│   │           ├── winding_number.cpp
│   │           ├── winding_number.h
│   │           ├── writeBF.cpp
│   │           ├── writeBF.h
│   │           ├── writeDMAT.cpp
│   │           ├── writeDMAT.h
│   │           ├── writeMESH.cpp
│   │           ├── writeMESH.h
│   │           ├── writeOBJ.cpp
│   │           ├── writeOBJ.h
│   │           ├── writeOFF.cpp
│   │           ├── writeOFF.h
│   │           ├── writePLY.cpp
│   │           ├── writePLY.h
│   │           ├── writeSTL.cpp
│   │           ├── writeSTL.h
│   │           ├── writeTGF.cpp
│   │           ├── writeTGF.h
│   │           ├── writeWRL.cpp
│   │           ├── writeWRL.h
│   │           ├── write_triangle_mesh.cpp
│   │           ├── write_triangle_mesh.h
│   │           └── xml/
│   │               ├── README
│   │               ├── ReAntTweakBarXMLSerialization.h
│   │               ├── XMLSerializable.h
│   │               ├── serialization_test.cpp
│   │               ├── serialization_test.skip
│   │               ├── serialize_xml.cpp
│   │               ├── serialize_xml.h
│   │               ├── writeDAE.cpp
│   │               ├── writeDAE.h
│   │               ├── write_triangle_mesh.cpp
│   │               └── write_triangle_mesh.h
│   ├── libs.pri
│   └── quadretopology/
│       ├── patterns/
│       │   ├── patterns/
│       │   │   ├── OpenMesh/
│       │   │   │   └── Core/
│       │   │   │       ├── Geometry/
│       │   │   │       │   ├── Config.hh
│       │   │   │       │   ├── LoopSchemeMaskT.hh
│       │   │   │       │   ├── MathDefs.hh
│       │   │   │       │   ├── NormalConeT.cc
│       │   │   │       │   ├── NormalConeT.hh
│       │   │   │       │   ├── Plane3d.hh
│       │   │   │       │   ├── QuadricT.hh
│       │   │   │       │   ├── VectorT.hh
│       │   │   │       │   └── VectorT_inc.hh
│       │   │   │       ├── IO/
│       │   │   │       │   ├── BinaryHelper.cc
│       │   │   │       │   ├── BinaryHelper.hh
│       │   │   │       │   ├── IOInstances.hh
│       │   │   │       │   ├── IOManager.cc
│       │   │   │       │   ├── IOManager.hh
│       │   │   │       │   ├── MeshIO.hh
│       │   │   │       │   ├── OFFFormat.hh
│       │   │   │       │   ├── OMFormat.cc
│       │   │   │       │   ├── OMFormat.hh
│       │   │   │       │   ├── OMFormatT.cc
│       │   │   │       │   ├── Options.hh
│       │   │   │       │   ├── SR_binary.hh
│       │   │   │       │   ├── SR_binary_spec.hh
│       │   │   │       │   ├── SR_binary_vector_of_bool.inl
│       │   │   │       │   ├── SR_binary_vector_of_fundamentals.inl
│       │   │   │       │   ├── SR_binary_vector_of_string.inl
│       │   │   │       │   ├── SR_rbo.hh
│       │   │   │       │   ├── SR_store.hh
│       │   │   │       │   ├── SR_types.hh
│       │   │   │       │   ├── StoreRestore.hh
│       │   │   │       │   ├── exporter/
│       │   │   │       │   │   ├── BaseExporter.hh
│       │   │   │       │   │   └── ExporterT.hh
│       │   │   │       │   ├── importer/
│       │   │   │       │   │   ├── BaseImporter.hh
│       │   │   │       │   │   └── ImporterT.hh
│       │   │   │       │   ├── reader/
│       │   │   │       │   │   ├── BaseReader.cc
│       │   │   │       │   │   ├── BaseReader.hh
│       │   │   │       │   │   ├── OBJReader.cc
│       │   │   │       │   │   ├── OBJReader.hh
│       │   │   │       │   │   ├── OFFReader.cc
│       │   │   │       │   │   ├── OFFReader.hh
│       │   │   │       │   │   ├── OMReader.cc
│       │   │   │       │   │   ├── OMReader.hh
│       │   │   │       │   │   ├── PLYReader.cc
│       │   │   │       │   │   ├── PLYReader.hh
│       │   │   │       │   │   ├── STLReader.cc
│       │   │   │       │   │   └── STLReader.hh
│       │   │   │       │   └── writer/
│       │   │   │       │       ├── BaseWriter.cc
│       │   │   │       │       ├── BaseWriter.hh
│       │   │   │       │       ├── OBJWriter.cc
│       │   │   │       │       ├── OBJWriter.hh
│       │   │   │       │       ├── OFFWriter.cc
│       │   │   │       │       ├── OFFWriter.hh
│       │   │   │       │       ├── OMWriter.cc
│       │   │   │       │       ├── OMWriter.hh
│       │   │   │       │       ├── PLYWriter.cc
│       │   │   │       │       ├── PLYWriter.hh
│       │   │   │       │       ├── STLWriter.cc
│       │   │   │       │       ├── STLWriter.hh
│       │   │   │       │       ├── VTKWriter.cc
│       │   │   │       │       └── VTKWriter.hh
│       │   │   │       ├── Mesh/
│       │   │   │       │   ├── ArrayItems.hh
│       │   │   │       │   ├── ArrayKernel.cc
│       │   │   │       │   ├── ArrayKernel.hh
│       │   │   │       │   ├── ArrayKernelT.cc
│       │   │   │       │   ├── AttribKernelT.hh
│       │   │   │       │   ├── Attributes.hh
│       │   │   │       │   ├── BaseKernel.cc
│       │   │   │       │   ├── BaseKernel.hh
│       │   │   │       │   ├── BaseMesh.hh
│       │   │   │       │   ├── Casts.hh
│       │   │   │       │   ├── CirculatorsT.hh
│       │   │   │       │   ├── FinalMeshItemsT.hh
│       │   │   │       │   ├── Handles.hh
│       │   │   │       │   ├── IteratorsT.hh
│       │   │   │       │   ├── PolyConnectivity.cc
│       │   │   │       │   ├── PolyConnectivity.hh
│       │   │   │       │   ├── PolyMeshT.cc
│       │   │   │       │   ├── PolyMeshT.hh
│       │   │   │       │   ├── PolyMesh_ArrayKernelT.hh
│       │   │   │       │   ├── Status.hh
│       │   │   │       │   ├── Traits.hh
│       │   │   │       │   ├── TriConnectivity.cc
│       │   │   │       │   ├── TriConnectivity.hh
│       │   │   │       │   ├── TriMeshT.cc
│       │   │   │       │   ├── TriMeshT.hh
│       │   │   │       │   └── TriMesh_ArrayKernelT.hh
│       │   │   │       ├── System/
│       │   │   │       │   ├── OpenMeshDLLMacros.hh
│       │   │   │       │   ├── compiler.hh
│       │   │   │       │   ├── config.h
│       │   │   │       │   ├── config.hh
│       │   │   │       │   ├── mostream.hh
│       │   │   │       │   ├── omstream.cc
│       │   │   │       │   └── omstream.hh
│       │   │   │       └── Utils/
│       │   │   │           ├── AutoPropertyHandleT.hh
│       │   │   │           ├── BaseProperty.cc
│       │   │   │           ├── BaseProperty.hh
│       │   │   │           ├── Endian.cc
│       │   │   │           ├── Endian.hh
│       │   │   │           ├── GenProg.hh
│       │   │   │           ├── Noncopyable.hh
│       │   │   │           ├── Property.hh
│       │   │   │           ├── PropertyContainer.hh
│       │   │   │           ├── PropertyManager.hh
│       │   │   │           ├── RandomNumberGenerator.cc
│       │   │   │           ├── RandomNumberGenerator.hh
│       │   │   │           ├── SingletonT.cc
│       │   │   │           ├── SingletonT.hh
│       │   │   │           ├── color_cast.hh
│       │   │   │           ├── vector_cast.hh
│       │   │   │           └── vector_traits.hh
│       │   │   ├── Patch.cpp
│       │   │   ├── Patch.h
│       │   │   ├── determine_geometry.cpp
│       │   │   ├── determine_geometry.h
│       │   │   ├── generate_patch.cpp
│       │   │   ├── generate_patch.h
│       │   │   ├── kt84/
│       │   │   │   ├── AutoDeleter.h
│       │   │   │   ├── BaryCoordT.h
│       │   │   │   ├── Clock.h
│       │   │   │   ├── Matrix11ToScalar.h
│       │   │   │   ├── MaxSelector.h
│       │   │   │   ├── Memento.h
│       │   │   │   ├── MinSelector.h
│       │   │   │   ├── PriorityElement.h
│       │   │   │   ├── RangeAdaptor.h
│       │   │   │   ├── ReversedRange.h
│       │   │   │   ├── ScopeExit.hh
│       │   │   │   ├── Timer.hh
│       │   │   │   ├── adjacent_pairs.h
│       │   │   │   ├── container_cast.h
│       │   │   │   ├── container_util.h
│       │   │   │   ├── discrete_distribution.h
│       │   │   │   ├── eigen_def.h
│       │   │   │   ├── eigen_util.h
│       │   │   │   ├── geometry/
│       │   │   │   │   ├── Camera.h
│       │   │   │   │   ├── CameraFree.h
│       │   │   │   │   ├── CameraUpright.h
│       │   │   │   │   ├── PointNormal.h
│       │   │   │   │   └── PolylineT.h
│       │   │   │   ├── glut_util.h
│       │   │   │   ├── graphics/
│       │   │   │   │   ├── DisplayList.h
│       │   │   │   │   ├── FramebufferObject.h
│       │   │   │   │   ├── ParamName2.1.inl
│       │   │   │   │   ├── ParamName2.1.txt
│       │   │   │   │   ├── ParamName3.3.inl
│       │   │   │   │   ├── ParamName3.3.txt
│       │   │   │   │   ├── ParamName4.inl
│       │   │   │   │   ├── ParamName4.txt
│       │   │   │   │   ├── ProgramObject.h
│       │   │   │   │   ├── RenderbufferObject.h
│       │   │   │   │   ├── ShaderObject.h
│       │   │   │   │   ├── TextureObjectT.h
│       │   │   │   │   ├── gen_ParamName.py
│       │   │   │   │   ├── graphics_util.h
│       │   │   │   │   └── phong_tessellation.h
│       │   │   │   ├── loop_util.h
│       │   │   │   ├── math/
│       │   │   │   │   ├── BinomialCoefficient.h
│       │   │   │   │   ├── FiniteDifferentiator.h
│       │   │   │   │   ├── GeneralizedMLS.h
│       │   │   │   │   ├── HermiteRBF.h
│       │   │   │   │   ├── MLS.h
│       │   │   │   │   ├── PolynomialBasisGen.h
│       │   │   │   │   ├── RBF.h
│       │   │   │   │   ├── RBFKernel.h
│       │   │   │   │   └── interpolant_test.cpp
│       │   │   │   ├── multi_array.h
│       │   │   │   ├── myassert.h
│       │   │   │   ├── openmesh/
│       │   │   │   │   ├── DerivedPtrHolder.h
│       │   │   │   │   ├── FaceBaryCoordT.h
│       │   │   │   │   ├── append_quad_strip.h
│       │   │   │   │   ├── base/
│       │   │   │   │   │   ├── BoundingBox.h
│       │   │   │   │   │   ├── CenterOfMass.h
│       │   │   │   │   │   ├── CotanWeight.h
│       │   │   │   │   │   ├── DebugInfo.h
│       │   │   │   │   │   ├── EdgeLength.h
│       │   │   │   │   │   ├── ExpMap.h
│       │   │   │   │   │   ├── FaceArea.h
│       │   │   │   │   │   ├── Geodesic.h
│       │   │   │   │   │   ├── GeodesicLoop_incomplete.h
│       │   │   │   │   │   ├── Gradient.h
│       │   │   │   │   │   ├── KdTree.h
│       │   │   │   │   │   ├── LaplaceDirect.h
│       │   │   │   │   │   ├── LaplaceIterative.h
│       │   │   │   │   │   ├── NormalCurvature.h
│       │   │   │   │   │   ├── NormalVariation.h
│       │   │   │   │   │   ├── SurfaceTopology.h
│       │   │   │   │   │   ├── Utility.h
│       │   │   │   │   │   └── geodesic/
│       │   │   │   │   │       ├── geodesic_algorithm_base.h
│       │   │   │   │   │       ├── geodesic_algorithm_dijkstra.h
│       │   │   │   │   │       ├── geodesic_algorithm_dijkstra_alternative.h
│       │   │   │   │   │       ├── geodesic_algorithm_exact.h
│       │   │   │   │   │       ├── geodesic_algorithm_exact_elements.h
│       │   │   │   │   │       ├── geodesic_algorithm_graph_base.h
│       │   │   │   │   │       ├── geodesic_algorithm_subdivision.h
│       │   │   │   │   │       ├── geodesic_constants_and_simple_functions.h
│       │   │   │   │   │       ├── geodesic_matlab_api.h
│       │   │   │   │   │       ├── geodesic_memory.h
│       │   │   │   │   │       ├── geodesic_mesh.h
│       │   │   │   │   │       └── geodesic_mesh_elements.h
│       │   │   │   │   ├── combine_meshes.h
│       │   │   │   │   ├── debug_writeSVG.h
│       │   │   │   │   ├── delete_isolated_vertices.h
│       │   │   │   │   ├── edgeloop.h
│       │   │   │   │   ├── flip_faces.h
│       │   │   │   │   ├── get_connected_components.h
│       │   │   │   │   ├── merge_nearby_vertices.h
│       │   │   │   │   ├── read_obj_soup.h
│       │   │   │   │   ├── simple_svg_1.0.0.hpp
│       │   │   │   │   ├── symmetrize.hh
│       │   │   │   │   └── vector_convert.h
│       │   │   │   ├── push_back_util.h
│       │   │   │   ├── safe_istream.h
│       │   │   │   ├── triangle_util.h
│       │   │   │   ├── tw_util.h
│       │   │   │   ├── ubuntu_workaround.h
│       │   │   │   ├── util.h
│       │   │   │   └── zenity_util.h
│       │   │   ├── lp_solve_5.5/
│       │   │   │   ├── README.txt
│       │   │   │   ├── bfp/
│       │   │   │   │   ├── bfp_LUSOL/
│       │   │   │   │   │   ├── LUSOL/
│       │   │   │   │   │   │   ├── LUSOL-overview.txt
│       │   │   │   │   │   │   ├── LUSOL_LGPL.txt
│       │   │   │   │   │   │   ├── LUSOL_Overview.txt
│       │   │   │   │   │   │   ├── LUSOL_README.txt
│       │   │   │   │   │   │   ├── Row-based L0.txt
│       │   │   │   │   │   │   ├── Victoria1850.RUA
│       │   │   │   │   │   │   ├── bfile3.txt
│       │   │   │   │   │   │   ├── hbio.c
│       │   │   │   │   │   │   ├── hbio.h
│       │   │   │   │   │   │   ├── lusol.c
│       │   │   │   │   │   │   ├── lusol.h
│       │   │   │   │   │   │   ├── lusol1.c
│       │   │   │   │   │   │   ├── lusol2.c
│       │   │   │   │   │   │   ├── lusol6a.c
│       │   │   │   │   │   │   ├── lusol6l0.c
│       │   │   │   │   │   │   ├── lusol6u.c
│       │   │   │   │   │   │   ├── lusol7a.c
│       │   │   │   │   │   │   ├── lusol8a.c
│       │   │   │   │   │   │   ├── lusolio.c
│       │   │   │   │   │   │   ├── lusolio.h
│       │   │   │   │   │   │   ├── lusolmain.c
│       │   │   │   │   │   │   ├── lusolmain.h
│       │   │   │   │   │   │   ├── mmio.c
│       │   │   │   │   │   │   ├── mmio.h
│       │   │   │   │   │   │   ├── myblas.c
│       │   │   │   │   │   │   ├── myblas.h
│       │   │   │   │   │   │   ├── sherman5.mtx
│       │   │   │   │   │   │   ├── sherman5_rhs1.mtx
│       │   │   │   │   │   │   ├── sparselib.c
│       │   │   │   │   │   │   └── sparselib.h
│       │   │   │   │   │   ├── bfp_LUSOL.c
│       │   │   │   │   │   ├── bfp_LUSOL.h
│       │   │   │   │   │   ├── lp_LUSOL.c
│       │   │   │   │   │   └── lp_LUSOL.h
│       │   │   │   │   ├── lp_BFP.h
│       │   │   │   │   ├── lp_BFP1.c
│       │   │   │   │   └── lp_BFP2.c
│       │   │   │   ├── c
│       │   │   │   ├── colamd/
│       │   │   │   │   ├── colamd.c
│       │   │   │   │   └── colamd.h
│       │   │   │   ├── config.log
│       │   │   │   ├── configure
│       │   │   │   ├── configure.ac
│       │   │   │   ├── declare.h
│       │   │   │   ├── fortify.c
│       │   │   │   ├── fortify.h
│       │   │   │   ├── ini.c
│       │   │   │   ├── ini.h
│       │   │   │   ├── lp_Hash.c
│       │   │   │   ├── lp_Hash.h
│       │   │   │   ├── lp_MDO.c
│       │   │   │   ├── lp_MDO.h
│       │   │   │   ├── lp_MPS.c
│       │   │   │   ├── lp_MPS.h
│       │   │   │   ├── lp_SOS.c
│       │   │   │   ├── lp_SOS.h
│       │   │   │   ├── lp_bit.h
│       │   │   │   ├── lp_crash.c
│       │   │   │   ├── lp_crash.h
│       │   │   │   ├── lp_explicit.h
│       │   │   │   ├── lp_fortify.h
│       │   │   │   ├── lp_lib.c
│       │   │   │   ├── lp_lib.h
│       │   │   │   ├── lp_matrix.c
│       │   │   │   ├── lp_matrix.h
│       │   │   │   ├── lp_mipbb.c
│       │   │   │   ├── lp_mipbb.h
│       │   │   │   ├── lp_params.c
│       │   │   │   ├── lp_presolve.c
│       │   │   │   ├── lp_presolve.h
│       │   │   │   ├── lp_price.c
│       │   │   │   ├── lp_price.h
│       │   │   │   ├── lp_pricePSE.c
│       │   │   │   ├── lp_pricePSE.h
│       │   │   │   ├── lp_report.c
│       │   │   │   ├── lp_report.h
│       │   │   │   ├── lp_rlp.c
│       │   │   │   ├── lp_rlp.h
│       │   │   │   ├── lp_rlp.l
│       │   │   │   ├── lp_rlp.y
│       │   │   │   ├── lp_scale.c
│       │   │   │   ├── lp_scale.h
│       │   │   │   ├── lp_simplex.c
│       │   │   │   ├── lp_simplex.h
│       │   │   │   ├── lp_solve.def
│       │   │   │   ├── lp_types.h
│       │   │   │   ├── lp_utils.c
│       │   │   │   ├── lp_utils.h
│       │   │   │   ├── lp_wlp.c
│       │   │   │   ├── lp_wlp.h
│       │   │   │   ├── lpkit.h
│       │   │   │   ├── lpsolve.h
│       │   │   │   ├── shared/
│       │   │   │   │   ├── commonlib.c
│       │   │   │   │   ├── commonlib.h
│       │   │   │   │   ├── mmio.c
│       │   │   │   │   ├── mmio.h
│       │   │   │   │   ├── myblas.c
│       │   │   │   │   └── myblas.h
│       │   │   │   ├── ufortify.h
│       │   │   │   ├── yacc_read.c
│       │   │   │   └── yacc_read.h
│       │   │   └── patchgen/
│       │   │       ├── ILP.h
│       │   │       ├── PatchParam.h
│       │   │       ├── PatchVertexTag.h
│       │   │       ├── PatchVertexTraits.h
│       │   │       ├── Pattern.h
│       │   │       ├── Pattern_2_0.h
│       │   │       ├── Pattern_2_1.h
│       │   │       ├── Pattern_3_0.h
│       │   │       ├── Pattern_3_1.h
│       │   │       ├── Pattern_3_2.h
│       │   │       ├── Pattern_3_3.h
│       │   │       ├── Pattern_4_0.h
│       │   │       ├── Pattern_4_1.h
│       │   │       ├── Pattern_4_2.h
│       │   │       ├── Pattern_4_3.h
│       │   │       ├── Pattern_4_4.h
│       │   │       ├── Pattern_5_0.h
│       │   │       ├── Pattern_5_1.h
│       │   │       ├── Pattern_5_2.h
│       │   │       ├── Pattern_5_3.h
│       │   │       ├── Pattern_5_4.h
│       │   │       ├── Pattern_6_0.h
│       │   │       ├── Pattern_6_1.h
│       │   │       ├── Pattern_6_2.h
│       │   │       ├── Pattern_6_3.h
│       │   │       ├── Pattern_all.h
│       │   │       ├── Permutation.h
│       │   │       ├── add_padding.h
│       │   │       ├── adjust_parameter.cpp
│       │   │       ├── decl.h
│       │   │       ├── generate_subtopology.h
│       │   │       ├── generate_topology.h
│       │   │       ├── get_boundary_geometry.cpp
│       │   │       ├── get_constraint_matrix.cpp
│       │   │       ├── get_constraint_rhs.cpp
│       │   │       ├── get_default_parameter.cpp
│       │   │       ├── get_param_str.cpp
│       │   │       ├── get_variable.cpp
│       │   │       ├── get_variable_indicators.cpp
│       │   │       └── switch_pattern.cpp
│       │   └── patterns.pri
│       ├── quadretopology/
│       │   ├── includes/
│       │   │   ├── qr_charts.cpp
│       │   │   ├── qr_charts.h
│       │   │   ├── qr_convert.cpp
│       │   │   ├── qr_convert.h
│       │   │   ├── qr_ilp.cpp
│       │   │   ├── qr_ilp.h
│       │   │   ├── qr_mapping.cpp
│       │   │   ├── qr_mapping.h
│       │   │   ├── qr_parameters.h
│       │   │   ├── qr_patterns.cpp
│       │   │   ├── qr_patterns.h
│       │   │   ├── qr_utils.cpp
│       │   │   └── qr_utils.h
│       │   ├── quadretopology.cpp
│       │   └── quadretopology.h
│       └── quadretopology.pri
├── quadwild/
│   ├── basic_setup.txt
│   ├── basic_setup_mechanical.txt
│   ├── basic_setup_organic.txt
│   ├── functions.cpp
│   ├── functions.h
│   ├── quadwild.cpp
│   ├── quadwild.pro
│   ├── quadwild_mechanical.command
│   └── quadwild_organic.command
└── scripts/
    ├── organize_folders_300_mechanical.command
    └── organize_folders_300_organic.command

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitignore
================================================
# Prerequisites
*.d

# Compiled Object files
*.slo
*.lo
*.o

# Precompiled Headers
*.gch
*.pch

# Compiled Dynamic libraries
*.so
*.dylib
*.dll
*.dylib

# Fortran module files
*.mod
*.smod

# Compiled Static libraries
*.lai
*.la
*.a
*.lib

# Executables
*.exe
*.out
*.app

# Qt creator
*.pro.user
*.qmake.stash

# Build
*Makefile
*build*
*Build*
*build/*
*Build/*


================================================
FILE: .gitmodules
================================================
[submodule "libs/vcglib"]
	path = libs/vcglib
	url = ../../cnr-isti-vclab/vcglib
[submodule "libs/xfield_tracer"]
	path = libs/xfield_tracer
	url = https://github.com/nicopietroni/xfield_tracer


================================================
FILE: LICENSE
================================================
                    GNU GENERAL PUBLIC LICENSE
                       Version 3, 29 June 2007

 Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

                            Preamble

  The GNU General Public License is a free, copyleft license for
software and other kinds of works.

  The licenses for most software and other practical works are designed
to take away your freedom to share and change the works.  By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users.  We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors.  You can apply it to
your programs, too.

  When we speak of free software, we are referring to freedom, not
price.  Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.

  To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights.  Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.

  For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received.  You must make sure that they, too, receive
or can get the source code.  And you must show them these terms so they
know their rights.

  Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.

  For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software.  For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.

  Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so.  This is fundamentally incompatible with the aim of
protecting users' freedom to change the software.  The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable.  Therefore, we
have designed this version of the GPL to prohibit the practice for those
products.  If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.

  Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary.  To prevent this, the GPL assures that
patents cannot be used to render the program non-free.

  The precise terms and conditions for copying, distribution and
modification follow.

                       TERMS AND CONDITIONS

  0. Definitions.

  "This License" refers to version 3 of the GNU General Public License.

  "Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.

  "The Program" refers to any copyrightable work licensed under this
License.  Each licensee is addressed as "you".  "Licensees" and
"recipients" may be individuals or organizations.

  To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy.  The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.

  A "covered work" means either the unmodified Program or a work based
on the Program.

  To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy.  Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.

  To "convey" a work means any kind of propagation that enables other
parties to make or receive copies.  Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.

  An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License.  If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.

  1. Source Code.

  The "source code" for a work means the preferred form of the work
for making modifications to it.  "Object code" means any non-source
form of a work.

  A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.

  The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form.  A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.

  The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities.  However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work.  For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.

  The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.

  The Corresponding Source for a work in source code form is that
same work.

  2. Basic Permissions.

  All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met.  This License explicitly affirms your unlimited
permission to run the unmodified Program.  The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work.  This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.

  You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force.  You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright.  Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.

  Conveying under any other circumstances is permitted solely under
the conditions stated below.  Sublicensing is not allowed; section 10
makes it unnecessary.

  3. Protecting Users' Legal Rights From Anti-Circumvention Law.

  No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.

  When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.

  4. Conveying Verbatim Copies.

  You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.

  You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.

  5. Conveying Modified Source Versions.

  You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:

    a) The work must carry prominent notices stating that you modified
    it, and giving a relevant date.

    b) The work must carry prominent notices stating that it is
    released under this License and any conditions added under section
    7.  This requirement modifies the requirement in section 4 to
    "keep intact all notices".

    c) You must license the entire work, as a whole, under this
    License to anyone who comes into possession of a copy.  This
    License will therefore apply, along with any applicable section 7
    additional terms, to the whole of the work, and all its parts,
    regardless of how they are packaged.  This License gives no
    permission to license the work in any other way, but it does not
    invalidate such permission if you have separately received it.

    d) If the work has interactive user interfaces, each must display
    Appropriate Legal Notices; however, if the Program has interactive
    interfaces that do not display Appropriate Legal Notices, your
    work need not make them do so.

  A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit.  Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.

  6. Conveying Non-Source Forms.

  You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:

    a) Convey the object code in, or embodied in, a physical product
    (including a physical distribution medium), accompanied by the
    Corresponding Source fixed on a durable physical medium
    customarily used for software interchange.

    b) Convey the object code in, or embodied in, a physical product
    (including a physical distribution medium), accompanied by a
    written offer, valid for at least three years and valid for as
    long as you offer spare parts or customer support for that product
    model, to give anyone who possesses the object code either (1) a
    copy of the Corresponding Source for all the software in the
    product that is covered by this License, on a durable physical
    medium customarily used for software interchange, for a price no
    more than your reasonable cost of physically performing this
    conveying of source, or (2) access to copy the
    Corresponding Source from a network server at no charge.

    c) Convey individual copies of the object code with a copy of the
    written offer to provide the Corresponding Source.  This
    alternative is allowed only occasionally and noncommercially, and
    only if you received the object code with such an offer, in accord
    with subsection 6b.

    d) Convey the object code by offering access from a designated
    place (gratis or for a charge), and offer equivalent access to the
    Corresponding Source in the same way through the same place at no
    further charge.  You need not require recipients to copy the
    Corresponding Source along with the object code.  If the place to
    copy the object code is a network server, the Corresponding Source
    may be on a different server (operated by you or a third party)
    that supports equivalent copying facilities, provided you maintain
    clear directions next to the object code saying where to find the
    Corresponding Source.  Regardless of what server hosts the
    Corresponding Source, you remain obligated to ensure that it is
    available for as long as needed to satisfy these requirements.

    e) Convey the object code using peer-to-peer transmission, provided
    you inform other peers where the object code and Corresponding
    Source of the work are being offered to the general public at no
    charge under subsection 6d.

  A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.

  A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling.  In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage.  For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product.  A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.

  "Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source.  The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.

  If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information.  But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).

  The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed.  Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.

  Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.

  7. Additional Terms.

  "Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law.  If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.

  When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it.  (Additional permissions may be written to require their own
removal in certain cases when you modify the work.)  You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.

  Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:

    a) Disclaiming warranty or limiting liability differently from the
    terms of sections 15 and 16 of this License; or

    b) Requiring preservation of specified reasonable legal notices or
    author attributions in that material or in the Appropriate Legal
    Notices displayed by works containing it; or

    c) Prohibiting misrepresentation of the origin of that material, or
    requiring that modified versions of such material be marked in
    reasonable ways as different from the original version; or

    d) Limiting the use for publicity purposes of names of licensors or
    authors of the material; or

    e) Declining to grant rights under trademark law for use of some
    trade names, trademarks, or service marks; or

    f) Requiring indemnification of licensors and authors of that
    material by anyone who conveys the material (or modified versions of
    it) with contractual assumptions of liability to the recipient, for
    any liability that these contractual assumptions directly impose on
    those licensors and authors.

  All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10.  If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term.  If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.

  If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.

  Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.

  8. Termination.

  You may not propagate or modify a covered work except as expressly
provided under this License.  Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).

  However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.

  Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.

  Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License.  If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.

  9. Acceptance Not Required for Having Copies.

  You are not required to accept this License in order to receive or
run a copy of the Program.  Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance.  However,
nothing other than this License grants you permission to propagate or
modify any covered work.  These actions infringe copyright if you do
not accept this License.  Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.

  10. Automatic Licensing of Downstream Recipients.

  Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License.  You are not responsible
for enforcing compliance by third parties with this License.

  An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations.  If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.

  You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License.  For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.

  11. Patents.

  A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based.  The
work thus licensed is called the contributor's "contributor version".

  A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version.  For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.

  Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.

  In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement).  To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.

  If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients.  "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.

  If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.

  A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License.  You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.

  Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.

  12. No Surrender of Others' Freedom.

  If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all.  For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.

  13. Use with the GNU Affero General Public License.

  Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work.  The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.

  14. Revised Versions of this License.

  The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time.  Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.

  Each version is given a distinguishing version number.  If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation.  If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.

  If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.

  Later license versions may give you additional or different
permissions.  However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.

  15. Disclaimer of Warranty.

  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  16. Limitation of Liability.

  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.

  17. Interpretation of Sections 15 and 16.

  If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.

                     END OF TERMS AND CONDITIONS

            How to Apply These Terms to Your New Programs

  If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.

  To do so, attach the following notices to the program.  It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.

    <one line to give the program's name and a brief idea of what it does.>
    Copyright (C) <year>  <name of author>

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.

Also add information on how to contact you by electronic and paper mail.

  If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:

    <program>  Copyright (C) <year>  <name of author>
    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
    This is free software, and you are welcome to redistribute it
    under certain conditions; type `show c' for details.

The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License.  Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".

  You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<http://www.gnu.org/licenses/>.

  The GNU General Public License does not permit incorporating your program
into proprietary programs.  If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library.  If this is what you want to do, use the GNU Lesser General
Public License instead of this License.  But first, please read
<http://www.gnu.org/philosophy/why-not-lgpl.html>.


================================================
FILE: README.md
================================================
# Reliable Feature-Line Driven Quad-Remeshing

[Nico Pietroni](www.nicopietroni.com), Stefano Nuvoli, 
[Thomas Alderighi](http://vcg.isti.cnr.it/~alderighi/), [Paolo Cignoni](http://vcg.isti.cnr.it/~cignoni/), [Marco Tarini](https://tarini.di.unimi.it/)<br/>
*SIGGRAPH 2021*<br/>

![alt text](teaser.jpg)

## Abstract
We present a new algorithm for the semi-regular quadrangulation of an input surface, driven by its line features, such as sharp creases. We define a perfectly feature-aligned cross-field and a coarse layout of polygonal-shaped patches where we strictly ensure that all the feature-lines are represented as patch boundaries. To be able to consistently do so, we allow non-quadrilateral patches and T-junctions in the layout; the key is the ability to constrain the layout so that it still admits a globally consistent, T-junction-free, and pure-quad internal tessellation of its patches. This requires the insertion of additional irregular-vertices inside patches, but the regularity of the final- mesh is safeguarded by optimizing for both their number and for their reciprocal alignment. In total, our method guarantees the reproduction of feature-lines by construction, while still producing good quality, isometric, pure-quad, conforming meshes, making it an ideal candidate for CAD models. Moreover, the method is fully automatic, requiring no user intervention, and remarkably reliable, requiring little assumptions on the input mesh, as we demonstrate by batch processing the entire Thingi10K repository, with less than 0.5% of the attempted cases failing to produce a usable mesh.

Website: [https://www.quadmesh.cloud/](https://www.quadmesh.cloud/)<br />
DOI: [10.1145/3450626.3459941](https://doi.org/10.1145/3450626.3459941) ACM Transactions on Graphics (SIGGRAPH), 2021

**BibTex**
```
@article{10.1145/3450626.3459941,
author = {Pietroni, Nico and Nuvoli, Stefano and Alderighi, Thomas and Cignoni, Paolo and Tarini, Marco},
title = {Reliable Feature-Line Driven Quad-Remeshing},
year = {2021},
issue_date = {August 2021},
publisher = {Association for Computing Machinery},
address = {New York, NY, USA},
volume = {40},
number = {4},
issn = {0730-0301},
url = {https://doi.org/10.1145/3450626.3459941},
doi = {10.1145/3450626.3459941},
abstract = {We present a new algorithm for the semi-regular quadrangulation of an input surface, driven by its line features, such as sharp creases. We define a perfectly feature-aligned cross-field and a coarse layout of polygonal-shaped patches where we strictly ensure that all the feature-lines are represented as patch boundaries. To be able to consistently do so, we allow non-quadrilateral patches and T-junctions in the layout; the key is the ability to constrain the layout so that it still admits a globally consistent, T-junction-free, and pure-quad internal tessellation of its patches. This requires the insertion of additional irregular-vertices inside patches, but the regularity of the final-mesh is safeguarded by optimizing for both their number and for their reciprocal alignment. In total, our method guarantees the reproduction of feature-lines by construction, while still producing good quality, isometric, pure-quad, conforming meshes, making it an ideal candidate for CAD models. Moreover, the method is fully automatic, requiring no user intervention, and remarkably reliable, requiring little assumptions on the input mesh, as we demonstrate by batch processing the entire Thingi10K repository, with less than 0.5% of the attempted cases failing to produce a usable mesh.},
journal = {ACM Trans. Graph.},
month = {jul},
articleno = {155},
numpages = {17},
keywords = {geometry processing, quad-meshing, modelling}
}
```

### Download
```bash
git clone --recursive https://github.com/nicopietroni/quadwild
```

### Build
Install the libraries boost and gurobi. 
In Ubuntu you can install boost easily with the following terminal commands:
```
apt-get install libboost-dev
```
Open the file libs/libs.pri and set the paths of the requested libraries and the gurobi parameters:
```
#External libraries
BOOST_PATH          = /usr/include/boost/
GUROBI_PATH         = /opt/gurobi950/linux64/
GUROBI_COMPILER     = gurobi_g++5.2
GUROBI_LIB          = gurobi95
```

<br/>

If you do not need CoMISo, you can simply remove the define `COMISO_FIELD` in the file libs.pri:
```
#DEFINES += COMISO_FIELD
```
However, for organic meshes, we suggest to abilitate CoMISo. You need to compile it along with its dependencies (BLAS):
```
apt install libblas-dev
cd quadwild/libs/CoMISo
mkdir build
cd build
cmake ..
make
```

<br/>

You can now compile the project quadwild/quadwild.pro with qmake or QtCreator.

In case you have technical issues or building problems, please write to [stefano.nuvoli@gmail.com](mailto:stefano.nuvoli@gmail.com) or [nico.pietroni@uts.edu.au](mailto:nico.pietroni@uts.edu.au).

### Run
The package is composed of the main command-line quad-remesher (quadwild) and three different components (field_computation, field_tracing, quad_from_patches) that perform different steps of the pipeline.

---

#### quadwild
This project has no visual interface and can be used via command-line. This can be helpful to batch run entire datasets of models. To run the project, once builded, execute the following terminal command:
```
./quadwild <mesh> [.txt setup file] [.rosy file] [.sharp file]
```
The command takes as input a mesh and three optional configuration files:

- **`<mesh>`**: filename of the input triangle mesh. **The mesh can be either an obj or a ply.**
   
- **`.txt setup file` (optional):** The txt setup file contains the parameters in the pipeline. By default, the executable loads the file basic_setup.txt and two other examples are included: basic_setup_mechanical.txt and basic_setup_organic.txt. Any setup parameter can be specified to control the output result. The setup file has the following fields:
```
do_remesh 1 		  //remesh (1) or not (0) the input mesh
sharp_feature_thr 35      //the dihedral angle of sharp features (-1 no features)
alpha 0.02                //regularity vs isometry of the final tessellation. Close to zero -> more regular, Close to 1 -> more singularity are inserted
scaleFact 1               //the scale of the final quadrangulation (the bigger the bigger the quads)
```

- **`.rosy file` (optional)**: This optional file contains parameters for the field computation of the field.
```
fn              //number of faces of the mesh
4               //directions of the field (always 4 for a cross-field)
x0 y0 z0        //XYZ directions of one vector of the cross-field of the first face
...
xn yn zn        //XYZ directions of one vector of the cross-field of the n-th face
```

- **`.sharp file` (optional)**: This optional file contains the informations of the sharp features. Note that, in the pipeline, border edges are considered sharp features by default.
```
sn                //number of sharp features
t0 f0 e0          //for each sharp edge: the first integer is 0 if the edge is concave 1 if convex, then the face and the index of the sharp edge
...
tn fn en          //nth sharp edge
```

The output of quadwild consists of several files:
- **The output smooth quadrangulation (suffix quadrangulation_smooth.obj).**
- The output quadrangulation before being smoothed (suffix quadrangulation.obj).
- Other files:
  - The re-meshed triangulated mesh (suffix rem.obj), the relative field and the sharp features automatically computed (.rosy and .sharp files as above).
  - The mesh decomposed after the tracing (suffix rem_p0.obj).
  - The patch decomposition (.patch file) contains the patch index for each triangle of the rem_p0 mesh.
  - The files .corners, .c_feature, .feature files that contain per patch information (respectively corners of each patch, corners to be fixed and feature lines on the patches).

---

#### field_computation. 
The program can be used either with a GUI or by command line (useful to batch run entire datasets of models).
```
./field_computation <mesh> [.txt setup file] [.rosy file][.sharp file] [batch]
```
The "batch" option makes the program run in the shell without the GUI. The setup file includes additional parameters. By default, the executable loads the file basic_setup.txt.

---

#### field_tracing
This program is used to trace fields and split the mesh into patches.
```
./field_tracing <mesh> [.txt setup file] [batch]
```
It requires having a .rosy and a .sharp file (with the same name of the mesh file). The "batch" option makes the program run in the shell without the GUI. The setup file includes additional parameters. By default, the executable loads the file basic_setup.txt.

---

#### quad_from_patches
This program is used to obtain a quadrangulation from a patch decomposition.
```
./quad_from_patches <mesh> [.txt setup file]
```
It requires to have in the same folder a .corners, .c_feature, .feature files (with the same name of the mesh file). The setup file includes additional parameters. By default, the executable loads the file basic_setup.txt.

## Note
The code has slightly changed and the results could be different from the ones showed in the paper.

## License
[GPL3](LICENSE) licensed
([FAQ](https://www.gnu.org/licenses/gpl-faq.html))





================================================
FILE: components/field_computation/AutoRemesher.h
================================================
/***************************************************************************/
/* Copyright(C) 2021


The authors of

Reliable Feature-Line Driven Quad-Remeshing
Siggraph 2021


 All rights reserved.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <https://www.gnu.org/licenses/>.
****************************************************************************/

#ifndef AUTOREMESHER_H
#define AUTOREMESHER_H

#include <vcg/complex/allocate.h>
#include <vcg/complex/algorithms/clean.h>
#include <vcg/complex/algorithms/crease_cut.h>
#include <vcg/complex/algorithms/isotropic_remeshing.h>

#include <vcg/complex/append.h>
#include <vcg/space/index/grid_static_ptr.h>
#include <vcg/complex/algorithms/closest.h>
#include <vcg/complex/algorithms/local_optimization/tri_edge_collapse.h>

#include <memory>

template <class Mesh>
class AutoRemesher {

    typedef typename Mesh::ScalarType ScalarType;
    typedef typename Mesh::CoordType  CoordType;

    typedef typename Mesh::VertexType    VertexType;
    typedef typename Mesh::VertexPointer VertexPointer;

    typedef typename Mesh::FaceType    FaceType;
    typedef typename Mesh::FacePointer FacePointer;

    typedef vcg::GridStaticPtr<FaceType, ScalarType> StaticGrid;

    static ScalarType computeAR(Mesh & m, const double perc = 0.05)
    {
        vcg::tri::ForEachFace(m, [] (FaceType & f) {
            f.Q() = vcg::QualityRadii(f.cP(0), f.cP(1), f.cP(2));
            //std::cout<<"Q:"<<f.Q()<<std::endl;
        });

        vcg::Histogram<ScalarType> hist;
        vcg::tri::Stat<Mesh>::ComputePerFaceQualityHistogram(m, hist);

        //		    return hist.MinV();
        return hist.Percentile(perc);
    }
public:

    static bool collapseSurvivingMicroEdges(Mesh & m, const ScalarType qualityThr = 0.001, const ScalarType edgeRatio = 0.025, const int maxIter = 2)
    {
        typedef vcg::tri::BasicVertexPair<VertexType> VertexPair;
        typedef vcg::tri::EdgeCollapser<Mesh, VertexPair> Collapser;
        typedef typename vcg::face::Pos<FaceType> PosType;

        bool done=false;
        int count = 0; int iter = 0;
        do
        {
            count = 0;
            vcg::tri::UpdateTopology<Mesh>::VertexFace(m);

            for(auto fi=m.face.begin(); fi!=m.face.end(); ++fi)
                if(!(*fi).IsD())
                {
                    if(vcg::QualityRadii(fi->cP(0), fi->cP(1), fi->cP(2)) <= qualityThr)
                    {
                        ScalarType minEdgeLength = std::numeric_limits<ScalarType>::max();
                        ScalarType maxEdgeLength = 0;

                        int minEdge = 0, maxEdge = 0;
                        for(auto i=0; i<3; ++i)
                        {
                            const ScalarType len = vcg::Distance(fi->cP0(i), fi->cP1(i)) ;
                            if (len < minEdgeLength)
                            {
                                minEdge = i;
                                minEdgeLength = len;
                            }
                            if (len > maxEdgeLength)
                            {
                                maxEdge = i;
                                maxEdgeLength = len;
                            }
                        }

                        //                        if (minEdgeLength <= maxEdgeLength * edgeRatio)
                        //                        {
                        PosType pi(&*fi, minEdge);

                        //                        //select the vertices
                        //                        (*fi).V(0)->SetS();
                        //                        (*fi).V(1)->SetS();
                        //                        (*fi).V(2)->SetS();
                        //                        (*fi).FFp(minEdge)->V(0)->SetS();
                        //                        (*fi).FFp(minEdge)->V(1)->SetS();
                        //                        (*fi).FFp(minEdge)->V(2)->SetS();

                        VertexPair  bp = VertexPair(fi->V0(minEdge), fi->V1(minEdge));
                        CoordType mp = (fi->cP0(minEdge) + fi->cP1(minEdge))/2.f;

                        if(Collapser::LinkConditions(bp))
                        {
                            Collapser::Do(m, bp, mp, true);
                            done=true;
                        }
                        //                        }
                    }
                }
        } while (count > 0 && ++iter < maxIter);
        return done;
    }
private:
    static void MakeEdgeSelConsistent(Mesh & m)
    {
        for (size_t i=0;i<m.face.size();i++)
            for (size_t j=0;j<3;j++)
            {
                if (m.face[i].IsFaceEdgeS(j))
                {
                    if (vcg::face::IsBorder(m.face[i],j))continue;
                    FaceType *f1=m.face[i].FFp(j);
                    int EdgeI=m.face[i].FFi(j);
                    f1->SetFaceEdgeS(EdgeI);
                }
            }
    }

    static void SelectAllBoundaryV(Mesh & m)
    {
        for (size_t i=0;i<m.face.size();i++)
            for (size_t j=0;j<3;j++)
            {
                if (vcg::face::IsBorder(m.face[i],j)){
                    m.face[i].V0(j)->SetS();
                    m.face[i].V1(j)->SetS();
                    continue;
                }

                if (m.face[i].IsFaceEdgeS(j))
                {
                    m.face[i].V0(j)->SetS();
                    m.face[i].V1(j)->SetS();
                    FaceType *f1=m.face[i].FFp(j);
                    int EdgeI=m.face[i].FFi(j);
                    f1->SetFaceEdgeS(EdgeI);
                }
            }
    }

public:

    typedef struct Params {
        int iterations = 15;
        ScalarType targetAspect = 0.35;
        int targetDeltaFN = 5000;
        int initialApproximateFN = 20000;
        ScalarType creaseAngle = 25.;
        //bool userSelectedCreases = true;
        bool surfDistCheck = true;
        int erodeDilate = 0;
        ScalarType minAdaptiveMult = 0.3;
        ScalarType maxAdaptiveMult = 3;
        ScalarType minAspectRatioThr = 0.05;
        ScalarType targetEdgeLen = 0;
    } Params;

    static size_t openNonManifoldEdges(Mesh & m, const ScalarType moveThreshold,
                                       bool debugMesg=false)
    {

        vcg::tri::UpdateTopology<Mesh>::FaceFace(m);
        vcg::tri::UpdateTopology<Mesh>::VertexFace(m);
        vcg::tri::UpdateFlags<Mesh>::VertexClearV(m);

        if (debugMesg)
        {
            std::cout << "Opening non-manifold edges...";
            std::cout << "mesh starts with " << vcg::tri::Clean<Mesh>::CountNonManifoldEdgeFF(m) << std::endl;
        }

        typedef typename vcg::face::Pos<FaceType> PosType;

        typedef std::vector<std::vector<std::pair<size_t, size_t> > > VertexToFaceGroups;

        std::unordered_map<size_t,VertexToFaceGroups> map;

        vcg::tri::ForEachFacePos(m, [&](PosType & pos) {

            if (!pos.V()->IsV() && !pos.IsManifold())
            {
                pos.V()->SetV();

                std::vector<FacePointer> faceVec;
                std::vector<int> vIndices;
                vcg::face::VFStarVF(pos.V(), faceVec, vIndices);

                std::unordered_set<size_t> inserted;

                VertexToFaceGroups faceGroups;

                for (size_t i = 0; i < faceVec.size(); ++i)
                {
                    const FacePointer fp = faceVec[i];

                    size_t fidx = vcg::tri::Index(m, fp);
                    if (inserted.count(fidx) != 0)
                        continue;

                    std::vector<std::pair<size_t, size_t> > manifoldGroup;

                    PosType cyclePos(fp, vIndices[i]);
                    PosType beginPos = cyclePos;
                    //get to a non manifold edge...
                    do
                    {
                        manifoldGroup.push_back(std::make_pair(vcg::tri::Index(m, cyclePos.F()), cyclePos.VInd()));
                        inserted.insert(vcg::tri::Index(m, cyclePos.F()));
                        cyclePos.F()->Q() = faceGroups.size() + 1;
                        cyclePos.FlipE();
                        cyclePos.NextF();
                    } while (cyclePos.IsManifold() && !cyclePos.IsBorder() && cyclePos != beginPos);

                    if (cyclePos != beginPos)
                    {
                        cyclePos = beginPos;
                        cyclePos.NextF();

                        while (cyclePos.IsManifold() && !cyclePos.IsBorder())
                        {
                            manifoldGroup.push_back(std::make_pair(vcg::tri::Index(m, cyclePos.F()), cyclePos.VInd()));
                            inserted.insert(vcg::tri::Index(m, cyclePos.F()));
                            cyclePos.F()->Q() = faceGroups.size() + 1;
                            cyclePos.FlipE();
                            cyclePos.NextF();
                        }
                    }

                    faceGroups.push_back(manifoldGroup);
                }

                map[vcg::tri::Index(m, pos.V())] = faceGroups;
            }
        });

        for (auto group : map)
        {
            const size_t vert = group.first;
            const VertexToFaceGroups & faceGroups = group.second;
            if (faceGroups.size() > 1)
            {
                auto vp = vcg::tri::Allocator<Mesh>::AddVertices(m, faceGroups.size()-1);

                for (size_t i = 1; i < faceGroups.size(); ++i)
                {
                    vp->P() = m.vert[vert].cP();

                    CoordType delta(0, 0, 0);
                    for (std::pair<size_t,size_t> faceVertIndex : faceGroups[i])
                    {
                        m.face[faceVertIndex.first].V(faceVertIndex.second) = &*vp;
                        delta += vcg::Barycenter(m.face[faceVertIndex.first]) - vp->cP();
                    }
                    delta /= faceGroups[i].size();
                    vp->P() += delta * moveThreshold;
                    ++vp;
                }
            }
        }

        return map.size();
    }


//    static ScalarType ExpectedEdgeL(const Mesh & m,
//                                    size_t TargetSph=2000,
//                                    size_t MinFaces=15000)
//    {
//        ScalarType Vol=m.Volume();
//        ScalarType A=m.Area();
//        ScalarType FaceA=A/TargetSph;
//        //radius and volume of a sphere
//        ScalarType KScale=(Vol/A)*(3/(m.bbox.Diag()/3.4));
//        //ScalarType KScale=(A*(m.bbox.Diag()/3.4))/(3*Vol);
//        ScalarType IdealA=FaceA*KScale;
//        ScalarType IdealL0=sqrt(IdealA*2.309);
//        ScalarType IdealL1=sqrt((A*2.309)/MinFaces);
//        std::cout<<"KScale"<<KScale<<std::endl;
//        //exit(0);
//        return std::max(IdealL0,IdealL1);
//    }

    static ScalarType ExpectedEdgeL(const Mesh & m,
                                    size_t TargetSph=2000,
                                    size_t MinFaces=10000)
    {
        ScalarType Vol=m.Volume();
        ScalarType A=m.Area();
        ScalarType FaceA=A/TargetSph;
        //radius and volume of a sphere
        ScalarType Sphericity=(pow(M_PI,1.0/3.0)*pow((6.0*Vol),2.0/3.0))/A;
        ScalarType KScale=pow(Sphericity,2);
        //ScalarType KScale=(A*(m.bbox.Diag()/3.4))/(3*Vol);
        //ScalarType KScale=(pow(A,1.5))/(3*Vol);
        ScalarType IdealA=FaceA*KScale;
        ScalarType IdealL0=sqrt(IdealA*2.309);
        ScalarType IdealL1=sqrt((A*2.309)/MinFaces);
        std::cout<<"KScale "<<KScale<<std::endl;
        //exit(0);
        return std::min(IdealL0,IdealL1);
        //return IdealL0;
    }

    //remove sharp features that have been removed after remesher or clean that were still marked
    static void UpdateCoherentSharp(Mesh & m, Params & par)
    {
        if (par.creaseAngle<=0)return;
        m.UpdateDataStructures();
        //std::set<std::pair<CoordType,CoordType> > Features;
        for (size_t i=0;i<m.face.size();i++)
            for (size_t j=0;j<3;j++)
            {
                if (!m.face[i].IsFaceEdgeS(j))continue;

                ScalarType angle = DihedralAngleRad(m.face[i],j);
                if(fabs(angle)<vcg::math::ToRad(par.creaseAngle))
                {
                    if (vcg::face::IsBorder(m.face[i],j))continue;
                    m.face[i].ClearFaceEdgeS(j);
                    m.face[i].FFp(j)->ClearFaceEdgeS(m.face[i].FFi(j));
                }
            }

        m.InitFeatureCoordsTable();
        //MeshPrepocess<Mesh>::InitSharpFeatures(mesh,BPar.sharp_feature_thr,BPar.feature_erode_dilate);

    }

    //for big meshes disabling par.surfDistCheck provides big perf improvements, sacrificing result accuracy
    //static std::shared_ptr<Mesh> Remesh (Mesh & m, Params & par)
    static void RemeshAdapt(Mesh & m, Params & par)
    {

        vcg::tri::UpdateBounding<Mesh>::Box(m);
        vcg::tri::UpdateTopology<Mesh>::FaceFace(m);

        typename vcg::tri::IsotropicRemeshing<Mesh>::Params para;
        para.iter = par.iterations;
        //para.SetFeatureAngleDeg(par.creaseAngle);

        para.splitFlag    = true;
        para.swapFlag     = true;
        para.collapseFlag = true;
        para.smoothFlag   = true;
        para.projectFlag  = true;
        para.selectedOnly = false;
        para.adapt=false;
        para.aspectRatioThr = 0.3;
        para.cleanFlag = true;

        para.minAdaptiveMult = par.minAdaptiveMult;
        para.maxAdaptiveMult = par.maxAdaptiveMult;

        para.maxSurfDist = m.bbox.Diag() / 2500.;
        para.surfDistCheck = m.FN() < 400000 ? par.surfDistCheck : false;
        para.userSelectedCreases = true;



        ScalarType edgeL = ExpectedEdgeL(m);//,par.initialApproximateFN);//std::sqrt(2.309 * vcg::tri::Stat<Mesh>::ComputeMeshArea(m) / par.initialApproximateFN);//m.bbox.Diag() * 0.025;//std::sqrt(vcg::tri::Stat<Mesh>::ComputeMeshArea(m) * 2 / par.initialApproximateFN);

        if (par.targetEdgeLen == 0)
            par.targetEdgeLen = edgeL;

        para.SetTargetLen(par.targetEdgeLen);


        std::cout << "Before Remeshing - faces: " << m.FN() << " quality: " <<  computeAR(m) << std::endl;
        vcg::tri::IsotropicRemeshing<Mesh>::Do(m, para);
        std::cout << "After Iter 0 - faces: " << m.FN() << " quality: " <<  computeAR(m) << std::endl;


        const ScalarType thr = 0.01;

        //vcg::tri::UpdateSelection<Mesh>::VertexClear(m);
        collapseSurvivingMicroEdges(m,thr);

        UpdateCoherentSharp(m,par);

        para.adapt = true;
        para.smoothFlag   = true;
        para.maxSurfDist = m.bbox.Diag() / 2500.;

        vcg::tri::IsotropicRemeshing<Mesh>::Do(m, para);

        m.UpdateDataStructures();

        std::cout << "After Iter 1 - faces: " << m.FN() << " quality: " <<  computeAR(m) << std::endl;

//        MakeEdgeSelConsistent(m);
//        SelectAllBoundaryV(m);
//        typename Local_Param_Smooth<Mesh>::UVSmoothParam UVP;
//        UVP.FixSel=true;

//        Local_Param_Smooth<Mesh>::Smooth(m,UVP);
//        m.UpdateDataStructures();
//        std::cout << "After Iter 2 - faces: " << m.FN() << " quality: " <<  computeAR(m) << std::endl;

    }


    //    static int SelectToRemesh(Mesh & m,ScalarType minR=0.2,size_t dilate=3)
    //    {
    //        vcg::tri::UpdateSelection<Mesh>::FaceClear(m);
    //        for (size_t i=0;i<m.face.size();i++)
    //        {
    //            m.face[i].Q() = vcg::QualityRadii(m.face[i].cP(0),
    //                                              m.face[i].cP(1),
    //                                              m.face[i].cP(2));
    //            if (m.face[i].Q()<minR)
    //                m.face[i].SetS();
    //       }
    ////        //then check the borders
    ////        vcg::tri::UpdateSelection<Mesh>::VertexClear(m);
    ////        for (size_t i=0;i<m.face.size();i++)
    ////            for (size_t j=0;j<3;j++)
    ////            {
    ////                if (!m.face[i].IsFaceEdgeS(j))continue;
    ////                m.face[i].V0(j)->SetS();
    ////                m.face[i].V1(j)->SetS();
    ////            }
    ////        for (size_t i=0;i<m.face.size();i++)
    ////            for (size_t j=0;j<3;j++)
    ////            {
    ////                if (m.face[i].IsFaceEdgeS(j))continue;
    ////                if (!m.face[i].V0(j)->IsS())continue;
    ////                if (!m.face[i].V1(j)->IsS())continue;
    ////                m.face[i].SetS();
    ////            }

    //        vcg::tri::UpdateSelection<Mesh>::VertexClear(m);
    //        for (size_t s=0;s<dilate;s++)
    //        {
    //            vcg::tri::UpdateSelection<Mesh>::VertexFromFaceLoose(m);
    //            vcg::tri::UpdateSelection<Mesh>::FaceFromVertexLoose(m);
    //        }

    //        int numS=0;
    //        for (size_t i=0;i<m.face.size();i++)
    //            if (m.face[i].IsS())numS++;
    //        return (numS);
    //    }

    static int NumBadTris(Mesh & m,ScalarType minR=0.2,size_t dilate=3)
    {
        int numS=0;
        for (size_t i=0;i<m.face.size();i++)
        {
            m.face[i].Q() = vcg::QualityRadii(m.face[i].cP(0),
                                              m.face[i].cP(1),
                                              m.face[i].cP(2));
            if (m.face[i].Q()<minR)
                numS++;
        }
        return (numS);
    }

    //    static void Remesh2(Mesh & m, Params & par)
    //    {

    //        vcg::tri::UpdateBounding<Mesh>::Box(m);
    //        vcg::tri::UpdateTopology<Mesh>::FaceFace(m);

    //        typename vcg::tri::IsotropicRemeshing<Mesh>::Params para;
    //        para.iter = par.iterations;
    //        //para.SetFeatureAngleDeg(par.creaseAngle);

    //        para.splitFlag    = true;
    //        para.swapFlag     = true;
    //        para.collapseFlag = true;
    //        para.smoothFlag   = false;
    //        para.projectFlag  = false;
    //        para.selectedOnly = false;
    //        para.adapt=false;
    //        para.aspectRatioThr = 0.3;
    //        para.cleanFlag = true;
    //        para.minAdaptiveMult = par.minAdaptiveMult;
    //        para.maxAdaptiveMult = par.maxAdaptiveMult;

    //        para.maxSurfDist = m.bbox.Diag() / 2500.;
    //        para.surfDistCheck = m.FN() < 400000 ? par.surfDistCheck : false;
    //        para.userSelectedCreases = true;

    //        ScalarType edgeL = ExpectedEdgeL(m);

    //        //if (par.targetEdgeLen == 0)
    //        par.targetEdgeLen = edgeL;

    //        para.SetTargetLen(par.targetEdgeLen);

    //        std::cout << "Before Remeshing - faces: " << m.FN() << " quality: " <<  computeAR(m) << std::endl;
    //        vcg::tri::IsotropicRemeshing<Mesh>::Do(m, para);
    //        std::cout << "After Iter 0 - faces: " << m.FN() << " quality: " <<  computeAR(m) << std::endl;


    //        MakeEdgeSelConsistent(m);
    //        SelectAllBoundaryV(m);
    //        typename Local_Param_Smooth<Mesh>::UVSmoothParam UVP;
    //        UVP.FixSel=true;

    //        Local_Param_Smooth<Mesh>::Smooth(m,UVP);


    //        //const ScalarType thr = 0.01;
    //        collapseSurvivingMicroEdges(m, 0.01);

    //        m.UpdateDataStructures();

    //        int MaxS=3;
    //        int currS=0;
    //        int NumSel0=0;
    //        int NumSel1=0;
    //        do{
    //            //             MakeEdgeSelConsistent(m);
    //            //             SelectAllBoundaryV(m);
    //            //             typename Local_Param_Smooth<Mesh>::UVSmoothParam UVP;
    //            //             UVP.FixSel=true;

    //            //Local_Param_Smooth<Mesh>::Smooth(m,UVP);

    //            NumSel0=NumBadTris(m);
    //            std::cout << "Not Nice 0: " <<  NumSel0 << " Faces"<<std::endl;


    //            if (NumSel0>0)
    //            {
    //                par.targetEdgeLen*=0.75;
    //                para.SetTargetLen(par.targetEdgeLen);
    //                para.maxSurfDist = m.bbox.Diag() / 2500.;
    //                //para.selectedOnly=true;
    //                para.adapt=true;
    //                para.smoothFlag= true;
    //                vcg::tri::IsotropicRemeshing<Mesh>::Do(m, para);
    //                collapseSurvivingMicroEdges(m, 0.01);
    //                m.UpdateDataStructures();
    //            }

    //            NumSel1=NumBadTris(m);
    //            std::cout << "Not Nice 1: " <<  NumSel1 << " Faces"<<std::endl;
    //            currS++;

    //        }while ((NumSel1<NumSel0) && (currS<MaxS));
    //        //        std::cout << "Performed: " <<  currS << " Steps"<<std::endl;
    //        std::cout << "After Iter Adapt - faces: " << m.FN() << " quality: " <<  computeAR(m) << std::endl;

    //    }

    //    //for big meshes disabling par.surfDistCheck provides big perf improvements, sacrificing result accuracy
    //    static void Remesh (Mesh & m, Params & par)
    //    {

    //        m.UpdateDataStructures();

    ////        vcg::tri::UpdateBounding<Mesh>::Box(m);
    ////        vcg::tri::UpdateTopology<Mesh>::FaceFace(m);

    //        typename vcg::tri::IsotropicRemeshing<Mesh>::Params para;
    //        para.iter = par.iterations;
    //        para.SetFeatureAngleDeg(par.creaseAngle);
    //        para.splitFlag    = true;
    //        para.swapFlag     = true;
    //        para.collapseFlag = true;
    //        para.smoothFlag   = false;
    //        para.projectFlag  = true;
    //        para.selectedOnly = false;
    //        para.adapt=false;
    //        para.aspectRatioThr = 0.3;
    //        para.cleanFlag = false;

    //        para.minAdaptiveMult = par.minAdaptiveMult;
    //        para.maxAdaptiveMult = par.maxAdaptiveMult;

    //        para.maxSurfDist = m.bbox.Diag() / 2500.;
    //        para.surfDistCheck = m.FN() < 400000 ? par.surfDistCheck : false;
    //        para.userSelectedCreases = true;//par.userSelectedCreases;

    ////        ScalarType prevFN = m.FN();
    ////        ScalarType deltaFN = m.FN();

    ////        ScalarType aspect = 0;
    ////        ScalarType edgeLow  = 0;
    //        ScalarType edgeL = std::sqrt(2.309 * vcg::tri::Stat<Mesh>::ComputeMeshArea(m) / par.initialApproximateFN);//m.bbox.Diag() * 0.025;//std::sqrt(vcg::tri::Stat<Mesh>::ComputeMeshArea(m) * 2 / par.initialApproximateFN);

    //        if (par.targetEdgeLen == 0)
    //            par.targetEdgeLen = edgeL;

    ////        ScalarType edgeHigh = edgeL * 2.;

    ////        para.SetTargetLen(par.targetEdgeLen);

    ////        vcg::tri::Append<Mesh, Mesh>::MeshCopy(*ret, m);

    ////        ret->UpdateDataStructures();

    ////        ret->InitSharpFeatures(par.creaseAngle);
    ////        ret->ErodeDilate(par.erodeDilate);


    //        vcg::tri::IsotropicRemeshing<Mesh>::Do(m, para);
    //        std::cout << "Iter: "<<  0 << " faces: " <<m.FN() << " quality: " <<  computeAR(m) << std::endl;


    //        //const ScalarType thr = 0.01;
    //        collapseSurvivingMicroEdges(m, 0.01);

    ////        ret->UpdateDataStructures();
    ////        ret->InitSharpFeatures(par.creaseAngle);
    ////        ret->ErodeDilate(par.erodeDilate);
    ////        MP.InitSharpFeatures(par.creaseAngle);
    ////        MP.ErodeDilate(par.erodeDilate);

    //        //para.SetTargetLen(par.targetEdgeLen * 0.85);
    //        para.adapt = true;
    //        para.smoothFlag   = true;
    //        para.maxSurfDist = m.bbox.Diag() / 2500.;

    //        vcg::tri::IsotropicRemeshing<Mesh>::Do(m, para);
    //        auto quality = computeAR(m);
    //        std::cout << "Iter: "<<  1 << " faces: " << m.FN() << " quality: " << quality << std::endl;

    //        std::cerr << "[REMESH] RemeshedFaces:" << m.FN() << std::endl;
    //        std::cerr << "[REMESH] RemeshedAspect:" << computeAR(m) << std::endl;

    //        const ScalarType thr = 0.01;
    //        collapseSurvivingMicroEdges(m, thr);

    //        vcg::tri::UpdateSelection<Mesh>::FaceClear(m);
    //        vcg::tri::UpdateTopology<Mesh>::FaceFace(m);

    //        vcg::tri::ForEachFace(m, [&] (FaceType & f) {
    //            if (!f.IsD() && vcg::QualityRadii(f.cP(0), f.cP(1), f.cP(2)) <= 0.01)
    //                f.SetS();
    //        });

    //        int zeroArea = 0;
    //        do
    //        {
    //            zeroArea = vcg::tri::Clean<Mesh>::RemoveZeroAreaFace(m);
    //            std::cout << "removed " << zeroArea << " zero area faces " << std::endl;
    //        }
    //        while(zeroArea != 0);

    //        vcg::tri::UpdateSelection<Mesh>::FaceDilate(m);
    //        //		vcg::tri::UpdateSelection<Mesh>::FaceDilate(*ret);
    //        //		vcg::tri::Smooth<Mesh>::VertexCoordLaplacian(*ret, 15, true);

    //        vcg::tri::Allocator<Mesh>::CompactEveryVector(m);
    //        std::cout << "[REMESH] remeshing ends.." << std::endl;
    //        //return ret;
    //    }
};

#endif // AUTOREMESHER_H


================================================
FILE: components/field_computation/AutoRemesherMio.h
================================================
        typedef vcg::tri::EdgeCollapser<Mesh, VertexPair> Collapser;


================================================
FILE: components/field_computation/basic_setup.txt
================================================
do_remesh 1
remesh_iterations 15
remesh_target_aspect_ratio 0.35
remesh_termination_delta 10000
sharp_feature_thr 35
sharp_feature_erode_dilate 4
alpha 0.3


================================================
FILE: components/field_computation/basic_setup_mechanical.txt
================================================
do_remesh 1
remesh_iterations 15
remesh_target_aspect_ratio 0.35
remesh_termination_delta 10000
sharp_feature_thr 35
sharp_feature_erode_dilate 4
alpha 0.3


================================================
FILE: components/field_computation/basic_setup_organic.txt
================================================
do_remesh 1
remesh_iterations 15
remesh_target_aspect_ratio 0.35
remesh_termination_delta 10000
sharp_feature_thr -1
sharp_feature_erode_dilate 4
alpha 0.3


================================================
FILE: components/field_computation/compute_field_300_mechanical.command
================================================
#!/bin/bash

for i in ../../test/300/Mechanical/*.obj; do


    complete_file="${i}"
    only_file_name=$(basename $complete_file)
    dir_name="${complete_file%.*}"
    dir_name+="/"


    new_filename="${dir_name}""${only_file_name}"

    ./field_computation "${new_filename}" basic_setup_mechanical.txt batch
done


================================================
FILE: components/field_computation/compute_field_300_organic.command
================================================
#!/bin/bash

for i in ../../test/300/Organic/*.obj; do


    complete_file="${i}"
    only_file_name=$(basename $complete_file)
    dir_name="${complete_file%.*}"
    dir_name+="/"


    new_filename="${dir_name}""${only_file_name}"

    ./field_computation "${new_filename}" basic_setup_organic.txt batch
done


================================================
FILE: components/field_computation/field_computation.pro
================================================
############################ PROJECT FILES ############################

include(../../libs/libs.pri)

HEADERS = \
    glwidget.h \
    triangle_mesh_type.h

SOURCES = \
    glwidget.cpp \
    main.cpp

HEADERS += \
    fields/field_smoother.h \
    fields/n_polyvector.h \
    fields/polyroots.h
SOURCES += \
    fields/n_polyvector.cpp \
    fields/polyroots.cpp

DEFINES += GLEW_STATIC
DEFINES += INCLUDE_TEMPLATES


############################ TARGET ############################

#App config
TARGET = field_computation

TEMPLATE = app
CONFIG += qt
CONFIG += c++11
CONFIG -= app_bundle

QT += core gui opengl xml widgets

#Debug/release optimization flags
CONFIG(debug, debug|release){
    DEFINES += DEBUG
}
CONFIG(release, debug|release){
    DEFINES -= DEBUG
    #just uncomment next line if you want to ignore asserts and got a more optimized binary
    CONFIG += FINAL_RELEASE
}

#Final release optimization flag
FINAL_RELEASE {
    unix:!macx{
        QMAKE_CXXFLAGS_RELEASE -= -g -O2
        QMAKE_CXXFLAGS += -O3 -DNDEBUG
    }
}

macx {
    QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.13
    QMAKE_MAC_SDK = macosx10.13
}


############################ INCLUDES ############################

#vcglib
INCLUDEPATH += $$VCGLIB_PATH
SOURCES += $$VCGLIB_PATH/wrap/ply/plylib.cpp
SOURCES += $$VCGLIB_PATH/wrap/gui/trackball.cpp
SOURCES += $$VCGLIB_PATH/wrap/gui/trackmode.cpp
SOURCES += $$VCGLIB_PATH/wrap/qt/anttweakbarMapperNew.cpp

#eigen
INCLUDEPATH += $$EIGEN_PATH

#libigl
INCLUDEPATH += $$LIBIGL_PATH/include
HEADERS += \
    $$LIBIGL_PATH/include/igl/principal_curvature.h
SOURCES += \
    $$LIBIGL_PATH/include/igl/principal_curvature.cpp

#AntTweakBar
INCLUDEPATH += $$ANTTWEAKBAR_PATH/include
LIBS += -L$$ANTTWEAKBAR_PATH/lib -lAntTweakBar
win32{ # Awful problem with windows..
    DEFINES += NOMINMAX
}

#glew
unix:!mac{
    LIBS += -lGLU
}
INCLUDEPATH += $$GLEW_PATH/include
SOURCES += $$GLEW_PATH/src/glew.c

contains(DEFINES, COMISO_FIELD) {
    #comiso
    LIBS += -L$$COMISO_PATH/build/Build/lib/CoMISo/ -lCoMISo
    INCLUDEPATH += $$COMISO_PATH/..

    #gmm (we have to use comiso gmm)
    INCLUDEPATH += $$GMM_PATH/include

    HEADERS += \
        $$LIBIGL_PATH/include/igl/copyleft/comiso/nrosy.h
    SOURCES += \
        $$LIBIGL_PATH/include/igl/copyleft/comiso/nrosy.cpp
}

# Mac specific Config required to avoid to make application bundles
macx{
#    CONFIG -= app_bundle
#    LIBS += $$ANTTWEAKBAR_PATH/lib/libAntTweakBar.dylib
    QMAKE_POST_LINK +="cp -P ../../../code/lib/AntTweakBar1.16/lib/libAntTweakBar.dylib . ; "
    QMAKE_POST_LINK +="install_name_tool -change ../lib/libAntTweakBar.dylib ./libAntTweakBar.dylib $$TARGET ; "
#    QMAKE_POST_LINK +="install_name_tool -change libCoMISo.dylib $$COMISO_PATH/build/Build/lib/CoMISo/libCoMISo.dylib $$TARGET ;"
    DEPENDPATH += .
#    DEPENDPATH += $$COMISO_PATH/build/Build/lib/CoMISo
#    INCLUDEPATH += $$COMISO_PATH/build/Build/lib/CoMISo
}

#Parallel computation
unix:!mac {
    QMAKE_CXXFLAGS += -fopenmp
    LIBS += -fopenmp
}
#macx{
#    QMAKE_CXXFLAGS += -Xpreprocessor -fopenmp -lomp -I/usr/local/include
#    QMAKE_LFLAGS += -lomp
#    LIBS += -L /usr/local/lib /usr/local/lib/libomp.dylib
#}

win32{
    DEFINES += NOMINMAX # Awful problem with windows..
    DEFINES *= _USE_MATH_DEFINES
    DEFINES *= _SCL_SECURE_NO_DEPRECATE
    QMAKE_CXXFLAGS *= /bigobj
}


================================================
FILE: components/field_computation/fields/field_smoother.h
================================================
/****************************************************************************
* VCGLib                                                            o o     *
* Visual and Computer Graphics Library                            o     o   *
*                                                                _   O  _   *
* Copyright(C) 2014                                                \/)\/    *
* Visual Computing Lab                                            /\/|      *
* ISTI - Italian National Research Council                           |      *
*                                                                    \      *
* All rights reserved.                                                      *
*                                                                           *
* This program is free software; you can redistribute it and/or modify      *
* it under the terms of the GNU General Public License as published by      *
* the Free Software Foundation; either version 2 of the License, or         *
* (at your option) any later version.                                       *
*                                                                           *
* This program is distributed in the hope that it will be useful,           *
* but WITHOUT ANY WARRANTY; without even the implied warranty of            *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the             *
* GNU General Public License (http://www.gnu.org/licenses/gpl.txt)          *
* for more details.                                                         *
*                                                                           *
****************************************************************************/

#ifndef QR_FIELD_SMOOTHER_H
#define QR_FIELD_SMOOTHER_H

//eigen stuff
#include <Eigen/Sparse>

//vcg stuff
#include <vcg/complex/algorithms/update/color.h>
#include <vcg/complex/algorithms/update/quality.h>
#include <vcg/complex/algorithms/parametrization/tangent_field_operators.h>
#include <vcg/complex/algorithms/mesh_to_matrix.h>

//igl related stuff

#include "fields/n_polyvector.h"
#include <igl/principal_curvature.h>
#include <igl/igl_inline.h>

#ifdef COMISO_FIELD
#include <igl/copyleft/comiso/nrosy.h>
#endif

namespace vcg {
namespace tri {

enum SmoothMethod{SMMiq,SMNPoly,SMIterative};

template <class MeshType>
class FieldSmoother
{
    typedef typename MeshType::FaceType FaceType;
    typedef typename MeshType::VertexType VertexType;
    typedef typename MeshType::ScalarType ScalarType;
    typedef typename MeshType::CoordType CoordType;


    static void InitQualityByAnisotropyDir(MeshType &mesh)
    {
        ScalarType minV=0.00001;
        std::vector<ScalarType> QVal;
        for (size_t i=0;i<mesh.vert.size();i++)
        {
            ScalarType N1=fabs(mesh.vert[i].K1());
            ScalarType N2=fabs(mesh.vert[i].K2());
            QVal.push_back(N1);
            QVal.push_back(N2);
        }

        std::sort(QVal.begin(),QVal.end());
        int percUp=int(floor(QVal.size()*0.95+0.5));
        ScalarType trimUp=QVal[percUp];

        for (size_t i=0;i<mesh.vert.size();i++)
        {
            ScalarType N1=(mesh.vert[i].K1());
            ScalarType N2=(mesh.vert[i].K2());

            ScalarType NMax=std::max(N1,N2)/trimUp;
            ScalarType NMin=std::min(N1,N2)/trimUp;

            if (NMax>1)NMax=1;
            if (NMax<-1)NMax=-1;

            if (NMin>1)NMin=1;
            if (NMin<-1)NMin=-1;

            ScalarType CurvAni=(NMax-NMin)/2;
            CurvAni=std::max(CurvAni,minV);
            mesh.vert[i].Q()=CurvAni;
        }
        vcg::tri::UpdateQuality<MeshType>::FaceFromVertex(mesh);
    }

    static void SetEdgeDirection(FaceType *f,int edge)
    {
        CoordType dir=f->P0(edge)-f->P1(edge);
        dir.Normalize();
        ScalarType prod1=fabs(dir*f->PD1());
        ScalarType prod2=fabs(dir*f->PD2());
        if (prod1>prod2)
        {
            f->PD1()=dir;
            f->PD2()=f->N()^dir;
        }else
        {
            f->PD2()=dir;
            f->PD1()=f->N()^dir;
        }
    }

    static void AddSharpEdgesConstraints(MeshType & mesh,
                                         const ScalarType &thr=0.2)
    {
        for (size_t i=0;i<mesh.face.size();i++)
            for (int j=0;j<mesh.face[i].VN();j++)
            {
                FaceType *f0=&mesh.face[i];
                FaceType *f1=f0->FFp(j);
                if (f0==f1)continue;
                CoordType N0=f0->N();
                CoordType N1=f1->N();
                if ((N0*N1)>thr)continue;
                SetEdgeDirection(f0,j);
                f0->SetS();
            }
    }

    static void AddBorderConstraints(MeshType & mesh)
    {
        for (size_t i=0;i<mesh.face.size();i++)
            for (int j=0;j<mesh.face[i].VN();j++)
            {
                FaceType *f0=&mesh.face[i];
                FaceType *f1=f0->FFp(j);
                assert(f1!=NULL);
                if (f0!=f1)continue;
                SetEdgeDirection(f0,j);
                f0->SetS();
            }
    }

    static void AddCurvatureConstraints(MeshType & mesh,const ScalarType &thr=0.5)
    {
        for (size_t i=0;i<mesh.face.size();i++)
            if (mesh.face[i].Q()>thr)mesh.face[i].SetS();
    }

    //hard constraints have selected face
    static void CollectHardConstraints( MeshType & mesh,
                                        Eigen::VectorXi &HardI,
                                        Eigen::MatrixXd &HardD,
                                        SmoothMethod SMethod,
                                        int Ndir)
    {
        //count number of hard constraints
        int numS=vcg::tri::UpdateSelection<MeshType>::FaceCount(mesh);
        HardI=Eigen::MatrixXi(numS,1);
        if ((Ndir==2)||(SMethod==SMMiq))
            HardD=Eigen::MatrixXd(numS,3);
        else
            HardD=Eigen::MatrixXd(numS,6);
        //then update them
        int curr_index=0;
        for (size_t i=0;i<mesh.face.size();i++)
        {
            if (!mesh.face[i].IsS())continue;

            CoordType dir=mesh.face[i].PD1();
            dir.Normalize();

            HardI(curr_index,0)=i;

            HardD(curr_index,0)=dir.X();
            HardD(curr_index,1)=dir.Y();
            HardD(curr_index,2)=dir.Z();
            if ((Ndir==4)&&(SMethod==SMNPoly))
            {
                dir=mesh.face[i].PD2();
                HardD(curr_index,3)=dir.X();
                HardD(curr_index,4)=dir.Y();
                HardD(curr_index,5)=dir.Z();
            }
            curr_index++;

        }

    }

    //hard constraints have selected face
    static void CollectSoftConstraints( MeshType & mesh,
                                        Eigen::VectorXi &SoftI,
                                        Eigen::MatrixXd &SoftD,
                                        Eigen::VectorXd &SoftW)
    {
        //count number of soft constraints
        int numS=vcg::tri::UpdateSelection<MeshType>::FaceCount(mesh);
        numS=mesh.fn-numS;
        //allocate eigen matrix
        SoftI=Eigen::MatrixXi(numS,1);
        SoftD=Eigen::MatrixXd(numS,3);
        SoftW=Eigen::MatrixXd(numS,1);

        //then update them
        int curr_index=0;
        for (size_t i=0;i<mesh.face.size();i++)
        {
            if (mesh.face[i].IsS())continue;

            CoordType dir=mesh.face[i].PD1();
            dir.Normalize();

            SoftI(curr_index,0)=i;

            SoftD(curr_index,0)=dir.X();
            SoftD(curr_index,1)=dir.Y();
            SoftD(curr_index,2)=dir.Z();

            SoftW(curr_index,0)=mesh.face[i].Q();
            curr_index++;

        }
    }

    static void SmoothMIQ(MeshType &mesh,
                          Eigen::VectorXi &HardI,   //hard constraints index
                          Eigen::MatrixXd &HardD,   //hard directions
                          Eigen::VectorXi &SoftI,   //soft constraints
                          Eigen::MatrixXd &SoftD,   //weight of soft constraints
                          Eigen::VectorXd &SoftW,   //soft directions
                          ScalarType alpha_soft,
                          int Ndir)
    {
#ifdef COMISO_FIELD
        assert((Ndir==2)||(Ndir==4));
        Eigen::MatrixXi F;
        typename vcg::tri::MeshToMatrix<MeshType>::MatrixXm Vf;

        MeshToMatrix<MeshType>::GetTriMeshData(mesh,F,Vf);
        Eigen::MatrixXd V = Vf.template cast<double>();

        Eigen::MatrixXd output_field;
        Eigen::VectorXd output_sing;

        igl::copyleft::comiso::nrosy(V,F,HardI,HardD,SoftI,SoftW,SoftD,Ndir,alpha_soft,output_field,output_sing);

        //finally update the principal directions
        for (size_t i=0;i<mesh.face.size();i++)
        {
            CoordType dir1;
            dir1[0]=output_field(i,0);
            dir1[1]=output_field(i,1);
            dir1[2]=output_field(i,2);

            dir1.Normalize();
            CoordType dir2=mesh.face[i].N()^dir1;
            dir2.Normalize();

            ScalarType Norm1=mesh.face[i].PD1().Norm();
            ScalarType Norm2=mesh.face[i].PD2().Norm();

            mesh.face[i].PD1()=dir1*Norm1;
            mesh.face[i].PD2()=dir2*Norm2;
        }
#else
        (void)mesh;
        (void)HardI;
        (void)HardD;
        (void)SoftI;
        (void)SoftD;
        (void)SoftW;
        (void)alpha_soft;
        (void)Ndir;
        assert(0);
#endif
    }

    static void SmoothNPoly(MeshType &mesh,
                            Eigen::VectorXi &HardI,   //hard constraints index
                            Eigen::MatrixXd &HardD,   //hard directions
                            int Ndir)
    {
        assert((Ndir==2)||(Ndir==4));

        Eigen::MatrixXi F;
        typename vcg::tri::MeshToMatrix<MeshType>::MatrixXm Vf;
        //Eigen::MatrixXd V;

        MeshToMatrix<MeshType>::GetTriMeshData(mesh,F,Vf);
        //then cast
        Eigen::MatrixXd V = Vf.template cast<double>();
        Eigen::MatrixXd output_field;
        //Eigen::VectorXd output_sing;

        igl::n_polyvector(V,F,HardI,HardD,output_field);

        //finally update the principal directions
        for (size_t i=0;i<mesh.face.size();i++)
        {
            CoordType dir1;
            dir1[0]=output_field(i,0);
            dir1[1]=output_field(i,1);
            dir1[2]=output_field(i,2);

            dir1.Normalize();
            CoordType dir2=mesh.face[i].N()^dir1;
            dir2.Normalize();

            ScalarType Norm1=mesh.face[i].PD1().Norm();
            ScalarType Norm2=mesh.face[i].PD2().Norm();

            mesh.face[i].PD1()=dir1*Norm1;
            mesh.face[i].PD2()=dir2*Norm2;
        }
    }

    static void PickRandomDir(MeshType &mesh,
                              int &indexF,
                              CoordType &Dir)
    {
        indexF=rand()%mesh.fn;
        FaceType *currF=&mesh.face[indexF];
        CoordType dirN=currF->N();
        dirN.Normalize();
        Dir=CoordType(1,0,0);
        if (fabs(Dir*dirN)>0.9)
            Dir=CoordType(0,1,0);
        if (fabs(Dir*dirN)>0.9)
            Dir=CoordType(0,0,1);

        Dir=dirN^Dir;
        Dir.Normalize();
    }


    static void GloballyOrient(MeshType &mesh)
    {
        vcg::tri::CrossField<MeshType>::MakeDirectionFaceCoherent(mesh,true);
    }



public:

    struct SmoothParam
    {
        //the 90° rotation independence while smoothing the direction field
        int Ndir;
        //the weight of curvature if doing the smoothing keeping the field close to the original one
        ScalarType alpha_curv;
        //align the field to border or not
        bool align_borders;
        //threshold to consider some edge as sharp feature and to use as hard constraint (0, not use)
        ScalarType sharp_thr;
        //threshold to consider some edge as high curvature anisotropyand to use as hard constraint (0, not use)
        ScalarType curv_thr;
        //the method used to smooth MIQ or "Designing N-PolyVector Fields with Complex Polynomials"
        SmoothMethod SmoothM;
        //the number of faces of the ring used ot esteem the curvature
        int curvRing;
        //this are additional hard constraints
        std::vector<std::pair<int,CoordType> > AddConstr;
        //the number of iteration in case of iterative method
        size_t IteN;

        SmoothParam()
        {
            Ndir=4;
            curvRing=3;
            alpha_curv=0.0;
            align_borders=false;
            SmoothM=SMMiq;
            sharp_thr=0.0;
            curv_thr=0.4;
            IteN=20;
        }

    };

    static void InitByCurvature(MeshType & mesh,
                                unsigned Nring,
                                bool UpdateFaces=true)
    {

        tri::RequirePerVertexCurvatureDir(mesh);

        Eigen::MatrixXi F;
        typename vcg::tri::MeshToMatrix<MeshType>::MatrixXm Vf;

        Eigen::MatrixXd PD1,PD2,PV1,PV2;
        MeshToMatrix<MeshType>::GetTriMeshData(mesh,F,Vf);
        Eigen::MatrixXd V = Vf.template cast<double>();

        igl::principal_curvature(V,F,PD1,PD2,PV1,PV2,Nring,true);

        //then copy curvature per vertex
        for (size_t i=0;i<mesh.vert.size();i++)
        {
            mesh.vert[i].PD1()=CoordType(PD1(i,0),PD1(i,1),PD1(i,2));
            mesh.vert[i].PD2()=CoordType(PD2(i,0),PD2(i,1),PD2(i,2));
            mesh.vert[i].K1()=PV1(i,0);
            mesh.vert[i].K2()=PV2(i,0);
        }
        if (!UpdateFaces)return;
        vcg::tri::CrossField<MeshType>::SetFaceCrossVectorFromVert(mesh);
        InitQualityByAnisotropyDir(mesh);
    }

private:

    static void SelectConstraints(MeshType &mesh,SmoothParam &SParam)
    {
        //clear all selected faces
        vcg::tri::UpdateFlags<MeshType>::FaceClear(mesh);

        //add curvature hard constraints
        //ScalarType Ratio=mesh.bbox.Diag()*0.01;

        if (SParam.curv_thr>0)
            AddCurvatureConstraints(mesh,SParam.curv_thr);///Ratio);

        //add alignment to sharp features
        if (SParam.sharp_thr>0)
            AddSharpEdgesConstraints(mesh,SParam.sharp_thr);

        //add border constraints
        if (SParam.align_borders)
            AddBorderConstraints(mesh);

        //aff final constraints
        for (size_t i=0;i<SParam.AddConstr.size();i++)
        {
            int indexF=SParam.AddConstr[i].first;
            CoordType dir=SParam.AddConstr[i].second;
            mesh.face[indexF].PD1()=dir;
            mesh.face[indexF].PD2()=mesh.face[indexF].N()^dir;
            mesh.face[indexF].PD1().Normalize();
            mesh.face[indexF].PD2().Normalize();
            mesh.face[indexF].SetS();
        }
    }

    static void SmoothDirectionsIGL(MeshType &mesh,
                                    int Ndir,
                                    SmoothMethod SMethod=SMNPoly,
                                    bool HardAsS=true,
                                    ScalarType alphaSoft=0)
    {

        assert((SMethod==SMNPoly)||(SMethod==SMMiq));

        Eigen::VectorXi HardI;   //hard constraints
        Eigen::MatrixXd HardD;   //hard directions
        Eigen::VectorXi SoftI;   //soft constraints
        Eigen::VectorXd SoftW;   //weight of soft constraints
        Eigen::MatrixXd SoftD;   //soft directions

        if (HardAsS)
            CollectHardConstraints(mesh,HardI,HardD,SMethod,Ndir);

        //collect soft constraints , miw only one that allows for soft constraints
        if ((alphaSoft>0)&&(SMethod==SMMiq))
            CollectSoftConstraints(mesh,SoftI,SoftD,SoftW);

        //add some hard constraints if are not present
        int numC=3;
        if ((SoftI.rows()==0)&&(HardI.rows()==0))
        {
            printf("Add Forced Constraints \n");
            fflush(stdout);
            HardI=Eigen::MatrixXi(numC,1);

            if ((Ndir==4)&&(SMethod==SMNPoly))
                HardD=Eigen::MatrixXd(numC,6);
            else
                HardD=Eigen::MatrixXd(numC,3);

            for (int i=0;i<numC;i++)
            {
                CoordType Dir;
                int indexF;
                PickRandomDir(mesh,indexF,Dir);

                HardI(i,0)=indexF;
                HardD(i,0)=Dir.X();
                HardD(i,1)=Dir.Y();
                HardD(i,2)=Dir.Z();

                if ((Ndir==4)&&(SMethod==SMNPoly))
                {
                    CoordType Dir1=mesh.face[indexF].N()^Dir;
                    Dir1.Normalize();
                    HardD(i,3)=Dir1.X();
                    HardD(i,4)=Dir1.Y();
                    HardD(i,5)=Dir1.Z();
                }
            }
        }

        //finally smooth
        if (SMethod==SMMiq)
            SmoothMIQ(mesh,HardI,HardD,SoftI,SoftD,SoftW,alphaSoft,Ndir);
        else
        {
            assert(SMethod==SMNPoly);
            SmoothNPoly(mesh,HardI,HardD,Ndir);
        }
    }

public:

    static void SmoothDirections(MeshType &mesh,SmoothParam SParam)
    {

        if ((SParam.SmoothM==SMMiq)||(SParam.SmoothM==SMNPoly))
        {
            //        //initialize direction by curvature if needed
            if ((SParam.alpha_curv>0)||
                    (SParam.sharp_thr>0)||
                    (SParam.curv_thr>0))
            {
                InitByCurvature(mesh,SParam.curvRing);
                SelectConstraints(mesh,SParam);
            }
            else
            {
                SelectConstraints(mesh,SParam);
                vcg::tri::CrossField<MeshType>::PropagateFromSelF(mesh);
            }
            SmoothDirectionsIGL(mesh,SParam.Ndir,SParam.SmoothM,true,SParam.alpha_curv);
        }
        else
        {
            std::cout<<"ITERATIVE"<<std::endl;
            assert(SParam.SmoothM==SMIterative);
            InitByCurvature(mesh,SParam.curvRing);

            if ((SParam.sharp_thr>0)||(SParam.curv_thr>0))
                SelectConstraints(mesh,SParam);

            bool weightByAni=(SParam.alpha_curv>0);
            vcg::tri::CrossField<MeshType>::SmoothIterative(mesh,SParam.Ndir,(int)SParam.IteN,true,false,weightByAni);
        }
    }

};

} // end namespace tri
} // end namespace vcg
#endif // QR_FIELD_SMOOTHER_H


================================================
FILE: components/field_computation/fields/n_polyvector.cpp
================================================
// This file is part of libigl, a simple c++ geometry processing library.
//
// Copyright (C) 2014 Olga Diamanti <olga.diam@gmail.com>
//
// This Source Code Form is subject to the terms of the Mozilla Public License
// v. 2.0. If a copy of the MPL was not distributed with this file, You can
// obtain one at http://mozilla.org/MPL/2.0/.

#include "n_polyvector.h"

#include "igl/LinSpaced.h"
#include "igl/edge_topology.h"
#include "igl/local_basis.h"
#include "igl/nchoosek.h"
#include "igl/slice.h"
#include "igl/igl_inline.h"

#include "polyroots.h"

#include <Eigen/Sparse>

#include <Eigen/Geometry>
#include <iostream>
#include <complex>

namespace igl {
  template <typename DerivedV, typename DerivedF>
  class PolyVectorFieldFinder
  {
  private:
    const Eigen::PlainObjectBase<DerivedV> &V;
    const Eigen::PlainObjectBase<DerivedF> &F; int numF;
    const int n;

    Eigen::MatrixXi EV; int numE;
    Eigen::MatrixXi F2E;
    Eigen::MatrixXi E2F;
    Eigen::VectorXd K;

    Eigen::VectorXi isBorderEdge;
    int numInteriorEdges;
    Eigen::Matrix<int,Eigen::Dynamic,2> E2F_int;
    Eigen::VectorXi indInteriorToFull;
    Eigen::VectorXi indFullToInterior;

    DerivedV B1, B2, FN;

    IGL_INLINE void computek();
    IGL_INLINE void setFieldFromGeneralCoefficients(const  std::vector<Eigen::Matrix<std::complex<typename DerivedV::Scalar>, Eigen::Dynamic,1> > &coeffs,
                                                    std::vector<Eigen::Matrix<typename DerivedV::Scalar, Eigen::Dynamic, 2> > &pv);
    IGL_INLINE void computeCoefficientLaplacian(int n, Eigen::SparseMatrix<std::complex<typename DerivedV::Scalar> > &D);
    IGL_INLINE void getGeneralCoeffConstraints(const Eigen::VectorXi &isConstrained,
                                    const Eigen::Matrix<typename DerivedV::Scalar, Eigen::Dynamic, Eigen::Dynamic> &cfW,
                                    int k,
                                    Eigen::Matrix<std::complex<typename DerivedV::Scalar>, Eigen::Dynamic,1> &Ck);
    IGL_INLINE void precomputeInteriorEdges();


    IGL_INLINE void minQuadWithKnownMini(const Eigen::SparseMatrix<std::complex<typename DerivedV::Scalar> > &Q,
                                         const Eigen::SparseMatrix<std::complex<typename DerivedV::Scalar> > &f,
                                         const Eigen::VectorXi isConstrained,
                                         const Eigen::Matrix<std::complex<typename DerivedV::Scalar>, Eigen::Dynamic, 1> &xknown,
                                         Eigen::Matrix<std::complex<typename DerivedV::Scalar>, Eigen::Dynamic, 1> &x);

  public:
    IGL_INLINE PolyVectorFieldFinder(const Eigen::PlainObjectBase<DerivedV> &_V,
                                     const Eigen::PlainObjectBase<DerivedF> &_F,
                                     const int &_n);
    IGL_INLINE bool solve(const Eigen::VectorXi &isConstrained,
               const Eigen::Matrix<typename DerivedV::Scalar, Eigen::Dynamic, Eigen::Dynamic> &cfW,
               Eigen::Matrix<typename DerivedV::Scalar, Eigen::Dynamic, Eigen::Dynamic> &output);

  };
}

template<typename DerivedV, typename DerivedF>
IGL_INLINE igl::PolyVectorFieldFinder<DerivedV, DerivedF>::
          PolyVectorFieldFinder(const Eigen::PlainObjectBase<DerivedV> &_V,
                                const Eigen::PlainObjectBase<DerivedF> &_F,
                                const int &_n):
V(_V),
F(_F),
numF(_F.rows()),
n(_n)
{

  igl::edge_topology(V,F,EV,F2E,E2F);
  numE = EV.rows();


  precomputeInteriorEdges();

  igl::local_basis(V,F,B1,B2,FN);

  computek();

};


template<typename DerivedV, typename DerivedF>
IGL_INLINE void igl::PolyVectorFieldFinder<DerivedV, DerivedF>::
precomputeInteriorEdges()
{
  // Flag border edges
  numInteriorEdges = 0;
  isBorderEdge.setZero(numE,1);
  indFullToInterior = -1*Eigen::VectorXi::Ones(numE,1);

  for(unsigned i=0; i<numE; ++i)
  {
    if ((E2F(i,0) == -1) || ((E2F(i,1) == -1)))
      isBorderEdge[i] = 1;
      else
      {
        indFullToInterior[i] = numInteriorEdges;
        numInteriorEdges++;
      }
  }

  E2F_int.resize(numInteriorEdges, 2);
  indInteriorToFull.setZero(numInteriorEdges,1);
  int ii = 0;
  for (int k=0; k<numE; ++k)
  {
    if (isBorderEdge[k])
      continue;
    E2F_int.row(ii) = E2F.row(k);
    indInteriorToFull[ii] = k;
    ii++;
  }

}


template<typename DerivedV, typename DerivedF>
IGL_INLINE void igl::PolyVectorFieldFinder<DerivedV, DerivedF>::
minQuadWithKnownMini(const Eigen::SparseMatrix<std::complex<typename DerivedV::Scalar> > &Q,
                          const Eigen::SparseMatrix<std::complex<typename DerivedV::Scalar> > &f,
                     const Eigen::VectorXi isConstrained,
                          const Eigen::Matrix<std::complex<typename DerivedV::Scalar>, Eigen::Dynamic, 1> &xknown,
                          Eigen::Matrix<std::complex<typename DerivedV::Scalar>, Eigen::Dynamic, 1> &x)
{
  int N = Q.rows();

  int nc = xknown.rows();
  Eigen::VectorXi known; known.setZero(nc,1);
  Eigen::VectorXi unknown; unknown.setZero(N-nc,1);

  int indk = 0, indu = 0;
  for (int i = 0; i<N; ++i)
    if (isConstrained[i])
    {
      known[indk] = i;
      indk++;
    }
    else
    {
      unknown[indu] = i;
      indu++;
    }

  Eigen::SparseMatrix<std::complex<typename DerivedV::Scalar> > Quu, Quk;

  igl::slice(Q,unknown, unknown, Quu);
  igl::slice(Q,unknown, known, Quk);


  std::vector<typename Eigen::Triplet<std::complex<typename DerivedV::Scalar> > > tripletList;

  Eigen::SparseMatrix<std::complex<typename DerivedV::Scalar> > fu(N-nc,1);

  igl::slice(f,unknown, Eigen::VectorXi::Zero(1,1), fu);

  Eigen::SparseMatrix<std::complex<typename DerivedV::Scalar> > rhs = (Quk*xknown).sparseView()+.5*fu;

  Eigen::SparseLU< Eigen::SparseMatrix<std::complex<typename DerivedV::Scalar> > > solver;
  solver.compute(-Quu);
  if(solver.info()!=Eigen::Success)
  {
    std::cerr<<"Decomposition failed!"<<std::endl;
    return;
  }
  Eigen::SparseMatrix<std::complex<typename DerivedV::Scalar> >  b  = solver.solve(rhs);
  if(solver.info()!=Eigen::Success)
  {
    std::cerr<<"Solving failed!"<<std::endl;
    return;
  }

  indk = 0, indu = 0;
  x.setZero(N,1);
  for (int i = 0; i<N; ++i)
    if (isConstrained[i])
      x[i] = xknown[indk++];
    else
      x[i] = b.coeff(indu++,0);

}



template<typename DerivedV, typename DerivedF>
IGL_INLINE bool igl::PolyVectorFieldFinder<DerivedV, DerivedF>::
                     solve(const Eigen::VectorXi &isConstrained,
                           const Eigen::Matrix<typename DerivedV::Scalar, Eigen::Dynamic, Eigen::Dynamic> &cfW,
                           Eigen::Matrix<typename DerivedV::Scalar, Eigen::Dynamic, Eigen::Dynamic> &output)
{

  // polynomial is of the form:
  // (-1)^0 z^(2n) +
  // (-1)^1 c[0]z^(2n-2) +
  // (-1)^2 c[1]z^(2n-4) +
  // (-1)^3 c[2]z^(2n-6) +
  // ... +
  // (-1)^n c[n-1]

  std::vector<Eigen::Matrix<std::complex<typename DerivedV::Scalar>, Eigen::Dynamic,1> > coeffs(n,Eigen::Matrix<std::complex<typename DerivedV::Scalar>, Eigen::Dynamic,1>::Zero(numF, 1));

  for (int i =0; i<n; ++i)
  {
    int degree = 2*(i+1);

    Eigen::Matrix<std::complex<typename DerivedV::Scalar>, Eigen::Dynamic,1> Ck;
    getGeneralCoeffConstraints(isConstrained,
                               cfW,
                               i,
                               Ck);

    Eigen::SparseMatrix<std::complex<typename DerivedV::Scalar> > DD;
    computeCoefficientLaplacian(degree, DD);
    Eigen::SparseMatrix<std::complex<typename DerivedV::Scalar> > f; f.resize(numF,1);

    minQuadWithKnownMini(DD, f, isConstrained, Ck, coeffs[i]);
  }

  std::vector<Eigen::Matrix<typename DerivedV::Scalar, Eigen::Dynamic, 2> > pv;
  setFieldFromGeneralCoefficients(coeffs, pv);

  output.setZero(numF,3*n);
  for (int fi=0; fi<numF; ++fi)
  {
    const Eigen::Matrix<typename DerivedV::Scalar, 1, 3> &b1 = B1.row(fi);
    const Eigen::Matrix<typename DerivedV::Scalar, 1, 3> &b2 = B2.row(fi);
    for (int i=0; i<n; ++i)
      output.block(fi,3*i, 1, 3) = pv[i](fi,0)*b1 + pv[i](fi,1)*b2;
  }
  return true;
}

template<typename DerivedV, typename DerivedF>
IGL_INLINE void igl::PolyVectorFieldFinder<DerivedV, DerivedF>::setFieldFromGeneralCoefficients(const  std::vector<Eigen::Matrix<std::complex<typename DerivedV::Scalar>, Eigen::Dynamic,1> > &coeffs,
                                                            std::vector<Eigen::Matrix<typename DerivedV::Scalar, Eigen::Dynamic, 2> > &pv)
{
  pv.assign(n, Eigen::Matrix<typename DerivedV::Scalar, Eigen::Dynamic, 2>::Zero(numF, 2));
  for (int i = 0; i <numF; ++i)
  {

    //    poly coefficients: 1, 0, -Acoeff, 0, Bcoeff
    //    matlab code from roots (given there are no trailing zeros in the polynomial coefficients)
    Eigen::Matrix<std::complex<typename DerivedV::Scalar>, Eigen::Dynamic,1> polyCoeff;
    polyCoeff.setZero(2*n+1,1);
    polyCoeff[0] = 1.;
    int sign = 1;
    for (int k =0; k<n; ++k)
    {
      sign = -sign;
      int degree = 2*(k+1);
      polyCoeff[degree] = (1.*sign)*coeffs[k](i);
    }

    Eigen::Matrix<std::complex<typename DerivedV::Scalar>, Eigen::Dynamic,1> roots;
    igl::polyRoots<std::complex<typename DerivedV::Scalar>, typename DerivedV::Scalar >(polyCoeff,roots);

    Eigen::VectorXi done; done.setZero(2*n,1);

    Eigen::Matrix<std::complex<typename DerivedV::Scalar>, Eigen::Dynamic,1> u(n,1);
    int ind =0;
    for (int k=0; k<2*n; ++k)
    {
      if (done[k])
        continue;
      u[ind] = roots[k];
      done[k] = 1;

      int mini = -1;
      double mind = 1e10;
      for (int l =k+1; l<2*n; ++l)
      {
        double dist = abs(roots[l]+u[ind]);
        if (dist<mind)
        {
          mind = dist;
          mini = l;
        }
      }
      done[mini] = 1;
      ind ++;
    }
    for (int k=0; k<n; ++k)
    {
      pv[k](i,0) = real(u[k]);
      pv[k](i,1) = imag(u[k]);
    }
  }

}


template<typename DerivedV, typename DerivedF>
IGL_INLINE void igl::PolyVectorFieldFinder<DerivedV, DerivedF>::computeCoefficientLaplacian(int n, Eigen::SparseMatrix<std::complex<typename DerivedV::Scalar> > &D)
{
  std::vector<Eigen::Triplet<std::complex<typename DerivedV::Scalar> > > tripletList;

  // For every non-border edge
  for (unsigned eid=0; eid<numE; ++eid)
  {
    if (!isBorderEdge[eid])
    {
      int fid0 = E2F(eid,0);
      int fid1 = E2F(eid,1);

      tripletList.push_back(Eigen::Triplet<std::complex<typename DerivedV::Scalar> >(fid0,
                                           fid0,
                                           std::complex<typename DerivedV::Scalar>(1.)));
      tripletList.push_back(Eigen::Triplet<std::complex<typename DerivedV::Scalar> >(fid1,
                                           fid1,
                                           std::complex<typename DerivedV::Scalar>(1.)));
      tripletList.push_back(Eigen::Triplet<std::complex<typename DerivedV::Scalar> >(fid0,
                                           fid1,
                                                                                     -1.*std::polar(1.,-1.*n*K[eid])));
      tripletList.push_back(Eigen::Triplet<std::complex<typename DerivedV::Scalar> >(fid1,
                                           fid0,
                                                                                     -1.*std::polar(1.,1.*n*K[eid])));

    }
  }
  D.resize(numF,numF);
  D.setFromTriplets(tripletList.begin(), tripletList.end());


}

template<typename DerivedV, typename DerivedF>
IGL_INLINE void igl::PolyVectorFieldFinder<DerivedV, DerivedF>::getGeneralCoeffConstraints(const Eigen::VectorXi &isConstrained,
                                                       const Eigen::Matrix<typename DerivedV::Scalar, Eigen::Dynamic, Eigen::Dynamic> &cfW,
                                                       int k,
                                                       Eigen::Matrix<std::complex<typename DerivedV::Scalar>, Eigen::Dynamic,1> &Ck)
{
  int numConstrained = isConstrained.sum();
  Ck.resize(numConstrained,1);
  int n = cfW.cols()/3;

  Eigen::MatrixXi allCombs;
  {
    Eigen::VectorXi V = igl::LinSpaced<Eigen::VectorXi >(n,0,n-1);
    igl::nchoosek(V,k+1,allCombs);
  }


  int ind = 0;
  for (int fi = 0; fi <numF; ++fi)
  {
    const Eigen::Matrix<typename DerivedV::Scalar, 1, 3> &b1 = B1.row(fi);
    const Eigen::Matrix<typename DerivedV::Scalar, 1, 3> &b2 = B2.row(fi);
    if(isConstrained[fi])
    {
      std::complex<typename DerivedV::Scalar> ck(0);

      for (int j = 0; j < allCombs.rows(); ++j)
      {
        std::complex<typename DerivedV::Scalar> tk(1.);
        //collect products
        for (int i = 0; i < allCombs.cols(); ++i)
        {
          int index = allCombs(j,i);

          const Eigen::Matrix<typename DerivedV::Scalar, 1, 3> &w = cfW.block(fi,3*index,1,3);
          typename DerivedV::Scalar w0 = w.dot(b1);
          typename DerivedV::Scalar w1 = w.dot(b2);
          std::complex<typename DerivedV::Scalar> u(w0,w1);
          tk*= u*u;
        }
        //collect sum
        ck += tk;
      }
      Ck(ind) = ck;
      ind ++;
    }
  }


}

template<typename DerivedV, typename DerivedF>
IGL_INLINE void igl::PolyVectorFieldFinder<DerivedV, DerivedF>::computek()
{
  K.setZero(numE);
  // For every non-border edge
  for (unsigned eid=0; eid<numE; ++eid)
  {
    if (!isBorderEdge[eid])
    {
      int fid0 = E2F(eid,0);
      int fid1 = E2F(eid,1);

      Eigen::Matrix<typename DerivedV::Scalar, 1, 3> N0 = FN.row(fid0);
      Eigen::Matrix<typename DerivedV::Scalar, 1, 3> N1 = FN.row(fid1);

      // find common edge on triangle 0 and 1
      int fid0_vc = -1;
      int fid1_vc = -1;
      for (unsigned i=0;i<3;++i)
      {
        if (F2E(fid0,i) == eid)
          fid0_vc = i;
        if (F2E(fid1,i) == eid)
          fid1_vc = i;
      }
      assert(fid0_vc != -1);
      assert(fid1_vc != -1);

      Eigen::Matrix<typename DerivedV::Scalar, 1, 3> common_edge = V.row(F(fid0,(fid0_vc+1)%3)) - V.row(F(fid0,fid0_vc));
      common_edge.normalize();

      // Map the two triangles in a new space where the common edge is the x axis and the N0 the z axis
      Eigen::Matrix<typename DerivedV::Scalar, 3, 3> P;
      Eigen::Matrix<typename DerivedV::Scalar, 1, 3> o = V.row(F(fid0,fid0_vc));
      Eigen::Matrix<typename DerivedV::Scalar, 1, 3> tmp = -N0.cross(common_edge);
      P << common_edge, tmp, N0;
//      P.transposeInPlace();


      Eigen::Matrix<typename DerivedV::Scalar, 3, 3> V0;
      V0.row(0) = V.row(F(fid0,0)) -o;
      V0.row(1) = V.row(F(fid0,1)) -o;
      V0.row(2) = V.row(F(fid0,2)) -o;

      V0 = (P*V0.transpose()).transpose();

//      assert(V0(0,2) < 1e-10);
//      assert(V0(1,2) < 1e-10);
//      assert(V0(2,2) < 1e-10);

      Eigen::Matrix<typename DerivedV::Scalar, 3, 3> V1;
      V1.row(0) = V.row(F(fid1,0)) -o;
      V1.row(1) = V.row(F(fid1,1)) -o;
      V1.row(2) = V.row(F(fid1,2)) -o;
      V1 = (P*V1.transpose()).transpose();

//      assert(V1(fid1_vc,2) < 10e-10);
//      assert(V1((fid1_vc+1)%3,2) < 10e-10);

      // compute rotation R such that R * N1 = N0
      // i.e. map both triangles to the same plane
      double alpha = -atan2(V1((fid1_vc+2)%3,2),V1((fid1_vc+2)%3,1));

      Eigen::Matrix<typename DerivedV::Scalar, 3, 3> R;
      R << 1,          0,            0,
      0, cos(alpha), -sin(alpha) ,
      0, sin(alpha),  cos(alpha);
      V1 = (R*V1.transpose()).transpose();

//      assert(V1(0,2) < 1e-10);
//      assert(V1(1,2) < 1e-10);
//      assert(V1(2,2) < 1e-10);

      // measure the angle between the reference frames
      // k_ij is the angle between the triangle on the left and the one on the right
      Eigen::Matrix<typename DerivedV::Scalar, 1, 3> ref0 = V0.row(1) - V0.row(0);
      Eigen::Matrix<typename DerivedV::Scalar, 1, 3> ref1 = V1.row(1) - V1.row(0);

      ref0.normalize();
      ref1.normalize();

      double ktemp = atan2(ref1(1),ref1(0)) - atan2(ref0(1),ref0(0));

      // just to be sure, rotate ref0 using angle ktemp...
      Eigen::Matrix<typename DerivedV::Scalar, 2, 2> R2;
      R2 << cos(ktemp), -sin(ktemp), sin(ktemp), cos(ktemp);

      Eigen::Matrix<typename DerivedV::Scalar, 1, 2> tmp1 = R2*(ref0.head(2)).transpose();

//      assert(tmp1(0) - ref1(0) < 1e-10);
//      assert(tmp1(1) - ref1(1) < 1e-10);

      K[eid] = ktemp;
    }
  }

}


IGL_INLINE void igl::n_polyvector(const Eigen::MatrixXd &V,
                             const Eigen::MatrixXi &F,
                             const Eigen::VectorXi& b,
                             const Eigen::MatrixXd& bc,
                             Eigen::MatrixXd &output)
{
  Eigen::VectorXi isConstrained = Eigen::VectorXi::Constant(F.rows(),0);
  Eigen::MatrixXd cfW = Eigen::MatrixXd::Constant(F.rows(),bc.cols(),0);

  for(unsigned i=0; i<b.size();++i)
  {
    isConstrained(b(i)) = 1;
    cfW.row(b(i)) << bc.row(i);
  }
  if (b.size() == F.rows())
  {
    output = cfW;
    return;
  }

  int n = cfW.cols()/3;
  igl::PolyVectorFieldFinder<Eigen::MatrixXd, Eigen::MatrixXi> pvff(V,F,n);
  pvff.solve(isConstrained, cfW, output);
}


#ifdef IGL_STATIC_LIBRARY
// Explicit template instantiation
#endif


================================================
FILE: components/field_computation/fields/n_polyvector.h
================================================
// This file is part of libigl, a simple c++ geometry processing library.
//
// Copyright (C) 2014 Olga Diamanti <olga.diam@gmail.com>
//
// This Source Code Form is subject to the terms of the Mozilla Public License
// v. 2.0. If a copy of the MPL was not distributed with this file, You can
// obtain one at http://mozilla.org/MPL/2.0/.

#ifndef IGL_N_POLYVECTOR
#define IGL_N_POLYVECTOR
#include "igl/igl_inline.h"

#include <Eigen/Core>
#include <vector>

namespace igl {
  //todo
  /// Given 2 vectors centered on origin calculate the rotation matrix from first to the second

  // Inputs:
  //   v0, v1         the two #3 by 1 vectors
  //   normalized     boolean, if false, then the vectors are normalized prior to the calculation
  // Output:
  //                  3 by 3 rotation matrix that takes v0 to v1
  //

  IGL_INLINE void n_polyvector(const Eigen::MatrixXd& V,
                               const Eigen::MatrixXi& F,
                               const Eigen::VectorXi& b,
                               const Eigen::MatrixXd& bc,
                               Eigen::MatrixXd &output);

};


#ifndef IGL_STATIC_LIBRARY
#include "n_polyvector.cpp"
#endif


#endif /* defined(IGL_N_POLYVECTOR) */


================================================
FILE: components/field_computation/fields/polyroots.cpp
================================================
// This file is part of libigl, a simple c++ geometry processing library.
//
// Copyright (C) 2014 Olga Diamanti <olga.diam@gmail.com>
//
// This Source Code Form is subject to the terms of the Mozilla Public License
// v. 2.0. If a copy of the MPL was not distributed with this file, You can
// obtain one at http://mozilla.org/MPL/2.0/.

#include "polyroots.h"
#include <Eigen/Eigenvalues>

template <typename S, typename T>
IGL_INLINE void igl::polyRoots(Eigen::Matrix<S, Eigen::Dynamic,1> &polyCoeff, //real or comples coefficients
                          Eigen::Matrix<std::complex<T>, Eigen::Dynamic,1> &roots // complex roots (double or float)
)
{
  //  degree
  int n = polyCoeff.rows() - 1;

  Eigen::Matrix<S, Eigen::Dynamic, 1> d (n,1);
  d = polyCoeff.tail(n)/polyCoeff(0);

  Eigen::Matrix<S, Eigen::Dynamic, Eigen::Dynamic> I; I.setIdentity(n-1,n-1);
  Eigen::Matrix<S, Eigen::Dynamic, 1> z; z.setZero(n-1,1);

  Eigen::Matrix<S, Eigen::Dynamic, Eigen::Dynamic> a(n,n);
  a<<-d.transpose(),I,z;
  roots = a.eigenvalues();

}



#ifdef IGL_STATIC_LIBRARY
// Explicit template instantiation
template void igl::polyRoots<std::complex<double>, double>(Eigen::Matrix<std::complex<double>, -1, 1, 0, -1, 1>&, Eigen::Matrix<std::complex<double>, -1, 1, 0, -1, 1>&);
template void igl::polyRoots<double, double>(Eigen::Matrix<double, -1, 1, 0, -1, 1>&, Eigen::Matrix<std::complex<double>, -1, 1, 0, -1, 1>&);
#endif


================================================
FILE: components/field_computation/fields/polyroots.h
================================================
// This file is part of libigl, a simple c++ geometry processing library.
//
// Copyright (C) 2014 Olga Diamanti <olga.diam@gmail.com>
//
// This Source Code Form is subject to the terms of the Mozilla Public License
// v. 2.0. If a copy of the MPL was not distributed with this file, You can
// obtain one at http://mozilla.org/MPL/2.0/.

#ifndef IGL_POLYROOTS
#define IGL_POLYROOTS
#include "igl/igl_inline.h"

#include <Eigen/Core>

namespace igl {
  //todo
  /// Given 2 vectors centered on origin calculate the rotation matrix from first to the second

  // Inputs:
  //   v0, v1         the two #3 by 1 vectors
  //   normalized     boolean, if false, then the vectors are normalized prior to the calculation
  // Output:
  //                  3 by 3 rotation matrix that takes v0 to v1
  //
  template <typename S, typename T>
  IGL_INLINE void polyRoots(Eigen::Matrix<S, Eigen::Dynamic,1> &polyCoeff, //real or comples coefficients
                            Eigen::Matrix<std::complex<T>, Eigen::Dynamic,1> &roots // complex roots (double or float)
                            );
}


#ifndef IGL_STATIC_LIBRARY
#include "polyroots.cpp"
#endif


#endif /* defined(IGL_NCHOOSEK) */


================================================
FILE: components/field_computation/gl_utils.h
================================================
/***************************************************************************/
/* Copyright(C) 2021


The authors of

Reliable Feature-Line Driven Quad-Remeshing
Siggraph 2021


 All rights reserved.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <https://www.gnu.org/licenses/>.
****************************************************************************/

#ifndef GL_UTILS
#define GL_UTILS


#include <wrap/gl/trimesh.h>

template <class MeshType>
void GLDrawSharpEdges(MeshType &mesh)
{
    typedef typename MeshType::CoordType  CoordType;

    glPushAttrib(GL_ALL_ATTRIB_BITS);
    glDisable(GL_LIGHTING);
    glDepthRange(0,0.9999);
    glLineWidth(5);
    glBegin(GL_LINES);
    for (size_t i=0;i<mesh.face.size();i++)
        for (size_t j=0;j<3;j++)
        {
            if (!mesh.face[i].IsFaceEdgeS(j))continue;

            if (mesh.face[i].FKind[j]==ETConcave)
                vcg::glColor(vcg::Color4b(0,0,255,255));
            else
                vcg::glColor(vcg::Color4b(255,0,0,255));

            CoordType Pos0=mesh.face[i].P0(j);
            CoordType Pos1=mesh.face[i].P1(j);
            vcg::glVertex(Pos0);
            vcg::glVertex(Pos1);
        }
    glEnd();
    glPopAttrib();
}



#endif


================================================
FILE: components/field_computation/glwidget.cpp
================================================
/***************************************************************************/
/* Copyright(C) 2021


The authors of

Reliable Feature-Line Driven Quad-Remeshing
Siggraph 2021


 All rights reserved.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <https://www.gnu.org/licenses/>.
****************************************************************************/

#include <GL/glew.h>
#include <QMouseEvent>

#include <chrono>

#include <math.h>
#include "glwidget.h"
#include "mesh_manager.h"
#include "fields/field_smoother.h"
#include "triangle_mesh_type.h"
#include "poly_mesh_type.h"
#include <wrap/qt/trackball.h>
#include <wrap/gl/picking.h>
#include <wrap/qt/anttweakbarMapper.h>
#include <wrap/io_trimesh/import_field.h>
#include <wrap/io_trimesh/export_field.h>
#include <wrap/io_trimesh/export.h>
#include <wrap/gl/trimesh.h>
//#include <vcg/complex/algorithms/parametrization/tangent_field_operators.h>
#include <wrap/gl/gl_field.h>
#include <AutoRemesher.h>
#include <vcg/complex/algorithms/hole.h>
#include "mesh_field_smoother.h"
#include "gl_utils.h"

#ifdef MIQ_QUADRANGULATE
#include <wrap/igl/miq_parametrization.h>
#include <vcg/complex/algorithms/quadrangulator.h>
#endif

std::string pathM="";
std::string pathS="";

vcg::Trackball track;//the active manipulator

bool drawfield=false;

FieldTriMesh tri_mesh;

#ifdef MIQ_QUADRANGULATE
PMesh quad_mesh;
bool quadrangulated=false;
vcg::tri::MiQParametrizer<FieldTriMesh>::MIQParameters MiqP;
#endif

TwBar *barQuad;

vcg::GlTrimesh<FieldTriMesh> glWrap;
vcg::GLField<FieldTriMesh> glField;

typedef typename FieldTriMesh::ScalarType ScalarType;
typedef typename FieldTriMesh::CoordType CoordType;

int Iterations;
ScalarType EdgeStep;
ScalarType Multiplier=2;
ScalarType SharpFactor=6;
ScalarType alpha=0.3;
//ScalarType sharp_feature_thr=45;


int xMouse,yMouse;

//vcg::GridStaticPtr<FieldTriMesh::FaceType,FieldTriMesh::ScalarType> Gr;

typedef vcg::tri::FieldSmoother<FieldTriMesh> FieldSmootherType;
FieldSmootherType::SmoothParam FieldParam;

AutoRemesher<FieldTriMesh>::Params RemPar;
bool do_batch=false;
bool has_features=false;
bool has_features_fl=false;
//size_t ErodeDilateSteps=4;

bool do_remesh=true;
int remesher_iterations=15;
ScalarType remesher_aspect_ratio=0.3;
int remesher_termination_delta=10000;
bool surf_dist_check=true;
ScalarType sharp_feature_thr=35;
int feature_erode_dilate=4;

//MeshPrepocess<FieldTriMesh> MP(tri_mesh);

void InitSharp()
{
    assert(!(has_features || has_features_fl));
    tri_mesh.UpdateDataStructures();
    tri_mesh.InitSharpFeatures(sharp_feature_thr);
    //MP.InitSharpFeatures(sharp_feature_thr);
}


//void DoAutoRemesh()
//{
//    RemPar.iterations   = remesher_iterations;
//    RemPar.targetAspect = remesher_aspect_ratio;
//    RemPar.targetDeltaFN= remesher_termination_delta;
//    RemPar.creaseAngle  = sharp_feature_thr;
//    RemPar.erodeDilate  = feature_erode_dilate;
//    RemPar.userSelectedCreases = true;
//    RemPar.surfDistCheck = true;

//    auto t1 = std::chrono::high_resolution_clock::now();
//    std::cout << "cleaning the mesh..." << std::endl;
//    std::shared_ptr<FieldTriMesh> clean = AutoRemesher<FieldTriMesh>::CleanMesh(tri_mesh, false);
//    auto t2 = std::chrono::high_resolution_clock::now();
//    std::cout << "Cleaning time: " << std::chrono::duration_cast<std::chrono::seconds>( t2 - t1 ).count() << std::endl;

//    t1 = std::chrono::high_resolution_clock::now();
//    clean->UpdateDataStructures();

////    MP.InitSharpFeatures(sharp_feature_thr);
////    MP.ErodeDilate(feature_erode_dilate);
//    clean->InitSharpFeatures(sharp_feature_thr);
//    clean->ErodeDilate(feature_erode_dilate);

//    t2 = std::chrono::high_resolution_clock::now();
//    std::cout << "Sharp Features time: " << std::chrono::duration_cast<std::chrono::seconds>( t2 - t1 ).count() << std::endl;

//    t1 = std::chrono::high_resolution_clock::now();
//    std::shared_ptr<FieldTriMesh> ret=AutoRemesher<FieldTriMesh>::Remesh(*clean,RemPar);
//    t2 = std::chrono::high_resolution_clock::now();
//    std::cout << "Remesh time: " << std::chrono::duration_cast<std::chrono::seconds>( t2 - t1 ).count() << std::endl;
//    AutoRemesher<FieldTriMesh>::SplitNonManifold(*ret);

//    tri_mesh.Clear();
//    vcg::tri::Append<FieldTriMesh,FieldTriMesh>::Mesh(tri_mesh,(*ret));
//    vcg::tri::Clean<FieldTriMesh>::RemoveUnreferencedVertex(tri_mesh);
//    vcg::tri::Allocator<FieldTriMesh>::CompactEveryVector(tri_mesh);
//    tri_mesh.UpdateDataStructures();
//    //MeshPrepocess<FieldTriMesh>::AutoRemesh(tri_mesh,RemPar);
//    Gr.Set(tri_mesh.face.begin(),tri_mesh.face.end());
//}

//void DoAutoRemesh()
//{
//    RemPar.iterations   = remesher_iterations;
//    RemPar.targetAspect = remesher_aspect_ratio;
//    RemPar.targetDeltaFN= remesher_termination_delta;
//    RemPar.creaseAngle  = sharp_feature_thr;
//    RemPar.erodeDilate  = feature_erode_dilate;
//    RemPar.userSelectedCreases = true;
//    RemPar.surfDistCheck = false;

//    auto t1 = std::chrono::high_resolution_clock::now();
//    std::cout << "cleaning the mesh..." << std::endl;
//    std::shared_ptr<FieldTriMesh> clean = AutoRemesher<FieldTriMesh>::CleanMesh(tri_mesh, false);
//    auto t2 = std::chrono::high_resolution_clock::now();
//    std::cout << "Cleaning time: " << std::chrono::duration_cast<std::chrono::seconds>( t2 - t1 ).count() << std::endl;

//    t1 = std::chrono::high_resolution_clock::now();
//    clean->UpdateDataStructures();

////    clean->InitSharpFeatures(sharp_feature_thr);
////    clean->ErodeDilate(feature_erode_dilate);

//    t2 = std::chrono::high_resolution_clock::now();
//    std::cout << "Sharp Features time: " << std::chrono::duration_cast<std::chrono::seconds>( t2 - t1 ).count() << std::endl;

//    t1 = std::chrono::high_resolution_clock::now();
//    std::shared_ptr<FieldTriMesh> ret=AutoRemesher<FieldTriMesh>::Remesh(*clean,RemPar);
//    t2 = std::chrono::high_resolution_clock::now();
//    std::cout << "Remesh time: " << std::chrono::duration_cast<std::chrono::seconds>( t2 - t1 ).count() << std::endl;
//    AutoRemesher<FieldTriMesh>::SplitNonManifold(*ret);

//    tri_mesh.Clear();
//    vcg::tri::Append<FieldTriMesh,FieldTriMesh>::Mesh(tri_mesh,(*ret));
//    vcg::tri::Clean<FieldTriMesh>::RemoveUnreferencedVertex(tri_mesh);
//    vcg::tri::Allocator<FieldTriMesh>::CompactEveryVector(tri_mesh);
//    tri_mesh.UpdateDataStructures();

//    tri_mesh.InitSharpFeatures(sharp_feature_thr);
//    tri_mesh.ErodeDilate(feature_erode_dilate);

//    //MeshPrepocess<FieldTriMesh>::AutoRemesh(tri_mesh,RemPar);
//    Gr.Set(tri_mesh.face.begin(),tri_mesh.face.end());
//}


//void DoAutoRemesh()
//{
//    RemPar.iterations   = remesher_iterations;
//    RemPar.targetAspect = remesher_aspect_ratio;
//    RemPar.targetDeltaFN= remesher_termination_delta;
//    RemPar.creaseAngle  = sharp_feature_thr;
//    RemPar.erodeDilate  = feature_erode_dilate;
//    RemPar.userSelectedCreases = true;
//    RemPar.surfDistCheck = false;

//    auto t1 = std::chrono::high_resolution_clock::now();
//    std::cout << "cleaning the mesh..." << std::endl;
//    std::shared_ptr<FieldTriMesh> clean = AutoRemesher<FieldTriMesh>::CleanMesh(tri_mesh, false);
//    auto t2 = std::chrono::high_resolution_clock::now();
//    std::cout << "Cleaning time: " << std::chrono::duration_cast<std::chrono::seconds>( t2 - t1 ).count() << std::endl;

//    t1 = std::chrono::high_resolution_clock::now();
//    clean->UpdateDataStructures();

////    clean->InitSharpFeatures(sharp_feature_thr);
////    clean->ErodeDilate(feature_erode_dilate);

//    t2 = std::chrono::high_resolution_clock::now();
//    std::cout << "Sharp Features time: " << std::chrono::duration_cast<std::chrono::seconds>( t2 - t1 ).count() << std::endl;

//    t1 = std::chrono::high_resolution_clock::now();
//    std::shared_ptr<FieldTriMesh> ret=AutoRemesher<FieldTriMesh>::Remesh(*clean,RemPar);
//    t2 = std::chrono::high_resolution_clock::now();
//    std::cout << "Remesh time: " << std::chrono::duration_cast<std::chrono::seconds>( t2 - t1 ).count() << std::endl;
//    AutoRemesher<FieldTriMesh>::SplitNonManifold(*ret);

//    tri_mesh.Clear();
//    vcg::tri::Append<FieldTriMesh,FieldTriMesh>::Mesh(tri_mesh,(*ret));
//    vcg::tri::Clean<FieldTriMesh>::RemoveUnreferencedVertex(tri_mesh);
//    vcg::tri::Allocator<FieldTriMesh>::CompactEveryVector(tri_mesh);
//    tri_mesh.UpdateDataStructures();

//    tri_mesh.InitSharpFeatures(sharp_feature_thr);
//    tri_mesh.ErodeDilate(feature_erode_dilate);

//    //MeshPrepocess<FieldTriMesh>::AutoRemesh(tri_mesh,RemPar);
//    Gr.Set(tri_mesh.face.begin(),tri_mesh.face.end());
//}

void SaveAllData()
{
    MeshPrepocess<FieldTriMesh>::SaveAllData(tri_mesh,pathM);
//    std::string projM=pathM;
//    size_t indexExt=projM.find_last_of(".");
//    projM=projM.substr(0,indexExt);
//    std::string meshName=projM+std::string("_rem.obj");
//    std::string fieldName=projM+std::string("_rem.rosy");
//    std::string sharpName=projM+std::string("_rem.sharp");
//    std::cout<<"Saving Mesh TO:"<<meshName.c_str()<<std::endl;
//    std::cout<<"Saving Field TO:"<<fieldName.c_str()<<std::endl;
//    std::cout<<"Saving Sharp TO:"<<sharpName.c_str()<<std::endl;
//    tri_mesh.SaveTriMesh(meshName.c_str());
//    tri_mesh.SaveField(fieldName.c_str());
//    tri_mesh.SaveSharpFeatures(sharpName.c_str());


////    std::string orFaceName=projM+std::string("_rem_origf.txt");
////    std::cout<<"Saving Field TO:"<<orFaceName.c_str()<<std::endl;
////    tri_mesh.SaveOrigFace(orFaceName.c_str());

//    //MP.SaveSharpFeatures(sharpName.c_str());

//    //tri_mesh.SaveTriMesh()
}

void DoBatchProcess ()
{
    typename MeshPrepocess<FieldTriMesh>::BatchParam BPar;
    BPar.DoRemesh=do_remesh;
    BPar.feature_erode_dilate=feature_erode_dilate;
    BPar.remesher_aspect_ratio=remesher_aspect_ratio;
    BPar.remesher_iterations=remesher_iterations;
    BPar.remesher_termination_delta=remesher_termination_delta;
    BPar.SharpFactor=SharpFactor;
    BPar.sharp_feature_thr=sharp_feature_thr;
    BPar.surf_dist_check=surf_dist_check;
    BPar.UpdateSharp=(!(has_features || has_features_fl));
    MeshPrepocess<FieldTriMesh>::BatchProcess(tri_mesh,BPar,FieldParam);
    drawfield=true;
}

void DoAutoRemesh()
{
    RemPar.iterations   = remesher_iterations;
    RemPar.targetAspect = remesher_aspect_ratio;
    RemPar.targetDeltaFN= remesher_termination_delta;
    RemPar.creaseAngle  = sharp_feature_thr;
    RemPar.erodeDilate  = feature_erode_dilate;

    //RemPar.userSelectedCreases = true;
    RemPar.surfDistCheck = surf_dist_check;

    AutoRemesher<FieldTriMesh>::RemeshAdapt(tri_mesh,RemPar);
    //AutoRemesher<FieldTriMesh>::RemeshAdapt(tri_mesh,RemPar);

    tri_mesh.InitEdgeType();
    tri_mesh.InitFeatureCoordsTable();
//    tri_mesh.InitSharpFeatures(sharp_feature_thr);
//    tri_mesh.ErodeDilate(feature_erode_dilate);

    //MeshPrepocess<FieldTriMesh>::AutoRemesh(tri_mesh,RemPar);
//    Gr.Set(tri_mesh.face.begin(),tri_mesh.face.end());
}

void TW_CALL CleanMesh(void *)
 {
   MeshPrepocess<FieldTriMesh>::SolveGeometricArtifacts(tri_mesh);
 }

void TW_CALL AutoRemesh(void *)
{
    DoAutoRemesh();
}

void TW_CALL InitSharpFeatures(void *)
{
   InitSharp();
}

void TW_CALL RefineIfNeeded(void *)
{
   // tri_mesh.RefineIfNeeded();
    MeshPrepocess<FieldTriMesh>::RefineIfNeeded(tri_mesh);
    //MP.RefineIfNeeded();
    //Gr.Set(tri_mesh.face.begin(),tri_mesh.face.end());
}

void TW_CALL BatchProcess(void *)
{
    DoBatchProcess();
}

void TW_CALL SmoothField(void *)
{
//    //tri_mesh.SplitFolds();
//    MeshPrepocess<FieldTriMesh>::SplitFolds(tri_mesh);
//    //tri_mesh.RemoveFolds();
//    MeshPrepocess<FieldTriMesh>::RemoveFolds(tri_mesh);
//    //tri_mesh.RemoveSmallComponents();
//    MeshPrepocess<FieldTriMesh>::RemoveSmallComponents(tri_mesh);
//    MP.SplitFolds();
//    MP.RemoveFolds();
//    MP.RemoveSmallComponents();

    //vcg::tri::io::ExporterPLY<FieldTriMesh>::Save(tri_mesh,"test0.ply");
    //tri_mesh.SmoothField(FieldParam);
    MeshFieldSmoother<FieldTriMesh>::SmoothField(tri_mesh,FieldParam);
    //vcg::tri::io::ExporterPLY<FieldTriMesh>::Save(tri_mesh,"test1.ply");
    drawfield=true;

    //Gr.Set(tri_mesh.face.begin(),tri_mesh.face.end());
}



#ifdef MIQ_QUADRANGULATE
void TW_CALL MiqQuadrangulate(void *)
{

    vcg::tri::MiQParametrizer<FieldTriMesh>::MIQParametrize(tri_mesh,MiqP);//,MaxFeature);
    vcg::tri::Quadrangulator<FieldTriMesh,PMesh> Quadr;

    std::cout<<"Quadrangulating"<<std::endl;
    FieldTriMesh splitted_mesh;
    vcg::tri::Append<FieldTriMesh,FieldTriMesh>::Mesh(splitted_mesh,tri_mesh);
    std::vector< std::vector< short int> > AxisUV;

    Quadr.Quadrangulate(splitted_mesh,quad_mesh,AxisUV,false);
    quadrangulated=true;
    quad_mesh.UpdateAttributes();
    vcg::tri::Allocator<PMesh>::CompactEveryVector(quad_mesh);
    std::cout<<"Num Faces: "<<quad_mesh.face.size()<<std::endl;
    vcg::tri::io::ExporterOBJ<PMesh>::Save(quad_mesh,"quadrangulated.obj",vcg::tri::io::Mask::IOM_BITPOLYGONAL);
}
#endif



void TW_CALL SaveData(void *)
{
    SaveAllData();
}

void TW_CALL AutoSetupField(void *)
{
    MeshFieldSmoother<FieldTriMesh>::AutoSetupParam(tri_mesh,FieldParam);
}

void TW_CALL ErodeDilateFeatureStep(void *)
{
    tri_mesh.ErodeDilate(feature_erode_dilate);
    //MP.ErodeDilate(feature_erode_dilate);
}

void SetFieldBarSizePosition(QWidget *w)
{
    int params[2];
    params[0] = QTDeviceWidth(w) / 3;
    params[1] = QTDeviceHeight(w) / 1.8;
    TwSetParam(barQuad, NULL, "size", TW_PARAM_INT32, 2, params);
    params[0] = QTLogicalToDevice(w, 10);
    params[1] = 30;//QTDeviceHeight(w) - params[1] - QTLogicalToDevice(w, 10);
    TwSetParam(barQuad, NULL, "position", TW_PARAM_INT32, 2, params);
}

void InitFieldBar(QWidget *w)
{
    barQuad = TwNewBar("QuadWild");

    SetFieldBarSizePosition(w);

	TwAddVarRW(barQuad,"sharp_feature_thr",TW_TYPE_DOUBLE, &sharp_feature_thr," label='Sharp Degree'");
    TwAddVarRW(barQuad,"LimitConcave",TW_TYPE_DOUBLE, &tri_mesh.LimitConcave," label='Limit Concave'");
    //TwAddVarRW(barQuad,"LimitConcave",TW_TYPE_DOUBLE, &MP.LimitConcave," label='Limit Concave'");

    TwAddButton(barQuad,"CleanMesh",CleanMesh,0,"label='CleanMesh'");

    TwAddButton(barQuad,"SetSharp",InitSharpFeatures,0,"label='InitSharp'");

	TwAddVarRW(barQuad,"ErodeDilSteps",TW_TYPE_INT32,&feature_erode_dilate,"label='ErodeDilateSteps'");

    TwAddButton(barQuad,"Erode Dilate",ErodeDilateFeatureStep,0,"label='ErodeDilateSharp'");

    TwAddButton(barQuad,"AutoRemesh",AutoRemesh,0,"label='AutoRemesh'");

    TwAddButton(barQuad,"Refine",RefineIfNeeded,0,"label='Refine if needed'");

    TwAddVarRW(barQuad,"Alpha",TW_TYPE_DOUBLE, &FieldParam.alpha_curv," label='Alpha Curvature'");
    TwAddVarRW(barQuad,"HardCT",TW_TYPE_DOUBLE, &FieldParam.curv_thr," label='Hard Curv Thr'");
    TwAddVarRW(barQuad,"CurvRing",TW_TYPE_INT32,&FieldParam.curvRing,"label='Curvature Ring'");

    TwEnumVal smoothmodes[3] = {
        {vcg::tri::SMMiq,"MIQ"},
        {vcg::tri::SMNPoly,"NPoly"},
        {vcg::tri::SMIterative,"Ite"}
    };
    TwType smoothMode = TwDefineEnum("SmoothMode", smoothmodes, 3);
    TwAddVarRW(barQuad, "Smooth Mode", smoothMode, &FieldParam.SmoothM," label='Smooth Mode' ");


    TwAddButton(barQuad,"AutoSetup",AutoSetupField,0,"label='Auto Setup Field'");

    TwAddButton(barQuad,"ComputeField",SmoothField,0,"label='Compute Field'");

    TwAddButton(barQuad,"BatchProcess",BatchProcess,0,"label='Batch Process'");

    TwAddButton(barQuad,"SaveData",SaveData,0,"label='Save Data'");

#ifdef MIQ_QUADRANGULATE
    TwAddSeparator(barQuad,"","");
    TwAddVarRW(barQuad,"Gradient",TW_TYPE_DOUBLE, &MiqP.gradient," label='Gradient'");
    TwAddVarRW(barQuad,"Direct Round",TW_TYPE_BOOLCPP, &MiqP.directRound," label='Direct Round'");
    TwAddVarRW(barQuad,"Round Singularities",TW_TYPE_BOOLCPP, &MiqP.round_singularities," label='Round Singularities'");
    TwAddVarRW(barQuad,"IsotropyVsAlign",TW_TYPE_DOUBLE, &MiqP.miqAnisotropy," label='Isotropy Vs Align'");
    TwAddVarRW(barQuad,"Align Sharp",TW_TYPE_BOOLCPP, & MiqP.crease_as_feature," label='Align Sharp'");
    TwAddButton(barQuad,"Quadrangulate",MiqQuadrangulate,0,"label='Miq Quadrangulate'");
#endif

}

//void BatchProcess ()
//{
////    vcg::tri::Hole<FieldTriMesh>::EarCuttingFill<vcg::tri::TrivialEar<FieldTriMesh> >(tri_mesh,6);
//    bool Oriented,Orientable;
//    vcg::tri::Clean<FieldTriMesh>::OrientCoherentlyMesh(tri_mesh,Oriented,Orientable);
//    if (!Orientable)
//        std::cout<<"WARNING MESH NON ORIENTABLE"<<std::endl;

////    size_t numDup=MeshPrepocess<FieldTriMesh>::NumDuplicatedV(tri_mesh);//tri_mesh.NumDuplicatedV();
////    if (numDup>0)std::cout<<"WARNING DUPLICATED VERTICES BEFORE AUTO REMESH!"<<std::endl;

//    if (do_remesh)
//        DoAutoRemesh();

//    vcg::tri::Clean<FieldTriMesh>::OrientCoherentlyMesh(tri_mesh,Oriented,Orientable);
//    if (!Orientable)
//        std::cout<<"WARNING MESH NON ORIENTABLE"<<std::endl;

//    for (size_t i=0;i<tri_mesh.face.size();i++)
//        tri_mesh.face[i].IndexOriginal=i;

//    //tri_mesh.SolveGeometricIssues();
//    MeshPrepocess<FieldTriMesh>::SolveGeometricIssues(tri_mesh);
//    //MP.SolveGeometricIssues();


//	std::string projM=pathM;
//    size_t indexExt=projM.find_last_of(".");
//    projM=projM.substr(0,indexExt);
//    std::string meshName=projM+std::string("_remeshed.obj");
//    std::cout<<"Saving remeshed Mesh TO:"<<meshName.c_str()<<std::endl;
//    tri_mesh.SaveTriMesh(meshName.c_str());

//    vcg::tri::Allocator<FieldTriMesh>::CompactEveryVector(tri_mesh);

//    if (!(has_features || has_features_fl))
//    {
//        InitSharp();
//        tri_mesh.ErodeDilate(feature_erode_dilate);
//        //MP.ErodeDilate(feature_erode_dilate);
//    }

//    //tri_mesh.RefineIfNeeded();
//    MeshPrepocess<FieldTriMesh>::RefineIfNeeded(tri_mesh);
//    //tri_mesh.SolveGeometricIssues();
//    MeshPrepocess<FieldTriMesh>::SolveGeometricIssues(tri_mesh);
//    //MP.RefineIfNeeded();
//    //MP.SolveGeometricIssues();

//    //FIELD SMOOTH
//    bool UseNPoly=tri_mesh.SufficientFeatures(SharpFactor);
//    ScalarType SharpL=tri_mesh.SharpLenght();
//    std::cout<<"Sharp Lenght 0: "<<SharpL<<std::endl;
//    if (UseNPoly)
//    {
//        std::cout<<"Using NPoly"<<std::endl;
//        FieldParam.SmoothM=SMNPoly;
//    }
//    else
//    {
//        std::cout<<"Using Comiso"<<std::endl;
//        FieldParam.SmoothM=SMMiq;
//        FieldParam.alpha_curv=0.3;
//    }

//    std::string projM=pathM;
//    size_t indexExt=projM.find_last_of(".");
//    projM=projM.substr(0,indexExt);
//    std::string meshName=projM+std::string("_rem.obj");
//    std::string sharpName=projM+std::string("_rem.sharp");
//    std::cout<<"Saving Mesh TO:"<<meshName.c_str()<<std::endl;
//    std::cout<<"Saving Sharp TO:"<<sharpName.c_str()<<std::endl;

//    std::cout << "[fieldComputation] Smooth Field Computation..." << std::endl;
//    //tri_mesh.SplitFolds();
//    MeshPrepocess<FieldTriMesh>::SplitFolds(tri_mesh);

//    SharpL=tri_mesh.SharpLenght();
//    //SharpL=MP.SharpLenght();
//    std::cout<<"Sharp Lenght 0.0: "<<SharpL<<std::endl;
//    //tri_mesh.RemoveFolds();
//    MeshPrepocess<FieldTriMesh>::RemoveFolds(tri_mesh);

//    SharpL=tri_mesh.SharpLenght();
//    //SharpL=MP.SharpLenght();
//    std::cout<<"Sharp Lenght 0.1: "<<SharpL<<std::endl;
//    //tri_mesh.SolveGeometricIssues();
//    MeshPrepocess<FieldTriMesh>::SolveGeometricIssues(tri_mesh);
//    //MP.SolveGeometricIssues();

//    SharpL=tri_mesh.SharpLenght();
//    //SharpL=MP.SharpLenght();
//    std::cout<<"Sharp Lenght 0.2: "<<SharpL<<std::endl;
//    //tri_mesh.RemoveSmallComponents();
//    MeshPrepocess<FieldTriMesh>::RemoveSmallComponents(tri_mesh);
//    //MP.RemoveSmallComponents();
//    SharpL=tri_mesh.SharpLenght();
//    //SharpL=MP.SharpLenght();
//    std::cout<<"Sharp Lenght 0.3: "<<SharpL<<std::endl;

//    SharpL=tri_mesh.SharpLenght();
//    //SharpL=MP.SharpLenght();
//    std::cout<<"Sharp Lenght 1: "<<SharpL<<std::endl;
//    //tri_mesh.SmoothField(FieldParam);
//    MeshFieldSmoother<FieldTriMesh>::SmoothField(tri_mesh,FieldParam);

//    SharpL=tri_mesh.SharpLenght();
//    //SharpL=MP.SharpLenght();
//    std::cout<<"Sharp Lenght 2: "<<SharpL<<std::endl;

//    std::string fieldName=projM+std::string("_rem.rosy");
//    std::cout<<"Saving Field TO:"<<fieldName.c_str()<<std::endl;

//    tri_mesh.SaveTriMesh(meshName.c_str());
//    tri_mesh.SaveSharpFeatures(sharpName.c_str());
//    //MP.SaveSharpFeatures(sharpName.c_str());
//    tri_mesh.SaveField(fieldName.c_str());

//    std::string orFaceName=projM+std::string("_rem_origf.txt");
//    std::cout<<"Saving Field TO:"<<orFaceName.c_str()<<std::endl;
//    tri_mesh.SaveOrigFace(orFaceName.c_str());
//    drawfield=true;
////    //SAVE
//    SaveAllData();
//}




GLWidget::GLWidget(QWidget *parent)
    : QGLWidget(QGLFormat(QGL::SampleBuffers), parent)
{
    hasToPick=false;
    bool AllQuad=false;
    bool Loaded=tri_mesh.LoadTriMesh(pathM,AllQuad);
    FieldParam.alpha_curv=alpha;
    FieldParam.curv_thr=0.8;

    if (!Loaded)
    {
        std::cout<<"Error Loading Mesh"<<std::endl;
        exit(0);
    }
    if (AllQuad)
    {
        drawfield=true;
    }
    std::cout<<"Loaded "<<tri_mesh.face.size()<<" faces "<<std::endl;
    std::cout<<"Loaded "<<tri_mesh.vert.size()<<" vertices "<<std::endl;

    glWrap.m=&tri_mesh;

    tri_mesh.UpdateDataStructures();

    tri_mesh.LimitConcave=0;
    //MP.LimitConcave=0;
    if (has_features)
    {
        std::cout<<"*** Loading SHARP FEATURES ***"<<std::endl;
        bool HasRead=tri_mesh.LoadSharpFeatures(pathS);
        //bool HasRead=MP.LoadSharpFeatures(pathS);
        assert(HasRead);
    }

    if (has_features_fl)
    {
        std::cout<<"*** Loading SHARP FEATURES FL***"<<std::endl;
        bool HasRead=tri_mesh.LoadSharpFeaturesFL(pathS);
        //bool HasRead=MP.LoadSharpFeaturesFL(pathS);
        assert(HasRead);
    }

//    if ((do_batch)&&(!has_features))
//    {
////        bool SufficientFeatures=mesh.SufficientFeatures(SharpFactor);
////        if (SufficientFeatures)

//        DoBatchProcess();
//        SaveAllData();
//        exit(0);
//    }
//    if ((do_batch)&&(has_features))
//    {
//        //tri_mesh.PrintSharpInfo();
//        DoBatchProcess();
//        SaveAllData();
//        exit(0);
//    }
    if (do_batch)
    {

        DoBatchProcess();
        SaveAllData();
        exit(0);
    }

    //remeshed_mesh.UpdateDataStructures();
    //Gr.Set(tri_mesh.face.begin(),tri_mesh.face.end());
}



void GLWidget::initializeGL ()
{
    //initialize Glew
    glewInit();
    //CaptInt.GLInit( GLWidget::width(),GLWidget::height());
    glClearColor(0, 0, 0, 0);
    glEnable(GL_LIGHTING);
    glEnable(GL_LIGHT0);
    glEnable(GL_NORMALIZE);
    glEnable(GL_COLOR_MATERIAL);
    glEnable(GL_CULL_FACE);
    glEnable(GL_DEPTH_TEST);
}


void GLWidget::resizeGL (int w, int h)
{
    glViewport (0, 0, (GLsizei) w, (GLsizei) h);
    TwWindowSize(w, h);
    InitFieldBar(this);
    initializeGL();
}

void GLWidget::paintGL ()
{

    //    if (RType!=OldRType)
    //    {
    //        PatchDeco.ColorPatches(RType);
    //        OldRType=RType;
    //    }

    glClearColor(255,255,255,255);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(40, GLWidget::width()/(float)GLWidget::height(), 0.1, 100);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    gluLookAt(0,0,3.5f,   0,0,0,   0,1,0);
    track.center=vcg::Point3f(0, 0, 0);
    track.radius= 1;
    track.GetView();

    glPushMatrix();
    track.Apply();
    glPushMatrix();

    glDisable(GL_CULL_FACE);
    glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
    glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE);

    if(tri_mesh.vert.size()>0)
    {
        vcg::glScale(2.0f/tri_mesh.bbox.Diag());
        glTranslate(-tri_mesh.bbox.Center());
        //tri_mesh.GLDrawSharpEdges();
        GLDrawSharpEdges(tri_mesh);
        //MP.GLDrawSharpEdges();
        glWrap.Draw(vcg::GLW::DMFlatWire,vcg::GLW::CMPerFace,vcg::GLW::TMNone);
        //glWrap.Draw(vcg::GLW::DMSmooth,vcg::GLW::CMNone,vcg::GLW::TMNone);
    }

#ifdef MIQ_QUADRANGULATE
    if (quadrangulated)
    {
        quad_mesh.GLDraw();
    }
#endif

    if (drawfield)
    {
        vcg::GLField<FieldTriMesh>::GLDrawFaceField(tri_mesh,false,false,0.007);
        vcg::GLField<FieldTriMesh>::GLDrawSingularity(tri_mesh);
    }

//    if(hasToPick)
//    {
//        hasToPick=false;
//        typename FieldTriMesh::CoordType pp;
//        if(vcg::Pick<typename FieldTriMesh::CoordType>(xMouse,yMouse,pp))
//        {
//            typename FieldTriMesh::CoordType closPt,bary;
//            typename FieldTriMesh::ScalarType minD;
//            typename FieldTriMesh::FaceType *f=vcg::tri::GetClosestFaceBase(tri_mesh,Gr,pp,tri_mesh.bbox.Diag(),minD,closPt);
//            vcg::InterpolationParameters(*f,closPt,bary);
//            size_t EdgeI=1;
//            if ((bary.Y()<bary.X())&&(bary.Y()<bary.Z()))EdgeI=2;
//            if ((bary.Z()<bary.X())&&(bary.Z()<bary.Y()))EdgeI=0;

////            FieldTriMesh::FaceType *fOpp=f->FFp(EdgeI);
////            int eOpp=f->FFi(EdgeI);

//            if (f->IsFaceEdgeS(EdgeI))
//            {
//                tri_mesh.ClearSharp((*f),EdgeI);
//                //MP.ClearSharp((*f),EdgeI);
////                {
////                f->ClearFaceEdgeS(EdgeI);
////                if (fOpp!=f)
////                    fOpp->ClearFaceEdgeS(eOpp);
//            }else
//            {

//                tri_mesh.SetSharp((*f),EdgeI);
//                //MP.SetSharp((*f),EdgeI);
////                f->SetFaceEdgeS(EdgeI);
////                if (fOpp!=f)
////                    fOpp->SetFaceEdgeS(eOpp);
//            }
//        }
//    }

    glPopMatrix();
    glPopMatrix();


    TwDraw();

}

void GLWidget::keyReleaseEvent (QKeyEvent * e)
{
    e->ignore ();
    if (e->key () == Qt::Key_Control)  track.ButtonUp (QT2VCG (Qt::NoButton, Qt::ControlModifier));
    if (e->key () == Qt::Key_Shift)  track.ButtonUp (QT2VCG (Qt::NoButton, Qt::ShiftModifier));
    if (e->key () == Qt::Key_Alt) track.ButtonUp (QT2VCG (Qt::NoButton, Qt::AltModifier));
    updateGL ();
}


void GLWidget::keyPressEvent (QKeyEvent * e)
{
    e->ignore ();
    if (e->key () == Qt::Key_Control) track.ButtonDown (QT2VCG (Qt::NoButton, Qt::ControlModifier));
    if (e->key () == Qt::Key_Shift)  track.ButtonDown (QT2VCG (Qt::NoButton, Qt::ShiftModifier));
    if (e->key () == Qt::Key_Alt)  track.ButtonDown (QT2VCG (Qt::NoButton, Qt::AltModifier));

    TwKeyPressQt(e);
    updateGL ();
}

void GLWidget::mousePressEvent (QMouseEvent * e)
{
    if(!TwMousePressQt(this,e))
    {
        e->accept ();
        setFocus ();
        track.MouseDown(QT2VCG_X(this, e), QT2VCG_Y(this, e), QT2VCG (e->button (), e->modifiers ()));
    }
    updateGL ();
}

void GLWidget::mouseMoveEvent (QMouseEvent * e)
{
    if (e->buttons ()) {
        track.MouseMove(QT2VCG_X(this, e), QT2VCG_Y(this, e));
        updateGL ();
    }
    TwMouseMotion(QTLogicalToDevice(this, e->x()), QTLogicalToDevice(this, e->y()));
}

void GLWidget::mouseDoubleClickEvent (QMouseEvent * e)
{
    if (e->buttons ())
    {
        xMouse=QT2VCG_X(this, e);
        yMouse=QT2VCG_Y(this, e);
        //pointToPick=Point2i(e->x(),height()-e->y());
        //pointToPick=Point2i(xMouse,yMouse);
        hasToPick=true;
        updateGL ();
    }
    updateGL();
}

void GLWidget::mouseReleaseEvent (QMouseEvent * e)
{
    track.MouseUp(QT2VCG_X(this, e), QT2VCG_Y(this, e), QT2VCG(e->button (), e->modifiers ()));
    TwMouseReleaseQt(this,e);
    updateGL ();
}

void GLWidget::wheelEvent (QWheelEvent * e)
{
    const int WHEEL_STEP = 120;
    track.MouseWheel (e->delta () / float (WHEEL_STEP), QTWheel2VCG (e->modifiers ()));
    updateGL ();
}


================================================
FILE: components/field_computation/glwidget.h
================================================
/***************************************************************************/
/* Copyright(C) 2021


The authors of

Reliable Feature-Line Driven Quad-Remeshing
Siggraph 2021


 All rights reserved.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <https://www.gnu.org/licenses/>.
****************************************************************************/

#ifndef GLWIDGET_H
#define GLWIDGET_H


#include <QGLWidget>
#include <wrap/gui/trackball.h>
#include <AntTweakBar.h>
#include <QDir>

class GLWidget : public QGLWidget
{
    Q_OBJECT

public:
    bool hasToPick;

    GLWidget(QWidget *parent = 0);

    ~GLWidget(){};


    QSize sizeHint() const {
      return QSize(1400, 1200);
  };

protected:
    //void DrawPolyMesh();

    void initializeGL();
    void paintGL();
    void resizeGL(int width, int height);
    void mousePressEvent(QMouseEvent *event);
    void mouseReleaseEvent(QMouseEvent *event);
    void mouseMoveEvent(QMouseEvent *event);
    void mouseDoubleClickEvent ( QMouseEvent * event );
    void keyPressEvent(QKeyEvent *event);
    void keyReleaseEvent(QKeyEvent *event);
    void wheelEvent(QWheelEvent *event);

};

#endif


================================================
FILE: components/field_computation/main.cpp
================================================
/***************************************************************************/
/* Copyright(C) 2021


The authors of

Reliable Feature-Line Driven Quad-Remeshing
Siggraph 2021


 All rights reserved.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <https://www.gnu.org/licenses/>.
****************************************************************************/

#include <QApplication>
#include <QDesktopWidget>
#include <GL/glew.h>
#include "glwidget.h"
#include <wrap/qt/anttweakbarMapper.h>
#include <QWindow>
#include <QDir>
#include <QFile>
#include <QFileInfo>
#include <QTextStream>
//#include <triangle_mesh_type.h>
//#include <wrap/io_trimesh/import_field.h>
//#include <wrap/io_trimesh/import.h>

#include<vcg/complex/algorithms/hole.h>
#include <cstdio>
#include <clocale>
//#include <locale>


extern bool do_batch;
extern bool has_features;
extern bool has_features_fl;
extern std::string pathM,pathS;

extern bool do_remesh;
extern int remesher_iterations;
extern double remesher_aspect_ratio;
extern double alpha;
extern int remesher_termination_delta;

extern double sharp_feature_thr;
extern int feature_erode_dilate;

void correctOrAbort(const bool ok, const std::string & line, const int linenumber)
{
    if(!ok)
    {
        std::cerr << "[fieldComputation] Malformerd config file |-> " << line << " (" << linenumber << ")" << std::endl;
        std::cerr << "[fieldComputation] ...aborting..." << std::endl;
        abort();
    }
}

//bool loadConfigFile(const std::string & filename)
//{
//	QFile configFile(filename.c_str());

//	if (!configFile.open(QIODevice::ReadOnly))
//	{
//		//handleme
//	}

//	QTextStream configStream(&configFile);

//	int i = 0;
//    QString line;

//    while (configStream.readLineInto(&line))//(configStream.readLineInto(&line))
//	{
//		QStringList keyValuePair = line.split(' ');

//		if (keyValuePair.size() != 2)
//		{
//            correctOrAbort(false, line.toStdString(), i);
//		}

//		bool ok = false;
//		if (keyValuePair[0] == "remesh_iterations")
//		{
//			remesher_iterations = keyValuePair[1].toInt(&ok);
//            correctOrAbort(ok, line.toStdString(), i);
//			continue;
//		}
//		if (keyValuePair[0] == "remesh_target_aspect_ratio")
//		{
//			remesher_aspect_ratio = keyValuePair[1].toDouble(&ok);
//            correctOrAbort(ok, line.toStdString(), i);
//			continue;
//		}
//		if (keyValuePair[0] == "remesh_termination_delta")
//		{
//			remesher_termination_delta = keyValuePair[1].toInt(&ok);
//            correctOrAbort(ok, line.toStdString(), i);
//			continue;
//		}
//		if (keyValuePair[0] == "sharp_feature_thr")
//		{
//			sharp_feature_thr = keyValuePair[1].toDouble(&ok);
//            correctOrAbort(ok, line.toStdString(), i);
//			continue;
//		}
//		if (keyValuePair[0] == "sharp_feature_erode_dilate")
//		{
//			feature_erode_dilate = keyValuePair[1].toInt(&ok);
//            correctOrAbort(ok, line.toStdString(), i);
//			continue;
//		}

//		++i;
//	}

//	std::cout << "[fieldComputation] Successful config import" << std::endl;

//}

bool loadConfigFile(const std::string & filename)
{

    FILE *f=fopen(filename.c_str(),"rt");

    if (f==NULL)return false;

    std::cout<<"READ CONFIG FILE"<<std::endl;

    int IntVar;
    fscanf(f,"do_remesh %d\n",&IntVar);
    if (IntVar==0)
        do_remesh=false;
    std::cout<<"do_remesh "<<do_remesh<<std::endl;

    fscanf(f,"remesh_iterations %d\n",&remesher_iterations);
    std::cout<<"remesh_iterations "<<remesher_iterations<<std::endl;

    float remesher_aspect_ratiof;
    fscanf(f,"remesh_target_aspect_ratio %f\n",&remesher_aspect_ratiof);
    remesher_aspect_ratio=remesher_aspect_ratiof;
    std::cout<<"remesher_aspect_ratio "<<remesher_aspect_ratio<<std::endl;

    fscanf(f,"remesh_termination_delta %d\n",&remesher_termination_delta);
    std::cout<<"remesh_termination_delta "<<remesher_termination_delta<<std::endl;

    float sharp_feature_thrf;
    fscanf(f,"sharp_feature_thr %f\n",&sharp_feature_thrf);
    sharp_feature_thr=sharp_feature_thrf;
    std::cout<<"sharp_feature_thr "<<sharp_feature_thr<<std::endl;

    fscanf(f,"sharp_feature_erode_dilate %d\n",&feature_erode_dilate);
    std::cout<<"sharp_feature_erode_dilate "<<feature_erode_dilate<<std::endl;

    float alphaf;
    fscanf(f,"alpha %f\n",&alphaf);
    alpha=(double)alphaf;
    std::cout<<"alpha "<<alpha<<std::endl;

    fclose(f);

    std::cout << "[fieldComputation] Successful config import" << std::endl;

    return true;

}

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    //Use "." as decimal separator
    std::setlocale(LC_NUMERIC, "en_US.UTF-8");

    QWindow dummy;
    QString def_string = QString("GLOBAL fontscaling=%1").arg((int)dummy.devicePixelRatio());
    TwDefine(def_string.toStdString().c_str());
    printf("%s\n",qPrintable(def_string));
    fflush(stdout);

    // Set functions to handle string copy
    TwCopyCDStringToClientFunc(CopyCDStringToClient);
    TwCopyStdStringToClientFunc(CopyStdStringToClient);

    if( !TwInit(TW_OPENGL, NULL) )
    {
        fprintf(stderr, "AntTweakBar initialization failed: %s\n", TwGetLastError());
        return 1;
    }

    //load default config

    loadConfigFile("basic_setup.txt");
    assert(argc>1);
    pathM=std::string(argv[1]);
    for (size_t i=2;i<argc;i++)
    {
        if(std::string(argv[i])==std::string("batch"))
        {
            do_batch=true;
            continue;
        }

        std::string pathTest=std::string(argv[i]);
        int position=pathTest.find(".sharp");
        if (position!=-1)
        {
            pathS=pathTest;
            has_features=true;
            continue;
        }
        position=pathTest.find(".fl");
        if (position!=-1)
        {
            pathS=pathTest;
            has_features_fl=true;
            continue;
        }
        position=pathTest.find(".txt");
        if (position!=-1)
        {
           loadConfigFile(pathTest.c_str());
           continue;
        }
    }
    //    loadConfigFile("basic_setup.txt");

    //    std::cout << pathM << std::endl;

    //    if ((argc>2)&&(std::string(argv[2])==std::string("batch")))
    //        do_batch=true;
    //    else
    //    {
    //        if (argc>2)
    //        {
    //            std::string pathTest=std::string(argv[2]);
    //            int position=pathTest.find(".sharp");

    //            if (position!=-1)
    //            {
    //                pathS=pathTest;
    //                has_features=true;
    //            }
    //            position=pathTest.find(".fl");
    //            if (position!=-1)
    //            {
    //                pathS=pathTest;
    //                has_features_fl=true;
    //            }
    //        }
    //    }

    //    if ((has_features || has_features_fl)&&(argc>3))
    //    {
    //        if (std::string(argv[3])==std::string("batch"))
    //            do_batch=true;
    //    }
    GLWidget window;

    window.show();
    return app.exec();
}


================================================
FILE: components/field_computation/mesh_field_smoother.h
================================================
/***************************************************************************/
/* Copyright(C) 2021


The authors of

Reliable Feature-Line Driven Quad-Remeshing
Siggraph 2021


 All rights reserved.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <https://www.gnu.org/licenses/>.
****************************************************************************/

#ifndef MESH_FIELD_SMOOTHER
#define MESH_FIELD_SMOOTHER

#include <wrap/io_trimesh/export_field.h>
#include <wrap/io_trimesh/import.h>
#include <fields/field_smoother.h>

template <class MeshType>
class MeshFieldSmoother
{

    typedef typename MeshType::ScalarType ScalarType;
    typedef typename MeshType::CoordType  CoordType;
    typedef typename MeshType::VertexType    VertexType;
    typedef typename MeshType::VertexPointer VertexPointer;
    typedef typename MeshType::FaceType    FaceType;
    typedef typename MeshType::FacePointer FacePointer;

    typedef vcg::tri::FieldSmoother<MeshType> FieldSmootherType;
    typedef typename FieldSmootherType::SmoothParam SmoothParam;

   public:

    static void AutoSetupParam(MeshType &mesh,typename vcg::tri::FieldSmoother<MeshType>::SmoothParam &FParam,ScalarType SharpFactor=6)
    {
        FParam.align_borders=true;
        FParam.sharp_thr=0;

        bool SufficientFeatures=mesh.SufficientFeatures(SharpFactor);

        if (SufficientFeatures)
        {
            std::cout<<"Using NPoly"<<std::endl;
            FParam.SmoothM=vcg::tri::SMNPoly;
            FParam.curv_thr=0;
            FParam.alpha_curv=0;
        }
        else
        {
#ifndef COMISO_FIELD
            std::cout<<"Using NPoly"<<std::endl;
            FParam.SmoothM=vcg::tri::SMNPoly;
            FParam.curv_thr=0.8;
            FParam.alpha_curv=0;
#else
            std::cout<<"Using Comiso"<<std::endl;
            FParam.SmoothM=vcg::tri::SMMiq;
            if (FParam.alpha_curv==0)
                FParam.alpha_curv=0.3;
            FParam.curv_thr=0;
#endif
        }
    }

    static void SmoothField(MeshType &mesh,SmoothParam FieldParam)
    {
        //CHANGE BUT NOT REALLY NEEDED
        //InitFeatureCoordsTable();

        FieldParam.sharp_thr=0.0;
        //FieldParam.curv_thr=0.0;
        FieldParam.AddConstr.clear();
        for (size_t i=0;i<mesh.face.size();i++)
        {
            for (size_t j=0;j<3;j++)
            {
                if (!mesh.face[i].IsFaceEdgeS(j))continue;
                size_t IndexV0=vcg::tri::Index(mesh,mesh.face[i].V0(j));
                size_t IndexV1=vcg::tri::Index(mesh,mesh.face[i].V1(j));
                //only on one side
                if (IndexV0>IndexV1)continue;
                CoordType P0=mesh.face[i].V0(j)->P();
                CoordType P1=mesh.face[i].V1(j)->P();
                CoordType Dir=P1-P0;
                Dir.Normalize();
                FieldParam.AddConstr.push_back(std::pair<int,CoordType>(i,Dir));

                typename MeshType::FaceType *FOpp=mesh.face[i].FFp(j);
                if (FOpp==&mesh.face[i])continue;

                int IndexF=vcg::tri::Index(mesh,*FOpp);
                FieldParam.AddConstr.push_back(std::pair<int,CoordType>(IndexF,Dir));
            }
        }
//        //if there is no alpha curvature and no constraint then set curv_thr
//        if ((FieldParam.alpha_curv==0)&&(FieldParam.AddConstr.size()==0))
//        {
//            FieldParam.curv_thr=0.1;
            FieldParam.align_borders=true;
//        }
#ifndef COMISO_FIELD
         FieldParam.SmoothM=vcg::tri::SMNPoly;
#endif
//        std::cout<<"..Alpha.."<<FieldParam.alpha_curv<<std::endl;
//        std::cout<<"..Smoothing.."<<std::endl;

//        vcg::tri::io::ExporterPLY<MeshType>::Save(mesh,"test.ply");
//        vcg::tri::io::ImporterPLY<MeshType>::Open(mesh,"test.ply");
//        mesh.UpdateDataStructures();

        FieldSmootherType::SmoothDirections(mesh,FieldParam);


        std::cout<<"..Global Orientation.."<<std::endl;
        vcg::tri::CrossField<MeshType>::OrientDirectionFaceCoherently(mesh);
        std::cout<<"..Update Singularities.."<<std::endl;
        vcg::tri::CrossField<MeshType>::UpdateSingularByCross(mesh);
        std::cout<<"..Update Features.."<<std::endl;


        //CHANGE BUT NOT REALLY NEEDED
        mesh.UpdateDataStructures();
        mesh.SetFeatureFromTable();
    }


    static bool SaveField(MeshType &mesh,const std::string &filename)
    {
        if(filename.empty()) return false;
        vcg::tri::io::ExporterFIELD<MeshType>::Save4ROSY(mesh,filename.c_str());
        return true;
    }

};


#endif


================================================
FILE: components/field_computation/mesh_manager.h
================================================
/***************************************************************************/
/* Copyright(C) 2021


The authors of

Reliable Feature-Line Driven Quad-Remeshing
Siggraph 2021


 All rights reserved.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <https://www.gnu.org/licenses/>.
****************************************************************************/

#ifndef MESH_MANAGER
#define MESH_MANAGER

//#define MINDOT -0.99

#include <vcg/complex/complex.h>
#include <vcg/complex/algorithms/update/topology.h>
#include <vcg/complex/algorithms/update/bounding.h>
#include <vcg/simplex/face/topology.h>
#include <wrap/io_trimesh/import.h>
#include <wrap/io_trimesh/export.h>
//#include <wrap/gl/trimesh.h>
#include "AutoRemesher.h"
#include <wrap/io_trimesh/export_field.h>
#include <iostream>
#include <fstream>
#include <vcg/complex/algorithms/attribute_seam.h>
#include <vcg/complex/algorithms/crease_cut.h>
#include "mesh_field_smoother.h"
#include <vcg/complex/algorithms/polygonal_algorithms.h>

#include "fields/field_smoother.h"

// Basic subdivision class
template <class FaceType>
struct SplitLev : public   std::unary_function<vcg::face::Pos<FaceType> ,typename FaceType::CoordType >
{
    typedef typename FaceType::CoordType CoordType;
    typedef typename FaceType::VertexType VertexType;
    typedef typename FaceType::ScalarType ScalarType;

    typedef std::pair<CoordType,CoordType> CoordPair;
    std::map<CoordPair,CoordType> *SplitOps;

    void operator()(VertexType &nv,vcg::face::Pos<FaceType>  ep)
    {
        VertexType* v0=ep.f->V0(ep.z);
        VertexType* v1=ep.f->V1(ep.z);

        assert(v0!=v1);

        CoordType Pos0=v0->P();
        CoordType Pos1=v1->P();

        CoordPair CoordK(std::min(Pos0,Pos1),std::max(Pos0,Pos1));
        assert(SplitOps->count(CoordK)>0);
        nv.P()=(*SplitOps)[CoordK];
    }

    vcg::TexCoord2<ScalarType> WedgeInterp(vcg::TexCoord2<ScalarType> &t0,
                                           vcg::TexCoord2<ScalarType> &t1)
    {
        return (vcg::TexCoord2<ScalarType>(0,0));
    }

    SplitLev(std::map<CoordPair,CoordType> *_SplitOps){SplitOps=_SplitOps;}
};

template <class FaceType>
class EdgePred
{
    typedef typename FaceType::CoordType CoordType;
    typedef typename FaceType::VertexType VertexType;
    typedef std::pair<CoordType,CoordType> CoordPair;
    std::map<CoordPair,CoordType> *SplitOps;

public:

    bool operator()(vcg::face::Pos<FaceType> ep) const
    {
        VertexType* v0=ep.f->V0(ep.z);
        VertexType* v1=ep.f->V1(ep.z);

        assert(v0!=v1);

        CoordType Pos0=v0->P();
        CoordType Pos1=v1->P();

        CoordPair CoordK(std::min(Pos0,Pos1),std::max(Pos0,Pos1));

        return (SplitOps->count(CoordK)>0);
    }

    EdgePred(std::map<CoordPair,CoordType> *_SplitOps){SplitOps=_SplitOps;}
};


template <class MeshType>
class MeshPrepocess
{
    typedef typename MeshType::ScalarType ScalarType;
    typedef typename MeshType::CoordType  CoordType;

    typedef typename MeshType::VertexType    VertexType;
    typedef typename MeshType::VertexPointer VertexPointer;

    typedef typename MeshType::FaceType    FaceType;
    typedef typename MeshType::FacePointer FacePointer;

    typedef std::pair<CoordType,CoordType> CoordPair;

    static bool IsFold(const FaceType &f,
                       const size_t &IndexE,
                       ScalarType MinDot=-0.99)
    {
        if (vcg::face::IsBorder(f,IndexE))return false;
        FaceType *fOpp=f.cFFp(IndexE);
        //int IOpp=f.cFFi(IndexE);
        CoordType N0=f.cN();
        CoordType N1=fOpp->N();
        N0.Normalize();
        N1.Normalize();
        if ((N0*N1)>MinDot)return false;
        return true;
    }

    typedef SplitLev<FaceType> SplitLevType;
    typedef EdgePred<FaceType> EdgePredType;

    static bool SplitFolds(MeshType &mesh,
                           ScalarType MinDot=-0.99,
                           bool debugmsg=false)
    {
        mesh.InitFeatureCoordsTable();

        //then save the edges to be splitted
        std::map<CoordPair,CoordType> ToBeSplitted;
        for (size_t i=0;i<mesh.face.size();i++)
        {
            //find the number of edges
            for (size_t j=0;j<3;j++)
            {
                if (!IsFold(mesh.face[i],j,MinDot))continue;
                int VIndex0=vcg::tri::Index(mesh,mesh.face[i].V0(j));
                int VIndex1=vcg::tri::Index(mesh,mesh.face[i].V1(j));
                CoordType P0=mesh.vert[VIndex0].P();
                CoordType P1=mesh.vert[VIndex1].P();
                std::pair<CoordType,CoordType> Key(std::min(P0,P1),std::max(P0,P1));
                ToBeSplitted[Key]=(P0+P1)/2;
            }
        }
        if (debugmsg)
            std::cout<<"Performing "<<ToBeSplitted.size()<< " fold split ops"<<std::endl;

        SplitLev<FaceType> splMd(&ToBeSplitted);
        EdgePred<FaceType> eP(&ToBeSplitted);

        //do the final split

        size_t NumV0=mesh.vert.size();
        bool done=vcg::tri::RefineE<MeshType,SplitLevType,EdgePredType>(mesh,splMd,eP);
        size_t NumV1=mesh.vert.size();

        if (debugmsg)
            std::cout<<"Added "<<NumV1-NumV0<<" vertices"<<std::endl;


        mesh.UpdateDataStructures();
        mesh.SetFeatureFromTable();
        return done;
    }




    static void Perturb(VertexType &v,ScalarType Magnitudo)
    {
        ScalarType eps=std::numeric_limits<ScalarType>::epsilon()*Magnitudo;
        //take a random direction
        size_t granularity=10000;
        int IntX=(rand()%granularity)-granularity/2;
        int IntY=(rand()%granularity)-granularity/2;
        int IntZ=(rand()%granularity)-granularity/2;
        CoordType Dir=CoordType(IntX,IntY,IntZ);
        Dir.Normalize();
        Dir*=eps;
        //std::cout<<Dir.X()<<";"<<Dir.Y()<<";"<<Dir.Z()<<std::endl;
        v.P()+=Dir;
    }

    static size_t NumDuplicatedV(MeshType &mesh)
    {
        std::set<CoordType> Pos;
        vcg::tri::UpdateSelection<MeshType>::VertexClear(mesh);
        size_t numDupl=0;
        for (size_t i=0;i<mesh.vert.size();i++)
        {
            if (Pos.count(mesh.vert[i].P())>0)
            {
                mesh.vert[i].SetS();
                numDupl++;
            }
            Pos.insert(mesh.vert[i].P());
        }
        return numDupl;
    }

    static bool RepositionDuplicatedV(MeshType &mesh)
    {
        size_t NumD=NumDuplicatedV(mesh);
        if (NumD==0)return false;
        //int dilate_step=0;
        ScalarType Magnitudo=2;
        do
        {
            std::cout<<"Repositioning "<<NumD<<" duplicated vertices"<<std::endl;

            for (size_t i=0;i<mesh.vert.size();i++)
                if (mesh.vert[i].IsS())Perturb(mesh.vert[i],Magnitudo);

            Magnitudo*=2;

            NumD=NumDuplicatedV(mesh);
        }
        while(NumD>0);
        vcg::tri::UpdateBounding<MeshType>::Box(mesh);
        vcg::tri::UpdateNormal<MeshType>::PerVertexNormalizedPerFace(mesh);
        vcg::tri::UpdateNormal<MeshType>::PerFaceNormalized(mesh);
        return true;
    }

    static bool RemoveZeroAreaF(MeshType &mesh,bool debugmsg=false)
    {
        //        int nonManifV=0;
        //        int degF=0;
        int zeroAFace=0;
        bool modified=false;
        ScalarType Magnitudo=2;
        do{
            modified=false;
            for (size_t i=0;i<mesh.face.size();i++)
            {
                if (vcg::DoubleArea(mesh.face[i])>0)continue;
                Perturb(*mesh.face[i].V(0),Magnitudo);
                Perturb(*mesh.face[i].V(1),Magnitudo);
                Perturb(*mesh.face[i].V(2),Magnitudo);
                modified=true;
                zeroAFace++;
            }
            Magnitudo*=2;
        }while (modified);
        vcg::tri::Allocator<MeshType>::CompactEveryVector(mesh);

        if (debugmsg)
            std::cout<<"Adjusted "<<zeroAFace<<" zero area faces"<<std::endl;
        //        std::cout<<"Removed "<<degF<<" degenerate faces"<<std::endl;
        //        std::cout<<"Removed "<<zeroAFace<<" nonManifV "<<std::endl;
        mesh.UpdateDataStructures();
        return modified;
    }

    static bool RemoveSmallComponents(MeshType &mesh,size_t min_size=10)
    {
        std::vector< std::pair<int, typename MeshType::FacePointer> > CCV;
        vcg::tri::Clean<MeshType>::ConnectedComponents(mesh, CCV);
        vcg::tri::ConnectedComponentIterator<MeshType> ci;
        //vcg::tri::UpdateFlags<MeshType>::FaceClearS(*this);
        bool has_removed=false;
        for(unsigned int i=0;i<CCV.size();++i)
        {
            if (CCV[i].first>min_size)continue;
            has_removed=true;
            //std::vector<typename MeshType::FacePointer> FPV;
            for(ci.start(mesh,CCV[i].second);!ci.completed();++ci)
                vcg::tri::Allocator<MeshType>::DeleteFace(mesh,(*(*ci)));
        }
        if (has_removed)
        {
            vcg::tri::Clean<MeshType>::RemoveUnreferencedVertex(mesh);
            vcg::tri::Allocator<MeshType>::CompactEveryVector(mesh);
            mesh.UpdateDataStructures();
        }
        return has_removed;
    }

    static bool SolvePrecisionIssues(MeshType &mesh)
    {
        srand(0);
        bool HasRepositioned=false;
        bool HasSolvedZeroF=false;
        bool HasModified=false;
        do{
            HasRepositioned=RepositionDuplicatedV(mesh);
            HasSolvedZeroF=RemoveZeroAreaF(mesh);
            HasModified|=HasRepositioned;
            HasModified|=HasSolvedZeroF;
        }while (HasRepositioned || HasSolvedZeroF);
        return HasModified;
    }


    //refine the faces with 3 edge selected for field constraints
    static bool RefineInternalFacesStepFromEdgeSel(MeshType &mesh)
    {
        mesh.InitFeatureCoordsTable();
        std::vector<int> to_refine_face;
        for (size_t i=0;i<mesh.face.size();i++)
        {
            //find the number of edges
            int Num=0;
            for (size_t j=0;j<3;j++)
            {
                if (!mesh.face[i].IsFaceEdgeS(j))continue;
                Num++;
            }
            if (Num==3)
                to_refine_face.push_back(i);
        }
        if (to_refine_face.size()==0)return false;

        std::cout<<"Performing "<<to_refine_face.size()<< " face refinement ops"<<std::endl;
        for (size_t j=0;j<to_refine_face.size();j++)
        {
            int IndexF=to_refine_face[j];
            CoordType PD1=mesh.face[IndexF].PD1();
            CoordType PD2=mesh.face[IndexF].PD2();
            CoordType NewPos=(mesh.face[IndexF].P(0)+
                              mesh.face[IndexF].P(1)+
                              mesh.face[IndexF].P(2))/3;
            vcg::tri::Allocator<MeshType>::AddVertex(mesh,NewPos);
            VertexType *V0=mesh.face[IndexF].V(0);
            VertexType *V1=mesh.face[IndexF].V(1);
            VertexType *V2=mesh.face[IndexF].V(2);
            VertexType *V3=&mesh.vert.back();
            mesh.face[IndexF].V(2)=V3;
            vcg::tri::Allocator<MeshType>::AddFace(mesh,V1,V2,V3);
            mesh.face.back().PD1()=PD1;
            mesh.face.back().PD2()=PD2;
            vcg::tri::Allocator<MeshType>::AddFace(mesh,V2,V0,V3);
            mesh.face.back().PD1()=PD1;
            mesh.face.back().PD2()=PD2;
        }
        mesh.UpdateDataStructures();
        mesh.SetFeatureFromTable();
        return true;
    }


    static bool SplitAdjacentEdgeSharpFromEdgeSel(MeshType &mesh)
    {
        typedef SplitLev<FaceType> SplitLevType;
        typedef EdgePred<FaceType> EdgePredType;

        mesh.InitFeatureCoordsTable();
        vcg::tri::UpdateSelection<MeshType>::VertexClear(mesh);
        //InitFaceEdgeSelFromFeatureSeq();

        std::set<std::pair<CoordType,CoordType> > EdgePos;

        for (size_t i=0;i<mesh.face.size();i++)
        {
            for (size_t j=0;j<3;j++)
            {
                if (!mesh.face[i].IsFaceEdgeS(j))continue;
                int VIndex0=vcg::tri::Index(mesh,mesh.face[i].V0(j));
                int VIndex1=vcg::tri::Index(mesh,mesh.face[i].V1(j));
                CoordType P0=mesh.vert[VIndex0].P();
                CoordType P1=mesh.vert[VIndex1].P();
                mesh.vert[VIndex0].SetS();
                mesh.vert[VIndex1].SetS();
                EdgePos.insert(std::pair<CoordType,CoordType>(std::min(P0,P1),std::max(P0,P1)));
            }
        }

        //then save the edges to be splitted
        std::map<CoordPair,CoordType> ToBeSplitted;
        for (size_t i=0;i<mesh.face.size();i++)
        {
            //find the number of edges
            int Num=0;
            for (size_t j=0;j<3;j++)
            {
                int VIndex0=vcg::tri::Index(mesh,mesh.face[i].V0(j));
                int VIndex1=vcg::tri::Index(mesh,mesh.face[i].V1(j));
                if ((!mesh.vert[VIndex0].IsS())||(!mesh.vert[VIndex1].IsS()))continue;
                CoordType P0=mesh.vert[VIndex0].P();
                CoordType P1=mesh.vert[VIndex1].P();
                std::pair<CoordType,CoordType> Key(std::min(P0,P1),std::max(P0,P1));
                if (EdgePos.count(Key)==1){Num++;continue;}

                ToBeSplitted[Key]=(P0+P1)/2;
            }
            assert(Num<=2);//this should be already solved
        }
        std::cout<<"Performing "<<ToBeSplitted.size()<< " split ops"<<std::endl;

        SplitLevType splMd(&ToBeSplitted);
        EdgePredType eP(&ToBeSplitted);

        //do the final split
        bool done=vcg::tri::RefineE<MeshType,SplitLevType,EdgePredType >(mesh,splMd,eP);

        mesh.UpdateDataStructures();
        mesh.SetFeatureFromTable();
        return done;
    }



    static bool RemoveFolds(MeshType &mesh,
                            ScalarType MinDot=-0.99,
                            bool debugmsg=false)
    {

        mesh.InitFeatureCoordsTable();

        for (size_t i=0;i<mesh.face.size();i++)
            for (size_t j=0;j<3;j++)
                mesh.face[i].ClearFaceEdgeS(j);

        ScalarType AvgEdge=0;
        size_t Num=0;
        for (size_t i=0;i<mesh.face.size();i++)
            for (size_t j=0;j<mesh.face[i].VN();j++)
            {
                AvgEdge+=(mesh.face[i].P0(j)-mesh.face[i].P1(j)).Norm();
                Num++;
                if (vcg::face::IsBorder(mesh.face[i],j))continue;
                if (!IsFold(mesh.face[i],j,MinDot))continue;
                mesh.face[i].SetFaceEdgeS(j);
            }
        AvgEdge/=Num;

        size_t NumV0=mesh.vert.size();
        vcg::tri::CutMeshAlongSelectedFaceEdges<MeshType>(mesh);
        mesh.UpdateDataStructures();
        size_t NumV1=mesh.vert.size();

        if (debugmsg)
            std::cout<<"Added "<<NumV1-NumV0<<" vertices"<<std::endl;

        for (size_t i=NumV0;i<NumV1;i++)
            mesh.vert[i].P()+=mesh.vert[i].N()*AvgEdge*0.00001;

        mesh.SetFeatureFromTable();
        for (size_t i=0;i<mesh.face.size();i++)
            for (size_t j=0;j<(int)mesh.face[i].VN();j++)
            {
                if (!vcg::face::IsBorder(mesh.face[i],j))continue;
                mesh.face[i].SetFaceEdgeS(j);
            }
        return (NumV1>NumV0);
    }


    static bool RemoveNonManifold(MeshType &mesh)
    {
        bool modified=false;
        ScalarType interval=std::numeric_limits<float>::epsilon()*10;
        int i = 0;
        int removed = 0;
        int max_step=50;
        do
        {
            modified| vcg::tri::Clean<MeshType>::SplitNonManifoldVertex(mesh,interval);
            std::cout << "removed " << removed << " non manifold vertices..." << std::endl;
        }
        while (removed > 0 && i < max_step);

    }

    static bool MakeOrientable(MeshType &mesh)
    {
        bool oriented = false, orientable = false;
        vcg::tri::Clean<MeshType>::OrientCoherentlyMesh(mesh, oriented, orientable);
        mesh.UpdateDataStructures();
        return (!orientable);
    }

    static bool RemoveZeroAreaFaces(MeshType &mesh)
    {
        //REMOVE ZERO AREA FACES
        int cleaned=vcg::tri::Clean<MeshType>::RemoveZeroAreaFace(mesh);
        bool modified=(cleaned>0);

        if (modified)
            mesh.UpdateDataStructures();

        return modified;
    }

    static bool RemoveNonManifolds(MeshType &mesh,
                                   bool debugMsg=false)
    {
        int splitV = 0, openings = 0;
        bool modified=false;
        ScalarType interval=std::numeric_limits<float>::epsilon()*10;
        do
        {
            vcg::tri::UpdateTopology<MeshType>::FaceFace(mesh);
            splitV = vcg::tri::Clean<MeshType>::SplitNonManifoldVertex(mesh,interval);
            openings = AutoRemesher<MeshType>::openNonManifoldEdges(mesh, interval);
            modified|=(openings>0);

            if (debugMsg)
                std::cout << "Opened " << openings << " non manifold edges" << std::endl;

        } while (splitV > 0 || openings > 0);

        if (modified)
            mesh.UpdateDataStructures();

        return modified;
    }

    static bool RemoveColinearFaces(MeshType & m, const ScalarType colinearThr = 0.001)
    {
        typedef vcg::GridStaticPtr<FaceType, ScalarType> StaticGrid;

        vcg::tri::UpdateTopology<MeshType>::FaceFace(m);

        MeshType projectMesh;
        vcg::tri::Append<MeshType, MeshType>::MeshCopy(projectMesh, m);
        vcg::tri::UpdateBounding<MeshType>::Box(projectMesh);
        vcg::tri::UpdateNormal<MeshType>::PerVertexNormalizedPerFace(projectMesh);
        StaticGrid grid;
        grid.Set(projectMesh.face.begin(), projectMesh.face.end());


        int count = 0;
        int iter = 0;
        bool modified=false;
        do
        {
            vcg::tri::UpdateTopology<MeshType>::FaceFace(m);
            vcg::tri::UnMarkAll(m);

            count = 0;
            for (size_t i = 0; i < size_t(m.FN()); ++i)
            {
                FaceType & f = m.face[i];

                ScalarType quality = vcg::QualityRadii(f.cP(0), f.cP(1), f.cP(2));

                if (quality <= colinearThr)
                {
                    //find longest edge
                    double edges[3];
                    edges[0] = vcg::Distance(f.cP(0), f.cP(1));
                    edges[1] = vcg::Distance(f.cP(1), f.cP(2));
                    edges[2] = vcg::Distance(f.cP(2), f.cP(0));

                    ScalarType smallestEdge = std::min(edges[0], std::min(edges[1], edges[2]));
                    int longestIdx = std::find(edges, edges+3, std::max(std::max(edges[0], edges[1]), edges[2])) - (edges);

                    if (vcg::tri::IsMarked(m, f.V2(longestIdx)))
                        continue;


                    auto f1 = f.cFFp(longestIdx);
                    vcg::tri::Mark(m,f.V2(longestIdx));
                    if (!vcg::face::IsBorder(f, longestIdx) && vcg::face::IsManifold(f, longestIdx) && vcg::face::checkFlipEdgeNotManifold<FaceType>(f, longestIdx))  {

                        // Check if EdgeFlipping improves quality
                        FacePointer g = f.FFp(longestIdx); int k = f.FFi(longestIdx);
                        vcg::Triangle3<ScalarType> t1(f.P(longestIdx), f.P1(longestIdx), f.P2(longestIdx)), t2(g->P(k), g->P1(k), g->P2(k)),
                                t3(f.P(longestIdx), g->P2(k), f.P2(longestIdx)), t4(g->P(k), f.P2(longestIdx), g->P2(k));

                        auto n1 = vcg::TriangleNormal(t1);
                        auto n2 = vcg::TriangleNormal(t2);
                        auto n3 = vcg::TriangleNormal(t3);
                        auto n4 = vcg::TriangleNormal(t4);

                        auto biggestSmallest = vcg::DoubleArea(t1) > vcg::DoubleArea(t2) ? std::make_pair(t1, t2) : std::make_pair(t2, t1);
                        auto areaRatio = vcg::DoubleArea(biggestSmallest.first) / vcg::DoubleArea(biggestSmallest.second);

                        bool normalCheck = true;
                        //                        if (n1.Norm() > 0.001 && n2.Norm() > 0.001)
                        {
                            auto referenceNormal = vcg::NormalizedTriangleNormal(biggestSmallest.first);

                            normalCheck &= vcg::NormalizedTriangleNormal(t3) * referenceNormal >= 0.95;
                            normalCheck &= vcg::NormalizedTriangleNormal(t4) * referenceNormal >= 0.95;
                        }

                        bool areaCheck = false;
                        if (areaRatio > 1000)
                        {
                            areaCheck |= vcg::DoubleArea(t3) / vcg::DoubleArea(biggestSmallest.second) > 1000 && vcg::DoubleArea(t4) / vcg::DoubleArea(biggestSmallest.second) > 1000;
                        }

                        if ((normalCheck) && (areaCheck || std::min( QualityFace(t1), QualityFace(t2) ) <= std::min( QualityFace(t3), QualityFace(t4))))
                        {
                            ScalarType dist;
                            CoordType closest;
                            auto fp0 = vcg::tri::GetClosestFaceBase(projectMesh, grid, vcg::Barycenter(t3), smallestEdge/4., dist, closest);
                            if (fp0 == NULL)
                                continue;

                            auto fp1 = vcg::tri::GetClosestFaceBase(projectMesh, grid, vcg::Barycenter(t4), smallestEdge/4., dist, closest);
                            if (fp1 == NULL)
                                continue;

                            vcg::face::FlipEdgeNotManifold<FaceType>(f, longestIdx);
                            modified=true;
                            ++count;
                        }
                    }
                }
            }
        } while (count && ++iter < 75);
        if (modified)
            m.UpdateDataStructures();

        return modified;
    }

public:

    static bool SolveGeometricArtifactsStep(MeshType &mesh)
    {
        bool modified=false;

//        //REMOVE COLLINEAR FACES
        modified|=RemoveColinearFaces(mesh);

        //REMOVE ZERO AREA FACES
        modified|=RemoveZeroAreaFaces(mesh);

        //SPLIT NON MANIFOLD FACES
        modified|=RemoveNonManifolds(mesh);

        //REMOVE MINIMAL CONNECTED COMPONENTS
        modified|=RemoveSmallComponents(mesh);

        //MAKE ORIENTABLE
        modified|=MakeOrientable(mesh);

        //SOLVE POSSIBLE PRECISION ISSUES
        modified|=SolvePrecisionIssues(mesh);

//        //THEN SPLIT OR REMOVE 180 FOLDS
        modified|=SplitFolds(mesh);
        modified|=RemoveFolds(mesh);

//        //REMOVE POSSIBLE PRECISION ISSUES
        modified|=SolvePrecisionIssues(mesh);

        return modified;
    }

public:

    static void SolveGeometricArtifacts(MeshType &mesh,size_t max_steps=10)
    {
        size_t currS=0;
        while ((SolveGeometricArtifactsStep(mesh))&&(currS<max_steps))
            currS++;

        //AutoRemesher<MeshType>::collapseSurvivingMicroEdges(mesh,0.001, const ScalarType edgeRatio = 0.025);

        vcg::tri::Allocator<MeshType>::CompactEveryVector(mesh);
        mesh.UpdateDataStructures();
    }

    static void RefineIfNeeded(MeshType &mesh)
    {

        mesh.UpdateDataStructures();
        bool has_refined=false;
        do
        {
            has_refined=false;
            has_refined|=RefineInternalFacesStepFromEdgeSel(mesh);
            //SolvePrecisionIssues(mesh);//CHECK
            has_refined|=SplitAdjacentEdgeSharpFromEdgeSel(mesh);
            //SolvePrecisionIssues(mesh);//CHECK

            //has_refined|=SplitAdjacentTerminalVertices();
            //has_refined|=SplitEdgeSharpSharingVerticesFromEdgeSel();
        }while (has_refined);
        mesh.InitEdgeType();
    }

    static void InitSharpFeatures(MeshType &mesh,
                                  ScalarType sharp_feature_thr,
                                  size_t feature_erode_dilate)
    {
        mesh.UpdateDataStructures();
        mesh.InitSharpFeatures(sharp_feature_thr);
        mesh.ErodeDilate(feature_erode_dilate);
    }

    struct BatchParam
    {
        bool UpdateSharp=true;
        bool DoRemesh=true;
        bool surf_dist_check=true;
        ScalarType sharp_feature_thr=35;
        size_t feature_erode_dilate=4;
        ScalarType SharpFactor=6;
        size_t remesher_iterations=15;
        ScalarType remesher_aspect_ratio=0.3;
        ScalarType remesher_termination_delta = 10000;
    };

    static void BatchProcess(MeshType &mesh,BatchParam &BPar,
                             typename vcg::tri::FieldSmoother<MeshType>::SmoothParam &FieldParam)
    {
        mesh.UpdateDataStructures();

        // SELECT SHARP FEATURES
        if (BPar.UpdateSharp)
            MeshPrepocess<MeshType>::InitSharpFeatures(mesh,BPar.sharp_feature_thr,BPar.feature_erode_dilate);

//        MeshPrepocess<MeshType>::SolveGeometricArtifacts(mesh);

//        // SELECT SHARP FEATURES
//        if (BPar.UpdateSharp)
//            MeshPrepocess<MeshType>::InitSharpFeatures(mesh,BPar.sharp_feature_thr,BPar.feature_erode_dilate);

        //DO REMESH IF NEEDED
        if (BPar.DoRemesh)
        {
            typename AutoRemesher<MeshType>::Params RemPar;
            RemPar.iterations   = BPar.remesher_iterations;
            RemPar.targetAspect = BPar.remesher_aspect_ratio;
            RemPar.targetDeltaFN= BPar.remesher_termination_delta;
            RemPar.surfDistCheck = BPar.surf_dist_check;

            //AutoRemesher<MeshType>::Remesh2(mesh,RemPar);
            AutoRemesher<MeshType>::RemeshAdapt(mesh,RemPar);

        }
        mesh.InitFeatureCoordsTable();

//        //THEN UPDATE SHARP FEATURES
//        if (BPar.UpdateSharp)
//            MeshPrepocess<MeshType>::InitSharpFeatures(mesh,BPar.sharp_feature_thr,BPar.feature_erode_dilate);


        //SOLVE POSSIBLE GEOMETRIC ARTIFACTS AFTER REFINEMENT
        MeshPrepocess<MeshType>::SolveGeometricArtifacts(mesh);

        //REFINE THE MESH IF NEEDED TO BE CONSISTENT WHEN COMPUTING FIELD
        MeshPrepocess<MeshType>::RefineIfNeeded(mesh);

//        //THEN UPDATE SHARP FEATURES
//        if (BPar.UpdateSharp)
//            MeshPrepocess<MeshType>::InitSharpFeatures(mesh,BPar.sharp_feature_thr,BPar.feature_erode_dilate);
//        mesh.ErodeDilate(BPar.feature_erode_dilate);

        MeshFieldSmoother<MeshType>::AutoSetupParam(mesh,FieldParam,BPar.SharpFactor);

        //THEN SMOOTH THE FIELD
        std::cout << "[fieldComputation] Smooth Field Computation..." << std::endl;
        MeshFieldSmoother<MeshType>::SmoothField(mesh,FieldParam);
    }

    static void SaveAllData(MeshType &tri_mesh,const std::string &pathM)
    {
        std::string projM=pathM;
        size_t indexExt=projM.find_last_of(".");
        projM=projM.substr(0,indexExt);
        std::string meshName=projM+std::string("_rem.obj");
        std::string fieldName=projM+std::string("_rem.rosy");
        std::string sharpName=projM+std::string("_rem.sharp");
        std::cout<<"Saving Mesh TO:"<<meshName.c_str()<<std::endl;
        std::cout<<"Saving Field TO:"<<fieldName.c_str()<<std::endl;
        std::cout<<"Saving Sharp TO:"<<sharpName.c_str()<<std::endl;
        tri_mesh.SaveTriMesh(meshName.c_str());
        tri_mesh.SaveField(fieldName.c_str());
        tri_mesh.SaveSharpFeatures(sharpName.c_str());
    }

};




#endif


================================================
FILE: components/field_computation/poly_mesh_type.h
================================================
/***************************************************************************/
/* Copyright(C) 2021


The authors of

Reliable Feature-Line Driven Quad-Remeshing
Siggraph 2021


 All rights reserved.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <https://www.gnu.org/licenses/>.
****************************************************************************/

#ifndef POLY_MESH_TYPE
#define POLY_MESH_TYPE

#include <vcg/complex/complex.h>
#include <vcg/complex/algorithms/polygonal_algorithms.h>

#ifdef MIQ_QUADRANGULATE
class PolyFace;
class PolyVertex;

struct PUsedTypes: public vcg::UsedTypes<vcg::Use<PolyVertex>  ::AsVertexType,
        vcg::Use<PolyFace>	::AsFaceType>{};

class PolyVertex:public vcg::Vertex<	PUsedTypes,
        vcg::vertex::Coord3d,
        vcg::vertex::Normal3d,
        vcg::vertex::Mark,
        vcg::vertex::BitFlags,
        vcg::vertex::Qualityd,
        vcg::vertex::TexCoord2d>{} ;

class PolyFace:public vcg::Face<
        PUsedTypes
        ,vcg::face::PolyInfo
        ,vcg::face::PFVAdj
        ,vcg::face::PFFAdj
        ,vcg::face::BitFlags
        ,vcg::face::Normal3d
        ,vcg::face::Color4b
        ,vcg::face::Qualityd      // face quality.
        ,vcg::face::BitFlags
        ,vcg::face::Mark
        ,vcg::face::CurvatureDird> {
};

class PMesh: public
        vcg::tri::TriMesh<
        std::vector<PolyVertex>,	// the vector of vertices
        std::vector<PolyFace >     // the vector of faces
        >
{
public:

    void TriangulateQuadBySplit(size_t IndexF)
    {

        size_t sizeV=face[IndexF].VN();
        assert(sizeV==4);

        //then reupdate the faces
        VertexType * v0=face[IndexF].V(0);
        VertexType * v1=face[IndexF].V(1);
        VertexType * v2=face[IndexF].V(2);
        VertexType * v3=face[IndexF].V(3);

        face[IndexF].Dealloc();
        face[IndexF].Alloc(3);
        face[IndexF].V(0)=v0;
        face[IndexF].V(1)=v1;
        face[IndexF].V(2)=v3;

        vcg::tri::Allocator<PMesh>::AddFaces(*this,1);

        face.back().Alloc(3);
        face.back().V(0)=v1;
        face.back().V(1)=v2;
        face.back().V(2)=v3;
    }

    void TriangulateQuadBySplit()
    {
        for (size_t i=0;i<face.size();i++)
        {
            if(face[i].VN()!=4)continue;
            TriangulateQuadBySplit(i);
        }
    }
    void GLDraw(bool DrawEdges=true)
    {

        glPushAttrib(GL_ALL_ATTRIB_BITS);

        glDepthRange(0.000001,1);

        glEnable(GL_LIGHTING);

        glDisable(GL_CULL_FACE);
        glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_FALSE);

        for(unsigned int i=0; i<face.size(); i++)
        {
            vcg::glColor(face[i].C());

            if(face[i].IsD())  continue;
            //if(face[i].Filtered) continue;

            vcg::glNormal(face[i].N());

            glBegin(GL_POLYGON);
            for(int j=0; j<face[i].VN(); j++)
                vcg::glVertex( face[i].V(j)->P() );

            glEnd();

        }

        //DrawEdgeSmoothPairs();

        if (DrawEdges)
        {
            glDepthRange(0.0,0.999999);
            glDisable(GL_LIGHTING);

            //            vcg::glColor(vcg::Color4b(255,0,0,255));
            //            for(unsigned int i=0; i<vert.size(); i++)
            //            {
            //                if (!vert[i].Irregular)continue;
            //                glPointSize(20);
            //                glBegin(GL_POINTS);
            //                vcg::glVertex( vert[i].P());
            //                glEnd();
            //            }
            for(unsigned int i=0; i<face.size(); i++)
            {
                if(face[i].IsD())  continue;
                int size=face[i].VN();
                for(int j=0; j<face[i].VN(); j++)
                {

                    glLineWidth(4);
                    vcg::glColor(vcg::Color4b(0,0,0,255));

                    CoordType pos0=face[i].V(j)->P();
                    CoordType pos1=face[i].V((j+1)%size)->P();

                    glBegin(GL_LINES);
                    vcg::glVertex( pos0);
                    vcg::glVertex( pos1);
                    glEnd();
                }
            }
        }
        //glEnd();
        glPopAttrib();

    }

    void UpdateNormal()
    {
        vcg::PolygonalAlgorithm<PMesh>::UpdateFaceNormalByFitting(*this);
        vcg::tri::UpdateNormal<PMesh>::PerVertexNormalized(*this);
    }

    void UpdateAttributes()
    {
        UpdateNormal();
        vcg::tri::UpdateBounding<PMesh>::Box(*this);
        vcg::tri::UpdateTopology<PMesh>::FaceFace(*this);
        //vcg::PolygonalAlgorithm<QuadMeshC>::UpdateBorderVertexFromPFFAdj(*this);
        vcg::tri::UpdateFlags<PMesh>::VertexBorderFromFaceAdj(*this);

    }
};
#endif



#endif


================================================
FILE: components/field_computation/triangle_mesh_type.h
================================================
/***************************************************************************/
/* Copyright(C) 2021


The authors of

Reliable Feature-Line Driven Quad-Remeshing
Siggraph 2021


 All rights reserved.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <https://www.gnu.org/licenses/>.
****************************************************************************/

#ifndef MY_TRI_MESH_TYPE
#define MY_TRI_MESH_TYPE

//#define MINDOT -0.99

#include <vcg/complex/complex.h>
#include <vcg/complex/algorithms/update/topology.h>
#include <vcg/complex/algorithms/update/bounding.h>
#include <vcg/simplex/face/topology.h>
#include <wrap/io_trimesh/import.h>
#include <wrap/io_trimesh/export.h>
//#include <wrap/gl/trimesh.h>
//
#include <wrap/io_trimesh/export_field.h>
#include <wrap/io_trimesh/import_field.h>
#include <iostream>
#include <fstream>
#include <vcg/complex/algorithms/attribute_seam.h>
#include <vcg/complex/algorithms/crease_cut.h>
#include "fields/field_smoother.h"


class FieldTriFace;
//class MyTriEdge;
class FieldTriVertex;

enum FeatureKind{ETConcave,ETConvex,ETNone};

struct TriUsedTypes: public vcg::UsedTypes<vcg::Use<FieldTriVertex>::AsVertexType,
        //vcg::Use<MyTriEdge>::AsEdgeType,
        vcg::Use<FieldTriFace>::AsFaceType>{};

class FieldTriVertex:public vcg::Vertex<TriUsedTypes,
        vcg::vertex::Coord3d,
        vcg::vertex::Color4b,
        vcg::vertex::Normal3d,
        vcg::vertex::VFAdj,
        vcg::vertex::BitFlags,
        vcg::vertex::CurvatureDird,
        vcg::vertex::Qualityd,
        vcg::vertex::TexCoord2d,
        vcg::vertex::Mark>
{
};

class FieldTriFace:public vcg::Face<TriUsedTypes,
        vcg::face::VertexRef,
        vcg::face::VFAdj,
        vcg::face::FFAdj,
        vcg::face::BitFlags,
        vcg::face::Normal3d,
        vcg::face::CurvatureDird,
        vcg::face::Color4b,
        vcg::face::Qualityd,
        vcg::face::WedgeTexCoord2d,
        vcg::face::Mark>
{

public:

    size_t IndexOriginal;

    void ImportData(const FieldTriFace  & left )
    {
        IndexOriginal=left.IndexOriginal;
        vcg::Face<TriUsedTypes,
                vcg::face::VertexRef,
                vcg::face::VFAdj,
                vcg::face::FFAdj,
                vcg::face::BitFlags,
                vcg::face::Normal3d,
                vcg::face::CurvatureDird,
                vcg::face::Color4b,
                vcg::face::Qualityd,
                vcg::face::WedgeTexCoord2d,
                vcg::face::Mark>::ImportData(left);
    }

    FeatureKind FKind[3];
};

//enum GoemPrecondition{NOVertManifold,NOFaceManifold,
//                      DegenerateFace,DegenerateVertex,
//                      UnreferencedVert,
//                      IsOk};


class FieldTriMesh: public vcg::tri::TriMesh< std::vector<FieldTriVertex>,
        //std::vector<MyTriEdge>,
        std::vector<FieldTriFace > >
{
    typedef std::pair<CoordType,CoordType> CoordPair;
    std::set< CoordPair > Featur
Download .txt
Showing preview only (217K chars total). Download the full file or copy to clipboard to get everything.
gitextract_86hlkog7/

├── .gitignore
├── .gitmodules
├── LICENSE
├── README.md
├── components/
│   ├── field_computation/
│   │   ├── AutoRemesher.h
│   │   ├── AutoRemesherMio.h
│   │   ├── basic_setup.txt
│   │   ├── basic_setup_mechanical.txt
│   │   ├── basic_setup_organic.txt
│   │   ├── compute_field_300_mechanical.command
│   │   ├── compute_field_300_organic.command
│   │   ├── field_computation
│   │   ├── field_computation.pro
│   │   ├── fields/
│   │   │   ├── field_smoother.h
│   │   │   ├── n_polyvector.cpp
│   │   │   ├── n_polyvector.h
│   │   │   ├── polyroots.cpp
│   │   │   └── polyroots.h
│   │   ├── gl_utils.h
│   │   ├── glwidget.cpp
│   │   ├── glwidget.h
│   │   ├── main.cpp
│   │   ├── mesh_field_smoother.h
│   │   ├── mesh_manager.h
│   │   ├── poly_mesh_type.h
│   │   └── triangle_mesh_type.h
│   ├── field_tracing/
│   │   ├── basic_setup.txt
│   │   ├── field_tracing
│   │   ├── field_tracing.pro
│   │   ├── glwidget.cpp
│   │   ├── glwidget.h
│   │   ├── main.cpp
│   │   ├── moc_glwidget.cpp
│   │   ├── trace_field_300_mechanical.command
│   │   └── trace_field_300_organic.command
│   ├── quad_from_patches/
│   │   ├── basic_setup.txt
│   │   ├── configuration.pri
│   │   ├── field_smoother.h
│   │   ├── load_save.cpp
│   │   ├── load_save.h
│   │   ├── local_para_smooth.h
│   │   ├── main.cpp
│   │   ├── mesh_types.h
│   │   ├── quad_from_patches.cpp
│   │   ├── quad_from_patches.h
│   │   ├── quad_from_patches.pro
│   │   ├── quad_mesh_tracer.cpp
│   │   ├── quad_mesh_tracer.h
│   │   ├── quadrangulate_300_mechanical.command
│   │   ├── quadrangulate_300_organic.command
│   │   ├── quadrangulate_loopy_cuts.command
│   │   ├── quadrangulatedataset.sh
│   │   ├── smooth_mesh.h
│   │   ├── test_edge.obj
│   │   ├── test_tri.obj
│   │   └── test_tri.obj.mtl
│   ├── results_processing/
│   │   ├── lazy_website/
│   │   │   └── index.php
│   │   ├── libs.pri
│   │   ├── orientability_check/
│   │   │   ├── main.cpp
│   │   │   ├── mesh_def.h
│   │   │   ├── orientability_check.pro
│   │   │   └── readme.txt
│   │   ├── polyMetrics/
│   │   │   ├── external/
│   │   │   │   ├── matplotlib-cpp/
│   │   │   │   │   ├── .gitignore
│   │   │   │   │   ├── LICENSE
│   │   │   │   │   ├── LICENSE.matplotlib
│   │   │   │   │   ├── README.md
│   │   │   │   │   ├── contrib/
│   │   │   │   │   │   ├── CMakeLists.txt
│   │   │   │   │   │   └── README.md
│   │   │   │   │   ├── examples/
│   │   │   │   │   │   ├── .gitignore
│   │   │   │   │   │   ├── animation.cpp
│   │   │   │   │   │   ├── bar.cpp
│   │   │   │   │   │   ├── basic.cpp
│   │   │   │   │   │   ├── fill.cpp
│   │   │   │   │   │   ├── fill_inbetween.cpp
│   │   │   │   │   │   ├── imshow.cpp
│   │   │   │   │   │   ├── minimal.cpp
│   │   │   │   │   │   ├── modern.cpp
│   │   │   │   │   │   ├── nonblock.cpp
│   │   │   │   │   │   ├── quiver.cpp
│   │   │   │   │   │   ├── subplot.cpp
│   │   │   │   │   │   ├── subplot2grid.cpp
│   │   │   │   │   │   ├── surface.cpp
│   │   │   │   │   │   ├── update.cpp
│   │   │   │   │   │   └── xkcd.cpp
│   │   │   │   │   ├── matplotlibcpp.h
│   │   │   │   │   └── numpy_flags.py
│   │   │   │   └── nlohmann/
│   │   │   │       └── json.hpp
│   │   │   ├── main.cpp
│   │   │   ├── mesh_def.h
│   │   │   ├── polyMetrics.pro
│   │   │   └── readme.txt
│   │   └── snapshotRenderer/
│   │       ├── blenderBatchFolderRender.py
│   │       ├── blenderBatchRender.py
│   │       ├── readme.txt
│   │       └── snapshots.blend
│   └── viz_mesh_results/
│       ├── configuration.pri
│       ├── main.cpp
│       ├── mesh_types.h
│       ├── viz_mesh_result
│       └── viz_mesh_results.pro
├── libs/
│   ├── CoMISo/
│   │   ├── CHANGELOG
│   │   ├── CMakeLists LIBIGL.txt
│   │   ├── CMakeLists.txt
│   │   ├── CMakeListsOLD.txt
│   │   ├── COPYING
│   │   ├── CoMISo.cmake
│   │   ├── CoMISo_BUILD_LINUX.txt
│   │   ├── Config/
│   │   │   ├── CoMISoDefines.hh
│   │   │   ├── config.hh
│   │   │   └── config.hh.in
│   │   ├── EigenSolver/
│   │   │   ├── ArpackSolver.cc
│   │   │   ├── ArpackSolver.hh
│   │   │   ├── EigenArpackMatrixT.cc
│   │   │   └── EigenArpackMatrixT.hh
│   │   ├── Examples/
│   │   │   ├── factored_solver/
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   └── main.cc
│   │   │   ├── quadratic_solver/
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   └── main.cc
│   │   │   ├── small_eigenproblem/
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   └── main.cc
│   │   │   ├── small_factored_example/
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   └── main.cc
│   │   │   ├── small_miqp/
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   └── main.cc
│   │   │   ├── small_nleast_squares/
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   └── main.cc
│   │   │   ├── small_nsolver/
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   └── main.cc
│   │   │   ├── small_quadratic_example/
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   └── main.cc
│   │   │   ├── small_quadratic_resolve_example/
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   └── main.cc
│   │   │   └── small_sparseqr/
│   │   │       ├── CMakeLists.txt
│   │   │       └── main.cc
│   │   ├── NSolver/
│   │   │   ├── BoundConstraint.cc
│   │   │   ├── BoundConstraint.hh
│   │   │   ├── COMISOSolver.cc
│   │   │   ├── COMISOSolver.hh
│   │   │   ├── CPLEXSolver.cc
│   │   │   ├── CPLEXSolver.hh
│   │   │   ├── CPLEXSolverT.cc
│   │   │   ├── GUROBISolver.cc
│   │   │   ├── GUROBISolver.hh
│   │   │   ├── GurobiHelper.cc
│   │   │   ├── GurobiHelper.hh
│   │   │   ├── IPOPTSolver.cc
│   │   │   ├── IPOPTSolver.hh
│   │   │   ├── LeastSquaresProblem.cc
│   │   │   ├── LeastSquaresProblem.hh
│   │   │   ├── LinearConstraint.cc
│   │   │   ├── LinearConstraint.hh
│   │   │   ├── LinearConstraintHandlerElimination.cc
│   │   │   ├── LinearConstraintHandlerElimination.hh
│   │   │   ├── LinearConstraintHandlerEliminationT.cc
│   │   │   ├── LinearConstraintHandlerPenalty.cc
│   │   │   ├── LinearConstraintHandlerPenalty.hh
│   │   │   ├── LinearConstraintHandlerPenaltyT.cc
│   │   │   ├── NConstraintInterface.hh
│   │   │   ├── NPDerivativeChecker.hh
│   │   │   ├── NPLinearConstraints.cc
│   │   │   ├── NPLinearConstraints.hh
│   │   │   ├── NPLinearConstraintsT.cc
│   │   │   ├── NPTiming.cc
│   │   │   ├── NPTiming.hh
│   │   │   ├── NProblemGmmInterface.hh
│   │   │   ├── NProblemInterface.cc
│   │   │   ├── NProblemInterface.hh
│   │   │   ├── NewtonSolver.cc
│   │   │   ├── NewtonSolver.hh
│   │   │   ├── SuperSparseMatrixT.cc
│   │   │   ├── SuperSparseMatrixT.hh
│   │   │   ├── TAOSolver.cc
│   │   │   ├── TAOSolver.hh
│   │   │   ├── TestInterface.hh
│   │   │   └── VariableType.hh
│   │   ├── QtWidgets/
│   │   │   ├── MISolverDialogUI.cc
│   │   │   ├── MISolverDialogUI.hh
│   │   │   └── QtMISolverDialogBaseUI.ui
│   │   ├── README.txt
│   │   ├── Solver/
│   │   │   ├── CholmodSolver.cc
│   │   │   ├── CholmodSolver.hh
│   │   │   ├── CholmodSolverT.cc
│   │   │   ├── ConstrainedSolver.cc
│   │   │   ├── ConstrainedSolver.hh
│   │   │   ├── ConstrainedSolverT.cc
│   │   │   ├── EigenLDLTSolver.cc
│   │   │   ├── EigenLDLTSolver.hh
│   │   │   ├── EigenLDLTSolverT.cc
│   │   │   ├── Eigen_Tools.cc
│   │   │   ├── Eigen_Tools.hh
│   │   │   ├── GMM_Tools.cc
│   │   │   ├── GMM_Tools.hh
│   │   │   ├── IterativeSolverT.cc
│   │   │   ├── IterativeSolverT.hh
│   │   │   ├── MISolver.cc
│   │   │   ├── MISolver.hh
│   │   │   ├── MISolverT.cc
│   │   │   ├── SparseQRSolver.cc
│   │   │   ├── SparseQRSolver.hh
│   │   │   ├── SparseQRSolverT.cc
│   │   │   ├── TaucsSolver.cc
│   │   │   ├── TaucsSolver.hh
│   │   │   ├── TaucsSolverT.cc
│   │   │   ├── UMFPACKSolver.cc
│   │   │   ├── UMFPACKSolver.hh
│   │   │   └── UMFPACKSolverT.cc
│   │   ├── Utils/
│   │   │   ├── MutablePriorityQueueT.hh
│   │   │   ├── StopWatch.hh
│   │   │   └── VSToolsT.hh
│   │   ├── VERSION
│   │   ├── cmake/
│   │   │   ├── ACGCommon.cmake
│   │   │   ├── ACGCompiler.cmake
│   │   │   ├── ACGOutput.cmake
│   │   │   ├── CGAL_FindPackageHandleStandardArgs.cmake
│   │   │   ├── CGAL_GeneratorSpecificSettings.cmake
│   │   │   ├── CGAL_Locate_CGAL_TAUCS.cmake
│   │   │   ├── CGAL_Macros.cmake
│   │   │   ├── CheckCSourceRuns.cmake
│   │   │   ├── CoMISoExample.cmake
│   │   │   ├── FindARPACK.cmake
│   │   │   ├── FindBLAS.cmake
│   │   │   ├── FindCGAL.cmake
│   │   │   ├── FindCPLEX.cmake
│   │   │   ├── FindCoMISo.cmake
│   │   │   ├── FindEigen3.cmake
│   │   │   ├── FindGMM.cmake
│   │   │   ├── FindGMP.cmake
│   │   │   ├── FindGUROBI.cmake
│   │   │   ├── FindIPOPT.cmake
│   │   │   ├── FindLAPACK.cmake
│   │   │   ├── FindMETIS.cmake
│   │   │   ├── FindMPI.cmake
│   │   │   ├── FindMUMPS.cmake
│   │   │   ├── FindPETSC.cmake
│   │   │   ├── FindPackageHandleStandardArgs.cmake
│   │   │   ├── FindPackageMultipass.cmake
│   │   │   ├── FindQt4.cmake
│   │   │   ├── FindSUITESPARSE.cmake
│   │   │   ├── FindTAO.cmake
│   │   │   ├── FindTaucs.cmake
│   │   │   └── ResolveCompilerPaths.cmake
│   │   └── gmm/
│   │       ├── AUTHORS
│   │       ├── COPYING
│   │       ├── ChangeLog
│   │       ├── INSTALL
│   │       ├── Makefile.am
│   │       ├── Makefile.in
│   │       ├── NEWS
│   │       ├── README
│   │       ├── aclocal.m4
│   │       ├── config.guess
│   │       ├── config.h.in
│   │       ├── config.sub
│   │       ├── configure
│   │       ├── configure.in
│   │       ├── depcomp
│   │       ├── gmm-config.in
│   │       ├── include/
│   │       │   ├── Makefile.am
│   │       │   ├── Makefile.in
│   │       │   └── gmm/
│   │       │       ├── gmm.h
│   │       │       ├── gmm_MUMPS_interface.h
│   │       │       ├── gmm_algobase.h
│   │       │       ├── gmm_blas.h
│   │       │       ├── gmm_blas_interface.h
│   │       │       ├── gmm_condition_number.h
│   │       │       ├── gmm_conjugated.h
│   │       │       ├── gmm_def.h
│   │       │       ├── gmm_dense_Householder.h
│   │       │       ├── gmm_dense_lu.h
│   │       │       ├── gmm_dense_qr.h
│   │       │       ├── gmm_dense_sylvester.h
│   │       │       ├── gmm_domain_decomp.h
│   │       │       ├── gmm_except.h
│   │       │       ├── gmm_inoutput.h
│   │       │       ├── gmm_interface.h
│   │       │       ├── gmm_interface_bgeot.h
│   │       │       ├── gmm_iter.h
│   │       │       ├── gmm_iter_solvers.h
│   │       │       ├── gmm_kernel.h
│   │       │       ├── gmm_lapack_interface.h
│   │       │       ├── gmm_least_squares_cg.h
│   │       │       ├── gmm_matrix.h
│   │       │       ├── gmm_modified_gram_schmidt.h
│   │       │       ├── gmm_opt.h
│   │       │       ├── gmm_precond.h
│   │       │       ├── gmm_precond_diagonal.h
│   │       │       ├── gmm_precond_ildlt.h
│   │       │       ├── gmm_precond_ildltt.h
│   │       │       ├── gmm_precond_ilu.h
│   │       │       ├── gmm_precond_ilut.h
│   │       │       ├── gmm_precond_ilutp.h
│   │       │       ├── gmm_precond_mr_approx_inverse.h
│   │       │       ├── gmm_range_basis.h
│   │       │       ├── gmm_real_part.h
│   │       │       ├── gmm_ref.h
│   │       │       ├── gmm_scaled.h
│   │       │       ├── gmm_solver_Schwarz_additive.h
│   │       │       ├── gmm_solver_bfgs.h
│   │       │       ├── gmm_solver_bicgstab.h
│   │       │       ├── gmm_solver_cg.h
│   │       │       ├── gmm_solver_constrained_cg.h
│   │       │       ├── gmm_solver_gmres.h
│   │       │       ├── gmm_solver_idgmres.h
│   │       │       ├── gmm_solver_qmr.h
│   │       │       ├── gmm_std.h
│   │       │       ├── gmm_sub_index.h
│   │       │       ├── gmm_sub_matrix.h
│   │       │       ├── gmm_sub_vector.h
│   │       │       ├── gmm_superlu_interface.h
│   │       │       ├── gmm_transposed.h
│   │       │       ├── gmm_tri_solve.h
│   │       │       ├── gmm_vector.h
│   │       │       └── gmm_vector_to_matrix.h
│   │       ├── install-sh
│   │       ├── ltmain.sh
│   │       ├── m4/
│   │       │   ├── ax_check_cxx_flag.m4
│   │       │   ├── ax_prefix_config_h.m4
│   │       │   ├── libtool.m4
│   │       │   ├── ltoptions.m4
│   │       │   ├── ltsugar.m4
│   │       │   ├── ltversion.m4
│   │       │   └── lt~obsolete.m4
│   │       ├── missing
│   │       └── tests/
│   │           ├── Makefile.am
│   │           ├── Makefile.in
│   │           ├── dummy.cc
│   │           ├── gmm_torture01_lusolve.cc
│   │           ├── gmm_torture02_baseop.cc
│   │           ├── gmm_torture05_mult.cc
│   │           ├── gmm_torture06_mat_mult.cc
│   │           ├── gmm_torture10_qr.cc
│   │           ├── gmm_torture15_sub.cc
│   │           ├── gmm_torture20_iterative_solvers.cc
│   │           └── make_gmm_test.pl
│   ├── eigen/
│   │   ├── CMakeLists.txt
│   │   ├── COPYING.BSD
│   │   ├── COPYING.GPL
│   │   ├── COPYING.LGPL
│   │   ├── COPYING.MINPACK
│   │   ├── COPYING.MPL2
│   │   ├── COPYING.README
│   │   ├── CTestConfig.cmake
│   │   ├── CTestCustom.cmake.in
│   │   ├── Eigen/
│   │   │   ├── Array
│   │   │   ├── CMakeLists.txt
│   │   │   ├── Cholesky
│   │   │   ├── CholmodSupport
│   │   │   ├── Core
│   │   │   ├── Dense
│   │   │   ├── Eigen
│   │   │   ├── Eigen2Support
│   │   │   ├── Eigenvalues
│   │   │   ├── Geometry
│   │   │   ├── Householder
│   │   │   ├── IterativeLinearSolvers
│   │   │   ├── Jacobi
│   │   │   ├── LU
│   │   │   ├── LeastSquares
│   │   │   ├── MetisSupport
│   │   │   ├── OrderingMethods
│   │   │   ├── PaStiXSupport
│   │   │   ├── PardisoSupport
│   │   │   ├── QR
│   │   │   ├── QtAlignedMalloc
│   │   │   ├── SPQRSupport
│   │   │   ├── SVD
│   │   │   ├── Sparse
│   │   │   ├── SparseCholesky
│   │   │   ├── SparseCore
│   │   │   ├── SparseLU
│   │   │   ├── SparseQR
│   │   │   ├── StdDeque
│   │   │   ├── StdList
│   │   │   ├── StdVector
│   │   │   ├── SuperLUSupport
│   │   │   ├── UmfPackSupport
│   │   │   └── src/
│   │   │       ├── CMakeLists.txt
│   │   │       ├── Cholesky/
│   │   │       │   ├── CMakeLists.txt
│   │   │       │   ├── LDLT.h
│   │   │       │   ├── LLT.h
│   │   │       │   └── LLT_MKL.h
│   │   │       ├── CholmodSupport/
│   │   │       │   ├── CMakeLists.txt
│   │   │       │   └── CholmodSupport.h
│   │   │       ├── Core/
│   │   │       │   ├── Array.h
│   │   │       │   ├── ArrayBase.h
│   │   │       │   ├── ArrayWrapper.h
│   │   │       │   ├── Assign.h
│   │   │       │   ├── Assign_MKL.h
│   │   │       │   ├── BandMatrix.h
│   │   │       │   ├── Block.h
│   │   │       │   ├── BooleanRedux.h
│   │   │       │   ├── CMakeLists.txt
│   │   │       │   ├── CommaInitializer.h
│   │   │       │   ├── CoreIterators.h
│   │   │       │   ├── CwiseBinaryOp.h
│   │   │       │   ├── CwiseNullaryOp.h
│   │   │       │   ├── CwiseUnaryOp.h
│   │   │       │   ├── CwiseUnaryView.h
│   │   │       │   ├── DenseBase.h
│   │   │       │   ├── DenseCoeffsBase.h
│   │   │       │   ├── DenseStorage.h
│   │   │       │   ├── Diagonal.h
│   │   │       │   ├── DiagonalMatrix.h
│   │   │       │   ├── DiagonalProduct.h
│   │   │       │   ├── Dot.h
│   │   │       │   ├── EigenBase.h
│   │   │       │   ├── Flagged.h
│   │   │       │   ├── ForceAlignedAccess.h
│   │   │       │   ├── Functors.h
│   │   │       │   ├── Fuzzy.h
│   │   │       │   ├── GeneralProduct.h
│   │   │       │   ├── GenericPacketMath.h
│   │   │       │   ├── GlobalFunctions.h
│   │   │       │   ├── IO.h
│   │   │       │   ├── Map.h
│   │   │       │   ├── MapBase.h
│   │   │       │   ├── MathFunctions.h
│   │   │       │   ├── Matrix.h
│   │   │       │   ├── MatrixBase.h
│   │   │       │   ├── NestByValue.h
│   │   │       │   ├── NoAlias.h
│   │   │       │   ├── NumTraits.h
│   │   │       │   ├── PermutationMatrix.h
│   │   │       │   ├── PlainObjectBase.h
│   │   │       │   ├── ProductBase.h
│   │   │       │   ├── Random.h
│   │   │       │   ├── Redux.h
│   │   │       │   ├── Ref.h
│   │   │       │   ├── Replicate.h
│   │   │       │   ├── ReturnByValue.h
│   │   │       │   ├── Reverse.h
│   │   │       │   ├── Select.h
│   │   │       │   ├── SelfAdjointView.h
│   │   │       │   ├── SelfCwiseBinaryOp.h
│   │   │       │   ├── SolveTriangular.h
│   │   │       │   ├── StableNorm.h
│   │   │       │   ├── Stride.h
│   │   │       │   ├── Swap.h
│   │   │       │   ├── Transpose.h
│   │   │       │   ├── Transpositions.h
│   │   │       │   ├── TriangularMatrix.h
│   │   │       │   ├── VectorBlock.h
│   │   │       │   ├── VectorwiseOp.h
│   │   │       │   ├── Visitor.h
│   │   │       │   ├── arch/
│   │   │       │   │   ├── AltiVec/
│   │   │       │   │   │   ├── CMakeLists.txt
│   │   │       │   │   │   ├── Complex.h
│   │   │       │   │   │   └── PacketMath.h
│   │   │       │   │   ├── CMakeLists.txt
│   │   │       │   │   ├── Default/
│   │   │       │   │   │   ├── CMakeLists.txt
│   │   │       │   │   │   └── Settings.h
│   │   │       │   │   ├── NEON/
│   │   │       │   │   │   ├── CMakeLists.txt
│   │   │       │   │   │   ├── Complex.h
│   │   │       │   │   │   └── PacketMath.h
│   │   │       │   │   └── SSE/
│   │   │       │   │       ├── CMakeLists.txt
│   │   │       │   │       ├── Complex.h
│   │   │       │   │       ├── MathFunctions.h
│   │   │       │   │       └── PacketMath.h
│   │   │       │   ├── products/
│   │   │       │   │   ├── CMakeLists.txt
│   │   │       │   │   ├── CoeffBasedProduct.h
│   │   │       │   │   ├── GeneralBlockPanelKernel.h
│   │   │       │   │   ├── GeneralMatrixMatrix.h
│   │   │       │   │   ├── GeneralMatrixMatrixTriangular.h
│   │   │       │   │   ├── GeneralMatrixMatrixTriangular_MKL.h
│   │   │       │   │   ├── GeneralMatrixMatrix_MKL.h
│   │   │       │   │   ├── GeneralMatrixVector.h
│   │   │       │   │   ├── GeneralMatrixVector_MKL.h
│   │   │       │   │   ├── Parallelizer.h
│   │   │       │   │   ├── SelfadjointMatrixMatrix.h
│   │   │       │   │   ├── SelfadjointMatrixMatrix_MKL.h
│   │   │       │   │   ├── SelfadjointMatrixVector.h
│   │   │       │   │   ├── SelfadjointMatrixVector_MKL.h
│   │   │       │   │   ├── SelfadjointProduct.h
│   │   │       │   │   ├── SelfadjointRank2Update.h
│   │   │       │   │   ├── TriangularMatrixMatrix.h
│   │   │       │   │   ├── TriangularMatrixMatrix_MKL.h
│   │   │       │   │   ├── TriangularMatrixVector.h
│   │   │       │   │   ├── TriangularMatrixVector_MKL.h
│   │   │       │   │   ├── TriangularSolverMatrix.h
│   │   │       │   │   ├── TriangularSolverMatrix_MKL.h
│   │   │       │   │   └── TriangularSolverVector.h
│   │   │       │   └── util/
│   │   │       │       ├── BlasUtil.h
│   │   │       │       ├── CMakeLists.txt
│   │   │       │       ├── Constants.h
│   │   │       │       ├── DisableStupidWarnings.h
│   │   │       │       ├── ForwardDeclarations.h
│   │   │       │       ├── MKL_support.h
│   │   │       │       ├── Macros.h
│   │   │       │       ├── Memory.h
│   │   │       │       ├── Meta.h
│   │   │       │       ├── NonMPL2.h
│   │   │       │       ├── ReenableStupidWarnings.h
│   │   │       │       ├── StaticAssert.h
│   │   │       │       └── XprHelper.h
│   │   │       ├── Eigen2Support/
│   │   │       │   ├── Block.h
│   │   │       │   ├── CMakeLists.txt
│   │   │       │   ├── Cwise.h
│   │   │       │   ├── CwiseOperators.h
│   │   │       │   ├── Geometry/
│   │   │       │   │   ├── AlignedBox.h
│   │   │       │   │   ├── All.h
│   │   │       │   │   ├── AngleAxis.h
│   │   │       │   │   ├── CMakeLists.txt
│   │   │       │   │   ├── Hyperplane.h
│   │   │       │   │   ├── ParametrizedLine.h
│   │   │       │   │   ├── Quaternion.h
│   │   │       │   │   ├── Rotation2D.h
│   │   │       │   │   ├── RotationBase.h
│   │   │       │   │   ├── Scaling.h
│   │   │       │   │   ├── Transform.h
│   │   │       │   │   └── Translation.h
│   │   │       │   ├── LU.h
│   │   │       │   ├── Lazy.h
│   │   │       │   ├── LeastSquares.h
│   │   │       │   ├── Macros.h
│   │   │       │   ├── MathFunctions.h
│   │   │       │   ├── Memory.h
│   │   │       │   ├── Meta.h
│   │   │       │   ├── Minor.h
│   │   │       │   ├── QR.h
│   │   │       │   ├── SVD.h
│   │   │       │   ├── TriangularSolver.h
│   │   │       │   └── VectorBlock.h
│   │   │       ├── Eigenvalues/
│   │   │       │   ├── CMakeLists.txt
│   │   │       │   ├── ComplexEigenSolver.h
│   │   │       │   ├── ComplexSchur.h
│   │   │       │   ├── ComplexSchur_MKL.h
│   │   │       │   ├── EigenSolver.h
│   │   │       │   ├── GeneralizedEigenSolver.h
│   │   │       │   ├── GeneralizedSelfAdjointEigenSolver.h
│   │   │       │   ├── HessenbergDecomposition.h
│   │   │       │   ├── MatrixBaseEigenvalues.h
│   │   │       │   ├── RealQZ.h
│   │   │       │   ├── RealSchur.h
│   │   │       │   ├── RealSchur_MKL.h
│   │   │       │   ├── SelfAdjointEigenSolver.h
│   │   │       │   ├── SelfAdjointEigenSolver_MKL.h
│   │   │       │   └── Tridiagonalization.h
│   │   │       ├── Geometry/
│   │   │       │   ├── AlignedBox.h
│   │   │       │   ├── AngleAxis.h
│   │   │       │   ├── CMakeLists.txt
│   │   │       │   ├── EulerAngles.h
│   │   │       │   ├── Homogeneous.h
│   │   │       │   ├── Hyperplane.h
│   │   │       │   ├── OrthoMethods.h
│   │   │       │   ├── ParametrizedLine.h
│   │   │       │   ├── Quaternion.h
│   │   │       │   ├── Rotation2D.h
│   │   │       │   ├── RotationBase.h
│   │   │       │   ├── Scaling.h
│   │   │       │   ├── Transform.h
│   │   │       │   ├── Translation.h
│   │   │       │   ├── Umeyama.h
│   │   │       │   └── arch/
│   │   │       │       ├── CMakeLists.txt
│   │   │       │       └── Geometry_SSE.h
│   │   │       ├── Householder/
│   │   │       │   ├── BlockHouseholder.h
│   │   │       │   ├── CMakeLists.txt
│   │   │       │   ├── Householder.h
│   │   │       │   └── HouseholderSequence.h
│   │   │       ├── IterativeLinearSolvers/
│   │   │       │   ├── BasicPreconditioners.h
│   │   │       │   ├── BiCGSTAB.h
│   │   │       │   ├── CMakeLists.txt
│   │   │       │   ├── ConjugateGradient.h
│   │   │       │   ├── IncompleteLUT.h
│   │   │       │   └── IterativeSolverBase.h
│   │   │       ├── Jacobi/
│   │   │       │   ├── CMakeLists.txt
│   │   │       │   └── Jacobi.h
│   │   │       ├── LU/
│   │   │       │   ├── CMakeLists.txt
│   │   │       │   ├── Determinant.h
│   │   │       │   ├── FullPivLU.h
│   │   │       │   ├── Inverse.h
│   │   │       │   ├── PartialPivLU.h
│   │   │       │   ├── PartialPivLU_MKL.h
│   │   │       │   └── arch/
│   │   │       │       ├── CMakeLists.txt
│   │   │       │       └── Inverse_SSE.h
│   │   │       ├── MetisSupport/
│   │   │       │   ├── CMakeLists.txt
│   │   │       │   └── MetisSupport.h
│   │   │       ├── OrderingMethods/
│   │   │       │   ├── Amd.h
│   │   │       │   ├── CMakeLists.txt
│   │   │       │   ├── Eigen_Colamd.h
│   │   │       │   └── Ordering.h
│   │   │       ├── PaStiXSupport/
│   │   │       │   ├── CMakeLists.txt
│   │   │       │   └── PaStiXSupport.h
│   │   │       ├── PardisoSupport/
│   │   │       │   ├── CMakeLists.txt
│   │   │       │   └── PardisoSupport.h
│   │   │       ├── QR/
│   │   │       │   ├── CMakeLists.txt
│   │   │       │   ├── ColPivHouseholderQR.h
│   │   │       │   ├── ColPivHouseholderQR_MKL.h
│   │   │       │   ├── FullPivHouseholderQR.h
│   │   │       │   ├── HouseholderQR.h
│   │   │       │   └── HouseholderQR_MKL.h
│   │   │       ├── SPQRSupport/
│   │   │       │   ├── CMakeLists.txt
│   │   │       │   └── SuiteSparseQRSupport.h
│   │   │       ├── SVD/
│   │   │       │   ├── CMakeLists.txt
│   │   │       │   ├── JacobiSVD.h
│   │   │       │   ├── JacobiSVD_MKL.h
│   │   │       │   └── UpperBidiagonalization.h
│   │   │       ├── SparseCholesky/
│   │   │       │   ├── CMakeLists.txt
│   │   │       │   ├── SimplicialCholesky.h
│   │   │       │   └── SimplicialCholesky_impl.h
│   │   │       ├── SparseCore/
│   │   │       │   ├── AmbiVector.h
│   │   │       │   ├── CMakeLists.txt
│   │   │       │   ├── CompressedStorage.h
│   │   │       │   ├── ConservativeSparseSparseProduct.h
│   │   │       │   ├── MappedSparseMatrix.h
│   │   │       │   ├── SparseBlock.h
│   │   │       │   ├── SparseColEtree.h
│   │   │       │   ├── SparseCwiseBinaryOp.h
│   │   │       │   ├── SparseCwiseUnaryOp.h
│   │   │       │   ├── SparseDenseProduct.h
│   │   │       │   ├── SparseDiagonalProduct.h
│   │   │       │   ├── SparseDot.h
│   │   │       │   ├── SparseFuzzy.h
│   │   │       │   ├── SparseMatrix.h
│   │   │       │   ├── SparseMatrixBase.h
│   │   │       │   ├── SparsePermutation.h
│   │   │       │   ├── SparseProduct.h
│   │   │       │   ├── SparseRedux.h
│   │   │       │   ├── SparseSelfAdjointView.h
│   │   │       │   ├── SparseSparseProductWithPruning.h
│   │   │       │   ├── SparseTranspose.h
│   │   │       │   ├── SparseTriangularView.h
│   │   │       │   ├── SparseUtil.h
│   │   │       │   ├── SparseVector.h
│   │   │       │   ├── SparseView.h
│   │   │       │   └── TriangularSolver.h
│   │   │       ├── SparseLU/
│   │   │       │   ├── CMakeLists.txt
│   │   │       │   ├── SparseLU.h
│   │   │       │   ├── SparseLUImpl.h
│   │   │       │   ├── SparseLU_Memory.h
│   │   │       │   ├── SparseLU_Structs.h
│   │   │       │   ├── SparseLU_SupernodalMatrix.h
│   │   │       │   ├── SparseLU_Utils.h
│   │   │       │   ├── SparseLU_column_bmod.h
│   │   │       │   ├── SparseLU_column_dfs.h
│   │   │       │   ├── SparseLU_copy_to_ucol.h
│   │   │       │   ├── SparseLU_gemm_kernel.h
│   │   │       │   ├── SparseLU_heap_relax_snode.h
│   │   │       │   ├── SparseLU_kernel_bmod.h
│   │   │       │   ├── SparseLU_panel_bmod.h
│   │   │       │   ├── SparseLU_panel_dfs.h
│   │   │       │   ├── SparseLU_pivotL.h
│   │   │       │   ├── SparseLU_pruneL.h
│   │   │       │   └── SparseLU_relax_snode.h
│   │   │       ├── SparseQR/
│   │   │       │   ├── CMakeLists.txt
│   │   │       │   └── SparseQR.h
│   │   │       ├── StlSupport/
│   │   │       │   ├── CMakeLists.txt
│   │   │       │   ├── StdDeque.h
│   │   │       │   ├── StdList.h
│   │   │       │   ├── StdVector.h
│   │   │       │   └── details.h
│   │   │       ├── SuperLUSupport/
│   │   │       │   ├── CMakeLists.txt
│   │   │       │   └── SuperLUSupport.h
│   │   │       ├── UmfPackSupport/
│   │   │       │   ├── CMakeLists.txt
│   │   │       │   └── UmfPackSupport.h
│   │   │       ├── misc/
│   │   │       │   ├── CMakeLists.txt
│   │   │       │   ├── Image.h
│   │   │       │   ├── Kernel.h
│   │   │       │   ├── Solve.h
│   │   │       │   ├── SparseSolve.h
│   │   │       │   └── blas.h
│   │   │       └── plugins/
│   │   │           ├── ArrayCwiseBinaryOps.h
│   │   │           ├── ArrayCwiseUnaryOps.h
│   │   │           ├── BlockMethods.h
│   │   │           ├── CMakeLists.txt
│   │   │           ├── CommonCwiseBinaryOps.h
│   │   │           ├── CommonCwiseUnaryOps.h
│   │   │           ├── MatrixCwiseBinaryOps.h
│   │   │           └── MatrixCwiseUnaryOps.h
│   │   ├── INSTALL
│   │   ├── bench/
│   │   │   ├── BenchSparseUtil.h
│   │   │   ├── BenchTimer.h
│   │   │   ├── BenchUtil.h
│   │   │   ├── README.txt
│   │   │   ├── basicbench.cxxlist
│   │   │   ├── basicbenchmark.cpp
│   │   │   ├── basicbenchmark.h
│   │   │   ├── benchBlasGemm.cpp
│   │   │   ├── benchCholesky.cpp
│   │   │   ├── benchEigenSolver.cpp
│   │   │   ├── benchFFT.cpp
│   │   │   ├── benchGeometry.cpp
│   │   │   ├── benchVecAdd.cpp
│   │   │   ├── bench_gemm.cpp
│   │   │   ├── bench_multi_compilers.sh
│   │   │   ├── bench_norm.cpp
│   │   │   ├── bench_reverse.cpp
│   │   │   ├── bench_sum.cpp
│   │   │   ├── bench_unrolling
│   │   │   ├── benchmark.cpp
│   │   │   ├── benchmarkSlice.cpp
│   │   │   ├── benchmarkX.cpp
│   │   │   ├── benchmarkXcwise.cpp
│   │   │   ├── benchmark_suite
│   │   │   ├── btl/
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   ├── COPYING
│   │   │   │   ├── README
│   │   │   │   ├── actions/
│   │   │   │   │   ├── action_aat_product.hh
│   │   │   │   │   ├── action_ata_product.hh
│   │   │   │   │   ├── action_atv_product.hh
│   │   │   │   │   ├── action_axpby.hh
│   │   │   │   │   ├── action_axpy.hh
│   │   │   │   │   ├── action_cholesky.hh
│   │   │   │   │   ├── action_ger.hh
│   │   │   │   │   ├── action_hessenberg.hh
│   │   │   │   │   ├── action_lu_decomp.hh
│   │   │   │   │   ├── action_lu_solve.hh
│   │   │   │   │   ├── action_matrix_matrix_product.hh
│   │   │   │   │   ├── action_matrix_matrix_product_bis.hh
│   │   │   │   │   ├── action_matrix_vector_product.hh
│   │   │   │   │   ├── action_partial_lu.hh
│   │   │   │   │   ├── action_rot.hh
│   │   │   │   │   ├── action_symv.hh
│   │   │   │   │   ├── action_syr2.hh
│   │   │   │   │   ├── action_trisolve.hh
│   │   │   │   │   ├── action_trisolve_matrix.hh
│   │   │   │   │   ├── action_trmm.hh
│   │   │   │   │   └── basic_actions.hh
│   │   │   │   ├── cmake/
│   │   │   │   │   ├── FindACML.cmake
│   │   │   │   │   ├── FindATLAS.cmake
│   │   │   │   │   ├── FindBlitz.cmake
│   │   │   │   │   ├── FindCBLAS.cmake
│   │   │   │   │   ├── FindGMM.cmake
│   │   │   │   │   ├── FindGOTO.cmake
│   │   │   │   │   ├── FindGOTO2.cmake
│   │   │   │   │   ├── FindMKL.cmake
│   │   │   │   │   ├── FindMTL4.cmake
│   │   │   │   │   ├── FindPackageHandleStandardArgs.cmake
│   │   │   │   │   ├── FindTvmet.cmake
│   │   │   │   │   └── MacroOptionalAddSubdirectory.cmake
│   │   │   │   ├── data/
│   │   │   │   │   ├── CMakeLists.txt
│   │   │   │   │   ├── action_settings.txt
│   │   │   │   │   ├── gnuplot_common_settings.hh
│   │   │   │   │   ├── go_mean
│   │   │   │   │   ├── mean.cxx
│   │   │   │   │   ├── mk_gnuplot_script.sh
│   │   │   │   │   ├── mk_mean_script.sh
│   │   │   │   │   ├── mk_new_gnuplot.sh
│   │   │   │   │   ├── perlib_plot_settings.txt
│   │   │   │   │   ├── regularize.cxx
│   │   │   │   │   ├── smooth.cxx
│   │   │   │   │   └── smooth_all.sh
│   │   │   │   ├── generic_bench/
│   │   │   │   │   ├── bench.hh
│   │   │   │   │   ├── bench_parameter.hh
│   │   │   │   │   ├── btl.hh
│   │   │   │   │   ├── init/
│   │   │   │   │   │   ├── init_function.hh
│   │   │   │   │   │   ├── init_matrix.hh
│   │   │   │   │   │   └── init_vector.hh
│   │   │   │   │   ├── static/
│   │   │   │   │   │   ├── bench_static.hh
│   │   │   │   │   │   ├── intel_bench_fixed_size.hh
│   │   │   │   │   │   └── static_size_generator.hh
│   │   │   │   │   ├── timers/
│   │   │   │   │   │   ├── STL_perf_analyzer.hh
│   │   │   │   │   │   ├── STL_timer.hh
│   │   │   │   │   │   ├── mixed_perf_analyzer.hh
│   │   │   │   │   │   ├── portable_perf_analyzer.hh
│   │   │   │   │   │   ├── portable_perf_analyzer_old.hh
│   │   │   │   │   │   ├── portable_timer.hh
│   │   │   │   │   │   ├── x86_perf_analyzer.hh
│   │   │   │   │   │   └── x86_timer.hh
│   │   │   │   │   └── utils/
│   │   │   │   │       ├── size_lin_log.hh
│   │   │   │   │       ├── size_log.hh
│   │   │   │   │       ├── utilities.h
│   │   │   │   │       └── xy_file.hh
│   │   │   │   └── libs/
│   │   │   │       ├── BLAS/
│   │   │   │       │   ├── CMakeLists.txt
│   │   │   │       │   ├── blas.h
│   │   │   │       │   ├── blas_interface.hh
│   │   │   │       │   ├── blas_interface_impl.hh
│   │   │   │       │   ├── c_interface_base.h
│   │   │   │       │   └── main.cpp
│   │   │   │       ├── STL/
│   │   │   │       │   ├── CMakeLists.txt
│   │   │   │       │   ├── STL_interface.hh
│   │   │   │       │   └── main.cpp
│   │   │   │       ├── blitz/
│   │   │   │       │   ├── CMakeLists.txt
│   │   │   │       │   ├── blitz_LU_solve_interface.hh
│   │   │   │       │   ├── blitz_interface.hh
│   │   │   │       │   ├── btl_blitz.cpp
│   │   │   │       │   ├── btl_tiny_blitz.cpp
│   │   │   │       │   └── tiny_blitz_interface.hh
│   │   │   │       ├── eigen2/
│   │   │   │       │   ├── CMakeLists.txt
│   │   │   │       │   ├── btl_tiny_eigen2.cpp
│   │   │   │       │   ├── eigen2_interface.hh
│   │   │   │       │   ├── main_adv.cpp
│   │   │   │       │   ├── main_linear.cpp
│   │   │   │       │   ├── main_matmat.cpp
│   │   │   │       │   └── main_vecmat.cpp
│   │   │   │       ├── eigen3/
│   │   │   │       │   ├── CMakeLists.txt
│   │   │   │       │   ├── btl_tiny_eigen3.cpp
│   │   │   │       │   ├── eigen3_interface.hh
│   │   │   │       │   ├── main_adv.cpp
│   │   │   │       │   ├── main_linear.cpp
│   │   │   │       │   ├── main_matmat.cpp
│   │   │   │       │   └── main_vecmat.cpp
│   │   │   │       ├── gmm/
│   │   │   │       │   ├── CMakeLists.txt
│   │   │   │       │   ├── gmm_LU_solve_interface.hh
│   │   │   │       │   ├── gmm_interface.hh
│   │   │   │       │   └── main.cpp
│   │   │   │       ├── mtl4/
│   │   │   │       │   ├── .kdbgrc.main
│   │   │   │       │   ├── CMakeLists.txt
│   │   │   │       │   ├── main.cpp
│   │   │   │       │   ├── mtl4_LU_solve_interface.hh
│   │   │   │       │   └── mtl4_interface.hh
│   │   │   │       ├── tvmet/
│   │   │   │       │   ├── CMakeLists.txt
│   │   │   │       │   ├── main.cpp
│   │   │   │       │   └── tvmet_interface.hh
│   │   │   │       └── ublas/
│   │   │   │           ├── CMakeLists.txt
│   │   │   │           ├── main.cpp
│   │   │   │           └── ublas_interface.hh
│   │   │   ├── check_cache_queries.cpp
│   │   │   ├── eig33.cpp
│   │   │   ├── geometry.cpp
│   │   │   ├── product_threshold.cpp
│   │   │   ├── quat_slerp.cpp
│   │   │   ├── quatmul.cpp
│   │   │   ├── sparse_cholesky.cpp
│   │   │   ├── sparse_dense_product.cpp
│   │   │   ├── sparse_lu.cpp
│   │   │   ├── sparse_product.cpp
│   │   │   ├── sparse_randomsetter.cpp
│   │   │   ├── sparse_setter.cpp
│   │   │   ├── sparse_transpose.cpp
│   │   │   ├── sparse_trisolver.cpp
│   │   │   ├── spbench/
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   ├── sp_solver.cpp
│   │   │   │   ├── spbench.dtd
│   │   │   │   ├── spbenchsolver.cpp
│   │   │   │   ├── spbenchsolver.h
│   │   │   │   ├── spbenchstyle.h
│   │   │   │   └── test_sparseLU.cpp
│   │   │   ├── spmv.cpp
│   │   │   └── vdw_new.cpp
│   │   ├── blas/
│   │   │   ├── BandTriangularSolver.h
│   │   │   ├── CMakeLists.txt
│   │   │   ├── GeneralRank1Update.h
│   │   │   ├── PackedSelfadjointProduct.h
│   │   │   ├── PackedTriangularMatrixVector.h
│   │   │   ├── PackedTriangularSolverVector.h
│   │   │   ├── README.txt
│   │   │   ├── Rank2Update.h
│   │   │   ├── chbmv.f
│   │   │   ├── chpmv.f
│   │   │   ├── common.h
│   │   │   ├── complex_double.cpp
│   │   │   ├── complex_single.cpp
│   │   │   ├── complexdots.f
│   │   │   ├── ctbmv.f
│   │   │   ├── double.cpp
│   │   │   ├── drotm.f
│   │   │   ├── drotmg.f
│   │   │   ├── dsbmv.f
│   │   │   ├── dspmv.f
│   │   │   ├── dtbmv.f
│   │   │   ├── level1_cplx_impl.h
│   │   │   ├── level1_impl.h
│   │   │   ├── level1_real_impl.h
│   │   │   ├── level2_cplx_impl.h
│   │   │   ├── level2_impl.h
│   │   │   ├── level2_real_impl.h
│   │   │   ├── level3_impl.h
│   │   │   ├── lsame.f
│   │   │   ├── single.cpp
│   │   │   ├── srotm.f
│   │   │   ├── srotmg.f
│   │   │   ├── ssbmv.f
│   │   │   ├── sspmv.f
│   │   │   ├── stbmv.f
│   │   │   ├── testing/
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   ├── cblat1.f
│   │   │   │   ├── cblat2.f
│   │   │   │   ├── cblat3.f
│   │   │   │   ├── dblat1.f
│   │   │   │   ├── dblat2.f
│   │   │   │   ├── dblat3.f
│   │   │   │   ├── runblastest.sh
│   │   │   │   ├── sblat1.f
│   │   │   │   ├── sblat2.f
│   │   │   │   ├── sblat3.f
│   │   │   │   ├── zblat1.f
│   │   │   │   ├── zblat2.f
│   │   │   │   └── zblat3.f
│   │   │   ├── xerbla.cpp
│   │   │   ├── zhbmv.f
│   │   │   ├── zhpmv.f
│   │   │   └── ztbmv.f
│   │   ├── cmake/
│   │   │   ├── EigenConfigureTesting.cmake
│   │   │   ├── EigenDetermineOSVersion.cmake
│   │   │   ├── EigenDetermineVSServicePack.cmake
│   │   │   ├── EigenTesting.cmake
│   │   │   ├── FindAdolc.cmake
│   │   │   ├── FindBLAS.cmake
│   │   │   ├── FindCholmod.cmake
│   │   │   ├── FindEigen2.cmake
│   │   │   ├── FindEigen3.cmake
│   │   │   ├── FindFFTW.cmake
│   │   │   ├── FindGLEW.cmake
│   │   │   ├── FindGMP.cmake
│   │   │   ├── FindGSL.cmake
│   │   │   ├── FindGoogleHash.cmake
│   │   │   ├── FindLAPACK.cmake
│   │   │   ├── FindMPFR.cmake
│   │   │   ├── FindMetis.cmake
│   │   │   ├── FindPastix.cmake
│   │   │   ├── FindSPQR.cmake
│   │   │   ├── FindScotch.cmake
│   │   │   ├── FindStandardMathLibrary.cmake
│   │   │   ├── FindSuperLU.cmake
│   │   │   ├── FindUmfpack.cmake
│   │   │   ├── RegexUtils.cmake
│   │   │   └── language_support.cmake
│   │   ├── debug/
│   │   │   ├── gdb/
│   │   │   │   ├── __init__.py
│   │   │   │   └── printers.py
│   │   │   └── msvc/
│   │   │       └── eigen.natvis
│   │   ├── demos/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── mandelbrot/
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   ├── README
│   │   │   │   ├── mandelbrot.cpp
│   │   │   │   └── mandelbrot.h
│   │   │   ├── mix_eigen_and_c/
│   │   │   │   ├── README
│   │   │   │   ├── binary_library.cpp
│   │   │   │   ├── binary_library.h
│   │   │   │   └── example.c
│   │   │   └── opengl/
│   │   │       ├── CMakeLists.txt
│   │   │       ├── README
│   │   │       ├── camera.cpp
│   │   │       ├── camera.h
│   │   │       ├── gpuhelper.cpp
│   │   │       ├── gpuhelper.h
│   │   │       ├── icosphere.cpp
│   │   │       ├── icosphere.h
│   │   │       ├── quaternion_demo.cpp
│   │   │       ├── quaternion_demo.h
│   │   │       ├── trackball.cpp
│   │   │       └── trackball.h
│   │   ├── doc/
│   │   │   ├── A05_PortingFrom2To3.dox
│   │   │   ├── A10_Eigen2SupportModes.dox
│   │   │   ├── AsciiQuickReference.txt
│   │   │   ├── B01_Experimental.dox
│   │   │   ├── CMakeLists.txt
│   │   │   ├── ClassHierarchy.dox
│   │   │   ├── CustomizingEigen.dox
│   │   │   ├── Doxyfile.in
│   │   │   ├── FixedSizeVectorizable.dox
│   │   │   ├── FunctionsTakingEigenTypes.dox
│   │   │   ├── HiPerformance.dox
│   │   │   ├── InsideEigenExample.dox
│   │   │   ├── Manual.dox
│   │   │   ├── MatrixfreeSolverExample.dox
│   │   │   ├── Overview.dox
│   │   │   ├── PassingByValue.dox
│   │   │   ├── Pitfalls.dox
│   │   │   ├── PreprocessorDirectives.dox
│   │   │   ├── QuickReference.dox
│   │   │   ├── QuickStartGuide.dox
│   │   │   ├── SparseLinearSystems.dox
│   │   │   ├── SparseQuickReference.dox
│   │   │   ├── StlContainers.dox
│   │   │   ├── StorageOrders.dox
│   │   │   ├── StructHavingEigenMembers.dox
│   │   │   ├── TemplateKeyword.dox
│   │   │   ├── TopicAliasing.dox
│   │   │   ├── TopicAssertions.dox
│   │   │   ├── TopicEigenExpressionTemplates.dox
│   │   │   ├── TopicLazyEvaluation.dox
│   │   │   ├── TopicLinearAlgebraDecompositions.dox
│   │   │   ├── TopicMultithreading.dox
│   │   │   ├── TopicResizing.dox
│   │   │   ├── TopicScalarTypes.dox
│   │   │   ├── TopicVectorization.dox
│   │   │   ├── TutorialAdvancedInitialization.dox
│   │   │   ├── TutorialArrayClass.dox
│   │   │   ├── TutorialBlockOperations.dox
│   │   │   ├── TutorialGeometry.dox
│   │   │   ├── TutorialLinearAlgebra.dox
│   │   │   ├── TutorialMapClass.dox
│   │   │   ├── TutorialMatrixArithmetic.dox
│   │   │   ├── TutorialMatrixClass.dox
│   │   │   ├── TutorialReductionsVisitorsBroadcasting.dox
│   │   │   ├── TutorialSparse.dox
│   │   │   ├── TutorialSparse_example_details.dox
│   │   │   ├── UnalignedArrayAssert.dox
│   │   │   ├── UsingIntelMKL.dox
│   │   │   ├── WrongStackAlignment.dox
│   │   │   ├── eigen_navtree_hacks.js
│   │   │   ├── eigendoxy.css
│   │   │   ├── eigendoxy_footer.html.in
│   │   │   ├── eigendoxy_header.html.in
│   │   │   ├── eigendoxy_layout.xml.in
│   │   │   ├── eigendoxy_tabs.css
│   │   │   ├── examples/
│   │   │   │   ├── .krazy
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   ├── DenseBase_middleCols_int.cpp
│   │   │   │   ├── DenseBase_middleRows_int.cpp
│   │   │   │   ├── DenseBase_template_int_middleCols.cpp
│   │   │   │   ├── DenseBase_template_int_middleRows.cpp
│   │   │   │   ├── MatrixBase_cwise_const.cpp
│   │   │   │   ├── QuickStart_example.cpp
│   │   │   │   ├── QuickStart_example2_dynamic.cpp
│   │   │   │   ├── QuickStart_example2_fixed.cpp
│   │   │   │   ├── TemplateKeyword_flexible.cpp
│   │   │   │   ├── TemplateKeyword_simple.cpp
│   │   │   │   ├── TutorialLinAlgComputeTwice.cpp
│   │   │   │   ├── TutorialLinAlgExComputeSolveError.cpp
│   │   │   │   ├── TutorialLinAlgExSolveColPivHouseholderQR.cpp
│   │   │   │   ├── TutorialLinAlgExSolveLDLT.cpp
│   │   │   │   ├── TutorialLinAlgInverseDeterminant.cpp
│   │   │   │   ├── TutorialLinAlgRankRevealing.cpp
│   │   │   │   ├── TutorialLinAlgSVDSolve.cpp
│   │   │   │   ├── TutorialLinAlgSelfAdjointEigenSolver.cpp
│   │   │   │   ├── TutorialLinAlgSetThreshold.cpp
│   │   │   │   ├── Tutorial_ArrayClass_accessors.cpp
│   │   │   │   ├── Tutorial_ArrayClass_addition.cpp
│   │   │   │   ├── Tutorial_ArrayClass_cwise_other.cpp
│   │   │   │   ├── Tutorial_ArrayClass_interop.cpp
│   │   │   │   ├── Tutorial_ArrayClass_interop_matrix.cpp
│   │   │   │   ├── Tutorial_ArrayClass_mult.cpp
│   │   │   │   ├── Tutorial_BlockOperations_block_assignment.cpp
│   │   │   │   ├── Tutorial_BlockOperations_colrow.cpp
│   │   │   │   ├── Tutorial_BlockOperations_corner.cpp
│   │   │   │   ├── Tutorial_BlockOperations_print_block.cpp
│   │   │   │   ├── Tutorial_BlockOperations_vector.cpp
│   │   │   │   ├── Tutorial_PartialLU_solve.cpp
│   │   │   │   ├── Tutorial_ReductionsVisitorsBroadcasting_broadcast_1nn.cpp
│   │   │   │   ├── Tutorial_ReductionsVisitorsBroadcasting_broadcast_simple.cpp
│   │   │   │   ├── Tutorial_ReductionsVisitorsBroadcasting_broadcast_simple_rowwise.cpp
│   │   │   │   ├── Tutorial_ReductionsVisitorsBroadcasting_colwise.cpp
│   │   │   │   ├── Tutorial_ReductionsVisitorsBroadcasting_maxnorm.cpp
│   │   │   │   ├── Tutorial_ReductionsVisitorsBroadcasting_reductions_bool.cpp
│   │   │   │   ├── Tutorial_ReductionsVisitorsBroadcasting_reductions_norm.cpp
│   │   │   │   ├── Tutorial_ReductionsVisitorsBroadcasting_rowwise.cpp
│   │   │   │   ├── Tutorial_ReductionsVisitorsBroadcasting_visitors.cpp
│   │   │   │   ├── Tutorial_simple_example_dynamic_size.cpp
│   │   │   │   ├── Tutorial_simple_example_fixed_size.cpp
│   │   │   │   ├── class_Block.cpp
│   │   │   │   ├── class_CwiseBinaryOp.cpp
│   │   │   │   ├── class_CwiseUnaryOp.cpp
│   │   │   │   ├── class_CwiseUnaryOp_ptrfun.cpp
│   │   │   │   ├── class_FixedBlock.cpp
│   │   │   │   ├── class_FixedVectorBlock.cpp
│   │   │   │   ├── class_VectorBlock.cpp
│   │   │   │   ├── function_taking_eigenbase.cpp
│   │   │   │   ├── function_taking_ref.cpp
│   │   │   │   ├── matrixfree_cg.cpp
│   │   │   │   ├── tut_arithmetic_add_sub.cpp
│   │   │   │   ├── tut_arithmetic_dot_cross.cpp
│   │   │   │   ├── tut_arithmetic_matrix_mul.cpp
│   │   │   │   ├── tut_arithmetic_redux_basic.cpp
│   │   │   │   ├── tut_arithmetic_scalar_mul_div.cpp
│   │   │   │   ├── tut_matrix_coefficient_accessors.cpp
│   │   │   │   ├── tut_matrix_resize.cpp
│   │   │   │   └── tut_matrix_resize_fixed_size.cpp
│   │   │   ├── snippets/
│   │   │   │   ├── .krazy
│   │   │   │   ├── AngleAxis_mimic_euler.cpp
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   ├── ColPivHouseholderQR_solve.cpp
│   │   │   │   ├── ComplexEigenSolver_compute.cpp
│   │   │   │   ├── ComplexEigenSolver_eigenvalues.cpp
│   │   │   │   ├── ComplexEigenSolver_eigenvectors.cpp
│   │   │   │   ├── ComplexSchur_compute.cpp
│   │   │   │   ├── ComplexSchur_matrixT.cpp
│   │   │   │   ├── ComplexSchur_matrixU.cpp
│   │   │   │   ├── Cwise_abs.cpp
│   │   │   │   ├── Cwise_abs2.cpp
│   │   │   │   ├── Cwise_acos.cpp
│   │   │   │   ├── Cwise_asin.cpp
│   │   │   │   ├── Cwise_boolean_and.cpp
│   │   │   │   ├── Cwise_boolean_or.cpp
│   │   │   │   ├── Cwise_cos.cpp
│   │   │   │   ├── Cwise_cube.cpp
│   │   │   │   ├── Cwise_equal_equal.cpp
│   │   │   │   ├── Cwise_exp.cpp
│   │   │   │   ├── Cwise_greater.cpp
│   │   │   │   ├── Cwise_greater_equal.cpp
│   │   │   │   ├── Cwise_inverse.cpp
│   │   │   │   ├── Cwise_less.cpp
│   │   │   │   ├── Cwise_less_equal.cpp
│   │   │   │   ├── Cwise_log.cpp
│   │   │   │   ├── Cwise_max.cpp
│   │   │   │   ├── Cwise_min.cpp
│   │   │   │   ├── Cwise_minus.cpp
│   │   │   │   ├── Cwise_minus_equal.cpp
│   │   │   │   ├── Cwise_not_equal.cpp
│   │   │   │   ├── Cwise_plus.cpp
│   │   │   │   ├── Cwise_plus_equal.cpp
│   │   │   │   ├── Cwise_pow.cpp
│   │   │   │   ├── Cwise_product.cpp
│   │   │   │   ├── Cwise_quotient.cpp
│   │   │   │   ├── Cwise_sin.cpp
│   │   │   │   ├── Cwise_slash_equal.cpp
│   │   │   │   ├── Cwise_sqrt.cpp
│   │   │   │   ├── Cwise_square.cpp
│   │   │   │   ├── Cwise_tan.cpp
│   │   │   │   ├── Cwise_times_equal.cpp
│   │   │   │   ├── DenseBase_LinSpaced.cpp
│   │   │   │   ├── DenseBase_LinSpaced_seq.cpp
│   │   │   │   ├── DenseBase_setLinSpaced.cpp
│   │   │   │   ├── DirectionWise_replicate.cpp
│   │   │   │   ├── DirectionWise_replicate_int.cpp
│   │   │   │   ├── EigenSolver_EigenSolver_MatrixType.cpp
│   │   │   │   ├── EigenSolver_compute.cpp
│   │   │   │   ├── EigenSolver_eigenvalues.cpp
│   │   │   │   ├── EigenSolver_eigenvectors.cpp
│   │   │   │   ├── EigenSolver_pseudoEigenvectors.cpp
│   │   │   │   ├── FullPivHouseholderQR_solve.cpp
│   │   │   │   ├── FullPivLU_image.cpp
│   │   │   │   ├── FullPivLU_kernel.cpp
│   │   │   │   ├── FullPivLU_solve.cpp
│   │   │   │   ├── GeneralizedEigenSolver.cpp
│   │   │   │   ├── HessenbergDecomposition_compute.cpp
│   │   │   │   ├── HessenbergDecomposition_matrixH.cpp
│   │   │   │   ├── HessenbergDecomposition_packedMatrix.cpp
│   │   │   │   ├── HouseholderQR_householderQ.cpp
│   │   │   │   ├── HouseholderQR_solve.cpp
│   │   │   │   ├── HouseholderSequence_HouseholderSequence.cpp
│   │   │   │   ├── IOFormat.cpp
│   │   │   │   ├── JacobiSVD_basic.cpp
│   │   │   │   ├── Jacobi_makeGivens.cpp
│   │   │   │   ├── Jacobi_makeJacobi.cpp
│   │   │   │   ├── LLT_example.cpp
│   │   │   │   ├── LLT_solve.cpp
│   │   │   │   ├── Map_general_stride.cpp
│   │   │   │   ├── Map_inner_stride.cpp
│   │   │   │   ├── Map_outer_stride.cpp
│   │   │   │   ├── Map_placement_new.cpp
│   │   │   │   ├── Map_simple.cpp
│   │   │   │   ├── MatrixBase_adjoint.cpp
│   │   │   │   ├── MatrixBase_all.cpp
│   │   │   │   ├── MatrixBase_applyOnTheLeft.cpp
│   │   │   │   ├── MatrixBase_applyOnTheRight.cpp
│   │   │   │   ├── MatrixBase_array.cpp
│   │   │   │   ├── MatrixBase_array_const.cpp
│   │   │   │   ├── MatrixBase_asDiagonal.cpp
│   │   │   │   ├── MatrixBase_block_int_int.cpp
│   │   │   │   ├── MatrixBase_block_int_int_int_int.cpp
│   │   │   │   ├── MatrixBase_bottomLeftCorner_int_int.cpp
│   │   │   │   ├── MatrixBase_bottomRightCorner_int_int.cpp
│   │   │   │   ├── MatrixBase_bottomRows_int.cpp
│   │   │   │   ├── MatrixBase_cast.cpp
│   │   │   │   ├── MatrixBase_col.cpp
│   │   │   │   ├── MatrixBase_colwise.cpp
│   │   │   │   ├── MatrixBase_computeInverseAndDetWithCheck.cpp
│   │   │   │   ├── MatrixBase_computeInverseWithCheck.cpp
│   │   │   │   ├── MatrixBase_cwiseAbs.cpp
│   │   │   │   ├── MatrixBase_cwiseAbs2.cpp
│   │   │   │   ├── MatrixBase_cwiseEqual.cpp
│   │   │   │   ├── MatrixBase_cwiseInverse.cpp
│   │   │   │   ├── MatrixBase_cwiseMax.cpp
│   │   │   │   ├── MatrixBase_cwiseMin.cpp
│   │   │   │   ├── MatrixBase_cwiseNotEqual.cpp
│   │   │   │   ├── MatrixBase_cwiseProduct.cpp
│   │   │   │   ├── MatrixBase_cwiseQuotient.cpp
│   │   │   │   ├── MatrixBase_cwiseSqrt.cpp
│   │   │   │   ├── MatrixBase_diagonal.cpp
│   │   │   │   ├── MatrixBase_diagonal_int.cpp
│   │   │   │   ├── MatrixBase_diagonal_template_int.cpp
│   │   │   │   ├── MatrixBase_eigenvalues.cpp
│   │   │   │   ├── MatrixBase_end_int.cpp
│   │   │   │   ├── MatrixBase_eval.cpp
│   │   │   │   ├── MatrixBase_extract.cpp
│   │   │   │   ├── MatrixBase_fixedBlock_int_int.cpp
│   │   │   │   ├── MatrixBase_identity.cpp
│   │   │   │   ├── MatrixBase_identity_int_int.cpp
│   │   │   │   ├── MatrixBase_inverse.cpp
│   │   │   │   ├── MatrixBase_isDiagonal.cpp
│   │   │   │   ├── MatrixBase_isIdentity.cpp
│   │   │   │   ├── MatrixBase_isOnes.cpp
│   │   │   │   ├── MatrixBase_isOrthogonal.cpp
│   │   │   │   ├── MatrixBase_isUnitary.cpp
│   │   │   │   ├── MatrixBase_isZero.cpp
│   │   │   │   ├── MatrixBase_leftCols_int.cpp
│   │   │   │   ├── MatrixBase_marked.cpp
│   │   │   │   ├── MatrixBase_noalias.cpp
│   │   │   │   ├── MatrixBase_ones.cpp
│   │   │   │   ├── MatrixBase_ones_int.cpp
│   │   │   │   ├── MatrixBase_ones_int_int.cpp
│   │   │   │   ├── MatrixBase_operatorNorm.cpp
│   │   │   │   ├── MatrixBase_part.cpp
│   │   │   │   ├── MatrixBase_prod.cpp
│   │   │   │   ├── MatrixBase_random.cpp
│   │   │   │   ├── MatrixBase_random_int.cpp
│   │   │   │   ├── MatrixBase_random_int_int.cpp
│   │   │   │   ├── MatrixBase_replicate.cpp
│   │   │   │   ├── MatrixBase_replicate_int_int.cpp
│   │   │   │   ├── MatrixBase_reverse.cpp
│   │   │   │   ├── MatrixBase_rightCols_int.cpp
│   │   │   │   ├── MatrixBase_row.cpp
│   │   │   │   ├── MatrixBase_rowwise.cpp
│   │   │   │   ├── MatrixBase_segment_int_int.cpp
│   │   │   │   ├── MatrixBase_select.cpp
│   │   │   │   ├── MatrixBase_set.cpp
│   │   │   │   ├── MatrixBase_setIdentity.cpp
│   │   │   │   ├── MatrixBase_setOnes.cpp
│   │   │   │   ├── MatrixBase_setRandom.cpp
│   │   │   │   ├── MatrixBase_setZero.cpp
│   │   │   │   ├── MatrixBase_start_int.cpp
│   │   │   │   ├── MatrixBase_template_int_bottomRows.cpp
│   │   │   │   ├── MatrixBase_template_int_end.cpp
│   │   │   │   ├── MatrixBase_template_int_int_block_int_int_int_int.cpp
│   │   │   │   ├── MatrixBase_template_int_int_bottomLeftCorner.cpp
│   │   │   │   ├── MatrixBase_template_int_int_bottomLeftCorner_int_int.cpp
│   │   │   │   ├── MatrixBase_template_int_int_bottomRightCorner.cpp
│   │   │   │   ├── MatrixBase_template_int_int_bottomRightCorner_int_int.cpp
│   │   │   │   ├── MatrixBase_template_int_int_topLeftCorner.cpp
│   │   │   │   ├── MatrixBase_template_int_int_topLeftCorner_int_int.cpp
│   │   │   │   ├── MatrixBase_template_int_int_topRightCorner.cpp
│   │   │   │   ├── MatrixBase_template_int_int_topRightCorner_int_int.cpp
│   │   │   │   ├── MatrixBase_template_int_leftCols.cpp
│   │   │   │   ├── MatrixBase_template_int_rightCols.cpp
│   │   │   │   ├── MatrixBase_template_int_segment.cpp
│   │   │   │   ├── MatrixBase_template_int_start.cpp
│   │   │   │   ├── MatrixBase_template_int_topRows.cpp
│   │   │   │   ├── MatrixBase_topLeftCorner_int_int.cpp
│   │   │   │   ├── MatrixBase_topRightCorner_int_int.cpp
│   │   │   │   ├── MatrixBase_topRows_int.cpp
│   │   │   │   ├── MatrixBase_transpose.cpp
│   │   │   │   ├── MatrixBase_zero.cpp
│   │   │   │   ├── MatrixBase_zero_int.cpp
│   │   │   │   ├── MatrixBase_zero_int_int.cpp
│   │   │   │   ├── Matrix_resize_NoChange_int.cpp
│   │   │   │   ├── Matrix_resize_int.cpp
│   │   │   │   ├── Matrix_resize_int_NoChange.cpp
│   │   │   │   ├── Matrix_resize_int_int.cpp
│   │   │   │   ├── Matrix_setConstant_int.cpp
│   │   │   │   ├── Matrix_setConstant_int_int.cpp
│   │   │   │   ├── Matrix_setIdentity_int_int.cpp
│   │   │   │   ├── Matrix_setOnes_int.cpp
│   │   │   │   ├── Matrix_setOnes_int_int.cpp
│   │   │   │   ├── Matrix_setRandom_int.cpp
│   │   │   │   ├── Matrix_setRandom_int_int.cpp
│   │   │   │   ├── Matrix_setZero_int.cpp
│   │   │   │   ├── Matrix_setZero_int_int.cpp
│   │   │   │   ├── PartialPivLU_solve.cpp
│   │   │   │   ├── PartialRedux_count.cpp
│   │   │   │   ├── PartialRedux_maxCoeff.cpp
│   │   │   │   ├── PartialRedux_minCoeff.cpp
│   │   │   │   ├── PartialRedux_norm.cpp
│   │   │   │   ├── PartialRedux_prod.cpp
│   │   │   │   ├── PartialRedux_squaredNorm.cpp
│   │   │   │   ├── PartialRedux_sum.cpp
│   │   │   │   ├── RealQZ_compute.cpp
│   │   │   │   ├── RealSchur_RealSchur_MatrixType.cpp
│   │   │   │   ├── RealSchur_compute.cpp
│   │   │   │   ├── SelfAdjointEigenSolver_SelfAdjointEigenSolver.cpp
│   │   │   │   ├── SelfAdjointEigenSolver_SelfAdjointEigenSolver_MatrixType.cpp
│   │   │   │   ├── SelfAdjointEigenSolver_SelfAdjointEigenSolver_MatrixType2.cpp
│   │   │   │   ├── SelfAdjointEigenSolver_compute_MatrixType.cpp
│   │   │   │   ├── SelfAdjointEigenSolver_compute_MatrixType2.cpp
│   │   │   │   ├── SelfAdjointEigenSolver_eigenvalues.cpp
│   │   │   │   ├── SelfAdjointEigenSolver_eigenvectors.cpp
│   │   │   │   ├── SelfAdjointEigenSolver_operatorInverseSqrt.cpp
│   │   │   │   ├── SelfAdjointEigenSolver_operatorSqrt.cpp
│   │   │   │   ├── SelfAdjointView_eigenvalues.cpp
│   │   │   │   ├── SelfAdjointView_operatorNorm.cpp
│   │   │   │   ├── TopicAliasing_block.cpp
│   │   │   │   ├── TopicAliasing_block_correct.cpp
│   │   │   │   ├── TopicAliasing_cwise.cpp
│   │   │   │   ├── TopicAliasing_mult1.cpp
│   │   │   │   ├── TopicAliasing_mult2.cpp
│   │   │   │   ├── TopicAliasing_mult3.cpp
│   │   │   │   ├── TopicStorageOrders_example.cpp
│   │   │   │   ├── Tridiagonalization_Tridiagonalization_MatrixType.cpp
│   │   │   │   ├── Tridiagonalization_compute.cpp
│   │   │   │   ├── Tridiagonalization_decomposeInPlace.cpp
│   │   │   │   ├── Tridiagonalization_diagonal.cpp
│   │   │   │   ├── Tridiagonalization_householderCoefficients.cpp
│   │   │   │   ├── Tridiagonalization_packedMatrix.cpp
│   │   │   │   ├── Tutorial_AdvancedInitialization_Block.cpp
│   │   │   │   ├── Tutorial_AdvancedInitialization_CommaTemporary.cpp
│   │   │   │   ├── Tutorial_AdvancedInitialization_Join.cpp
│   │   │   │   ├── Tutorial_AdvancedInitialization_LinSpaced.cpp
│   │   │   │   ├── Tutorial_AdvancedInitialization_ThreeWays.cpp
│   │   │   │   ├── Tutorial_AdvancedInitialization_Zero.cpp
│   │   │   │   ├── Tutorial_Map_rowmajor.cpp
│   │   │   │   ├── Tutorial_Map_using.cpp
│   │   │   │   ├── Tutorial_commainit_01.cpp
│   │   │   │   ├── Tutorial_commainit_01b.cpp
│   │   │   │   ├── Tutorial_commainit_02.cpp
│   │   │   │   ├── Tutorial_solve_matrix_inverse.cpp
│   │   │   │   ├── Tutorial_solve_multiple_rhs.cpp
│   │   │   │   ├── Tutorial_solve_reuse_decomposition.cpp
│   │   │   │   ├── Tutorial_solve_singular.cpp
│   │   │   │   ├── Tutorial_solve_triangular.cpp
│   │   │   │   ├── Tutorial_solve_triangular_inplace.cpp
│   │   │   │   ├── Vectorwise_reverse.cpp
│   │   │   │   ├── class_FullPivLU.cpp
│   │   │   │   ├── compile_snippet.cpp.in
│   │   │   │   ├── tut_arithmetic_redux_minmax.cpp
│   │   │   │   ├── tut_arithmetic_transpose_aliasing.cpp
│   │   │   │   ├── tut_arithmetic_transpose_conjugate.cpp
│   │   │   │   ├── tut_arithmetic_transpose_inplace.cpp
│   │   │   │   └── tut_matrix_assignment_resizing.cpp
│   │   │   ├── special_examples/
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   ├── Tutorial_sparse_example.cpp
│   │   │   │   └── Tutorial_sparse_example_details.cpp
│   │   │   └── tutorial.cpp
│   │   ├── eigen3.pc.in
│   │   ├── failtest/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── block_nonconst_ctor_on_const_xpr_0.cpp
│   │   │   ├── block_nonconst_ctor_on_const_xpr_1.cpp
│   │   │   ├── block_nonconst_ctor_on_const_xpr_2.cpp
│   │   │   ├── block_on_const_type_actually_const_0.cpp
│   │   │   ├── block_on_const_type_actually_const_1.cpp
│   │   │   ├── colpivqr_int.cpp
│   │   │   ├── const_qualified_block_method_retval_0.cpp
│   │   │   ├── const_qualified_block_method_retval_1.cpp
│   │   │   ├── const_qualified_diagonal_method_retval.cpp
│   │   │   ├── const_qualified_transpose_method_retval.cpp
│   │   │   ├── diagonal_nonconst_ctor_on_const_xpr.cpp
│   │   │   ├── diagonal_on_const_type_actually_const.cpp
│   │   │   ├── eigensolver_cplx.cpp
│   │   │   ├── eigensolver_int.cpp
│   │   │   ├── failtest_sanity_check.cpp
│   │   │   ├── fullpivlu_int.cpp
│   │   │   ├── fullpivqr_int.cpp
│   │   │   ├── jacobisvd_int.cpp
│   │   │   ├── ldlt_int.cpp
│   │   │   ├── llt_int.cpp
│   │   │   ├── map_nonconst_ctor_on_const_ptr_0.cpp
│   │   │   ├── map_nonconst_ctor_on_const_ptr_1.cpp
│   │   │   ├── map_nonconst_ctor_on_const_ptr_2.cpp
│   │   │   ├── map_nonconst_ctor_on_const_ptr_3.cpp
│   │   │   ├── map_nonconst_ctor_on_const_ptr_4.cpp
│   │   │   ├── map_on_const_type_actually_const_0.cpp
│   │   │   ├── map_on_const_type_actually_const_1.cpp
│   │   │   ├── partialpivlu_int.cpp
│   │   │   ├── qr_int.cpp
│   │   │   ├── ref_1.cpp
│   │   │   ├── ref_2.cpp
│   │   │   ├── ref_3.cpp
│   │   │   ├── ref_4.cpp
│   │   │   ├── ref_5.cpp
│   │   │   ├── transpose_nonconst_ctor_on_const_xpr.cpp
│   │   │   └── transpose_on_const_type_actually_const.cpp
│   │   ├── lapack/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── cholesky.cpp
│   │   │   ├── clacgv.f
│   │   │   ├── cladiv.f
│   │   │   ├── clarf.f
│   │   │   ├── clarfb.f
│   │   │   ├── clarfg.f
│   │   │   ├── clarft.f
│   │   │   ├── complex_double.cpp
│   │   │   ├── complex_single.cpp
│   │   │   ├── dladiv.f
│   │   │   ├── dlamch.f
│   │   │   ├── dlapy2.f
│   │   │   ├── dlapy3.f
│   │   │   ├── dlarf.f
│   │   │   ├── dlarfb.f
│   │   │   ├── dlarfg.f
│   │   │   ├── dlarft.f
│   │   │   ├── double.cpp
│   │   │   ├── dsecnd_NONE.f
│   │   │   ├── eigenvalues.cpp
│   │   │   ├── ilaclc.f
│   │   │   ├── ilaclr.f
│   │   │   ├── iladlc.f
│   │   │   ├── iladlr.f
│   │   │   ├── ilaslc.f
│   │   │   ├── ilaslr.f
│   │   │   ├── ilazlc.f
│   │   │   ├── ilazlr.f
│   │   │   ├── lapack_common.h
│   │   │   ├── lu.cpp
│   │   │   ├── second_NONE.f
│   │   │   ├── single.cpp
│   │   │   ├── sladiv.f
│   │   │   ├── slamch.f
│   │   │   ├── slapy2.f
│   │   │   ├── slapy3.f
│   │   │   ├── slarf.f
│   │   │   ├── slarfb.f
│   │   │   ├── slarfg.f
│   │   │   ├── slarft.f
│   │   │   ├── zlacgv.f
│   │   │   ├── zladiv.f
│   │   │   ├── zlarf.f
│   │   │   ├── zlarfb.f
│   │   │   ├── zlarfg.f
│   │   │   └── zlarft.f
│   │   ├── scripts/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── cdashtesting.cmake.in
│   │   │   ├── check.in
│   │   │   ├── debug.in
│   │   │   ├── eigen_gen_credits.cpp
│   │   │   ├── eigen_gen_docs
│   │   │   ├── release.in
│   │   │   └── relicense.py
│   │   ├── signature_of_eigen3_matrix_library
│   │   ├── test/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── adjoint.cpp
│   │   │   ├── array.cpp
│   │   │   ├── array_for_matrix.cpp
│   │   │   ├── array_replicate.cpp
│   │   │   ├── array_reverse.cpp
│   │   │   ├── bandmatrix.cpp
│   │   │   ├── basicstuff.cpp
│   │   │   ├── bicgstab.cpp
│   │   │   ├── block.cpp
│   │   │   ├── cholesky.cpp
│   │   │   ├── cholmod_support.cpp
│   │   │   ├── commainitializer.cpp
│   │   │   ├── conjugate_gradient.cpp
│   │   │   ├── conservative_resize.cpp
│   │   │   ├── corners.cpp
│   │   │   ├── cwiseop.cpp
│   │   │   ├── denseLM.cpp
│   │   │   ├── determinant.cpp
│   │   │   ├── diagonal.cpp
│   │   │   ├── diagonalmatrices.cpp
│   │   │   ├── dontalign.cpp
│   │   │   ├── dynalloc.cpp
│   │   │   ├── eigen2/
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   ├── eigen2_adjoint.cpp
│   │   │   │   ├── eigen2_alignedbox.cpp
│   │   │   │   ├── eigen2_array.cpp
│   │   │   │   ├── eigen2_basicstuff.cpp
│   │   │   │   ├── eigen2_bug_132.cpp
│   │   │   │   ├── eigen2_cholesky.cpp
│   │   │   │   ├── eigen2_commainitializer.cpp
│   │   │   │   ├── eigen2_cwiseop.cpp
│   │   │   │   ├── eigen2_determinant.cpp
│   │   │   │   ├── eigen2_dynalloc.cpp
│   │   │   │   ├── eigen2_eigensolver.cpp
│   │   │   │   ├── eigen2_first_aligned.cpp
│   │   │   │   ├── eigen2_geometry.cpp
│   │   │   │   ├── eigen2_geometry_with_eigen2_prefix.cpp
│   │   │   │   ├── eigen2_hyperplane.cpp
│   │   │   │   ├── eigen2_inverse.cpp
│   │   │   │   ├── eigen2_linearstructure.cpp
│   │   │   │   ├── eigen2_lu.cpp
│   │   │   │   ├── eigen2_map.cpp
│   │   │   │   ├── eigen2_meta.cpp
│   │   │   │   ├── eigen2_miscmatrices.cpp
│   │   │   │   ├── eigen2_mixingtypes.cpp
│   │   │   │   ├── eigen2_newstdvector.cpp
│   │   │   │   ├── eigen2_nomalloc.cpp
│   │   │   │   ├── eigen2_packetmath.cpp
│   │   │   │   ├── eigen2_parametrizedline.cpp
│   │   │   │   ├── eigen2_prec_inverse_4x4.cpp
│   │   │   │   ├── eigen2_product_large.cpp
│   │   │   │   ├── eigen2_product_small.cpp
│   │   │   │   ├── eigen2_qr.cpp
│   │   │   │   ├── eigen2_qtvector.cpp
│   │   │   │   ├── eigen2_regression.cpp
│   │   │   │   ├── eigen2_sizeof.cpp
│   │   │   │   ├── eigen2_smallvectors.cpp
│   │   │   │   ├── eigen2_sparse_basic.cpp
│   │   │   │   ├── eigen2_sparse_product.cpp
│   │   │   │   ├── eigen2_sparse_solvers.cpp
│   │   │   │   ├── eigen2_sparse_vector.cpp
│   │   │   │   ├── eigen2_stdvector.cpp
│   │   │   │   ├── eigen2_submatrices.cpp
│   │   │   │   ├── eigen2_sum.cpp
│   │   │   │   ├── eigen2_svd.cpp
│   │   │   │   ├── eigen2_swap.cpp
│   │   │   │   ├── eigen2_triangular.cpp
│   │   │   │   ├── eigen2_unalignedassert.cpp
│   │   │   │   ├── eigen2_visitor.cpp
│   │   │   │   ├── gsl_helper.h
│   │   │   │   ├── main.h
│   │   │   │   ├── product.h
│   │   │   │   ├── runtest.sh
│   │   │   │   ├── sparse.h
│   │   │   │   └── testsuite.cmake
│   │   │   ├── eigen2support.cpp
│   │   │   ├── eigensolver_complex.cpp
│   │   │   ├── eigensolver_generalized_real.cpp
│   │   │   ├── eigensolver_generic.cpp
│   │   │   ├── eigensolver_selfadjoint.cpp
│   │   │   ├── exceptions.cpp
│   │   │   ├── first_aligned.cpp
│   │   │   ├── geo_alignedbox.cpp
│   │   │   ├── geo_eulerangles.cpp
│   │   │   ├── geo_homogeneous.cpp
│   │   │   ├── geo_hyperplane.cpp
│   │   │   ├── geo_orthomethods.cpp
│   │   │   ├── geo_parametrizedline.cpp
│   │   │   ├── geo_quaternion.cpp
│   │   │   ├── geo_transformations.cpp
│   │   │   ├── hessenberg.cpp
│   │   │   ├── householder.cpp
│   │   │   ├── integer_types.cpp
│   │   │   ├── inverse.cpp
│   │   │   ├── jacobi.cpp
│   │   │   ├── jacobisvd.cpp
│   │   │   ├── linearstructure.cpp
│   │   │   ├── lu.cpp
│   │   │   ├── main.h
│   │   │   ├── mapped_matrix.cpp
│   │   │   ├── mapstaticmethods.cpp
│   │   │   ├── mapstride.cpp
│   │   │   ├── meta.cpp
│   │   │   ├── metis_support.cpp
│   │   │   ├── miscmatrices.cpp
│   │   │   ├── mixingtypes.cpp
│   │   │   ├── mpl2only.cpp
│   │   │   ├── nesting_ops.cpp
│   │   │   ├── nomalloc.cpp
│   │   │   ├── nullary.cpp
│   │   │   ├── packetmath.cpp
│   │   │   ├── pardiso_support.cpp
│   │   │   ├── pastix_support.cpp
│   │   │   ├── permutationmatrices.cpp
│   │   │   ├── prec_inverse_4x4.cpp
│   │   │   ├── product.h
│   │   │   ├── product_extra.cpp
│   │   │   ├── product_large.cpp
│   │   │   ├── product_mmtr.cpp
│   │   │   ├── product_notemporary.cpp
│   │   │   ├── product_selfadjoint.cpp
│   │   │   ├── product_small.cpp
│   │   │   ├── product_symm.cpp
│   │   │   ├── product_syrk.cpp
│   │   │   ├── product_trmm.cpp
│   │   │   ├── product_trmv.cpp
│   │   │   ├── product_trsolve.cpp
│   │   │   ├── qr.cpp
│   │   │   ├── qr_colpivoting.cpp
│   │   │   ├── qr_fullpivoting.cpp
│   │   │   ├── qtvector.cpp
│   │   │   ├── real_qz.cpp
│   │   │   ├── redux.cpp
│   │   │   ├── ref.cpp
│   │   │   ├── resize.cpp
│   │   │   ├── runtest.sh
│   │   │   ├── rvalue_types.cpp
│   │   │   ├── schur_complex.cpp
│   │   │   ├── schur_real.cpp
│   │   │   ├── selfadjoint.cpp
│   │   │   ├── simplicial_cholesky.cpp
│   │   │   ├── sizeof.cpp
│   │   │   ├── sizeoverflow.cpp
│   │   │   ├── smallvectors.cpp
│   │   │   ├── sparse.h
│   │   │   ├── sparseLM.cpp
│   │   │   ├── sparse_basic.cpp
│   │   │   ├── sparse_permutations.cpp
│   │   │   ├── sparse_product.cpp
│   │   │   ├── sparse_solver.h
│   │   │   ├── sparse_solvers.cpp
│   │   │   ├── sparse_vector.cpp
│   │   │   ├── sparselu.cpp
│   │   │   ├── sparseqr.cpp
│   │   │   ├── special_numbers.cpp
│   │   │   ├── spqr_support.cpp
│   │   │   ├── stable_norm.cpp
│   │   │   ├── stddeque.cpp
│   │   │   ├── stddeque_overload.cpp
│   │   │   ├── stdlist.cpp
│   │   │   ├── stdlist_overload.cpp
│   │   │   ├── stdvector.cpp
│   │   │   ├── stdvector_overload.cpp
│   │   │   ├── superlu_support.cpp
│   │   │   ├── swap.cpp
│   │   │   ├── testsuite.cmake
│   │   │   ├── triangular.cpp
│   │   │   ├── umeyama.cpp
│   │   │   ├── umfpack_support.cpp
│   │   │   ├── unalignedassert.cpp
│   │   │   ├── unalignedcount.cpp
│   │   │   ├── upperbidiagonalization.cpp
│   │   │   ├── vectorization_logic.cpp
│   │   │   ├── vectorwiseop.cpp
│   │   │   ├── visitor.cpp
│   │   │   └── zerosized.cpp
│   │   └── unsupported/
│   │       ├── CMakeLists.txt
│   │       ├── Eigen/
│   │       │   ├── AdolcForward
│   │       │   ├── AlignedVector3
│   │       │   ├── ArpackSupport
│   │       │   ├── AutoDiff
│   │       │   ├── BVH
│   │       │   ├── CMakeLists.txt
│   │       │   ├── FFT
│   │       │   ├── IterativeSolvers
│   │       │   ├── KroneckerProduct
│   │       │   ├── LevenbergMarquardt
│   │       │   ├── MPRealSupport
│   │       │   ├── MatrixFunctions
│   │       │   ├── MoreVectorization
│   │       │   ├── NonLinearOptimization
│   │       │   ├── NumericalDiff
│   │       │   ├── OpenGLSupport
│   │       │   ├── Polynomials
│   │       │   ├── SVD
│   │       │   ├── Skyline
│   │       │   ├── SparseExtra
│   │       │   ├── Splines
│   │       │   └── src/
│   │       │       ├── AutoDiff/
│   │       │       │   ├── AutoDiffJacobian.h
│   │       │       │   ├── AutoDiffScalar.h
│   │       │       │   ├── AutoDiffVector.h
│   │       │       │   └── CMakeLists.txt
│   │       │       ├── BVH/
│   │       │       │   ├── BVAlgorithms.h
│   │       │       │   ├── CMakeLists.txt
│   │       │       │   └── KdBVH.h
│   │       │       ├── CMakeLists.txt
│   │       │       ├── Eigenvalues/
│   │       │       │   ├── ArpackSelfAdjointEigenSolver.h
│   │       │       │   └── CMakeLists.txt
│   │       │       ├── FFT/
│   │       │       │   ├── CMakeLists.txt
│   │       │       │   ├── ei_fftw_impl.h
│   │       │       │   └── ei_kissfft_impl.h
│   │       │       ├── IterativeSolvers/
│   │       │       │   ├── CMakeLists.txt
│   │       │       │   ├── ConstrainedConjGrad.h
│   │       │       │   ├── DGMRES.h
│   │       │       │   ├── GMRES.h
│   │       │       │   ├── IncompleteCholesky.h
│   │       │       │   ├── IncompleteLU.h
│   │       │       │   ├── IterationController.h
│   │       │       │   ├── MINRES.h
│   │       │       │   └── Scaling.h
│   │       │       ├── KroneckerProduct/
│   │       │       │   ├── CMakeLists.txt
│   │       │       │   └── KroneckerTensorProduct.h
│   │       │       ├── LevenbergMarquardt/
│   │       │       │   ├── CMakeLists.txt
│   │       │       │   ├── CopyrightMINPACK.txt
│   │       │       │   ├── LMcovar.h
│   │       │       │   ├── LMonestep.h
│   │       │       │   ├── LMpar.h
│   │       │       │   ├── LMqrsolv.h
│   │       │       │   └── LevenbergMarquardt.h
│   │       │       ├── MatrixFunctions/
│   │       │       │   ├── CMakeLists.txt
│   │       │       │   ├── MatrixExponential.h
│   │       │       │   ├── MatrixFunction.h
│   │       │       │   ├── MatrixFunctionAtomic.h
│   │       │       │   ├── MatrixLogarithm.h
│   │       │       │   ├── MatrixPower.h
│   │       │       │   ├── MatrixSquareRoot.h
│   │       │       │   └── StemFunction.h
│   │       │       ├── MoreVectorization/
│   │       │       │   ├── CMakeLists.txt
│   │       │       │   └── MathFunctions.h
│   │       │       ├── NonLinearOptimization/
│   │       │       │   ├── CMakeLists.txt
│   │       │       │   ├── HybridNonLinearSolver.h
│   │       │       │   ├── LevenbergMarquardt.h
│   │       │       │   ├── chkder.h
│   │       │       │   ├── covar.h
│   │       │       │   ├── dogleg.h
│   │       │       │   ├── fdjac1.h
│   │       │       │   ├── lmpar.h
│   │       │       │   ├── qrsolv.h
│   │       │       │   ├── r1mpyq.h
│   │       │       │   ├── r1updt.h
│   │       │       │   └── rwupdt.h
│   │       │       ├── NumericalDiff/
│   │       │       │   ├── CMakeLists.txt
│   │       │       │   └── NumericalDiff.h
│   │       │       ├── Polynomials/
│   │       │       │   ├── CMakeLists.txt
│   │       │       │   ├── Companion.h
│   │       │       │   ├── PolynomialSolver.h
│   │       │       │   └── PolynomialUtils.h
│   │       │       ├── SVD/
│   │       │       │   ├── BDCSVD.h
│   │       │       │   ├── CMakeLists.txt
│   │       │       │   ├── JacobiSVD.h
│   │       │       │   ├── SVDBase.h
│   │       │       │   ├── TODOBdcsvd.txt
│   │       │       │   └── doneInBDCSVD.txt
│   │       │       ├── Skyline/
│   │       │       │   ├── CMakeLists.txt
│   │       │       │   ├── SkylineInplaceLU.h
│   │       │       │   ├── SkylineMatrix.h
│   │       │       │   ├── SkylineMatrixBase.h
│   │       │       │   ├── SkylineProduct.h
│   │       │       │   ├── SkylineStorage.h
│   │       │       │   └── SkylineUtil.h
│   │       │       ├── SparseExtra/
│   │       │       │   ├── BlockOfDynamicSparseMatrix.h
│   │       │       │   ├── CMakeLists.txt
│   │       │       │   ├── DynamicSparseMatrix.h
│   │       │       │   ├── MarketIO.h
│   │       │       │   ├── MatrixMarketIterator.h
│   │       │       │   └── RandomSetter.h
│   │       │       └── Splines/
│   │       │           ├── CMakeLists.txt
│   │       │           ├── Spline.h
│   │       │           ├── SplineFitting.h
│   │       │           └── SplineFwd.h
│   │       ├── README.txt
│   │       ├── bench/
│   │       │   └── bench_svd.cpp
│   │       ├── doc/
│   │       │   ├── CMakeLists.txt
│   │       │   ├── Overview.dox
│   │       │   ├── eigendoxy_layout.xml.in
│   │       │   ├── examples/
│   │       │   │   ├── BVH_Example.cpp
│   │       │   │   ├── CMakeLists.txt
│   │       │   │   ├── FFT.cpp
│   │       │   │   ├── MatrixExponential.cpp
│   │       │   │   ├── MatrixFunction.cpp
│   │       │   │   ├── MatrixLogarithm.cpp
│   │       │   │   ├── MatrixPower.cpp
│   │       │   │   ├── MatrixPower_optimal.cpp
│   │       │   │   ├── MatrixSine.cpp
│   │       │   │   ├── MatrixSinh.cpp
│   │       │   │   ├── MatrixSquareRoot.cpp
│   │       │   │   ├── PolynomialSolver1.cpp
│   │       │   │   └── PolynomialUtils1.cpp
│   │       │   └── snippets/
│   │       │       └── CMakeLists.txt
│   │       └── test/
│   │           ├── BVH.cpp
│   │           ├── CMakeLists.txt
│   │           ├── FFT.cpp
│   │           ├── FFTW.cpp
│   │           ├── NonLinearOptimization.cpp
│   │           ├── NumericalDiff.cpp
│   │           ├── alignedvector3.cpp
│   │           ├── autodiff.cpp
│   │           ├── bdcsvd.cpp
│   │           ├── dgmres.cpp
│   │           ├── forward_adolc.cpp
│   │           ├── gmres.cpp
│   │           ├── jacobisvd.cpp
│   │           ├── kronecker_product.cpp
│   │           ├── levenberg_marquardt.cpp
│   │           ├── matrix_exponential.cpp
│   │           ├── matrix_function.cpp
│   │           ├── matrix_functions.h
│   │           ├── matrix_power.cpp
│   │           ├── matrix_square_root.cpp
│   │           ├── minres.cpp
│   │           ├── mpreal/
│   │           │   └── mpreal.h
│   │           ├── mpreal_support.cpp
│   │           ├── openglsupport.cpp
│   │           ├── polynomialsolver.cpp
│   │           ├── polynomialutils.cpp
│   │           ├── sparse_extra.cpp
│   │           ├── splines.cpp
│   │           └── svd_common.h
│   ├── glew/
│   │   ├── LICENSE.txt
│   │   ├── README.txt
│   │   ├── TODO.txt
│   │   ├── auto/
│   │   │   ├── bin/
│   │   │   │   ├── fix_OML_sync_control.sh
│   │   │   │   ├── make.pl
│   │   │   │   ├── make_def_fun.pl
│   │   │   │   ├── make_def_var.pl
│   │   │   │   ├── make_header.pl
│   │   │   │   ├── make_html.pl
│   │   │   │   ├── make_info.pl
│   │   │   │   ├── make_info_list.pl
│   │   │   │   ├── make_init.pl
│   │   │   │   ├── make_list.pl
│   │   │   │   ├── make_str.pl
│   │   │   │   ├── make_struct_fun.pl
│   │   │   │   ├── make_struct_var.pl
│   │   │   │   ├── parse_spec.pl
│   │   │   │   ├── update_ext.sh
│   │   │   │   └── update_registry.sh
│   │   │   ├── blacklist
│   │   │   ├── core/
│   │   │   │   ├── GLX_ARB_get_proc_address
│   │   │   │   ├── GLX_ATI_pixel_format_float
│   │   │   │   ├── GLX_ATI_render_texture
│   │   │   │   ├── GLX_EXT_fbconfig_packed_float
│   │   │   │   ├── GLX_EXT_framebuffer_sRGB
│   │   │   │   ├── GLX_NV_float_buffer
│   │   │   │   ├── GLX_NV_vertex_array_range
│   │   │   │   ├── GLX_SGIS_shared_multisample
│   │   │   │   ├── GLX_SGIX_hyperpipe
│   │   │   │   ├── GLX_SGIX_swap_barrier
│   │   │   │   ├── GLX_SGIX_swap_group
│   │   │   │   ├── GLX_SUN_video_resize
│   │   │   │   ├── GLX_VERSION_1_2
│   │   │   │   ├── GLX_VERSION_1_3
│   │   │   │   ├── GLX_VERSION_1_4
│   │   │   │   ├── GL_APPLE_float_pixels
│   │   │   │   ├── GL_APPLE_pixel_buffer
│   │   │   │   ├── GL_APPLE_texture_range
│   │   │   │   ├── GL_ARB_imaging
│   │   │   │   ├── GL_ARB_matrix_palette
│   │   │   │   ├── GL_ARB_multitexture
│   │   │   │   ├── GL_ARB_vertex_blend
│   │   │   │   ├── GL_ATIX_point_sprites
│   │   │   │   ├── GL_ATIX_texture_env_combine3
│   │   │   │   ├── GL_ATIX_texture_env_route
│   │   │   │   ├── GL_ATIX_vertex_shader_output_point_size
│   │   │   │   ├── GL_ATI_envmap_bumpmap
│   │   │   │   ├── GL_ATI_map_object_buffer
│   │   │   │   ├── GL_ATI_pn_triangles
│   │   │   │   ├── GL_ATI_separate_stencil
│   │   │   │   ├── GL_ATI_shader_texture_lod
│   │   │   │   ├── GL_ATI_texture_compression_3dc
│   │   │   │   ├── GL_ATI_vertex_streams
│   │   │   │   ├── GL_EXT_Cg_shader
│   │   │   │   ├── GL_EXT_bindable_uniform
│   │   │   │   ├── GL_EXT_depth_bounds_test
│   │   │   │   ├── GL_EXT_draw_instanced
│   │   │   │   ├── GL_EXT_draw_range_elements
│   │   │   │   ├── GL_EXT_fog_coord
│   │   │   │   ├── GL_EXT_framebuffer_sRGB
│   │   │   │   ├── GL_EXT_geometry_shader4
│   │   │   │   ├── GL_EXT_gpu_program_parameters
│   │   │   │   ├── GL_EXT_gpu_shader4
│   │   │   │   ├── GL_EXT_packed_float
│   │   │   │   ├── GL_EXT_pixel_buffer_object
│   │   │   │   ├── GL_EXT_secondary_color
│   │   │   │   ├── GL_EXT_texture_array
│   │   │   │   ├── GL_EXT_texture_buffer_object
│   │   │   │   ├── GL_EXT_texture_compression_latc
│   │   │   │   ├── GL_EXT_texture_compression_rgtc
│   │   │   │   ├── GL_EXT_texture_cube_map
│   │   │   │   ├── GL_EXT_texture_edge_clamp
│   │   │   │   ├── GL_EXT_texture_integer
│   │   │   │   ├── GL_EXT_texture_rectangle
│   │   │   │   ├── GL_EXT_texture_shared_exponent
│   │   │   │   ├── GL_EXT_timer_query
│   │   │   │   ├── GL_EXT_vertex_shader
│   │   │   │   ├── GL_KTX_buffer_region
│   │   │   │   ├── GL_NV_depth_buffer_float
│   │   │   │   ├── GL_NV_depth_range_unclamped
│   │   │   │   ├── GL_NV_fragment_program2
│   │   │   │   ├── GL_NV_fragment_program4
│   │   │   │   ├── GL_NV_fragment_program_option
│   │   │   │   ├── GL_NV_framebuffer_multisample_coverage
│   │   │   │   ├── GL_NV_geometry_program4
│   │   │   │   ├── GL_NV_geometry_shader4
│   │   │   │   ├── GL_NV_gpu_program4
│   │   │   │   ├── GL_NV_parameter_buffer_object
│   │   │   │   ├── GL_NV_transform_feedback
│   │   │   │   ├── GL_NV_vertex_program2_option
│   │   │   │   ├── GL_NV_vertex_program3
│   │   │   │   ├── GL_NV_vertex_program4
│   │   │   │   ├── GL_SGIX_shadow
│   │   │   │   ├── GL_SUN_read_video_pixels
│   │   │   │   ├── GL_VERSION_1_2
│   │   │   │   ├── GL_VERSION_1_3
│   │   │   │   ├── GL_VERSION_1_4
│   │   │   │   ├── GL_VERSION_1_5
│   │   │   │   ├── GL_VERSION_2_0
│   │   │   │   ├── GL_VERSION_2_1
│   │   │   │   ├── GL_VERSION_3_0
│   │   │   │   ├── GL_VERSION_3_1
│   │   │   │   ├── GL_VERSION_3_2
│   │   │   │   ├── GL_WIN_swap_hint
│   │   │   │   ├── WGL_ATI_render_texture_rectangle
│   │   │   │   ├── WGL_EXT_framebuffer_sRGB
│   │   │   │   ├── WGL_EXT_pixel_format_packed_float
│   │   │   │   ├── WGL_NV_gpu_affinity
│   │   │   │   └── WGL_NV_vertex_array_range
│   │   │   ├── custom.txt
│   │   │   ├── doc/
│   │   │   │   ├── advanced.html
│   │   │   │   ├── basic.html
│   │   │   │   ├── credits.html
│   │   │   │   ├── index.html
│   │   │   │   ├── install.html
│   │   │   │   └── log.html
│   │   │   ├── extensions/
│   │   │   │   ├── .dummy
│   │   │   │   ├── GLX_3DFX_multisample
│   │   │   │   ├── GLX_ARB_create_context
│   │   │   │   ├── GLX_ARB_create_context_profile
│   │   │   │   ├── GLX_ARB_fbconfig_float
│   │   │   │   ├── GLX_ARB_framebuffer_sRGB
│   │   │   │   ├── GLX_ARB_get_proc_address
│   │   │   │   ├── GLX_ARB_multisample
│   │   │   │   ├── GLX_ATI_pixel_format_float
│   │   │   │   ├── GLX_ATI_render_texture
│   │   │   │   ├── GLX_EXT_fbconfig_packed_float
│   │   │   │   ├── GLX_EXT_framebuffer_sRGB
│   │   │   │   ├── GLX_EXT_import_context
│   │   │   │   ├── GLX_EXT_scene_marker
│   │   │   │   ├── GLX_EXT_swap_control
│   │   │   │   ├── GLX_EXT_texture_from_pixmap
│   │   │   │   ├── GLX_EXT_visual_info
│   │   │   │   ├── GLX_EXT_visual_rating
│   │   │   │   ├── GLX_INTEL_swap_event
│   │   │   │   ├── GLX_MESA_agp_offset
│   │   │   │   ├── GLX_MESA_copy_sub_buffer
│   │   │   │   ├── GLX_MESA_pixmap_colormap
│   │   │   │   ├── GLX_MESA_release_buffers
│   │   │   │   ├── GLX_MESA_set_3dfx_mode
│   │   │   │   ├── GLX_NV_copy_image
│   │   │   │   ├── GLX_NV_float_buffer
│   │   │   │   ├── GLX_NV_present_video
│   │   │   │   ├── GLX_NV_swap_group
│   │   │   │   ├── GLX_NV_vertex_array_range
│   │   │   │   ├── GLX_NV_video_output
│   │   │   │   ├── GLX_OML_swap_method
│   │   │   │   ├── GLX_OML_sync_control
│   │   │   │   ├── GLX_SGIS_blended_overlay
│   │   │   │   ├── GLX_SGIS_color_range
│   │   │   │   ├── GLX_SGIS_multisample
│   │   │   │   ├── GLX_SGIS_shared_multisample
│   │   │   │   ├── GLX_SGIX_fbconfig
│   │   │   │   ├── GLX_SGIX_hyperpipe
│   │   │   │   ├── GLX_SGIX_pbuffer
│   │   │   │   ├── GLX_SGIX_swap_barrier
│   │   │   │   ├── GLX_SGIX_swap_group
│   │   │   │   ├── GLX_SGIX_video_resize
│   │   │   │   ├── GLX_SGIX_visual_select_group
│   │   │   │   ├── GLX_SGI_cushion
│   │   │   │   ├── GLX_SGI_make_current_read
│   │   │   │   ├── GLX_SGI_swap_control
│   │   │   │   ├── GLX_SGI_video_sync
│   │   │   │   ├── GLX_SUN_get_transparent_index
│   │   │   │   ├── GLX_SUN_video_resize
│   │   │   │   ├── GL_3DFX_multisample
│   │   │   │   ├── GL_3DFX_tbuffer
│   │   │   │   ├── GL_3DFX_texture_compression_FXT1
│   │   │   │   ├── GL_AMD_draw_buffers_blend
│   │   │   │   ├── GL_AMD_performance_monitor
│   │   │   │   ├── GL_AMD_seamless_cubemap_per_texture
│   │   │   │   ├── GL_AMD_shader_stencil_export
│   │   │   │   ├── GL_AMD_texture_texture4
│   │   │   │   ├── GL_AMD_vertex_shader_tessellator
│   │   │   │   ├── GL_APPLE_aux_depth_stencil
│   │   │   │   ├── GL_APPLE_client_storage
│   │   │   │   ├── GL_APPLE_element_array
│   │   │   │   ├── GL_APPLE_fence
│   │   │   │   ├── GL_APPLE_float_pixels
│   │   │   │   ├── GL_APPLE_flush_buffer_range
│   │   │   │   ├── GL_APPLE_object_purgeable
│   │   │   │   ├── GL_APPLE_pixel_buffer
│   │   │   │   ├── GL_APPLE_rgb_422
│   │   │   │   ├── GL_APPLE_row_bytes
│   │   │   │   ├── GL_APPLE_specular_vector
│   │   │   │   ├── GL_APPLE_texture_range
│   │   │   │   ├── GL_APPLE_transform_hint
│   │   │   │   ├── GL_APPLE_vertex_array_object
│   │   │   │   ├── GL_APPLE_vertex_array_range
│   │   │   │   ├── GL_APPLE_vertex_program_evaluators
│   │   │   │   ├── GL_APPLE_ycbcr_422
│   │   │   │   ├── GL_ARB_color_buffer_float
│   │   │   │   ├── GL_ARB_compatibility
│   │   │   │   ├── GL_ARB_copy_buffer
│   │   │   │   ├── GL_ARB_depth_buffer_float
│   │   │   │   ├── GL_ARB_depth_clamp
│   │   │   │   ├── GL_ARB_depth_texture
│   │   │   │   ├── GL_ARB_draw_buffers
│   │   │   │   ├── GL_ARB_draw_buffers_blend
│   │   │   │   ├── GL_ARB_draw_elements_base_vertex
│   │   │   │   ├── GL_ARB_draw_instanced
│   │   │   │   ├── GL_ARB_fragment_coord_conventions
│   │   │   │   ├── GL_ARB_fragment_program
│   │   │   │   ├── GL_ARB_fragment_program_shadow
│   │   │   │   ├── GL_ARB_fragment_shader
│   │   │   │   ├── GL_ARB_framebuffer_object
│   │   │   │   ├── GL_ARB_framebuffer_sRGB
│   │   │   │   ├── GL_ARB_geometry_shader4
│   │   │   │   ├── GL_ARB_half_float_pixel
│   │   │   │   ├── GL_ARB_half_float_vertex
│   │   │   │   ├── GL_ARB_imaging
│   │   │   │   ├── GL_ARB_instanced_arrays
│   │   │   │   ├── GL_ARB_map_buffer_range
│   │   │   │   ├── GL_ARB_matrix_palette
│   │   │   │   ├── GL_ARB_multisample
│   │   │   │   ├── GL_ARB_multitexture
│   │   │   │   ├── GL_ARB_occlusion_query
│   │   │   │   ├── GL_ARB_pixel_buffer_object
│   │   │   │   ├── GL_ARB_point_parameters
│   │   │   │   ├── GL_ARB_point_sprite
│   │   │   │   ├── GL_ARB_provoking_vertex
│   │   │   │   ├── GL_ARB_sample_shading
│   │   │   │   ├── GL_ARB_seamless_cube_map
│   │   │   │   ├── GL_ARB_shader_objects
│   │   │   │   ├── GL_ARB_shader_texture_lod
│   │   │   │   ├── GL_ARB_shading_language_100
│   │   │   │   ├── GL_ARB_shadow
│   │   │   │   ├── GL_ARB_shadow_ambient
│   │   │   │   ├── GL_ARB_sync
│   │   │   │   ├── GL_ARB_texture_border_clamp
│   │   │   │   ├── GL_ARB_texture_buffer_object
│   │   │   │   ├── GL_ARB_texture_compression
│   │   │   │   ├── GL_ARB_texture_compression_rgtc
│   │   │   │   ├── GL_ARB_texture_cube_map
│   │   │   │   ├── GL_ARB_texture_cube_map_array
│   │   │   │   ├── GL_ARB_texture_env_add
│   │   │   │   ├── GL_ARB_texture_env_combine
│   │   │   │   ├── GL_ARB_texture_env_crossbar
│   │   │   │   ├── GL_ARB_texture_env_dot3
│   │   │   │   ├── GL_ARB_texture_float
│   │   │   │   ├── GL_ARB_texture_gather
│   │   │   │   ├── GL_ARB_texture_mirrored_repeat
│   │   │   │   ├── GL_ARB_texture_multisample
│   │   │   │   ├── GL_ARB_texture_non_power_of_two
│   │   │   │   ├── GL_ARB_texture_query_lod
│   │   │   │   ├── GL_ARB_texture_rectangle
│   │   │   │   ├── GL_ARB_texture_rg
│   │   │   │   ├── GL_ARB_transpose_matrix
│   │   │   │   ├── GL_ARB_uniform_buffer_object
│   │   │   │   ├── GL_ARB_vertex_array_bgra
│   │   │   │   ├── GL_ARB_vertex_array_object
│   │   │   │   ├── GL_ARB_vertex_blend
│   │   │   │   ├── GL_ARB_vertex_buffer_object
│   │   │   │   ├── GL_ARB_vertex_program
│   │   │   │   ├── GL_ARB_vertex_shader
│   │   │   │   ├── GL_ARB_window_pos
│   │   │   │   ├── GL_ATIX_point_sprites
│   │   │   │   ├── GL_ATIX_texture_env_combine3
│   │   │   │   ├── GL_ATIX_texture_env_route
│   │   │   │   ├── GL_ATIX_vertex_shader_output_point_size
│   │   │   │   ├── GL_ATI_draw_buffers
│   │   │   │   ├── GL_ATI_element_array
│   │   │   │   ├── GL_ATI_envmap_bumpmap
│   │   │   │   ├── GL_ATI_fragment_shader
│   │   │   │   ├── GL_ATI_map_object_buffer
│   │   │   │   ├── GL_ATI_meminfo
│   │   │   │   ├── GL_ATI_pn_triangles
│   │   │   │   ├── GL_ATI_separate_stencil
│   │   │   │   ├── GL_ATI_shader_texture_lod
│   │   │   │   ├── GL_ATI_text_fragment_shader
│   │   │   │   ├── GL_ATI_texture_compression_3dc
│   │   │   │   ├── GL_ATI_texture_env_combine3
│   │   │   │   ├── GL_ATI_texture_float
│   │   │   │   ├── GL_ATI_texture_mirror_once
│   │   │   │   ├── GL_ATI_vertex_array_object
│   │   │   │   ├── GL_ATI_vertex_attrib_array_object
│   │   │   │   ├── GL_ATI_vertex_streams
│   │   │   │   ├── GL_EXT_422_pixels
│   │   │   │   ├── GL_EXT_Cg_shader
│   │   │   │   ├── GL_EXT_abgr
│   │   │   │   ├── GL_EXT_bgra
│   │   │   │   ├── GL_EXT_bindable_uniform
│   │   │   │   ├── GL_EXT_blend_color
│   │   │   │   ├── GL_EXT_blend_equation_separate
│   │   │   │   ├── GL_EXT_blend_func_separate
│   │   │   │   ├── GL_EXT_blend_logic_op
│   │   │   │   ├── GL_EXT_blend_minmax
│   │   │   │   ├── GL_EXT_blend_subtract
│   │   │   │   ├── GL_EXT_clip_volume_hint
│   │   │   │   ├── GL_EXT_cmyka
│   │   │   │   ├── GL_EXT_color_subtable
│   │   │   │   ├── GL_EXT_compiled_vertex_array
│   │   │   │   ├── GL_EXT_convolution
│   │   │   │   ├── GL_EXT_coordinate_frame
│   │   │   │   ├── GL_EXT_copy_texture
│   │   │   │   ├── GL_EXT_cull_vertex
│   │   │   │   ├── GL_EXT_depth_bounds_test
│   │   │   │   ├── GL_EXT_direct_state_access
│   │   │   │   ├── GL_EXT_draw_buffers2
│   │   │   │   ├── GL_EXT_draw_instanced
│   │   │   │   ├── GL_EXT_draw_range_elements
│   │   │   │   ├── GL_EXT_fog_coord
│   │   │   │   ├── GL_EXT_fragment_lighting
│   │   │   │   ├── GL_EXT_framebuffer_blit
│   │   │   │   ├── GL_EXT_framebuffer_multisample
│   │   │   │   ├── GL_EXT_framebuffer_object
│   │   │   │   ├── GL_EXT_framebuffer_sRGB
│   │   │   │   ├── GL_EXT_geometry_shader4
│   │   │   │   ├── GL_EXT_gpu_program_parameters
│   │   │   │   ├── GL_EXT_gpu_shader4
│   │   │   │   ├── GL_EXT_histogram
│   │   │   │   ├── GL_EXT_index_array_formats
│   │   │   │   ├── GL_EXT_index_func
│   │   │   │   ├── GL_EXT_index_material
│   │   │   │   ├── GL_EXT_index_texture
│   │   │   │   ├── GL_EXT_light_texture
│   │   │   │   ├── GL_EXT_misc_attribute
│   │   │   │   ├── GL_EXT_multi_draw_arrays
│   │   │   │   ├── GL_EXT_multisample
│   │   │   │   ├── GL_EXT_packed_depth_stencil
│   │   │   │   ├── GL_EXT_packed_float
│   │   │   │   ├── GL_EXT_packed_pixels
│   │   │   │   ├── GL_EXT_paletted_texture
│   │   │   │   ├── GL_EXT_pixel_buffer_object
│   │   │   │   ├── GL_EXT_pixel_transform
│   │   │   │   ├── GL_EXT_pixel_transform_color_table
│   │   │   │   ├── GL_EXT_point_parameters
│   │   │   │   ├── GL_EXT_polygon_offset
│   │   │   │   ├── GL_EXT_provoking_vertex
│   │   │   │   ├── GL_EXT_rescale_normal
│   │   │   │   ├── GL_EXT_scene_marker
│   │   │   │   ├── GL_EXT_secondary_color
│   │   │   │   ├── GL_EXT_separate_shader_objects
│   │   │   │   ├── GL_EXT_separate_specular_color
│   │   │   │   ├── GL_EXT_shadow_funcs
│   │   │   │   ├── GL_EXT_shared_texture_palette
│   │   │   │   ├── GL_EXT_stencil_clear_tag
│   │   │   │   ├── GL_EXT_stencil_two_side
│   │   │   │   ├── GL_EXT_stencil_wrap
│   │   │   │   ├── GL_EXT_subtexture
│   │   │   │   ├── GL_EXT_texture
│   │   │   │   ├── GL_EXT_texture3D
│   │   │   │   ├── GL_EXT_texture_array
│   │   │   │   ├── GL_EXT_texture_buffer_object
│   │   │   │   ├── GL_EXT_texture_compression_dxt1
│   │   │   │   ├── GL_EXT_texture_compression_latc
│   │   │   │   ├── GL_EXT_texture_compression_rgtc
│   │   │   │   ├── GL_EXT_texture_compression_s3tc
│   │   │   │   ├── GL_EXT_texture_cube_map
│   │   │   │   ├── GL_EXT_texture_edge_clamp
│   │   │   │   ├── GL_EXT_texture_env
│   │   │   │   ├── GL_EXT_texture_env_add
│   │   │   │   ├── GL_EXT_texture_env_combine
│   │   │   │   ├── GL_EXT_texture_env_dot3
│   │   │   │   ├── GL_EXT_texture_filter_anisotropic
│   │   │   │   ├── GL_EXT_texture_integer
│   │   │   │   ├── GL_EXT_texture_lod_bias
│   │   │   │   ├── GL_EXT_texture_mirror_clamp
│   │   │   │   ├── GL_EXT_texture_object
│   │   │   │   ├── GL_EXT_texture_perturb_normal
│   │   │   │   ├── GL_EXT_texture_rectangle
│   │   │   │   ├── GL_EXT_texture_sRGB
│   │   │   │   ├── GL_EXT_texture_shared_exponent
│   │   │   │   ├── GL_EXT_texture_snorm
│   │   │   │   ├── GL_EXT_texture_swizzle
│   │   │   │   ├── GL_EXT_timer_query
│   │   │   │   ├── GL_EXT_transform_feedback
│   │   │   │   ├── GL_EXT_vertex_array
│   │   │   │   ├── GL_EXT_vertex_array_bgra
│   │   │   │   ├── GL_EXT_vertex_shader
│   │   │   │   ├── GL_EXT_vertex_weighting
│   │   │   │   ├── GL_GREMEDY_frame_terminator
│   │   │   │   ├── GL_GREMEDY_string_marker
│   │   │   │   ├── GL_HP_convolution_border_modes
│   │   │   │   ├── GL_HP_image_transform
│   │   │   │   ├── GL_HP_occlusion_test
│   │   │   │   ├── GL_HP_texture_lighting
│   │   │   │   ├── GL_IBM_cull_vertex
│   │   │   │   ├── GL_IBM_multimode_draw_arrays
│   │   │   │   ├── GL_IBM_rasterpos_clip
│   │   │   │   ├── GL_IBM_static_data
│   │   │   │   ├── GL_IBM_texture_mirrored_repeat
│   │   │   │   ├── GL_IBM_vertex_array_lists
│   │   │   │   ├── GL_INGR_color_clamp
│   │   │   │   ├── GL_INGR_interlace_read
│   │   │   │   ├── GL_INTEL_parallel_arrays
│   │   │   │   ├── GL_INTEL_texture_scissor
│   │   │   │   ├── GL_KTX_buffer_region
│   │   │   │   ├── GL_MESAX_texture_stack
│   │   │   │   ├── GL_MESA_pack_invert
│   │   │   │   ├── GL_MESA_resize_buffers
│   │   │   │   ├── GL_MESA_window_pos
│   │   │   │   ├── GL_MESA_ycbcr_texture
│   │   │   │   ├── GL_NV_blend_square
│   │   │   │   ├── GL_NV_conditional_render
│   │   │   │   ├── GL_NV_copy_depth_to_color
│   │   │   │   ├── GL_NV_copy_image
│   │   │   │   ├── GL_NV_depth_buffer_float
│   │   │   │   ├── GL_NV_depth_clamp
│   │   │   │   ├── GL_NV_depth_range_unclamped
│   │   │   │   ├── GL_NV_evaluators
│   │   │   │   ├── GL_NV_explicit_multisample
│   │   │   │   ├── GL_NV_fence
│   │   │   │   ├── GL_NV_float_buffer
│   │   │   │   ├── GL_NV_fog_distance
│   │   │   │   ├── GL_NV_fragment_program
│   │   │   │   ├── GL_NV_fragment_program2
│   │   │   │   ├── GL_NV_fragment_program4
│   │   │   │   ├── GL_NV_fragment_program_option
│   │   │   │   ├── GL_NV_framebuffer_multisample_coverage
│   │   │   │   ├── GL_NV_geometry_program4
│   │   │   │   ├── GL_NV_geometry_shader4
│   │   │   │   ├── GL_NV_gpu_program4
│   │   │   │   ├── GL_NV_half_float
│   │   │   │   ├── GL_NV_light_max_exponent
│   │   │   │   ├── GL_NV_multisample_filter_hint
│   │   │   │   ├── GL_NV_occlusion_query
│   │   │   │   ├── GL_NV_packed_depth_stencil
│   │   │   │   ├── GL_NV_parameter_buffer_object
│   │   │   │   ├── GL_NV_parameter_buffer_object2
│   │   │   │   ├── GL_NV_pixel_data_range
│   │   │   │   ├── GL_NV_point_sprite
│   │   │   │   ├── GL_NV_present_video
│   │   │   │   ├── GL_NV_primitive_restart
│   │   │   │   ├── GL_NV_register_combiners
│   │   │   │   ├── GL_NV_register_combiners2
│   │   │   │   ├── GL_NV_shader_buffer_load
│   │   │   │   ├── GL_NV_texgen_emboss
│   │   │   │   ├── GL_NV_texgen_reflection
│   │   │   │   ├── GL_NV_texture_barrier
│   │   │   │   ├── GL_NV_texture_compression_vtc
│   │   │   │   ├── GL_NV_texture_env_combine4
│   │   │   │   ├── GL_NV_texture_expand_normal
│   │   │   │   ├── GL_NV_texture_rectangle
│   │   │   │   ├── GL_NV_texture_shader
│   │   │   │   ├── GL_NV_texture_shader2
│   │   │   │   ├── GL_NV_texture_shader3
│   │   │   │   ├── GL_NV_transform_feedback
│   │   │   │   ├── GL_NV_transform_feedback2
│   │   │   │   ├── GL_NV_vertex_array_range
│   │   │   │   ├── GL_NV_vertex_array_range2
│   │   │   │   ├── GL_NV_vertex_buffer_unified_memory
│   │   │   │   ├── GL_NV_vertex_program
│   │   │   │   ├── GL_NV_vertex_program1_1
│   │   │   │   ├── GL_NV_vertex_program2
│   │   │   │   ├── GL_NV_vertex_program2_option
│   │   │   │   ├── GL_NV_vertex_program3
│   │   │   │   ├── GL_NV_vertex_program4
│   │   │   │   ├── GL_OES_byte_coordinates
│   │   │   │   ├── GL_OES_compressed_paletted_texture
│   │   │   │   ├── GL_OES_read_format
│   │   │   │   ├── GL_OES_single_precision
│   │   │   │   ├── GL_OML_interlace
│   │   │   │   ├── GL_OML_resample
│   │   │   │   ├── GL_OML_subsample
│   │   │   │   ├── GL_PGI_misc_hints
│   │   │   │   ├── GL_PGI_vertex_hints
│   │   │   │   ├── GL_REND_screen_coordinates
│   │   │   │   ├── GL_S3_s3tc
│   │   │   │   ├── GL_SGIS_color_range
│   │   │   │   ├── GL_SGIS_detail_texture
│   │   │   │   ├── GL_SGIS_fog_function
│   │   │   │   ├── GL_SGIS_generate_mipmap
│   │   │   │   ├── GL_SGIS_multisample
│   │   │   │   ├── GL_SGIS_pixel_texture
│   │   │   │   ├── GL_SGIS_point_line_texgen
│   │   │   │   ├── GL_SGIS_sharpen_texture
│   │   │   │   ├── GL_SGIS_texture4D
│   │   │   │   ├── GL_SGIS_texture_border_clamp
│   │   │   │   ├── GL_SGIS_texture_edge_clamp
│   │   │   │   ├── GL_SGIS_texture_filter4
│   │   │   │   ├── GL_SGIS_texture_lod
│   │   │   │   ├── GL_SGIS_texture_select
│   │   │   │   ├── GL_SGIX_async
│   │   │   │   ├── GL_SGIX_async_histogram
│   │   │   │   ├── GL_SGIX_async_pixel
│   │   │   │   ├── GL_SGIX_blend_alpha_minmax
│   │   │   │   ├── GL_SGIX_clipmap
│   │   │   │   ├── GL_SGIX_convolution_accuracy
│   │   │   │   ├── GL_SGIX_depth_texture
│   │   │   │   ├── GL_SGIX_flush_raster
│   │   │   │   ├── GL_SGIX_fog_offset
│   │   │   │   ├── GL_SGIX_fog_texture
│   │   │   │   ├── GL_SGIX_fragment_specular_lighting
│   │   │   │   ├── GL_SGIX_framezoom
│   │   │   │   ├── GL_SGIX_interlace
│   │   │   │   ├── GL_SGIX_ir_instrument1
│   │   │   │   ├── GL_SGIX_list_priority
│   │   │   │   ├── GL_SGIX_pixel_texture
│   │   │   │   ├── GL_SGIX_pixel_texture_bits
│   │   │   │   ├── GL_SGIX_reference_plane
│   │   │   │   ├── GL_SGIX_resample
│   │   │   │   ├── GL_SGIX_shadow
│   │   │   │   ├── GL_SGIX_shadow_ambient
│   │   │   │   ├── GL_SGIX_sprite
│   │   │   │   ├── GL_SGIX_tag_sample_buffer
│   │   │   │   ├── GL_SGIX_texture_add_env
│   │   │   │   ├── GL_SGIX_texture_coordinate_clamp
│   │   │   │   ├── GL_SGIX_texture_lod_bias
│   │   │   │   ├── GL_SGIX_texture_multi_buffer
│   │   │   │   ├── GL_SGIX_texture_range
│   │   │   │   ├── GL_SGIX_texture_scale_bias
│   │   │   │   ├── GL_SGIX_vertex_preclip
│   │   │   │   ├── GL_SGIX_vertex_preclip_hint
│   │   │   │   ├── GL_SGIX_ycrcb
│   │   │   │   ├── GL_SGI_color_matrix
│   │   │   │   ├── GL_SGI_color_table
│   │   │   │   ├── GL_SGI_texture_color_table
│   │   │   │   ├── GL_SUNX_constant_data
│   │   │   │   ├── GL_SUN_convolution_border_modes
│   │   │   │   ├── GL_SUN_global_alpha
│   │   │   │   ├── GL_SUN_mesh_array
│   │   │   │   ├── GL_SUN_read_video_pixels
│   │   │   │   ├── GL_SUN_slice_accum
│   │   │   │   ├── GL_SUN_triangle_list
│   │   │   │   ├── GL_SUN_vertex
│   │   │   │   ├── GL_WIN_phong_shading
│   │   │   │   ├── GL_WIN_specular_fog
│   │   │   │   ├── GL_WIN_swap_hint
│   │   │   │   ├── WGL_3DFX_multisample
│   │   │   │   ├── WGL_3DL_stereo_control
│   │   │   │   ├── WGL_AMD_gpu_association
│   │   │   │   ├── WGL_ARB_buffer_region
│   │   │   │   ├── WGL_ARB_create_context
│   │   │   │   ├── WGL_ARB_create_context_profile
│   │   │   │   ├── WGL_ARB_extensions_string
│   │   │   │   ├── WGL_ARB_framebuffer_sRGB
│   │   │   │   ├── WGL_ARB_make_current_read
│   │   │   │   ├── WGL_ARB_multisample
│   │   │   │   ├── WGL_ARB_pbuffer
│   │   │   │   ├── WGL_ARB_pixel_format
│   │   │   │   ├── WGL_ARB_pixel_format_float
│   │   │   │   ├── WGL_ARB_render_texture
│   │   │   │   ├── WGL_ATI_pixel_format_float
│   │   │   │   ├── WGL_ATI_render_texture_rectangle
│   │   │   │   ├── WGL_EXT_depth_float
│   │   │   │   ├── WGL_EXT_display_color_table
│   │   │   │   ├── WGL_EXT_extensions_string
│   │   │   │   ├── WGL_EXT_framebuffer_sRGB
│   │   │   │   ├── WGL_EXT_make_current_read
│   │   │   │   ├── WGL_EXT_multisample
│   │   │   │   ├── WGL_EXT_pbuffer
│   │   │   │   ├── WGL_EXT_pixel_format
│   │   │   │   ├── WGL_EXT_pixel_format_packed_float
│   │   │   │   ├── WGL_EXT_swap_control
│   │   │   │   ├── WGL_I3D_digital_video_control
│   │   │   │   ├── WGL_I3D_gamma
│   │   │   │   ├── WGL_I3D_genlock
│   │   │   │   ├── WGL_I3D_image_buffer
│   │   │   │   ├── WGL_I3D_swap_frame_lock
│   │   │   │   ├── WGL_I3D_swap_frame_usage
│   │   │   │   ├── WGL_NV_copy_image
│   │   │   │   ├── WGL_NV_float_buffer
│   │   │   │   ├── WGL_NV_gpu_affinity
│   │   │   │   ├── WGL_NV_present_video
│   │   │   │   ├── WGL_NV_render_depth_texture
│   │   │   │   ├── WGL_NV_render_texture_rectangle
│   │   │   │   ├── WGL_NV_swap_group
│   │   │   │   ├── WGL_NV_vertex_array_range
│   │   │   │   ├── WGL_NV_video_output
│   │   │   │   └── WGL_OML_sync_control
│   │   │   ├── lib/
│   │   │   │   └── OpenGL/
│   │   │   │       └── Spec.pm
│   │   │   └── src/
│   │   │       ├── footer.html
│   │   │       ├── glew.rc
│   │   │       ├── glew_head.c
│   │   │       ├── glew_head.h
│   │   │       ├── glew_init_gl.c
│   │   │       ├── glew_init_glx.c
│   │   │       ├── glew_init_tail.c
│   │   │       ├── glew_init_wgl.c
│   │   │       ├── glew_license.h
│   │   │       ├── glew_str_glx.c
│   │   │       ├── glew_str_head.c
│   │   │       ├── glew_str_tail.c
│   │   │       ├── glew_str_wgl.c
│   │   │       ├── glew_tail.h
│   │   │       ├── glew_utils.c
│   │   │       ├── glew_utils.h
│   │   │       ├── glewinfo.rc
│   │   │       ├── glewinfo_gl.c
│   │   │       ├── glewinfo_glx.c
│   │   │       ├── glewinfo_head.c
│   │   │       ├── glewinfo_tail.c
│   │   │       ├── glewinfo_wgl.c
│   │   │       ├── glxew_head.h
│   │   │       ├── glxew_tail.h
│   │   │       ├── header.html
│   │   │       ├── khronos_license.h
│   │   │       ├── mesa_license.h
│   │   │       ├── visualinfo.rc
│   │   │       ├── wglew_head.h
│   │   │       └── wglew_tail.h
│   │   ├── config/
│   │   │   ├── Makefile.cygming
│   │   │   ├── Makefile.cygwin
│   │   │   ├── Makefile.darwin
│   │   │   ├── Makefile.freebsd
│   │   │   ├── Makefile.gnu
│   │   │   ├── Makefile.irix
│   │   │   ├── Makefile.kfreebsd
│   │   │   ├── Makefile.linux
│   │   │   ├── Makefile.mingw
│   │   │   ├── Makefile.solaris
│   │   │   ├── config.guess
│   │   │   └── version
│   │   ├── doc/
│   │   │   ├── advanced.html
│   │   │   ├── basic.html
│   │   │   ├── credits.html
│   │   │   ├── glew.css
│   │   │   ├── glew.html
│   │   │   ├── glew.txt
│   │   │   ├── glxew.html
│   │   │   ├── gpl.txt
│   │   │   ├── index.html
│   │   │   ├── install.html
│   │   │   ├── khronos.txt
│   │   │   ├── log.html
│   │   │   ├── mesa.txt
│   │   │   └── wglew.html
│   │   ├── glew.pc
│   │   ├── glew.pc.in
│   │   ├── include/
│   │   │   └── GL/
│   │   │       ├── glew.h
│   │   │       ├── glxew.h
│   │   │       └── wglew.h
│   │   ├── lib/
│   │   │   ├── glew32.exp
│   │   │   ├── glew32d.exp
│   │   │   ├── glew32d.pdb
│   │   │   ├── glew32mx.exp
│   │   │   ├── glew32mxd.exp
│   │   │   └── glew32mxd.pdb
│   │   └── src/
│   │       ├── glew.c
│   │       ├── glewinfo.c
│   │       └── visualinfo.c
│   ├── libigl/
│   │   ├── ACKNOWLEDGEMENTS
│   │   ├── LICENSE
│   │   ├── LICENSE.GPL
│   │   ├── LICENSE.MPL2
│   │   ├── VERSION.txt
│   │   └── include/
│   │       └── igl/
│   │           ├── AABB.cpp
│   │           ├── AABB.h
│   │           ├── ARAPEnergyType.h
│   │           ├── C_STR.h
│   │           ├── Camera.h
│   │           ├── ConjugateFFSolverData.h
│   │           ├── EPS.cpp
│   │           ├── EPS.h
│   │           ├── HalfEdgeIterator.h
│   │           ├── Hit.h
│   │           ├── IO
│   │           ├── IndexComparison.h
│   │           ├── LinSpaced.h
│   │           ├── MCTables.hh
│   │           ├── MeshBooleanType.h
│   │           ├── MouseController.h
│   │           ├── NormalType.h
│   │           ├── ONE.h
│   │           ├── OpenGL_convenience.h
│   │           ├── PI.h
│   │           ├── REDRUM.h
│   │           ├── ReAntTweakBar.cpp
│   │           ├── ReAntTweakBar.h
│   │           ├── RotateWidget.h
│   │           ├── STR.h
│   │           ├── Singular_Value_Decomposition_Givens_QR_Factorization_Kernel.hpp
│   │           ├── Singular_Value_Decomposition_Jacobi_Conjugation_Kernel.hpp
│   │           ├── Singular_Value_Decomposition_Kernel_Declarations.hpp
│   │           ├── Singular_Value_Decomposition_Main_Kernel_Body.hpp
│   │           ├── Singular_Value_Decomposition_Preamble.hpp
│   │           ├── SolverStatus.h
│   │           ├── SortableRow.h
│   │           ├── Timer.h
│   │           ├── Viewport.h
│   │           ├── WindingNumberAABB.h
│   │           ├── WindingNumberMethod.h
│   │           ├── WindingNumberTree.h
│   │           ├── ZERO.h
│   │           ├── active_set.cpp
│   │           ├── active_set.h
│   │           ├── adjacency_list.cpp
│   │           ├── adjacency_list.h
│   │           ├── adjacency_matrix.cpp
│   │           ├── adjacency_matrix.h
│   │           ├── all.cpp
│   │           ├── all.h
│   │           ├── all_edges.cpp
│   │           ├── all_edges.h
│   │           ├── all_pairs_distances.cpp
│   │           ├── all_pairs_distances.h
│   │           ├── ambient_occlusion.cpp
│   │           ├── ambient_occlusion.h
│   │           ├── angle_bound_frame_fields.cpp
│   │           ├── angle_bound_frame_fields.h
│   │           ├── angles.cpp
│   │           ├── angles.h
│   │           ├── angular_distance.cpp
│   │           ├── angular_distance.h
│   │           ├── anttweakbar/
│   │           │   ├── ReAntTweakBar.cpp
│   │           │   ├── ReAntTweakBar.h
│   │           │   ├── cocoa_key_to_anttweakbar_key.cpp
│   │           │   └── cocoa_key_to_anttweakbar_key.h
│   │           ├── any.cpp
│   │           ├── any.h
│   │           ├── any_of.cpp
│   │           ├── any_of.h
│   │           ├── arap.cpp
│   │           ├── arap.h
│   │           ├── arap_dof.cpp
│   │           ├── arap_dof.h
│   │           ├── arap_linear_block.cpp
│   │           ├── arap_linear_block.h
│   │           ├── arap_rhs.cpp
│   │           ├── arap_rhs.h
│   │           ├── average_onto_faces.cpp
│   │           ├── average_onto_faces.h
│   │           ├── average_onto_vertices.cpp
│   │           ├── average_onto_vertices.h
│   │           ├── avg_edge_length.cpp
│   │           ├── avg_edge_length.h
│   │           ├── axis_angle_to_quat.cpp
│   │           ├── axis_angle_to_quat.h
│   │           ├── barycenter.cpp
│   │           ├── barycenter.h
│   │           ├── barycentric_coordinates.cpp
│   │           ├── barycentric_coordinates.h
│   │           ├── barycentric_to_global.cpp
│   │           ├── barycentric_to_global.h
│   │           ├── basename.cpp
│   │           ├── basename.h
│   │           ├── bbw/
│   │           │   ├── bbw.cpp
│   │           │   └── bbw.h
│   │           ├── bbw.cpp
│   │           ├── bbw.h
│   │           ├── bfs.cpp
│   │           ├── bfs.h
│   │           ├── bfs_orient.cpp
│   │           ├── bfs_orient.h
│   │           ├── biharmonic_coordinates.cpp
│   │           ├── biharmonic_coordinates.h
│   │           ├── bijective_composite_harmonic_mapping.cpp
│   │           ├── bijective_composite_harmonic_mapping.h
│   │           ├── bone_parents.cpp
│   │           ├── bone_parents.h
│   │           ├── boolean/
│   │           │   ├── MeshBooleanType.h
│   │           │   ├── from_cork_mesh.cpp
│   │           │   ├── from_cork_mesh.h
│   │           │   ├── mesh_boolean.cpp
│   │           │   ├── mesh_boolean.h
│   │           │   ├── mesh_boolean_cork.cpp
│   │           │   ├── mesh_boolean_cork.h
│   │           │   ├── to_cork_mesh.cpp
│   │           │   └── to_cork_mesh.h
│   │           ├── boost/
│   │           │   ├── bfs_orient.cpp
│   │           │   ├── bfs_orient.h
│   │           │   ├── components.cpp
│   │           │   ├── components.h
│   │           │   ├── orientable_patches.cpp
│   │           │   └── orientable_patches.h
│   │           ├── boundary_conditions.cpp
│   │           ├── boundary_conditions.h
│   │           ├── boundary_facets.cpp
│   │           ├── boundary_facets.h
│   │           ├── boundary_loop.cpp
│   │           ├── boundary_loop.h
│   │           ├── bounding_box.cpp
│   │           ├── bounding_box.h
│   │           ├── bounding_box_diagonal.cpp
│   │           ├── bounding_box_diagonal.h
│   │           ├── canonical_quaternions.cpp
│   │           ├── canonical_quaternions.h
│   │           ├── cat.cpp
│   │           ├── cat.h
│   │           ├── ceil.cpp
│   │           ├── ceil.h
│   │           ├── centroid.cpp
│   │           ├── centroid.h
│   │           ├── cgal/
│   │           │   ├── CGAL_includes.hpp
│   │           │   ├── RemeshSelfIntersectionsParam.h
│   │           │   ├── SelfIntersectMesh.h
│   │           │   ├── complex_to_mesh.cpp
│   │           │   ├── complex_to_mesh.h
│   │           │   ├── intersect_other.cpp
│   │           │   ├── intersect_other.h
│   │           │   ├── mesh_to_cgal_triangle_list.cpp
│   │           │   ├── mesh_to_cgal_triangle_list.h
│   │           │   ├── mesh_to_polyhedron.cpp
│   │           │   ├── mesh_to_polyhedron.h
│   │           │   ├── order_facets_around_edges.cpp
│   │           │   ├── order_facets_around_edges.h
│   │           │   ├── outer_hull.cpp
│   │           │   ├── outer_hull.h
│   │           │   ├── peel_outer_hull_layers.cpp
│   │           │   ├── peel_outer_hull_layers.h
│   │           │   ├── point_mesh_squared_distance.cpp
│   │           │   ├── point_mesh_squared_distance.h
│   │           │   ├── polyhedron_to_mesh.cpp
│   │           │   ├── polyhedron_to_mesh.h
│   │           │   ├── remesh_self_intersections.cpp
│   │           │   ├── remesh_self_intersections.h
│   │           │   ├── signed_distance_isosurface.cpp
│   │           │   └── signed_distance_isosurface.h
│   │           ├── circulation.cpp
│   │           ├── circulation.h
│   │           ├── circumradius.cpp
│   │           ├── circumradius.h
│   │           ├── cocoa_key_to_anttweakbar_key.cpp
│   │           ├── cocoa_key_to_anttweakbar_key.h
│   │           ├── collapse_edge.cpp
│   │           ├── collapse_edge.h
│   │           ├── collapse_small_triangles.cpp
│   │           ├── collapse_small_triangles.h
│   │           ├── colon.cpp
│   │           ├── colon.h
│   │           ├── column_to_quats.cpp
│   │           ├── column_to_quats.h
│   │           ├── columnize.cpp
│   │           ├── columnize.h
│   │           ├── comb_cross_field.cpp
│   │           ├── comb_cross_field.h
│   │           ├── comb_frame_field.cpp
│   │           ├── comb_frame_field.h
│   │           ├── comb_line_field.cpp
│   │           ├── comb_line_field.h
│   │           ├── combine.cpp
│   │           ├── combine.h
│   │           ├── comiso/
│   │           │   ├── frame_field.cpp
│   │           │   ├── frame_field.h
│   │           │   ├── miq.cpp
│   │           │   ├── miq.h
│   │           │   ├── nrosy.cpp
│   │           │   └── nrosy.h
│   │           ├── compile_and_link_program.cpp
│   │           ├── compile_and_link_program.h
│   │           ├── compile_shader.cpp
│   │           ├── compile_shader.h
│   │           ├── components.cpp
│   │           ├── components.h
│   │           ├── compute_frame_field_bisectors.cpp
│   │           ├── compute_frame_field_bisectors.h
│   │           ├── conjugate_frame_fields.cpp
│   │           ├── conjugate_frame_fields.h
│   │           ├── connect_boundary_to_infinity.cpp
│   │           ├── connect_boundary_to_infinity.h
│   │           ├── copyleft/
│   │           │   ├── README.md
│   │           │   ├── cgal/
│   │           │   │   ├── BinaryWindingNumberOperations.h
│   │           │   │   ├── CGAL_includes.hpp
│   │           │   │   ├── CSGTree.h
│   │           │   │   ├── RemeshSelfIntersectionsParam.h
│   │           │   │   ├── SelfIntersectMesh.h
│   │           │   │   ├── assign.cpp
│   │           │   │   ├── assign.h
│   │           │   │   ├── assign_scalar.cpp
│   │           │   │   ├── assign_scalar.h
│   │           │   │   ├── barycenter.cpp
│   │           │   │   ├── cell_adjacency.cpp
│   │           │   │   ├── cell_adjacency.h
│   │           │   │   ├── closest_facet.cpp
│   │           │   │   ├── closest_facet.h
│   │           │   │   ├── complex_to_mesh.cpp
│   │           │   │   ├── complex_to_mesh.h
│   │           │   │   ├── component_inside_component.cpp
│   │           │   │   ├── component_inside_component.h
│   │           │   │   ├── delaunay_triangulation.cpp
│   │           │   │   ├── delaunay_triangulation.h
│   │           │   │   ├── extract_cells.cpp
│   │           │   │   ├── extract_cells.h
│   │           │   │   ├── extract_feature.cpp
│   │           │   │   ├── extract_feature.h
│   │           │   │   ├── half_space_box.cpp
│   │           │   │   ├── half_space_box.h
│   │           │   │   ├── incircle.cpp
│   │           │   │   ├── incircle.h
│   │           │   │   ├── insert_into_cdt.cpp
│   │           │   │   ├── insert_into_cdt.h
│   │           │   │   ├── insphere.cpp
│   │           │   │   ├── insphere.h
│   │           │   │   ├── intersect_other.cpp
│   │           │   │   ├── intersect_other.h
│   │           │   │   ├── intersect_with_half_space.cpp
│   │           │   │   ├── intersect_with_half_space.h
│   │           │   │   ├── lexicographic_triangulation.cpp
│   │           │   │   ├── lexicographic_triangulation.h
│   │           │   │   ├── mesh_boolean.cpp
│   │           │   │   ├── mesh_boolean.h
│   │           │   │   ├── mesh_boolean_type_to_funcs.cpp
│   │           │   │   ├── mesh_boolean_type_to_funcs.h
│   │           │   │   ├── mesh_to_cgal_triangle_list.cpp
│   │           │   │   ├── mesh_to_cgal_triangle_list.h
│   │           │   │   ├── mesh_to_polyhedron.cpp
│   │           │   │   ├── mesh_to_polyhedron.h
│   │           │   │   ├── minkowski_sum.cpp
│   │           │   │   ├── minkowski_sum.h
│   │           │   │   ├── order_facets_around_edge.cpp
│   │           │   │   ├── order_facets_around_edge.h
│   │           │   │   ├── order_facets_around_edges.cpp
│   │           │   │   ├── order_facets_around_edges.h
│   │           │   │   ├── orient2D.cpp
│   │           │   │   ├── orient2D.h
│   │           │   │   ├── orient3D.cpp
│   │           │   │   ├── orient3D.h
│   │           │   │   ├── outer_element.cpp
│   │           │   │   ├── outer_element.h
│   │           │   │   ├── outer_facet.cpp
│   │           │   │   ├── outer_facet.h
│   │           │   │   ├── outer_hull.cpp
│   │           │   │   ├── outer_hull.h
│   │           │   │   ├── peel_outer_hull_layers.cpp
│   │           │   │   ├── peel_outer_hull_layers.h
│   │           │   │   ├── peel_winding_number_layers.cpp
│   │           │   │   ├── peel_winding_number_layers.h
│   │           │   │   ├── piecewise_constant_winding_number.cpp
│   │           │   │   ├── piecewise_constant_winding_number.h
│   │           │   │   ├── point_mesh_squared_distance.cpp
│   │           │   │   ├── point_mesh_squared_distance.h
│   │           │   │   ├── point_segment_squared_distance.cpp
│   │           │   │   ├── point_segment_squared_distance.h
│   │           │   │   ├── point_solid_signed_squared_distance.cpp
│   │           │   │   ├── point_solid_signed_squared_distance.h
│   │           │   │   ├── point_triangle_squared_distance.cpp
│   │           │   │   ├── point_triangle_squared_distance.h
│   │           │   │   ├── points_inside_component.cpp
│   │           │   │   ├── points_inside_component.h
│   │           │   │   ├── polyhedron_to_mesh.cpp
│   │           │   │   ├── polyhedron_to_mesh.h
│   │           │   │   ├── projected_cdt.cpp
│   │           │   │   ├── projected_cdt.h
│   │           │   │   ├── projected_delaunay.cpp
│   │           │   │   ├── projected_delaunay.h
│   │           │   │   ├── propagate_winding_numbers.cpp
│   │           │   │   ├── propagate_winding_numbers.h
│   │           │   │   ├── read_triangle_mesh.cpp
│   │           │   │   ├── read_triangle_mesh.h
│   │           │   │   ├── relabel_small_immersed_cells.cpp
│   │           │   │   ├── relabel_small_immersed_cells.h
│   │           │   │   ├── remesh_intersections.cpp
│   │           │   │   ├── remesh_intersections.h
│   │           │   │   ├── remesh_self_intersections.cpp
│   │           │   │   ├── remesh_self_intersections.h
│   │           │   │   ├── remove_unreferenced.cpp
│   │           │   │   ├── resolve_intersections.cpp
│   │           │   │   ├── resolve_intersections.h
│   │           │   │   ├── row_to_point.cpp
│   │           │   │   ├── row_to_point.h
│   │           │   │   ├── segment_segment_squared_distance.cpp
│   │           │   │   ├── segment_segment_squared_distance.h
│   │           │   │   ├── signed_distance_isosurface.cpp
│   │           │   │   ├── signed_distance_isosurface.h
│   │           │   │   ├── slice.cpp
│   │           │   │   ├── snap_rounding.cpp
│   │           │   │   ├── snap_rounding.h
│   │           │   │   ├── string_to_mesh_boolean_type.cpp
│   │           │   │   ├── string_to_mesh_boolean_type.h
│   │           │   │   ├── subdivide_segments.cpp
│   │           │   │   ├── subdivide_segments.h
│   │           │   │   ├── submesh_aabb_tree.cpp
│   │           │   │   ├── submesh_aabb_tree.h
│   │           │   │   ├── triangle_triangle_squared_distance.cpp
│   │           │   │   ├── triangle_triangle_squared_distance.h
│   │           │   │   ├── trim_with_solid.cpp
│   │           │   │   ├── trim_with_solid.h
│   │           │   │   └── unique.cpp
│   │           │   ├── comiso/
│   │           │   │   ├── frame_field.cpp
│   │           │   │   ├── frame_field.h
│   │           │   │   ├── miq.cpp
│   │           │   │   ├── miq.h
│   │           │   │   ├── miqNew.cpp
│   │           │   │   ├── miqNew.h
│   │           │   │   ├── nrosy.cpp
│   │           │   │   └── nrosy.h
│   │           │   ├── cork/
│   │           │   │   ├── from_cork_mesh.cpp
│   │           │   │   ├── from_cork_mesh.h
│   │           │   │   ├── mesh_boolean.cpp
│   │           │   │   ├── mesh_boolean.h
│   │           │   │   ├── to_cork_mesh.cpp
│   │           │   │   └── to_cork_mesh.h
│   │           │   ├── marching_cubes.cpp
│   │           │   ├── marching_cubes.h
│   │           │   ├── marching_cubes_tables.h
│   │           │   ├── progressive_hulls.cpp
│   │           │   ├── progressive_hulls.h
│   │           │   ├── progressive_hulls_cost_and_placement.cpp
│   │           │   ├── progressive_hulls_cost_and_placement.h
│   │           │   ├── quadprog.cpp
│   │           │   ├── quadprog.h
│   │           │   ├── swept_volume.cpp
│   │           │   ├── swept_volume.h
│   │           │   └── tetgen/
│   │           │       ├── README
│   │           │       ├── cdt.cpp
│   │           │       ├── cdt.h
│   │           │       ├── mesh_to_tetgenio.cpp
│   │           │       ├── mesh_to_tetgenio.h
│   │           │       ├── mesh_with_skeleton.cpp
│   │           │       ├── mesh_with_skeleton.h
│   │           │       ├── read_into_tetgenio.cpp
│   │           │       ├── read_into_tetgenio.h
│   │           │       ├── tetgenio_to_tetmesh.cpp
│   │           │       ├── tetgenio_to_tetmesh.h
│   │           │       ├── tetrahedralize.cpp
│   │           │       └── tetrahedralize.h
│   │           ├── cotmatrix.cpp
│   │           ├── cotmatrix.h
│   │           ├── cotmatrix_entries.cpp
│   │           ├── cotmatrix_entries.h
│   │           ├── count.cpp
│   │           ├── count.h
│   │           ├── covariance_scatter_matrix.cpp
│   │           ├── covariance_scatter_matrix.h
│   │           ├── create_index_vbo.cpp
│   │           ├── create_index_vbo.h
│   │           ├── create_mesh_vbo.cpp
│   │           ├── create_mesh_vbo.h
│   │           ├── create_shader_program.cpp
│   │           ├── create_shader_program.h
│   │           ├── create_vector_vbo.cpp
│   │           ├── create_vector_vbo.h
│   │           ├── cross.cpp
│   │           ├── cross.h
│   │           ├── cross_field_missmatch.cpp
│   │           ├── cross_field_missmatch.h
│   │           ├── crouzeix_raviart_massmatrix.cpp
│   │           ├── crouzeix_raviart_massmatrix.h
│   │           ├── cumsum.cpp
│   │           ├── cumsum.h
│   │           ├── cut_mesh.cpp
│   │           ├── cut_mesh.h
│   │           ├── cut_mesh_from_singularities.cpp
│   │           ├── cut_mesh_from_singularities.h
│   │           ├── cylinder.cpp
│   │           ├── cylinder.h
│   │           ├── dated_copy.cpp
│   │           ├── dated_copy.h
│   │           ├── decimate.cpp
│   │           ├── decimate.h
│   │           ├── deform_skeleton.cpp
│   │           ├── deform_skeleton.h
│   │           ├── delaunay_triangulation.cpp
│   │           ├── delaunay_triangulation.h
│   │           ├── deprecated.h
│   │           ├── destroy_shader_program.cpp
│   │           ├── destroy_shader_program.h
│   │           ├── dfs.cpp
│   │           ├── dfs.h
│   │           ├── diag.cpp
│   │           ├── diag.h
│   │           ├── dihedral_angles.cpp
│   │           ├── dihedral_angles.h
│   │           ├── dijkstra.cpp
│   │           ├── dijkstra.h
│   │           ├── directed_edge_orientations.cpp
│   │           ├── directed_edge_orientations.h
│   │           ├── directed_edge_parents.cpp
│   │           ├── directed_edge_parents.h
│   │           ├── dirname.cpp
│   │           ├── dirname.h
│   │           ├── dot.cpp
│   │           ├── dot.h
│   │           ├── dot_row.cpp
│   │           ├── dot_row.h
│   │           ├── doublearea.cpp
│   │           ├── doublearea.h
│   │           ├── dqs.cpp
│   │           ├── dqs.h
│   │           ├── draw_beach_ball.cpp
│   │           ├── draw_beach_ball.h
│   │           ├── draw_floor.cpp
│   │           ├── draw_floor.h
│   │           ├── draw_mesh.cpp
│   │           ├── draw_mesh.h
│   │           ├── draw_point.cpp
│   │           ├── draw_point.h
│   │           ├── draw_rectangular_marquee.cpp
│   │           ├── draw_rectangular_marquee.h
│   │           ├── draw_skeleton_3d.cpp
│   │           ├── draw_skeleton_3d.h
│   │           ├── draw_skeleton_vector_graphics.cpp
│   │           ├── draw_skeleton_vector_graphics.h
│   │           ├── ears.cpp
│   │           ├── ears.h
│   │           ├── edge_collapse_is_valid.cpp
│   │           ├── edge_collapse_is_valid.h
│   │           ├── edge_flaps.cpp
│   │           ├── edge_flaps.h
│   │           ├── edge_lengths.cpp
│   │           ├── edge_lengths.h
│   │           ├── edge_topology.cpp
│   │           ├── edge_topology.h
│   │           ├── edges.cpp
│   │           ├── edges.h
│   │           ├── edges_to_path.cpp
│   │           ├── edges_to_path.h
│   │           ├── eigs.cpp
│   │           ├── eigs.h
│   │           ├── embree/
│   │           │   ├── EmbreeIntersector.h
│   │           │   ├── Embree_convenience.h
│   │           │   ├── Hit.h
│   │           │   ├── ambient_occlusion.cpp
│   │           │   ├── ambient_occlusion.h
│   │           │   ├── bone_heat.cpp
│   │           │   ├── bone_heat.h
│   │           │   ├── bone_visible.cpp
│   │           │   ├── bone_visible.h
│   │           │   ├── line_mesh_intersection.cpp
│   │           │   ├── line_mesh_intersection.h
│   │           │   ├── reorient_facets_raycast.cpp
│   │           │   ├── reorient_facets_raycast.h
│   │           │   ├── unproject_in_mesh.cpp
│   │           │   ├── unproject_in_mesh.h
│   │           │   ├── unproject_onto_mesh.cpp
│   │           │   └── unproject_onto_mesh.h
│   │           ├── euler_characteristic.cpp
│   │           ├── euler_characteristic.h
│   │           ├── example_fun.cpp
│   │           ├── example_fun.h
│   │           ├── exterior_edges.cpp
│   │           ├── exterior_edges.h
│   │           ├── extract_manifold_patches.cpp
│   │           ├── extract_manifold_patches.h
│   │           ├── extract_non_manifold_edge_curves.cpp
│   │           ├── extract_non_manifold_edge_curves.h
│   │           ├── face_areas.cpp
│   │           ├── face_areas.h
│   │           ├── face_occurrences.cpp
│   │           ├── face_occurrences.h
│   │           ├── faces_first.cpp
│   │           ├── faces_first.h
│   │           ├── facet_components.cpp
│   │           ├── facet_components.h
│   │           ├── false_barycentric_subdivision.cpp
│   │           ├── false_barycentric_subdivision.h
│   │           ├── field_local_global_conversions.cpp
│   │           ├── field_local_global_conversions.h
│   │           ├── file_contents_as_string.cpp
│   │           ├── file_contents_as_string.h
│   │           ├── file_dialog_open.cpp
│   │           ├── file_dialog_open.h
│   │           ├── file_dialog_save.cpp
│   │           ├── file_dialog_save.h
│   │           ├── file_exists.cpp
│   │           ├── file_exists.h
│   │           ├── find.cpp
│   │           ├── find.h
│   │           ├── find_cross_field_singularities.cpp
│   │           ├── find_cross_field_singularities.h
│   │           ├── find_zero.cpp
│   │           ├── find_zero.h
│   │           ├── fit_plane.cpp
│   │           ├── fit_plane.h
│   │           ├── fit_rigid.cpp
│   │           ├── fit_rigid.h
│   │           ├── fit_rotations.cpp
│   │           ├── fit_rotations.h
│   │           ├── flare_textures.h
│   │           ├── flip_avoiding_line_search.cpp
│   │           ├── flip_avoiding_line_search.h
│   │           ├── flip_edge.cpp
│   │           ├── flip_edge.h
│   │           ├── flipped_triangles.cpp
│   │           ├── flipped_triangles.h
│   │           ├── flood_fill.cpp
│   │           ├── flood_fill.h
│   │           ├── floor.cpp
│   │           ├── floor.h
│   │           ├── for_each.h
│   │           ├── forward_kinematics.cpp
│   │           ├── forward_kinematics.h
│   │           ├── frame_field_deformer.cpp
│   │           ├── frame_field_deformer.h
│   │           ├── frame_to_cross_field.cpp
│   │           ├── frame_to_cross_field.h
│   │           ├── frustum.cpp
│   │           ├── frustum.h
│   │           ├── full.cpp
│   │           ├── full.h
│   │           ├── gaussian_curvature.cpp
│   │           ├── gaussian_curvature.h
│   │           ├── get_modifiers.h
│   │           ├── get_seconds.cpp
│   │           ├── get_seconds.h
│   │           ├── get_seconds_hires.cpp
│   │           ├── get_seconds_hires.h
│   │           ├── gl_type_size.cpp
│   │           ├── gl_type_size.h
│   │           ├── grad.cpp
│   │           ├── grad.h
│   │           ├── grid.cpp
│   │           ├── grid.h
│   │           ├── group_sum_matrix.cpp
│   │           ├── group_sum_matrix.h
│   │           ├── guess_extension.cpp
│   │           ├── guess_extension.h
│   │           ├── harmonic.cpp
│   │           ├── harmonic.h
│   │           ├── harwell_boeing.cpp
│   │           ├── harwell_boeing.h
│   │           ├── hausdorff.cpp
│   │           ├── hausdorff.h
│   │           ├── histc.cpp
│   │           ├── histc.h
│   │           ├── hsv_to_rgb.cpp
│   │           ├── hsv_to_rgb.h
│   │           ├── igl_inline.h
│   │           ├── in_element.cpp
│   │           ├── in_element.h
│   │           ├── infinite_cost_stopping_condition.cpp
│   │           ├── infinite_cost_stopping_condition.h
│   │           ├── init_render_to_texture.cpp
│   │           ├── init_render_to_texture.h
│   │           ├── inradius.cpp
│   │           ├── inradius.h
│   │           ├── integrable_polyvector_fields.cpp
│   │           ├── integrable_polyvector_fields.h
│   │           ├── internal_angles.cpp
│   │           ├── internal_angles.h
│   │           ├── intersect.cpp
│   │           ├── intersect.h
│   │           ├── invert_diag.cpp
│   │           ├── invert_diag.h
│   │           ├── is_border_vertex.cpp
│   │           ├── is_border_vertex.h
│   │           ├── is_boundary_edge.cpp
│   │           ├── is_boundary_edge.h
│   │           ├── is_dir.cpp
│   │           ├── is_dir.h
│   │           ├── is_edge_manifold.cpp
│   │           ├── is_edge_manifold.h
│   │           ├── is_file.cpp
│   │           ├── is_file.h
│   │           ├── is_irregular_vertex.cpp
│   │           ├── is_irregular_vertex.h
│   │           ├── is_planar.cpp
│   │           ├── is_planar.h
│   │           ├── is_readable.cpp
│   │           ├── is_readable.h
│   │           ├── is_sparse.cpp
│   │           ├── is_sparse.h
│   │           ├── is_stl.cpp
│   │           ├── is_stl.h
│   │           ├── is_symmetric.cpp
│   │           ├── is_symmetric.h
│   │           ├── is_vertex_manifold.cpp
│   │           ├── is_vertex_manifold.h
│   │           ├── is_writable.cpp
│   │           ├── is_writable.h
│   │           ├── isdiag.cpp
│   │           ├── isdiag.h
│   │           ├── ismember.cpp
│   │           ├── ismember.h
│   │           ├── jet.cpp
│   │           ├── jet.h
│   │           ├── kronecker_product.cpp
│   │           ├── kronecker_product.h
│   │           ├── launch_medit.cpp
│   │           ├── launch_medit.h
│   │           ├── lbs_matrix.cpp
│   │           ├── lbs_matrix.h
│   │           ├── lens_flare.cpp
│   │           ├── lens_flare.h
│   │           ├── lexicographic_triangulation.cpp
│   │           ├── lexicographic_triangulation.h
│   │           ├── lim/
│   │           │   ├── lim.cpp
│   │           │   └── lim.h
│   │           ├── limit_faces.cpp
│   │           ├── limit_faces.h
│   │           ├── line_field_missmatch.cpp
│   │           ├── line_field_missmatch.h
│   │           ├── line_search.cpp
│   │           ├── line_search.h
│   │           ├── line_segment_in_rectangle.cpp
│   │           ├── line_segment_in_rectangle.h
│   │           ├── linprog.cpp
│   │           ├── linprog.h
│   │           ├── list_to_matrix.cpp
│   │           ├── list_to_matrix.h
│   │           ├── load_shader.cpp
│   │           ├── load_shader.h
│   │           ├── local_basis.cpp
│   │           ├── local_basis.h
│   │           ├── look_at.cpp
│   │           ├── look_at.h
│   │           ├── loop.cpp
│   │           ├── loop.h
│   │           ├── lscm.cpp
│   │           ├── lscm.h
│   │           ├── lu_lagrange.cpp
│   │           ├── lu_lagrange.h
│   │           ├── map_vertices_to_circle.cpp
│   │           ├── map_vertices_to_circle.h
│   │           ├── marching_cubes.cpp
│   │           ├── marching_cubes.h
│   │           ├── massmatrix.cpp
│   │           ├── massmatrix.h
│   │           ├── mat_max.cpp
│   │           ├── mat_max.h
│   │           ├── mat_min.cpp
│   │           ├── mat_min.h
│   │           ├── mat_to_quat.cpp
│   │           ├── mat_to_quat.h
│   │           ├── material_colors.h
│   │           ├── matlab/
│   │           │   ├── MatlabWorkspace.h
│   │           │   ├── MexStream.h
│   │           │   ├── matlabinterface.cpp
│   │           │   ├── matlabinterface.h
│   │           │   ├── mexErrMsgTxt.cpp
│   │           │   ├── mexErrMsgTxt.h
│   │           │   ├── parse_rhs.cpp
│   │           │   ├── parse_rhs.h
│   │           │   ├── prepare_lhs.cpp
│   │           │   ├── prepare_lhs.h
│   │           │   ├── requires_arg.cpp
│   │           │   ├── requires_arg.h
│   │           │   ├── validate_arg.cpp
│   │           │   └── validate_arg.h
│   │           ├── matlab_format.cpp
│   │           ├── matlab_format.h
│   │           ├── matrix_to_list.cpp
│   │           ├── matrix_to_list.h
│   │           ├── max.cpp
│   │           ├── max.h
│   │           ├── max_faces_stopping_condition.cpp
│   │           ├── max_faces_stopping_condition.h
│   │           ├── max_size.cpp
│   │           ├── max_size.h
│   │           ├── median.cpp
│   │           ├── median.h
│   │           ├── min.cpp
│   │           ├── min.h
│   │           ├── min_quad_dense.cpp
│   │           ├── min_quad_dense.h
│   │           ├── min_quad_with_fixed.cpp
│   │           ├── min_quad_with_fixed.h
│   │           ├── min_size.cpp
│   │           ├── min_size.h
│   │           ├── mod.cpp
│   │           ├── mod.h
│   │           ├── mode.cpp
│   │           ├── mode.h
│   │           ├── mosek/
│   │           │   ├── bbw.cpp
│   │           │   ├── bbw.h
│   │           │   ├── mosek_guarded.cpp
│   │           │   ├── mosek_guarded.h
│   │           │   ├── mosek_linprog.cpp
│   │           │   ├── mosek_linprog.h
│   │           │   ├── mosek_quadprog.cpp
│   │           │   └── mosek_quadprog.h
│   │           ├── mvc.cpp
│   │           ├── mvc.h
│   │           ├── n_polyvector.cpp
│   │           ├── n_polyvector.h
│   │           ├── n_polyvector_general.cpp
│   │           ├── n_polyvector_general.h
│   │           ├── nchoosek.cpp
│   │           ├── nchoosek.h
│   │           ├── next_filename.cpp
│   │           ├── next_filename.h
│   │           ├── normal_derivative.cpp
│   │           ├── normal_derivative.h
│   │           ├── normalize_quat.cpp
│   │           ├── normalize_quat.h
│   │           ├── normalize_row_lengths.cpp
│   │           ├── normalize_row_lengths.h
│   │           ├── normalize_row_sums.cpp
│   │           ├── normalize_row_sums.h
│   │           ├── null.cpp
│   │           ├── null.h
│   │           ├── on_boundary.cpp
│   │           ├── on_boundary.h
│   │           ├── opengl/
│   │           │   ├── compile_and_link_program.cpp
│   │           │   ├── compile_and_link_program.h
│   │           │   ├── compile_shader.cpp
│   │           │   ├── compile_shader.h
│   │           │   ├── create_index_vbo.cpp
│   │           │   ├── create_index_vbo.h
│   │           │   ├── create_mesh_vbo.cpp
│   │           │   ├── create_mesh_vbo.h
│   │           │   ├── create_shader_program.cpp
│   │           │   ├── create_shader_program.h
│   │           │   ├── create_vector_vbo.cpp
│   │           │   ├── create_vector_vbo.h
│   │           │   ├── destroy_shader_program.cpp
│   │           │   ├── destroy_shader_program.h
│   │           │   ├── gl 12.56.14.h
│   │           │   ├── gl_type_size.cpp
│   │           │   ├── gl_type_size.h
│   │           │   ├── glfw/
│   │           │   │   ├── map_texture.cpp
│   │           │   │   └── map_texture.h
│   │           │   ├── init_render_to_texture.cpp
│   │           │   ├── init_render_to_texture.h
│   │           │   ├── load_shader.cpp
│   │           │   ├── load_shader.h
│   │           │   ├── print_program_info_log.cpp
│   │           │   ├── print_program_info_log.h
│   │           │   ├── print_shader_info_log.cpp
│   │           │   ├── print_shader_info_log.h
│   │           │   ├── report_gl_error.cpp
│   │           │   ├── report_gl_error.h
│   │           │   ├── uniform_type_to_string.cpp
│   │           │   └── uniform_type_to_string.h
│   │           ├── opengl2/
│   │           │   ├── MouseController.h
│   │           │   ├── RotateWidget.h
│   │           │   ├── TranslateWidget.h
│   │           │   ├── draw_beach_ball.cpp
│   │           │   ├── draw_beach_ball.h
│   │           │   ├── draw_floor.cpp
│   │           │   ├── draw_floor.h
│   │           │   ├── draw_mesh.cpp
│   │           │   ├── draw_mesh.h
│   │           │   ├── draw_point.cpp
│   │           │   ├── draw_point.h
│   │           │   ├── draw_rectangular_marquee.cpp
│   │           │   ├── draw_rectangular_marquee.h
│   │           │   ├── draw_skeleton_3d.cpp
│   │           │   ├── draw_skeleton_3d.h
│   │           │   ├── draw_skeleton_vector_graphics.cpp
│   │           │   ├── draw_skeleton_vector_graphics.h
│   │           │   ├── flare_textures.h
│   │           │   ├── gl.h
│   │           │   ├── glext.h
│   │           │   ├── glu.h
│   │           │   ├── lens_flare.cpp
│   │           │   ├── lens_flare.h
│   │           │   ├── model_proj_viewport.cpp
│   │           │   ├── model_proj_viewport.h
│   │           │   ├── print_gl_get.cpp
│   │           │   ├── print_gl_get.h
│   │           │   ├── project.cpp
│   │           │   ├── project.h
│   │           │   ├── render_to_tga.cpp
│   │           │   ├── render_to_tga.h
│   │           │   ├── right_axis.cpp
│   │           │   ├── right_axis.h
│   │           │   ├── shine_textures.h
│   │           │   ├── sort_triangles.cpp
│   │           │   ├── sort_triangles.h
│   │           │   ├── texture_from_tga.cpp
│   │           │   ├── texture_from_tga.h
│   │           │   ├── tga.cpp
│   │           │   ├── tga.h
│   │           │   ├── unproject.cpp
│   │           │   ├── unproject.h
│   │           │   ├── unproject_to_zero_plane.cpp
│   │           │   ├── unproject_to_zero_plane.h
│   │           │   ├── up_axis.cpp
│   │           │   ├── up_axis.h
│   │           │   ├── view_axis.cpp
│   │           │   └── view_axis.h
│   │           ├── orient_outward.cpp
│   │           ├── orient_outward.h
│   │           ├── orientable_patches.cpp
│   │           ├── orientable_patches.h
│   │           ├── orth.cpp
│   │           ├── orth.h
│   │           ├── ortho.cpp
│   │           ├── ortho.h
│   │           ├── outer_element.cpp
│   │           ├── outer_element.h
│   │           ├── outer_facet.cpp
│   │           ├── outer_facet.h
│   │           ├── parallel_for.h
│   │           ├── parallel_transport_angles.cpp
│   │           ├── parallel_transport_angles.h
│   │           ├── partition.cpp
│   │           ├── partition.h
│   │           ├── parula.cpp
│   │           ├── parula.h
│   │           ├── path_to_executable.cpp
│   │           ├── path_to_executable.h
│   │           ├── pathinfo.cpp
│   │           ├── pathinfo.h
│   │           ├── per_corner_normals.cpp
│   │           ├── per_corner_normals.h
│   │           ├── per_edge_normals.cpp
│   │           ├── per_edge_normals.h
│   │           ├── per_face_normals.cpp
│   │           ├── per_face_normals.h
│   │           ├── per_vertex_attribute_smoothing.cpp
│   │           ├── per_vertex_attribute_smoothing.h
│   │           ├── per_vertex_normals.cpp
│   │           ├── per_vertex_normals.h
│   │           ├── per_vertex_point_to_plane_quadrics.cpp
│   │           ├── per_vertex_point_to_plane_quadrics.h
│   │           ├── piecewise_constant_winding_number.cpp
│   │           ├── piecewise_constant_winding_number.h
│   │           ├── planarize_quad_mesh.cpp
│   │           ├── planarize_quad_mesh.h
│   │           ├── ply.h
│   │           ├── png/
│   │           │   ├── readPNG.cpp
│   │           │   ├── readPNG.h
│   │           │   ├── render_to_png.cpp
│   │           │   ├── render_to_png.h
│   │           │   ├── render_to_png_async.cpp
│   │           │   ├── render_to_png_async.h
│   │           │   ├── texture_from_file.cpp
│   │           │   ├── texture_from_file.h
│   │           │   ├── texture_from_png.cpp
│   │           │   ├── texture_from_png.h
│   │           │   ├── writePNG.cpp
│   │           │   └── writePNG.h
│   │           ├── point_in_circle.cpp
│   │           ├── point_in_circle.h
│   │           ├── point_in_poly.cpp
│   │           ├── point_in_poly.h
│   │           ├── point_mesh_squared_distance.cpp
│   │           ├── point_mesh_squared_distance.h
│   │           ├── point_simplex_squared_distance.cpp
│   │           ├── point_simplex_squared_distance.h
│   │           ├── polar_dec.cpp
│   │           ├── polar_dec.h
│   │           ├── polar_svd.cpp
│   │           ├── polar_svd.h
│   │           ├── polar_svd3x3.cpp
│   │           ├── polar_svd3x3.h
│   │           ├── polygon_mesh_to_triangle_mesh.cpp
│   │           ├── polygon_mesh_to_triangle_mesh.h
│   │           ├── polyroots.cpp
│   │           ├── polyroots.h
│   │           ├── polyvector_field_comb_from_matchings_and_cuts.cpp
│   │           ├── polyvector_field_comb_from_matchings_and_cuts.h
│   │           ├── polyvector_field_cut_mesh_with_singularities.cpp
│   │           ├── polyvector_field_cut_mesh_with_singularities.h
│   │           ├── polyvector_field_matchings.cpp
│   │           ├── polyvector_field_matchings.h
│   │           ├── polyvector_field_poisson_reconstruction.cpp
│   │           ├── polyvector_field_poisson_reconstruction.h
│   │           ├── polyvector_field_singularities_from_matchings.cpp
│   │           ├── polyvector_field_singularities_from_matchings.h
│   │           ├── principal_curvature.cpp
│   │           ├── principal_curvature.h
│   │           ├── print_gl_get.cpp
│   │           ├── print_gl_get.h
│   │           ├── print_ijv.cpp
│   │           ├── print_ijv.h
│   │           ├── print_program_info_log.cpp
│   │           ├── print_program_info_log.h
│   │           ├── print_shader_info_log.cpp
│   │           ├── print_shader_info_log.h
│   │           ├── print_vector.cpp
│   │           ├── print_vector.h
│   │           ├── procrustes.cpp
│   │           ├── procrustes.h
│   │           ├── project.cpp
│   │           ├── project.h
│   │           ├── project_isometrically_to_plane.cpp
│   │           ├── project_isometrically_to_plane.h
│   │           ├── project_to_line.cpp
│   │           ├── project_to_line.h
│   │           ├── project_to_line_segment.cpp
│   │           ├── project_to_line_segment.h
│   │           ├── pseudonormal_test.cpp
│   │           ├── pseudonormal_test.h
│   │           ├── qslim.cpp
│   │           ├── qslim.h
│   │           ├── qslim_optimal_collapse_edge_callbacks.cpp
│   │           ├── qslim_optimal_collapse_edge_callbacks.h
│   │           ├── quad_planarity.cpp
│   │           ├── quad_planarity.h
│   │           ├── quadric_binary_plus_operator.cpp
│   │           ├── quadric_binary_plus_operator.h
│   │           ├── quat_conjugate.cpp
│   │           ├── quat_conjugate.h
│   │           ├── quat_mult.cpp
│   │           ├── quat_mult.h
│   │           ├── quat_to_axis_angle.cpp
│   │           ├── quat_to_axis_angle.h
│   │           ├── quat_to_mat.cpp
│   │           ├── quat_to_mat.h
│   │           ├── quats_to_column.cpp
│   │           ├── quats_to_column.h
│   │           ├── ramer_douglas_peucker.cpp
│   │           ├── ramer_douglas_peucker.h
│   │           ├── random_dir.cpp
│   │           ├── random_dir.h
│   │           ├── random_points_on_mesh.cpp
│   │           ├── random_points_on_mesh.h
│   │           ├── random_quaternion.cpp
│   │           ├── random_quaternion.h
│   │           ├── randperm.cpp
│   │           ├── randperm.h
│   │           ├── ray_box_intersect.cpp
│   │           ├── ray_box_intersect.h
│   │           ├── ray_mesh_intersect.cpp
│   │           ├── ray_mesh_intersect.h
│   │           ├── ray_sphere_intersect.cpp
│   │           ├── ray_sphere_intersect.h
│   │           ├── raytri.c
│   │           ├── readBF.cpp
│   │           ├── readBF.h
│   │           ├── readCSV.cpp
│   │           ├── readCSV.h
│   │           ├── readDMAT.cpp
│   │           ├── readDMAT.h
│   │           ├── readMESH.cpp
│   │           ├── readMESH.h
│   │           ├── readNODE.cpp
│   │           ├── readNODE.h
│   │           ├── readOBJ.cpp
│   │           ├── readOBJ.h
│   │           ├── readOFF.cpp
│   │           ├── readOFF.h
│   │           ├── readPLY.cpp
│   │           ├── readPLY.h
│   │           ├── readSTL.cpp
│   │           ├── readSTL.h
│   │           ├── readTGF.cpp
│   │           ├── readTGF.h
│   │           ├── readWRL.cpp
│   │           ├── readWRL.h
│   │           ├── read_triangle_mesh.cpp
│   │           ├── read_triangle_mesh.h
│   │           ├── redux.h
│   │           ├── remove_duplicate_vertices.cpp
│   │           ├── remove_duplicate_vertices.h
│   │           ├── remove_duplicates.cpp
│   │           ├── remove_duplicates.h
│   │           ├── remove_unreferenced.cpp
│   │           ├── remove_unreferenced.h
│   │           ├── render_to_tga.cpp
│   │           ├── render_to_tga.h
│   │           ├── reorder.cpp
│   │           ├── reorder.h
│   │           ├── repdiag.cpp
│   │           ├── repdiag.h
│   │           ├── repmat.cpp
│   │           ├── repmat.h
│   │           ├── report_gl_error.cpp
│   │           ├── report_gl_error.h
│   │           ├── resolve_duplicated_faces.cpp
│   │           ├── resolve_duplicated_faces.h
│   │           ├── rgb_to_hsv.cpp
│   │           ├── rgb_to_hsv.h
│   │           ├── right_axis.cpp
│   │           ├── right_axis.h
│   │           ├── rotate_by_quat.cpp
│   │           ├── rotate_by_quat.h
│   │           ├── rotate_vectors.cpp
│   │           ├── rotate_vectors.h
│   │           ├── rotation_matrix_from_directions.cpp
│   │           ├── rotation_matrix_from_directions.h
│   │           ├── round.cpp
│   │           ├── round.h
│   │           ├── rows_to_matrix.cpp
│   │           ├── rows_to_matrix.h
│   │           ├── sample_edges.cpp
│   │           ├── sample_edges.h
│   │           ├── seam_edges.cpp
│   │           ├── seam_edges.h
│   │           ├── segment_segment_intersect.cpp
│   │           ├── segment_segment_intersect.h
│   │           ├── serialize.h
│   │           ├── setdiff.cpp
│   │           ├── setdiff.h
│   │           ├── setunion.cpp
│   │           ├── setunion.h
│   │           ├── setxor.cpp
│   │           ├── setxor.h
│   │           ├── shine_textures.h
│   │           ├── shortest_edge_and_midpoint.cpp
│   │           ├── shortest_edge_and_midpoint.h
│   │           ├── signed_distance.cpp
│   │           ├── signed_distance.h
│   │           ├── simplify_polyhedron.cpp
│   │           ├── simplify_polyhedron.h
│   │           ├── slice.cpp
│   │           ├── slice.h
│   │           ├── slice_into.cpp
│   │           ├── slice_into.h
│   │           ├── slice_mask.cpp
│   │           ├── slice_mask.h
│   │           ├── slice_tets.cpp
│   │           ├── slice_tets.h
│   │           ├── slim.cpp
│   │           ├── slim.h
│   │           ├── snap_points.cpp
│   │           ├── snap_points.h
│   │           ├── snap_to_canonical_view_quat.cpp
│   │           ├── snap_to_canonical_view_quat.h
│   │           ├── snap_to_fixed_up.cpp
│   │           ├── snap_to_fixed_up.h
│   │           ├── sort.cpp
│   │           ├── sort.h
│   │           ├── sort_angles.cpp
│   │           ├── sort_angles.h
│   │           ├── sort_triangles.cpp
│   │           ├── sort_triangles.h
│   │           ├── sort_vectors_ccw.cpp
│   │           ├── sort_vectors_ccw.h
│   │           ├── sortrows.cpp
│   │           ├── sortrows.h
│   │           ├── sparse.cpp
│   │           ├── sparse.h
│   │           ├── speye.cpp
│   │           ├── speye.h
│   │           ├── squared_edge_lengths.cpp
│   │           ├── squared_edge_lengths.h
│   │           ├── stdin_to_temp.cpp
│   │           ├── stdin_to_temp.h
│   │           ├── straighten_seams.cpp
│   │           ├── straighten_seams.h
│   │           ├── streamlines.cpp
│   │           ├── streamlines.h
│   │           ├── sum.cpp
│   │           ├── sum.h
│   │           ├── svd3x3/
│   │           │   ├── arap.cpp
│   │           │   ├── arap.h
│   │           │   ├── arap_dof.cpp
│   │           │   ├── arap_dof.h
│   │           │   ├── fit_rotations.cpp
│   │           │   ├── fit_rotations.h
│   │           │   ├── polar_svd3x3.cpp
│   │           │   ├── polar_svd3x3.h
│   │           │   ├── svd3x3.cpp
│   │           │   ├── svd3x3.h
│   │           │   ├── svd3x3_avx.cpp
│   │           │   ├── svd3x3_avx.h
│   │           │   ├── svd3x3_sse.cpp
│   │           │   └── svd3x3_sse.h
│   │           ├── svd3x3.cpp
│   │           ├── svd3x3.h
│   │           ├── svd3x3_avx.cpp
│   │           ├── svd3x3_avx.h
│   │           ├── svd3x3_sse.cpp
│   │           ├── svd3x3_sse.h
│   │           ├── swept_volume_bounding_box.cpp
│   │           ├── swept_volume_bounding_box.h
│   │           ├── swept_volume_signed_distance.cpp
│   │           ├── swept_volume_signed_distance.h
│   │           ├── tetgen/
│   │           │   ├── README
│   │           │   ├── cdt.cpp
│   │           │   ├── cdt.h
│   │           │   ├── mesh_to_tetgenio.cpp
│   │           │   ├── mesh_to_tetgenio.h
│   │           │   ├── mesh_with_skeleton.cpp
│   │           │   ├── mesh_with_skeleton.h
│   │           │   ├── read_into_tetgenio.cpp
│   │           │   ├── read_into_tetgenio.h
│   │           │   ├── tetgenio_to_tetmesh.cpp
│   │           │   ├── tetgenio_to_tetmesh.h
│   │           │   ├── tetrahedralize.cpp
│   │           │   └── tetrahedralize.h
│   │           ├── texture_from_tga.cpp
│   │           ├── texture_from_tga.h
│   │           ├── tga.cpp
│   │           ├── tga.h
│   │           ├── trackball.cpp
│   │           ├── trackball.h
│   │           ├── transpose_blocks.cpp
│   │           ├── transpose_blocks.h
│   │           ├── triangle/
│   │           │   ├── cdt.cpp
│   │           │   ├── cdt.h
│   │           │   ├── triangulate.cpp
│   │           │   └── triangulate.h
│   │           ├── triangle_fan.cpp
│   │           ├── triangle_fan.h
│   │           ├── triangle_triangle_adjacency.cpp
│   │           ├── triangle_triangle_adjacency.h
│   │           ├── triangles_from_strip.cpp
│   │           ├── triangles_from_strip.h
│   │           ├── two_axis_valuator_fixed_up.cpp
│   │           ├── two_axis_valuator_fixed_up.h
│   │           ├── uniform_type_to_string.cpp
│   │           ├── uniform_type_to_string.h
│   │           ├── uniformly_sample_two_manifold.cpp
│   │           ├── uniformly_sample_two_manifold.h
│   │           ├── unique.cpp
│   │           ├── unique.h
│   │           ├── unique_edge_map.cpp
│   │           ├── unique_edge_map.h
│   │           ├── unique_simplices.cpp
│   │           ├── unique_simplices.h
│   │           ├── unproject.cpp
│   │           ├── unproject.h
│   │           ├── unproject_in_mesh.cpp
│   │           ├── unproject_in_mesh.h
│   │           ├── unproject_onto_mesh.cpp
│   │           ├── unproject_onto_mesh.h
│   │           ├── unproject_ray.cpp
│   │           ├── unproject_ray.h
│   │           ├── unproject_to_zero_plane.cpp
│   │           ├── unproject_to_zero_plane.h
│   │           ├── unzip_corners.cpp
│   │           ├── unzip_corners.h
│   │           ├── up_axis.cpp
│   │           ├── up_axis.h
│   │           ├── upsample.cpp
│   │           ├── upsample.h
│   │           ├── vector_area_matrix.cpp
│   │           ├── vector_area_matrix.h
│   │           ├── verbose.h
│   │           ├── vertex_triangle_adjacency.cpp
│   │           ├── vertex_triangle_adjacency.h
│   │           ├── view_axis.cpp
│   │           ├── view_axis.h
│   │           ├── viewer/
│   │           │   ├── OpenGL_shader.cpp
│   │           │   ├── OpenGL_shader.h
│   │           │   ├── OpenGL_state.cpp
│   │           │   ├── OpenGL_state.h
│   │           │   ├── TODOs.txt
│   │           │   ├── TextRenderer.cpp
│   │           │   ├── TextRenderer.h
│   │           │   ├── TextRenderer_fonts.cpp
│   │           │   ├── TextRenderer_fonts.h
│   │           │   ├── Viewer.cpp
│   │           │   ├── Viewer.h
│   │           │   ├── ViewerCore.cpp
│   │           │   ├── ViewerCore.h
│   │           │   ├── ViewerData.cpp
│   │           │   ├── ViewerData.h
│   │           │   └── ViewerPlugin.h
│   │           ├── volume.cpp
│   │           ├── volume.h
│   │           ├── voxel_grid.cpp
│   │           ├── voxel_grid.h
│   │           ├── winding_number.cpp
│   │           ├── winding_number.h
│   │           ├── writeBF.cpp
│   │           ├── writeBF.h
│   │           ├── writeDMAT.cpp
│   │           ├── writeDMAT.h
│   │           ├── writeMESH.cpp
│   │           ├── writeMESH.h
│   │           ├── writeOBJ.cpp
│   │           ├── writeOBJ.h
│   │           ├── writeOFF.cpp
│   │           ├── writeOFF.h
│   │           ├── writePLY.cpp
│   │           ├── writePLY.h
│   │           ├── writeSTL.cpp
│   │           ├── writeSTL.h
│   │           ├── writeTGF.cpp
│   │           ├── writeTGF.h
│   │           ├── writeWRL.cpp
│   │           ├── writeWRL.h
│   │           ├── write_triangle_mesh.cpp
│   │           ├── write_triangle_mesh.h
│   │           └── xml/
│   │               ├── README
│   │               ├── ReAntTweakBarXMLSerialization.h
│   │               ├── XMLSerializable.h
│   │               ├── serialization_test.cpp
│   │               ├── serialization_test.skip
│   │               ├── serialize_xml.cpp
│   │               ├── serialize_xml.h
│   │               ├── writeDAE.cpp
│   │               ├── writeDAE.h
│   │               ├── write_triangle_mesh.cpp
│   │               └── write_triangle_mesh.h
│   ├── libs.pri
│   └── quadretopology/
│       ├── patterns/
│       │   ├── patterns/
│       │   │   ├── OpenMesh/
│       │   │   │   └── Core/
│       │   │   │       ├── Geometry/
│       │   │   │       │   ├── Config.hh
│       │   │   │       │   ├── LoopSchemeMaskT.hh
│       │   │   │       │   ├── MathDefs.hh
│       │   │   │       │   ├── NormalConeT.cc
│       │   │   │       │   ├── NormalConeT.hh
│       │   │   │       │   ├── Plane3d.hh
│       │   │   │       │   ├── QuadricT.hh
│       │   │   │       │   ├── VectorT.hh
│       │   │   │       │   └── VectorT_inc.hh
│       │   │   │       ├── IO/
│       │   │   │       │   ├── BinaryHelper.cc
│       │   │   │       │   ├── BinaryHelper.hh
│       │   │   │       │   ├── IOInstances.hh
│       │   │   │       │   ├── IOManager.cc
│       │   │   │       │   ├── IOManager.hh
│       │   │   │       │   ├── MeshIO.hh
│       │   │   │       │   ├── OFFFormat.hh
│       │   │   │       │   ├── OMFormat.cc
│       │   │   │       │   ├── OMFormat.hh
│       │   │   │       │   ├── OMFormatT.cc
│       │   │   │       │   ├── Options.hh
│       │   │   │       │   ├── SR_binary.hh
│       │   │   │       │   ├── SR_binary_spec.hh
│       │   │   │       │   ├── SR_binary_vector_of_bool.inl
│       │   │   │       │   ├── SR_binary_vector_of_fundamentals.inl
│       │   │   │       │   ├── SR_binary_vector_of_string.inl
│       │   │   │       │   ├── SR_rbo.hh
│       │   │   │       │   ├── SR_store.hh
│       │   │   │       │   ├── SR_types.hh
│       │   │   │       │   ├── StoreRestore.hh
│       │   │   │       │   ├── exporter/
│       │   │   │       │   │   ├── BaseExporter.hh
│       │   │   │       │   │   └── ExporterT.hh
│       │   │   │       │   ├── importer/
│       │   │   │       │   │   ├── BaseImporter.hh
│       │   │   │       │   │   └── ImporterT.hh
│       │   │   │       │   ├── reader/
│       │   │   │       │   │   ├── BaseReader.cc
│       │   │   │       │   │   ├── BaseReader.hh
│       │   │   │       │   │   ├── OBJReader.cc
│       │   │   │       │   │   ├── OBJReader.hh
│       │   │   │       │   │   ├── OFFReader.cc
│       │   │   │       │   │   ├── OFFReader.hh
│       │   │   │       │   │   ├── OMReader.cc
│       │   │   │       │   │   ├── OMReader.hh
│       │   │   │       │   │   ├── PLYReader.cc
│       │   │   │       │   │   ├── PLYReader.hh
│       │   │   │       │   │   ├── STLReader.cc
│       │   │   │       │   │   └── STLReader.hh
│       │   │   │       │   └── writer/
│       │   │   │       │       ├── BaseWriter.cc
│       │   │   │       │       ├── BaseWriter.hh
│       │   │   │       │       ├── OBJWriter.cc
│       │   │   │       │       ├── OBJWriter.hh
│       │   │   │       │       ├── OFFWriter.cc
│       │   │   │       │       ├── OFFWriter.hh
│       │   │   │       │       ├── OMWriter.cc
│       │   │   │       │       ├── OMWriter.hh
│       │   │   │       │       ├── PLYWriter.cc
│       │   │   │       │       ├── PLYWriter.hh
│       │   │   │       │       ├── STLWriter.cc
│       │   │   │       │       ├── STLWriter.hh
│       │   │   │       │       ├── VTKWriter.cc
│       │   │   │       │       └── VTKWriter.hh
│       │   │   │       ├── Mesh/
│       │   │   │       │   ├── ArrayItems.hh
│       │   │   │       │   ├── ArrayKernel.cc
│       │   │   │       │   ├── ArrayKernel.hh
│       │   │   │       │   ├── ArrayKernelT.cc
│       │   │   │       │   ├── AttribKernelT.hh
│       │   │   │       │   ├── Attributes.hh
│       │   │   │       │   ├── BaseKernel.cc
│       │   │   │       │   ├── BaseKernel.hh
│       │   │   │       │   ├── BaseMesh.hh
│       │   │   │       │   ├── Casts.hh
│       │   │   │       │   ├── CirculatorsT.hh
│       │   │   │       │   ├── FinalMeshItemsT.hh
│       │   │   │       │   ├── Handles.hh
│       │   │   │       │   ├── IteratorsT.hh
│       │   │   │       │   ├── PolyConnectivity.cc
│       │   │   │       │   ├── PolyConnectivity.hh
│       │   │   │       │   ├── PolyMeshT.cc
│       │   │   │       │   ├── PolyMeshT.hh
│       │   │   │       │   ├── PolyMesh_ArrayKernelT.hh
│       │   │   │       │   ├── Status.hh
│       │   │   │       │   ├── Traits.hh
│       │   │   │       │   ├── TriConnectivity.cc
│       │   │   │       │   ├── TriConnectivity.hh
│       │   │   │       │   ├── TriMeshT.cc
│       │   │   │       │   ├── TriMeshT.hh
│       │   │   │       │   └── TriMesh_ArrayKernelT.hh
│       │   │   │       ├── System/
│       │   │   │       │   ├── OpenMeshDLLMacros.hh
│       │   │   │       │   ├── compiler.hh
│       │   │   │       │   ├── config.h
│       │   │   │       │   ├── config.hh
│       │   │   │       │   ├── mostream.hh
│       │   │   │       │   ├── omstream.cc
│       │   │   │       │   └── omstream.hh
│       │   │   │       └── Utils/
│       │   │   │           ├── AutoPropertyHandleT.hh
│       │   │   │           ├── BaseProperty.cc
│       │   │   │           ├── BaseProperty.hh
│       │   │   │           ├── Endian.cc
│       │   │   │           ├── Endian.hh
│       │   │   │           ├── GenProg.hh
│       │   │   │           ├── Noncopyable.hh
│       │   │   │           ├── Property.hh
│       │   │   │           ├── PropertyContainer.hh
│       │   │   │           ├── PropertyManager.hh
│       │   │   │           ├── RandomNumberGenerator.cc
│       │   │   │           ├── RandomNumberGenerator.hh
│       │   │   │           ├── SingletonT.cc
│       │   │   │           ├── SingletonT.hh
│       │   │   │           ├── color_cast.hh
│       │   │   │           ├── vector_cast.hh
│       │   │   │           └── vector_traits.hh
│       │   │   ├── Patch.cpp
│       │   │   ├── Patch.h
│       │   │   ├── determine_geometry.cpp
│       │   │   ├── determine_geometry.h
│       │   │   ├── generate_patch.cpp
│       │   │   ├── generate_patch.h
│       │   │   ├── kt84/
│       │   │   │   ├── AutoDeleter.h
│       │   │   │   ├── BaryCoordT.h
│       │   │   │   ├── Clock.h
│       │   │   │   ├── Matrix11ToScalar.h
│       │   │   │   ├── MaxSelector.h
│       │   │   │   ├── Memento.h
│       │   │   │   ├── MinSelector.h
│       │   │   │   ├── PriorityElement.h
│       │   │   │   ├── RangeAdaptor.h
│       │   │   │   ├── ReversedRange.h
│       │   │   │   ├── ScopeExit.hh
│       │   │   │   ├── Timer.hh
│       │   │   │   ├── adjacent_pairs.h
│       │   │   │   ├── container_cast.h
│       │   │   │   ├── container_util.h
│       │   │   │   ├── discrete_distribution.h
│       │   │   │   ├── eigen_def.h
│       │   │   │   ├── eigen_util.h
│       │   │   │   ├── geometry/
│       │   │   │   │   ├── Camera.h
│       │   │   │   │   ├── CameraFree.h
│       │   │   │   │   ├── CameraUpright.h
│       │   │   │   │   ├── PointNormal.h
│       │   │   │   │   └── PolylineT.h
│       │   │   │   ├── glut_util.h
│       │   │   │   ├── graphics/
│       │   │   │   │   ├── DisplayList.h
│       │   │   │   │   ├── FramebufferObject.h
│       │   │   │   │   ├── ParamName2.1.inl
│       │   │   │   │   ├── ParamName2.1.txt
│       │   │   │   │   ├── ParamName3.3.inl
│       │   │   │   │   ├── ParamName3.3.txt
│       │   │   │   │   ├── ParamName4.inl
│       │   │   │   │   ├── ParamName4.txt
│       │   │   │   │   ├── ProgramObject.h
│       │   │   │   │   ├── RenderbufferObject.h
│       │   │   │   │   ├── ShaderObject.h
│       │   │   │   │   ├── TextureObjectT.h
│       │   │   │   │   ├── gen_ParamName.py
│       │   │   │   │   ├── graphics_util.h
│       │   │   │   │   └── phong_tessellation.h
│       │   │   │   ├── loop_util.h
│       │   │   │   ├── math/
│       │   │   │   │   ├── BinomialCoefficient.h
│       │   │   │   │   ├── FiniteDifferentiator.h
│       │   │   │   │   ├── GeneralizedMLS.h
│       │   │   │   │   ├── HermiteRBF.h
│       │   │   │   │   ├── MLS.h
│       │   │   │   │   ├── PolynomialBasisGen.h
│       │   │   │   │   ├── RBF.h
│       │   │   │   │   ├── RBFKernel.h
│       │   │   │   │   └── interpolant_test.cpp
│       │   │   │   ├── multi_array.h
│       │   │   │   ├── myassert.h
│       │   │   │   ├── openmesh/
│       │   │   │   │   ├── DerivedPtrHolder.h
│       │   │   │   │   ├── FaceBaryCoordT.h
│       │   │   │   │   ├── append_quad_strip.h
│       │   │   │   │   ├── base/
│       │   │   │   │   │   ├── BoundingBox.h
│       │   │   │   │   │   ├── CenterOfMass.h
│       │   │   │   │   │   ├── CotanWeight.h
│       │   │   │   │   │   ├── DebugInfo.h
│       │   │   │   │   │   ├── EdgeLength.h
│       │   │   │   │   │   ├── ExpMap.h
│       │   │   │   │   │   ├── FaceArea.h
│       │   │   │   │   │   ├── Geodesic.h
│       │   │   │   │   │   ├── GeodesicLoop_incomplete.h
│       │   │   │   │   │   ├── Gradient.h
│       │   │   │   │   │   ├── KdTree.h
│       │   │   │   │   │   ├── LaplaceDirect.h
│       │   │   │   │   │   ├── LaplaceIterative.h
│       │   │   │   │   │   ├── NormalCurvature.h
│       │   │   │   │   │   ├── NormalVariation.h
│       │   │   │   │   │   ├── SurfaceTopology.h
│       │   │   │   │   │   ├── Utility.h
│       │   │   │   │   │   └── geodesic/
│       │   │   │   │   │       ├── geodesic_algorithm_base.h
│       │   │   │   │   │       ├── geodesic_algorithm_dijkstra.h
│       │   │   │   │   │       ├── geodesic_algorithm_dijkstra_alternative.h
│       │   │   │   │   │       ├── geodesic_algorithm_exact.h
│       │   │   │   │   │       ├── geodesic_algorithm_exact_elements.h
│       │   │   │   │   │       ├── geodesic_algorithm_graph_base.h
│       │   │   │   │   │       ├── geodesic_algorithm_subdivision.h
│       │   │   │   │   │       ├── geodesic_constants_and_simple_functions.h
│       │   │   │   │   │       ├── geodesic_matlab_api.h
│       │   │   │   │   │       ├── geodesic_memory.h
│       │   │   │   │   │       ├── geodesic_mesh.h
│       │   │   │   │   │       └── geodesic_mesh_elements.h
│       │   │   │   │   ├── combine_meshes.h
│       │   │   │   │   ├── debug_writeSVG.h
│       │   │   │   │   ├── delete_isolated_vertices.h
│       │   │   │   │   ├── edgeloop.h
│       │   │   │   │   ├── flip_faces.h
│       │   │   │   │   ├── get_connected_components.h
│       │   │   │   │   ├── merge_nearby_vertices.h
│       │   │   │   │   ├── read_obj_soup.h
│       │   │   │   │   ├── simple_svg_1.0.0.hpp
│       │   │   │   │   ├── symmetrize.hh
│       │   │   │   │   └── vector_convert.h
│       │   │   │   ├── push_back_util.h
│       │   │   │   ├── safe_istream.h
│       │   │   │   ├── triangle_util.h
│       │   │   │   ├── tw_util.h
│       │   │   │   ├── ubuntu_workaround.h
│       │   │   │   ├── util.h
│       │   │   │   └── zenity_util.h
│       │   │   ├── lp_solve_5.5/
│       │   │   │   ├── README.txt
│       │   │   │   ├── bfp/
│       │   │   │   │   ├── bfp_LUSOL/
│       │   │   │   │   │   ├── LUSOL/
│       │   │   │   │   │   │   ├── LUSOL-overview.txt
│       │   │   │   │   │   │   ├── LUSOL_LGPL.txt
│       │   │   │   │   │   │   ├── LUSOL_Overview.txt
│       │   │   │   │   │   │   ├── LUSOL_README.txt
│       │   │   │   │   │   │   ├── Row-based L0.txt
│       │   │   │   │   │   │   ├── Victoria1850.RUA
│       │   │   │   │   │   │   ├── bfile3.txt
│       │   │   │   │   │   │   ├── hbio.c
│       │   │   │   │   │   │   ├── hbio.h
│       │   │   │   │   │   │   ├── lusol.c
│       │   │   │   │   │   │   ├── lusol.h
│       │   │   │   │   │   │   ├── lusol1.c
│       │   │   │   │   │   │   ├── lusol2.c
│       │   │   │   │   │   │   ├── lusol6a.c
│       │   │   │   │   │   │   ├── lusol6l0.c
│       │   │   │   │   │   │   ├── lusol6u.c
│       │   │   │   │   │   │   ├── lusol7a.c
│       │   │   │   │   │   │   ├── lusol8a.c
│       │   │   │   │   │   │   ├── lusolio.c
│       │   │   │   │   │   │   ├── lusolio.h
│       │   │   │   │   │   │   ├── lusolmain.c
│       │   │   │   │   │   │   ├── lusolmain.h
│       │   │   │   │   │   │   ├── mmio.c
│       │   │   │   │   │   │   ├── mmio.h
│       │   │   │   │   │   │   ├── myblas.c
│       │   │   │   │   │   │   ├── myblas.h
│       │   │   │   │   │   │   ├── sherman5.mtx
│       │   │   │   │   │   │   ├── sherman5_rhs1.mtx
│       │   │   │   │   │   │   ├── sparselib.c
│       │   │   │   │   │   │   └── sparselib.h
│       │   │   │   │   │   ├── bfp_LUSOL.c
│       │   │   │   │   │   ├── bfp_LUSOL.h
│       │   │   │   │   │   ├── lp_LUSOL.c
│       │   │   │   │   │   └── lp_LUSOL.h
│       │   │   │   │   ├── lp_BFP.h
│       │   │   │   │   ├── lp_BFP1.c
│       │   │   │   │   └── lp_BFP2.c
│       │   │   │   ├── c
│       │   │   │   ├── colamd/
│       │   │   │   │   ├── colamd.c
│       │   │   │   │   └── colamd.h
│       │   │   │   ├── config.log
│       │   │   │   ├── configure
│       │   │   │   ├── configure.ac
│       │   │   │   ├── declare.h
│       │   │   │   ├── fortify.c
│       │   │   │   ├── fortify.h
│       │   │   │   ├── ini.c
│       │   │   │   ├── ini.h
│       │   │   │   ├── lp_Hash.c
│       │   │   │   ├── lp_Hash.h
│       │   │   │   ├── lp_MDO.c
│       │   │   │   ├── lp_MDO.h
│       │   │   │   ├── lp_MPS.c
│       │   │   │   ├── lp_MPS.h
│       │   │   │   ├── lp_SOS.c
│       │   │   │   ├── lp_SOS.h
│       │   │   │   ├── lp_bit.h
│       │   │   │   ├── lp_crash.c
│       │   │   │   ├── lp_crash.h
│       │   │   │   ├── lp_explicit.h
│       │   │   │   ├── lp_fortify.h
│       │   │   │   ├── lp_lib.c
│       │   │   │   ├── lp_lib.h
│       │   │   │   ├── lp_matrix.c
│       │   │   │   ├── lp_matrix.h
│       │   │   │   ├── lp_mipbb.c
│       │   │   │   ├── lp_mipbb.h
│       │   │   │   ├── lp_params.c
│       │   │   │   ├── lp_presolve.c
│       │   │   │   ├── lp_presolve.h
│       │   │   │   ├── lp_price.c
│       │   │   │   ├── lp_price.h
│       │   │   │   ├── lp_pricePSE.c
│       │   │   │   ├── lp_pricePSE.h
│       │   │   │   ├── lp_report.c
│       │   │   │   ├── lp_report.h
│       │   │   │   ├── lp_rlp.c
│       │   │   │   ├── lp_rlp.h
│       │   │   │   ├── lp_rlp.l
│       │   │   │   ├── lp_rlp.y
│       │   │   │   ├── lp_scale.c
│       │   │   │   ├── lp_scale.h
│       │   │   │   ├── lp_simplex.c
│       │   │   │   ├── lp_simplex.h
│       │   │   │   ├── lp_solve.def
│       │   │   │   ├── lp_types.h
│       │   │   │   ├── lp_utils.c
│       │   │   │   ├── lp_utils.h
│       │   │   │   ├── lp_wlp.c
│       │   │   │   ├── lp_wlp.h
│       │   │   │   ├── lpkit.h
│       │   │   │   ├── lpsolve.h
│       │   │   │   ├── shared/
│       │   │   │   │   ├── commonlib.c
│       │   │   │   │   ├── commonlib.h
│       │   │   │   │   ├── mmio.c
│       │   │   │   │   ├── mmio.h
│       │   │   │   │   ├── myblas.c
│       │   │   │   │   └── myblas.h
│       │   │   │   ├── ufortify.h
│       │   │   │   ├── yacc_read.c
│       │   │   │   └── yacc_read.h
│       │   │   └── patchgen/
│       │   │       ├── ILP.h
│       │   │       ├── PatchParam.h
│       │   │       ├── PatchVertexTag.h
│       │   │       ├── PatchVertexTraits.h
│       │   │       ├── Pattern.h
│       │   │       ├── Pattern_2_0.h
│       │   │       ├── Pattern_2_1.h
│       │   │       ├── Pattern_3_0.h
│       │   │       ├── Pattern_3_1.h
│       │   │       ├── Pattern_3_2.h
│       │   │       ├── Pattern_3_3.h
│       │   │       ├── Pattern_4_0.h
│       │   │       ├── Pattern_4_1.h
│       │   │       ├── Pattern_4_2.h
│       │   │       ├── Pattern_4_3.h
│       │   │       ├── Pattern_4_4.h
│       │   │       ├── Pattern_5_0.h
│       │   │       ├── Pattern_5_1.h
│       │   │       ├── Pattern_5_2.h
│       │   │       ├── Pattern_5_3.h
│       │   │       ├── Pattern_5_4.h
│       │   │       ├── Pattern_6_0.h
│       │   │       ├── Pattern_6_1.h
│       │   │       ├── Pattern_6_2.h
│       │   │       ├── Pattern_6_3.h
│       │   │       ├── Pattern_all.h
│       │   │       ├── Permutation.h
│       │   │       ├── add_padding.h
│       │   │       ├── adjust_parameter.cpp
│       │   │       ├── decl.h
│       │   │       ├── generate_subtopology.h
│       │   │       ├── generate_topology.h
│       │   │       ├── get_boundary_geometry.cpp
│       │   │       ├── get_constraint_matrix.cpp
│       │   │       ├── get_constraint_rhs.cpp
│       │   │       ├── get_default_parameter.cpp
│       │   │       ├── get_param_str.cpp
│       │   │       ├── get_variable.cpp
│       │   │       ├── get_variable_indicators.cpp
│       │   │       └── switch_pattern.cpp
│       │   └── patterns.pri
│       ├── quadretopology/
│       │   ├── includes/
│       │   │   ├── qr_charts.cpp
│       │   │   ├── qr_charts.h
│       │   │   ├── qr_convert.cpp
│       │   │   ├── qr_convert.h
│       │   │   ├── qr_ilp.cpp
│       │   │   ├── qr_ilp.h
│       │   │   ├── qr_mapping.cpp
│       │   │   ├── qr_mapping.h
│       │   │   ├── qr_parameters.h
│       │   │   ├── qr_patterns.cpp
│       │   │   ├── qr_patterns.h
│       │   │   ├── qr_utils.cpp
│       │   │   └── qr_utils.h
│       │   ├── quadretopology.cpp
│       │   └── quadretopology.h
│       └── quadretopology.pri
├── quadwild/
│   ├── basic_setup.txt
│   ├── basic_setup_mechanical.txt
│   ├── basic_setup_organic.txt
│   ├── functions.cpp
│   ├── functions.h
│   ├── quadwild.cpp
│   ├── quadwild.pro
│   ├── quadwild_mechanical.command
│   └── quadwild_organic.command
└── scripts/
    ├── organize_folders_300_mechanical.command
    └── organize_folders_300_organic.command
Copy disabled (too large) Download .txt
Showing preview only (48,010K chars total). Download the full file to get everything.
SYMBOL INDEX (14875 symbols across 2418 files)

FILE: components/field_computation/AutoRemesher.h
  type typename (line 44) | typedef typename Mesh::ScalarType ScalarType;
  type typename (line 45) | typedef typename Mesh::CoordType  CoordType;
  type typename (line 47) | typedef typename Mesh::VertexType    VertexType;
  type typename (line 48) | typedef typename Mesh::VertexPointer VertexPointer;
  type typename (line 50) | typedef typename Mesh::FaceType    FaceType;
  type typename (line 51) | typedef typename Mesh::FacePointer FacePointer;
  type vcg (line 53) | typedef vcg::GridStaticPtr<FaceType, ScalarType> StaticGrid;
  type vcg (line 73) | typedef vcg::tri::EdgeCollapser<Mesh, VertexPair> Collapser;
  type typename (line 74) | typedef typename vcg::face::Pos<FaceType> PosType;
  function SelectAllBoundaryV (line 149) | static void SelectAllBoundaryV(Mesh & m)
  type typename (line 202) | typedef typename vcg::face::Pos<FaceType> PosType;
  type std (line 204) | typedef std::vector<std::vector<std::pair<size_t, size_t> > > VertexToFa...
  function UpdateCoherentSharp (line 335) | static void UpdateCoherentSharp(Mesh & m, Params & par)
  function RemeshAdapt (line 361) | static void RemeshAdapt(Mesh & m, Params & par)

FILE: components/field_computation/AutoRemesherMio.h
  type vcg (line 1) | typedef vcg::tri::EdgeCollapser<Mesh, VertexPair> Collapser;

FILE: components/field_computation/fields/field_smoother.h
  function namespace (line 46) | namespace vcg {

FILE: components/field_computation/fields/n_polyvector.cpp
  type igl (line 26) | namespace igl {
    class PolyVectorFieldFinder (line 28) | class PolyVectorFieldFinder
  function IGL_INLINE (line 101) | IGL_INLINE void igl::PolyVectorFieldFinder<DerivedV, DerivedF>::
  function IGL_INLINE (line 136) | IGL_INLINE void igl::PolyVectorFieldFinder<DerivedV, DerivedF>::
  function IGL_INLINE (line 203) | IGL_INLINE bool igl::PolyVectorFieldFinder<DerivedV, DerivedF>::
  function IGL_INLINE (line 251) | IGL_INLINE void igl::PolyVectorFieldFinder<DerivedV, DerivedF>::setField...
  function IGL_INLINE (line 310) | IGL_INLINE void igl::PolyVectorFieldFinder<DerivedV, DerivedF>::computeC...
  function IGL_INLINE (line 344) | IGL_INLINE void igl::PolyVectorFieldFinder<DerivedV, DerivedF>::getGener...
  function IGL_INLINE (line 395) | IGL_INLINE void igl::PolyVectorFieldFinder<DerivedV, DerivedF>::computek()
  function IGL_INLINE (line 493) | IGL_INLINE void igl::n_polyvector(const Eigen::MatrixXd &V,

FILE: components/field_computation/fields/n_polyvector.h
  function namespace (line 16) | namespace igl {

FILE: components/field_computation/fields/polyroots.cpp
  function IGL_INLINE (line 13) | IGL_INLINE void igl::polyRoots(Eigen::Matrix<S, Eigen::Dynamic,1> &polyC...

FILE: components/field_computation/fields/polyroots.h
  function namespace (line 15) | namespace igl {

FILE: components/field_computation/gl_utils.h
  type typename (line 35) | typedef typename MeshType::CoordType  CoordType;

FILE: components/field_computation/glwidget.cpp
  function InitSharp (line 110) | void InitSharp()
  function SaveAllData (line 250) | void SaveAllData()
  function DoBatchProcess (line 276) | void DoBatchProcess ()
  function DoAutoRemesh (line 292) | void DoAutoRemesh()
  function CleanMesh (line 315) | void TW_CALL CleanMesh(void *)
  function AutoRemesh (line 320) | void TW_CALL AutoRemesh(void *)
  function InitSharpFeatures (line 325) | void TW_CALL InitSharpFeatures(void *)
  function RefineIfNeeded (line 330) | void TW_CALL RefineIfNeeded(void *)
  function BatchProcess (line 338) | void TW_CALL BatchProcess(void *)
  function SmoothField (line 343) | void TW_CALL SmoothField(void *)
  function MiqQuadrangulate (line 367) | void TW_CALL MiqQuadrangulate(void *)
  function SaveData (line 389) | void TW_CALL SaveData(void *)
  function AutoSetupField (line 394) | void TW_CALL AutoSetupField(void *)
  function ErodeDilateFeatureStep (line 399) | void TW_CALL ErodeDilateFeatureStep(void *)
  function SetFieldBarSizePosition (line 405) | void SetFieldBarSizePosition(QWidget *w)
  function InitFieldBar (line 416) | void InitFieldBar(QWidget *w)

FILE: components/field_computation/glwidget.h
  function class (line 35) | class GLWidget : public QGLWidget

FILE: components/field_computation/main.cpp
  function correctOrAbort (line 60) | void correctOrAbort(const bool ok, const std::string & line, const int l...
  function loadConfigFile (line 132) | bool loadConfigFile(const std::string & filename)
  function main (line 179) | int main(int argc, char *argv[])

FILE: components/field_computation/mesh_field_smoother.h
  type typename (line 37) | typedef typename MeshType::ScalarType ScalarType;
  type typename (line 38) | typedef typename MeshType::CoordType  CoordType;
  type typename (line 39) | typedef typename MeshType::VertexType    VertexType;
  type typename (line 40) | typedef typename MeshType::VertexPointer VertexPointer;
  type typename (line 41) | typedef typename MeshType::FaceType    FaceType;
  type typename (line 42) | typedef typename MeshType::FacePointer FacePointer;
  type vcg (line 44) | typedef vcg::tri::FieldSmoother<MeshType> FieldSmootherType;
  type typename (line 45) | typedef typename FieldSmootherType::SmoothParam SmoothParam;
  function SmoothField (line 80) | static void SmoothField(MeshType &mesh,SmoothParam FieldParam)
  function SaveField (line 142) | static bool SaveField(MeshType &mesh,const std::string &filename)

FILE: components/field_computation/mesh_manager.h
  type typename (line 53) | typedef typename FaceType::CoordType CoordType;
  type typename (line 54) | typedef typename FaceType::VertexType VertexType;
  type typename (line 55) | typedef typename FaceType::ScalarType ScalarType;
  type std (line 57) | typedef std::pair<CoordType,CoordType> CoordPair;
  type typename (line 87) | typedef typename FaceType::CoordType CoordType;
  type typename (line 88) | typedef typename FaceType::VertexType VertexType;
  type std (line 89) | typedef std::pair<CoordType,CoordType> CoordPair;
  type typename (line 116) | typedef typename MeshType::ScalarType ScalarType;
  type typename (line 117) | typedef typename MeshType::CoordType  CoordType;
  type typename (line 119) | typedef typename MeshType::VertexType    VertexType;
  type typename (line 120) | typedef typename MeshType::VertexPointer VertexPointer;
  type typename (line 122) | typedef typename MeshType::FaceType    FaceType;
  type typename (line 123) | typedef typename MeshType::FacePointer FacePointer;
  type std (line 125) | typedef std::pair<CoordType,CoordType> CoordPair;
  type SplitLev (line 142) | typedef SplitLev<FaceType> SplitLevType;
  type EdgePred (line 143) | typedef EdgePred<FaceType> EdgePredType;
  function Perturb (line 191) | static void Perturb(VertexType &v,ScalarType Magnitudo)
  function NumDuplicatedV (line 206) | static size_t NumDuplicatedV(MeshType &mesh)
  function RepositionDuplicatedV (line 223) | static bool RepositionDuplicatedV(MeshType &mesh)
  function SolvePrecisionIssues (line 301) | static bool SolvePrecisionIssues(MeshType &mesh)
  function RefineInternalFacesStepFromEdgeSel (line 318) | static bool RefineInternalFacesStepFromEdgeSel(MeshType &mesh)
  function SplitAdjacentEdgeSharpFromEdgeSel (line 364) | static bool SplitAdjacentEdgeSharpFromEdgeSel(MeshType &mesh)
  function RemoveNonManifold (line 471) | static bool RemoveNonManifold(MeshType &mesh)
  function MakeOrientable (line 487) | static bool MakeOrientable(MeshType &mesh)
  function RemoveZeroAreaFaces (line 495) | static bool RemoveZeroAreaFaces(MeshType &mesh)
  function biggestSmallest (line 589) | auto biggestSmallest = vcg::DoubleArea(t1) > vcg::DoubleArea(t2) ? std::...
  function RefineIfNeeded (line 681) | static void RefineIfNeeded(MeshType &mesh)
  function InitSharpFeatures (line 700) | static void InitSharpFeatures(MeshType &mesh,
  type BatchParam (line 709) | struct BatchParam
  function BatchProcess (line 722) | static void BatchProcess(MeshType &mesh,BatchParam &BPar,
  function SaveAllData (line 775) | static void SaveAllData(MeshType &tri_mesh,const std::string &pathM)

FILE: components/field_computation/poly_mesh_type.h
  type PUsedTypes (line 36) | struct PUsedTypes
  function TriangulateQuadBySplit (line 95) | void TriangulateQuadBySplit()
  function UpdateNormal (line 173) | void UpdateNormal()
  function UpdateAttributes (line 179) | void UpdateAttributes()

FILE: components/field_computation/triangle_mesh_type.h
  type FeatureKind (line 52) | enum FeatureKind{ETConcave,ETConvex,ETNone}
  type TriUsedTypes (line 54) | struct TriUsedTypes
  function ImportData (line 88) | void ImportData(const FieldTriFace  & left )
  function InitEdgeType (line 124) | void InitEdgeType()
  function InitFeatureCoordsTable (line 136) | void InitFeatureCoordsTable()
  function SetFeatureFromTable (line 152) | void SetFeatureFromTable()
  function IsConcaveEdge (line 167) | bool IsConcaveEdge(const FaceType &f0,int IndexE)
  function SaveSharpFeatures (line 302) | bool SaveSharpFeatures(const std::string &filename)const
  function LoadField (line 328) | bool LoadField(std::string field_filename)
  function LoadSharpFeatures (line 355) | bool LoadSharpFeatures(const std::string &filename)
  function LoadSharpFeaturesFL (line 401) | bool LoadSharpFeaturesFL(const std::string &filename)
  function SaveOrigFace (line 503) | bool SaveOrigFace(const std::string &filename)
  function SaveField (line 516) | bool SaveField(const std::string &filename)
  function UpdateDataStructures (line 524) | void UpdateDataStructures()
  function InitSharpFeatures (line 539) | void InitSharpFeatures(ScalarType SharpAngleDegree)
  function ScalarType (line 573) | ScalarType SharpLenght()
  function ScalarType (line 591) | ScalarType Area()const
  function ScalarType (line 604) | ScalarType Volume()const
  function ErodeFeaturesStep (line 626) | void ErodeFeaturesStep()
  function DilateFeaturesStep (line 643) | void DilateFeaturesStep(std::vector<std::pair<size_t,size_t> > &OrigFeat...
  function PrintSharpInfo (line 661) | void PrintSharpInfo()
  function ErodeDilate (line 679) | void ErodeDilate(size_t StepNum)
  function SufficientFeatures (line 705) | bool SufficientFeatures(ScalarType SharpFactor)
  function SetSharp (line 716) | void SetSharp(FaceType &f,int IndexE)
  function ClearSharp (line 733) | void ClearSharp(FaceType &f,int IndexE)
  function InitFaceOriginalIndex (line 746) | void InitFaceOriginalIndex()

FILE: components/field_tracing/glwidget.cpp
  type PatchColorMode (line 114) | enum PatchColorMode{CMPatchNone, CMPatchCol, CMPatchValence,
  function SaveSetupFile (line 129) | void SaveSetupFile(const std::string pathProject,
  function LoadSetupFile (line 275) | void LoadSetupFile(std::string path)
  function FindCurrentNum (line 376) | void FindCurrentNum()
  function UpdatePatchColor (line 409) | void UpdatePatchColor()
  function UpdateVisualNodes (line 432) | void UpdateVisualNodes()
  function InitStructures (line 484) | void InitStructures()
  function InitGraph (line 515) | void TW_CALL InitGraph(void *)
  function JoinNarrow (line 543) | void TW_CALL JoinNarrow(void *)
  function JoinConcave (line 551) | void TW_CALL JoinConcave(void *)
  function AddLoops (line 559) | void TW_CALL AddLoops(void *)
  function TraceBorder (line 567) | void TW_CALL TraceBorder(void *)
  function SmoothPathes (line 575) | void TW_CALL SmoothPathes(void *)
  function BatchProcess (line 628) | void TW_CALL BatchProcess(void *)
  function RecursiveProcess (line 645) | void TW_CALL RecursiveProcess(void *)
  function ParametrizePatches (line 657) | void TW_CALL ParametrizePatches(void *)
  function SubdividePatches (line 662) | void TW_CALL SubdividePatches(void *)
  function BatchRemoval (line 673) | void TW_CALL BatchRemoval(void *)
  function LoadAll (line 693) | void LoadAll()
  function Reload (line 734) | void Reload()
  function ReloadAll (line 743) | void TW_CALL ReloadAll(void *)
  function TestNarrowNarrow (line 756) | void TW_CALL TestNarrowNarrow(void *)
  function TestNarrowConcave (line 764) | void TW_CALL TestNarrowConcave(void *)
  function TestNarrowFlat (line 772) | void TW_CALL TestNarrowFlat(void *)
  function TestConcaveConcave (line 780) | void TW_CALL TestConcaveConcave(void *)
  function TestConcaveFlat (line 788) | void TW_CALL TestConcaveFlat(void *)
  function TestFlatFlat (line 796) | void TW_CALL TestFlatFlat(void *)
  function TestLoops (line 805) | void TW_CALL TestLoops(void *)
  function SaveData (line 848) | void TW_CALL SaveData(void *)
  function ProcessAllBatch (line 854) | void  ProcessAllBatch()
  function AllProcess (line 882) | void TW_CALL AllProcess(void *)
  function InitLoopBar (line 887) | void InitLoopBar(QWidget *w)
  function InitBar (line 1017) | void InitBar(QWidget *w)

FILE: components/field_tracing/glwidget.h
  function class (line 43) | class GLWidget : public QGLWidget

FILE: components/field_tracing/main.cpp
  function main (line 53) | int main(int argc, char *argv[])

FILE: components/field_tracing/moc_glwidget.cpp
  function QT_BEGIN_MOC_NAMESPACE (line 20) | QT_BEGIN_MOC_NAMESPACE
  function QMetaObject (line 68) | const QMetaObject *GLWidget::metaObject() const

FILE: components/quad_from_patches/field_smoother.h
  function namespace (line 46) | namespace vcg {
  function SelectConstraints (line 359) | static void SelectConstraints(MeshType &mesh,SmoothParam &SParam)
  function GloballyOrient (line 391) | static void GloballyOrient(MeshType &mesh)
  function SmoothDirections (line 491) | static void SmoothDirections(MeshType &mesh,SmoothParam SParam)

FILE: components/quad_from_patches/load_save.cpp
  function loadPatches (line 32) | std::vector<std::vector<size_t>> loadPatches(const std::string& filename)
  function loadCorners (line 71) | std::vector<std::vector<size_t>> loadCorners(const std::string& filename)
  function LoadFeatures (line 112) | std::vector<std::pair<size_t,size_t> > LoadFeatures(const std::string &f...
  function loadFeatureCorners (line 138) | std::vector<size_t> loadFeatureCorners(const std::string &filename)

FILE: components/quad_from_patches/local_para_smooth.h
  type typename (line 42) | typedef typename MeshType::FaceType FaceType;
  type typename (line 43) | typedef typename MeshType::VertexType VertexType;
  type typename (line 44) | typedef typename MeshType::CoordType CoordType;
  type typename (line 45) | typedef typename MeshType::ScalarType ScalarType;
  type typename (line 46) | typedef typename vcg::face::Pos<FaceType> PosType;
  type typename (line 47) | typedef typename vcg::Point2<ScalarType> Point2Type;
  type typename (line 48) | typedef typename vcg::Triangle2<ScalarType> Triangle2Type;
  function SetStarInternalPos (line 83) | static void SetStarInternalPos(MeshType &sub_mesh,const CoordType &Pos)
  function InterpolateUV (line 94) | static bool InterpolateUV(MeshType &mesh,
  function Point2Type (line 115) | static Point2Type ComputeCentralUV(std::vector<PosType> &StarFPos)
  function ParametrizeCentralUV (line 146) | static void ParametrizeCentralUV(MeshType &StarMesh)
  function FindSmoothedPos (line 157) | static bool FindSmoothedPos(MeshType &StarMesh,
  function CoordType (line 196) | static CoordType ProjectOnBasis(const CoordType &testP,
  function SmoothStep (line 218) | static void SmoothStep(MeshType &mesh,
  function DeriveRegularStarPos (line 315) | static void DeriveRegularStarPos(int N,std::vector<Point2Type> &StarPos)
  function ParametrizeBorders (line 323) | static void ParametrizeBorders(MeshType &sub_mesh)/*,
  function GetStarSubMeshes (line 355) | static void GetStarSubMeshes(MeshType &mesh,
  function GetStarMeshes (line 408) | static void GetStarMeshes(MeshType &mesh,
  type typename (line 509) | typedef typename MeshType::FaceType FaceType;
  type typename (line 510) | typedef typename MeshType::VertexType VertexType;
  type typename (line 511) | typedef typename MeshType::CoordType CoordType;
  type typename (line 512) | typedef typename MeshType::ScalarType ScalarType;

FILE: components/quad_from_patches/main.cpp
  function main (line 51) | int main(int argc, char *argv[])
  function avgEdge (line 251) | typename TriangleMesh::ScalarType avgEdge(const TriangleMesh& trimesh)
  function loadSetupFile (line 265) | void loadSetupFile(const std::string& path, QuadRetopology::Parameters& ...
  function SaveSetupFile (line 385) | void SaveSetupFile(const std::string& path, QuadRetopology::Parameters& ...

FILE: components/quad_from_patches/mesh_types.h
  type MyPolyTypes (line 14) | struct MyPolyTypes
  type MyTriangleTypes (line 82) | struct MyTriangleTypes
  function ComputePerFacePatch (line 265) | void ComputePerFacePatch(TriangleMesh &mesh,
  function SelectVertMeshPatchBorders (line 282) | void SelectVertMeshPatchBorders(TriangleMesh &mesh,const std::vector<siz...
  function CheckVertInPatch (line 313) | void CheckVertInPatch(TriangleMesh &mesh,
  function CheckManifoldPatch (line 335) | void CheckManifoldPatch(TriangleMesh &mesh,
  function ExportPatch (line 354) | void ExportPatch(TriangleMesh &mesh,
  function CheckIntegrity (line 374) | void CheckIntegrity(TriangleMesh &mesh,
  function OrientIfNeeded (line 401) | void OrientIfNeeded(TriangleMesh &mesh,

FILE: components/quad_from_patches/quad_from_patches.cpp
  type qfp (line 36) | namespace qfp {
    function quadrangulationFromPatches (line 39) | void quadrangulationFromPatches(

FILE: components/quad_from_patches/quad_from_patches.h
  function namespace (line 31) | namespace qfp {

FILE: components/quad_from_patches/quad_mesh_tracer.h
  type typename (line 40) | typedef typename PolyMeshType::FaceType PFace;

FILE: components/quad_from_patches/smooth_mesh.h
  type MyBasicTypes (line 44) | struct MyBasicTypes
  type typename (line 78) | typedef typename TriangleMeshType::CoordType CoordType;
  function ClosestPointEMesh (line 95) | void ClosestPointEMesh(const typename BasicMesh::CoordType &Pos,
  type typename (line 135) | typedef typename PolyMeshType::CoordType CoordType;
  type ProjType (line 156) | enum ProjType{ProjNone,ProjSuface,ProjSharp,ProjCorner}
  type ProjectionBase (line 157) | struct ProjectionBase
  type SmoothType (line 168) | enum SmoothType{Laplacian,TemplateFit}
  type typename (line 180) | typedef typename PolyMeshType::FaceType FaceType;
  type typename (line 235) | typedef typename PolyMeshType::FaceType FaceType;
  type typename (line 292) | typedef typename PolyMeshType::CoordType CoordType;
  type typename (line 328) | typedef typename PolyMeshType::CoordType CoordType;
  type typename (line 400) | typedef typename PolyMeshType::ScalarType ScalarType;
  type typename (line 401) | typedef typename PolyMeshType::CoordType CoordType;
  type typename (line 402) | typedef typename TriMeshType::FaceType TriFaceType;
  type typename (line 479) | typedef typename TriMeshType::ScalarType ScalarType;
  type typename (line 480) | typedef typename TriMeshType::CoordType CoordType;
  type std (line 497) | typedef std::pair<int,int> PatchPairKey;
  type typename (line 723) | typedef typename PolyMeshType::ScalarType ScalarType;
  type typename (line 724) | typedef typename PolyMeshType::CoordType CoordType;
  type typename (line 725) | typedef typename TriMeshType::FaceType TriFaceType;
  type typename (line 765) | typedef typename PolyMeshType::ScalarType ScalarType;
  type typename (line 766) | typedef typename PolyMeshType::CoordType CoordType;
  type typename (line 767) | typedef typename TriMeshType::FaceType TriFaceType;
  type typename (line 838) | typedef typename PolyMeshType::ScalarType ScalarType;
  type typename (line 839) | typedef typename PolyMeshType::CoordType CoordType;
  type typename (line 840) | typedef typename TriMeshType::FaceType TriFaceType;
  type typename (line 885) | typedef typename PolyMeshType::CoordType CoordType;
  type typename (line 886) | typedef typename PolyMeshType::ScalarType ScalarType;
  type typename (line 887) | typedef typename TriMeshType::FaceType TriFaceType;
  type typename (line 1011) | typedef typename PolyMeshType::ScalarType ScalarType;
  type typename (line 1012) | typedef typename PolyMeshType::CoordType CoordType;
  type typename (line 1013) | typedef typename TriMeshType::FaceType TriFaceType;
  type typename (line 1062) | typedef typename PolyMeshType::ScalarType ScalarType;
  type typename (line 1063) | typedef typename PolyMeshType::CoordType CoordType;
  type typename (line 1064) | typedef typename TriMeshType::FaceType TriFaceType;

FILE: components/results_processing/orientability_check/main.cpp
  function writeDataToFile (line 12) | static void writeDataToFile(const std::vector<std::string> & data, const...
  function openMesh (line 33) | static int openMesh(PolyMesh & m, std::string & name)
  function main (line 46) | int main(int argc, char * argv[])

FILE: components/results_processing/orientability_check/mesh_def.h
  type MyUsedTypes (line 17) | struct MyUsedTypes
  type typename (line 53) | typedef typename PolyVertex::CoordType CoordType;
  type typename (line 54) | typedef typename PolyVertex::ScalarType ScalarType;
  type typename (line 56) | typedef typename PolyMesh::VertexType VertexType;
  type typename (line 57) | typedef typename PolyMesh::VertexPointer VertexPointer;
  type typename (line 59) | typedef typename PolyMesh::FaceType FaceType;
  type typename (line 60) | typedef typename PolyMesh::FacePointer FacePointer;

FILE: components/results_processing/polyMetrics/external/matplotlib-cpp/examples/animation.cpp
  function main (line 7) | int main()

FILE: components/results_processing/polyMetrics/external/matplotlib-cpp/examples/bar.cpp
  function main (line 8) | int main(int argc, char **argv) {

FILE: components/results_processing/polyMetrics/external/matplotlib-cpp/examples/basic.cpp
  function main (line 8) | int main()

FILE: components/results_processing/polyMetrics/external/matplotlib-cpp/examples/fill.cpp
  function main (line 10) | int main() {

FILE: components/results_processing/polyMetrics/external/matplotlib-cpp/examples/fill_inbetween.cpp
  function main (line 9) | int main() {

FILE: components/results_processing/polyMetrics/external/matplotlib-cpp/examples/imshow.cpp
  function main (line 9) | int main()

FILE: components/results_processing/polyMetrics/external/matplotlib-cpp/examples/minimal.cpp
  function main (line 5) | int main() {

FILE: components/results_processing/polyMetrics/external/matplotlib-cpp/examples/modern.cpp
  function main (line 8) | int main()

FILE: components/results_processing/polyMetrics/external/matplotlib-cpp/examples/nonblock.cpp
  function main (line 11) | int main()

FILE: components/results_processing/polyMetrics/external/matplotlib-cpp/examples/quiver.cpp
  function main (line 5) | int main()

FILE: components/results_processing/polyMetrics/external/matplotlib-cpp/examples/subplot.cpp
  function main (line 8) | int main()

FILE: components/results_processing/polyMetrics/external/matplotlib-cpp/examples/subplot2grid.cpp
  function main (line 8) | int main()

FILE: components/results_processing/polyMetrics/external/matplotlib-cpp/examples/surface.cpp
  function main (line 7) | int main()

FILE: components/results_processing/polyMetrics/external/matplotlib-cpp/examples/update.cpp
  function update_window (line 8) | void update_window(const double x, const double y, const double t,
  function main (line 21) | int main()

FILE: components/results_processing/polyMetrics/external/matplotlib-cpp/examples/xkcd.cpp
  function main (line 8) | int main() {

FILE: components/results_processing/polyMetrics/external/matplotlib-cpp/matplotlibcpp.h
  function namespace (line 41) | namespace matplotlibcpp {
  function backend (line 239) | inline void backend(const std::string& name)
  function annotate (line 244) | inline bool annotate(std::string annotation, double x, double y)
  function double (line 271) | struct select_npy_type<double> { const static NPY_TYPES type = NPY_DOUBL...
  function float (line 272) | struct select_npy_type<float> { const static NPY_TYPES type = NPY_FLOAT; }
  function bool (line 273) | struct select_npy_type<bool> { const static NPY_TYPES type = NPY_BOOL; }
  function int8_t (line 274) | struct select_npy_type<int8_t> { const static NPY_TYPES type = NPY_INT8; }
  function int16_t (line 275) | struct select_npy_type<int16_t> { const static NPY_TYPES type = NPY_SHOR...
  function int32_t (line 276) | struct select_npy_type<int32_t> { const static NPY_TYPES type = NPY_INT; }
  function int64_t (line 277) | struct select_npy_type<int64_t> { const static NPY_TYPES type = NPY_INT6...
  function uint8_t (line 278) | struct select_npy_type<uint8_t> { const static NPY_TYPES type = NPY_UINT...
  function uint16_t (line 279) | struct select_npy_type<uint16_t> { const static NPY_TYPES type = NPY_USH...
  function uint32_t (line 280) | struct select_npy_type<uint32_t> { const static NPY_TYPES type = NPY_ULO...
  function uint64_t (line 281) | struct select_npy_type<uint64_t> { const static NPY_TYPES type = NPY_UIN...
  function namespace (line 592) | namespace internal {
  function fignum_exists (line 1170) | inline bool fignum_exists(long number)
  function figure_size (line 1187) | inline void figure_size(size_t w, size_t h)
  function legend (line 1210) | inline void legend()
  function xticks (line 1330) | void xticks(const std::vector<Numeric> &ticks, const std::map<std::strin...
  function yticks (line 1377) | void yticks(const std::vector<Numeric> &ticks, const std::map<std::strin...
  function subplot (line 1406) | inline void subplot(long nrows, long ncols, long plot_number)
  function axis (line 1484) | inline void axis(const std::string &axisstr)
  function close (line 1580) | inline void close()
  function xkcd (line 1591) | inline void xkcd() {
  function draw (line 1606) | inline void draw()
  function pause (line 1618) | void pause(Numeric interval)
  function save (line 1630) | inline void save(const std::string& filename)
  function clf (line 1644) | inline void clf() {
  function ion (line 1654) | inline void ion() {
  function tight_layout (line 1699) | inline void tight_layout() {
  function namespace (line 1711) | namespace detail {
  type Fallback (line 1728) | struct Fallback { void operator()(); }
  type Derived (line 1729) | struct Derived
  type dtype (line 1741) | typedef decltype(&Fallback::operator()) dtype;
  type typename (line 1749) | typedef typename is_callable_impl<std::is_class<T>::value, T>::type type;
  function false_type (line 1756) | struct plot_impl<std::false_type>
  function true_type (line 1795) | struct plot_impl<std::true_type>
  function class (line 1842) | class Plot

FILE: components/results_processing/polyMetrics/external/nlohmann/json.hpp
  type nlohmann (line 81) | namespace nlohmann
    type detail (line 83) | namespace detail
      type position_t (line 86) | struct position_t
      class exception (line 2352) | class exception : public std::exception
        method JSON_HEDLEY_RETURNS_NON_NULL (line 2356) | JSON_HEDLEY_RETURNS_NON_NULL
        method JSON_HEDLEY_NON_NULL (line 2366) | JSON_HEDLEY_NON_NULL(3)
        method name (line 2369) | static std::string name(const std::string& ename, int id_)
      class parse_error (line 2424) | class parse_error : public exception
        method parse_error (line 2436) | static parse_error create(int id_, const position_t& pos, const st...
        method parse_error (line 2443) | static parse_error create(int id_, std::size_t byte_, const std::s...
        method parse_error (line 2463) | parse_error(int id_, std::size_t byte_, const char* what_arg)
        method position_string (line 2466) | static std::string position_string(const position_t& pos)
      class invalid_iterator (line 2510) | class invalid_iterator : public exception
        method invalid_iterator (line 2513) | static invalid_iterator create(int id_, const std::string& what_arg)
        method JSON_HEDLEY_NON_NULL (line 2520) | JSON_HEDLEY_NON_NULL(3)
      class type_error (line 2564) | class type_error : public exception
        method type_error (line 2567) | static type_error create(int id_, const std::string& what_arg)
        method JSON_HEDLEY_NON_NULL (line 2574) | JSON_HEDLEY_NON_NULL(3)
      class out_of_range (line 2611) | class out_of_range : public exception
        method out_of_range (line 2614) | static out_of_range create(int id_, const std::string& what_arg)
        method JSON_HEDLEY_NON_NULL (line 2621) | JSON_HEDLEY_NON_NULL(3)
      class other_error (line 2649) | class other_error : public exception
        method other_error (line 2652) | static other_error create(int id_, const std::string& what_arg)
        method JSON_HEDLEY_NON_NULL (line 2659) | JSON_HEDLEY_NON_NULL(3)
      type index_sequence (line 2687) | struct index_sequence
        method size (line 2691) | static constexpr std::size_t size() noexcept
      type merge_and_renumber (line 2698) | struct merge_and_renumber
      type make_index_sequence (line 2705) | struct make_index_sequence
      type make_index_sequence<0> (line 2709) | struct make_index_sequence<0> : index_sequence<> {}
      type make_index_sequence<1> (line 2710) | struct make_index_sequence<1> : index_sequence<0> {}
      type priority_tag (line 2716) | struct priority_tag : priority_tag < N - 1 > {}
      type priority_tag<0> (line 2717) | struct priority_tag<0> {}
      type static_const (line 2721) | struct static_const
      type make_void (line 2750) | struct make_void
      type iterator_types (line 2766) | struct iterator_types {}
      type iterator_types <
    It,
    void_t<typename It::difference_type, typename It::value_type, typename It::pointer,
    typename It::reference, typename It::iterator_category >> (line 2769) | struct iterator_types <
      type iterator_traits (line 2784) | struct iterator_traits
      type iterator_traits < T, enable_if_t < !std::is_pointer<T>::value >> (line 2789) | struct iterator_traits < T, enable_if_t < !std::is_pointer<T>::value >>
      type iterator_traits<T*, enable_if_t<std::is_object<T>::value>> (line 2795) | struct iterator_traits<T*, enable_if_t<std::is_object<T>::value>>
      type nonesuch (line 2823) | struct nonesuch
        method nonesuch (line 2825) | nonesuch() = delete;
        method nonesuch (line 2827) | nonesuch(nonesuch const&) = delete;
        method nonesuch (line 2828) | nonesuch(nonesuch const&&) = delete;
      type detector (line 2837) | struct detector
      type is_basic_json (line 2977) | struct is_basic_json : std::false_type {}
      class json_ref (line 2987) | class json_ref
        method json_ref (line 12532) | json_ref(value_type&& value)
        method json_ref (line 12538) | json_ref(const value_type& value)
        method json_ref (line 12543) | json_ref(std::initializer_list<json_ref> init)
        method json_ref (line 12552) | json_ref(Args && ... args)
        method json_ref (line 12559) | json_ref(json_ref&&) = default;
        method json_ref (line 12560) | json_ref(const json_ref&) = delete;
        method json_ref (line 12561) | json_ref& operator=(const json_ref&) = delete;
        method json_ref (line 12562) | json_ref& operator=(json_ref&&) = delete;
        method value_type (line 12565) | value_type moved_or_copied() const
        method value_type (line 12574) | value_type const& operator*() const
        method value_type (line 12579) | value_type const* operator->() const
      type is_json_ref (line 2990) | struct is_json_ref : std::false_type {}
      type is_json_ref<json_ref<T>> (line 2993) | struct is_json_ref<json_ref<T>> : std::true_type {}
      type has_from_json (line 3034) | struct has_from_json : std::false_type {}
      type is_getable (line 3041) | struct is_getable
      type has_from_json < BasicJsonType, T,
           enable_if_t < !is_basic_json<T>::value >> (line 3047) | struct has_from_json < BasicJsonType, T,
      type has_non_default_from_json (line 3060) | struct has_non_default_from_json : std::false_type {}
      type has_non_default_from_json < BasicJsonType, T, enable_if_t < !is_basic_json<T>::value >> (line 3063) | struct has_non_default_from_json < BasicJsonType, T, enable_if_t < !...
      type has_to_json (line 3075) | struct has_to_json : std::false_type {}
      type has_to_json < BasicJsonType, T, enable_if_t < !is_basic_json<T>::value >> (line 3078) | struct has_to_json < BasicJsonType, T, enable_if_t < !is_basic_json<...
      type is_iterator_traits (line 3093) | struct is_iterator_traits : std::false_type {}
      type is_iterator_traits<iterator_traits<T>> (line 3096) | struct is_iterator_traits<iterator_traits<T>>
      type is_complete_type (line 3113) | struct is_complete_type : std::false_type {}
      type is_complete_type<T, decltype(void(sizeof(T)))> (line 3116) | struct is_complete_type<T, decltype(void(sizeof(T)))> : std::true_ty...
      type is_compatible_object_type_impl (line 3120) | struct is_compatible_object_type_impl : std::false_type {}
      type is_compatible_object_type_impl <
    BasicJsonType, CompatibleObjectType,
    enable_if_t < is_detected<mapped_type_t, CompatibleObjectType>::value&&
    is_detected<key_type_t, CompatibleObjectType>::value >> (line 3123) | struct is_compatible_object_type_impl <
      type is_compatible_object_type (line 3140) | struct is_compatible_object_type
      type is_constructible_object_type_impl (line 3145) | struct is_constructible_object_type_impl : std::false_type {}
      type is_constructible_object_type_impl <
    BasicJsonType, ConstructibleObjectType,
    enable_if_t < is_detected<mapped_type_t, ConstructibleObjectType>::value&&
    is_detected<key_type_t, ConstructibleObjectType>::value >> (line 3148) | struct is_constructible_object_type_impl <
      type is_constructible_object_type (line 3172) | struct is_constructible_object_type
      type is_compatible_string_type_impl (line 3178) | struct is_compatible_string_type_impl : std::false_type {}
      type is_compatible_string_type_impl <
    BasicJsonType, CompatibleStringType,
    enable_if_t<is_detected_exact<typename BasicJsonType::string_t::value_type,
    value_type_t, CompatibleStringType>::value >> (line 3181) | struct is_compatible_string_type_impl <
      type is_compatible_string_type (line 3191) | struct is_compatible_string_type
      type is_constructible_string_type_impl (line 3196) | struct is_constructible_string_type_impl : std::false_type {}
      type is_constructible_string_type_impl <
    BasicJsonType, ConstructibleStringType,
    enable_if_t<is_detected_exact<typename BasicJsonType::string_t::value_type,
    value_type_t, ConstructibleStringType>::value >> (line 3199) | struct is_constructible_string_type_impl <
      type is_constructible_string_type (line 3210) | struct is_constructible_string_type
      type is_compatible_array_type_impl (line 3214) | struct is_compatible_array_type_impl : std::false_type {}
      type is_compatible_array_type (line 3233) | struct is_compatible_array_type
      type is_constructible_array_type_impl (line 3237) | struct is_constructible_array_type_impl : std::false_type {}
      type is_constructible_array_type_impl <
    BasicJsonType, ConstructibleArrayType,
    enable_if_t<std::is_same<ConstructibleArrayType,
    typename BasicJsonType::value_type>::value >> (line 3240) | struct is_constructible_array_type_impl <
      type is_constructible_array_type_impl <
    BasicJsonType, ConstructibleArrayType,
    enable_if_t < !std::is_same<ConstructibleArrayType,
    typename BasicJsonType::value_type>::value&&
    std::is_default_constructible<ConstructibleArrayType>::value&&
(std::is_move_assignable<ConstructibleArrayType>::value ||
 std::is_copy_assignable<ConstructibleArrayType>::value)&&
is_detected<value_type_t, ConstructibleArrayType>::value&&
is_detected<iterator_t, ConstructibleArrayType>::value&&
is_complete_type <
detected_t<value_type_t, ConstructibleArrayType >>::value >> (line 3247) | struct is_constructible_array_type_impl <
      type is_constructible_array_type (line 3276) | struct is_constructible_array_type
      type is_compatible_integer_type_impl (line 3281) | struct is_compatible_integer_type_impl : std::false_type {}
      type is_compatible_integer_type_impl <
    RealIntegerType, CompatibleNumberIntegerType,
    enable_if_t < std::is_integral<RealIntegerType>::value&&
    std::is_integral<CompatibleNumberIntegerType>::value&&
    !std::is_same<bool, CompatibleNumberIntegerType>::value >> (line 3284) | struct is_compatible_integer_type_impl <
      type is_compatible_integer_type (line 3302) | struct is_compatible_integer_type
      type is_compatible_type_impl (line 3307) | struct is_compatible_type_impl: std::false_type {}
      type is_compatible_type_impl <
    BasicJsonType, CompatibleType,
    enable_if_t<is_complete_type<CompatibleType>::value >> (line 3310) | struct is_compatible_type_impl <
      type is_compatible_type (line 3319) | struct is_compatible_type
      type conjunction (line 3323) | struct conjunction : std::true_type { }
      type conjunction<B1> (line 3324) | struct conjunction<B1> : B1 { }
      type is_constructible_tuple (line 3330) | struct is_constructible_tuple : std::false_type {}
      type value_t (line 3377) | enum class value_t : std::uint8_t
      function from_json (line 3426) | void from_json(const BasicJsonType& j, typename std::nullptr_t& n)
      function get_arithmetic_value (line 3440) | void get_arithmetic_value(const BasicJsonType& j, ArithmeticType& val)
      function from_json (line 3466) | void from_json(const BasicJsonType& j, typename BasicJsonType::boole...
      function from_json (line 3476) | void from_json(const BasicJsonType& j, typename BasicJsonType::strin...
      function from_json (line 3492) | void from_json(const BasicJsonType& j, ConstructibleStringType& s)
      function from_json (line 3503) | void from_json(const BasicJsonType& j, typename BasicJsonType::numbe...
      function from_json (line 3509) | void from_json(const BasicJsonType& j, typename BasicJsonType::numbe...
      function from_json (line 3515) | void from_json(const BasicJsonType& j, typename BasicJsonType::numbe...
      function from_json (line 3522) | void from_json(const BasicJsonType& j, EnumType& e)
      function from_json (line 3532) | void from_json(const BasicJsonType& j, std::forward_list<T, Allocato...
      function from_json (line 3549) | void from_json(const BasicJsonType& j, std::valarray<T>& l)
      function from_json (line 3564) | auto from_json(const BasicJsonType& j, T (&arr)[N])
      function from_json_array_impl (line 3574) | void from_json_array_impl(const BasicJsonType& j, typename BasicJson...
      function from_json_array_impl (line 3580) | auto from_json_array_impl(const BasicJsonType& j, std::array<T, N>& ...
      function from_json_array_impl (line 3591) | auto from_json_array_impl(const BasicJsonType& j, ConstructibleArray...
      function from_json_array_impl (line 3612) | void from_json_array_impl(const BasicJsonType& j, ConstructibleArray...
      function from_json (line 3637) | auto from_json(const BasicJsonType& j, ConstructibleArrayType& arr)
      function from_json (line 3652) | void from_json(const BasicJsonType& j, typename BasicJsonType::binar...
      function from_json (line 3664) | void from_json(const BasicJsonType& j, ConstructibleObjectType& obj)
      function from_json (line 3696) | void from_json(const BasicJsonType& j, ArithmeticType& val)
      function from_json (line 3727) | void from_json(const BasicJsonType& j, std::pair<A1, A2>& p)
      function from_json_tuple_impl (line 3733) | void from_json_tuple_impl(const BasicJsonType& j, Tuple& t, index_se...
      function from_json (line 3739) | void from_json(const BasicJsonType& j, std::tuple<Args...>& t)
      function from_json (line 3747) | void from_json(const BasicJsonType& j, std::map<Key, Value, Compare,...
      function from_json (line 3767) | void from_json(const BasicJsonType& j, std::unordered_map<Key, Value...
      type from_json_fn (line 3784) | struct from_json_fn
      function int_to_string (line 3835) | void int_to_string( string_type& target, std::size_t value )
      class iteration_proxy_value (line 3841) | class iteration_proxy_value
        method iteration_proxy_value (line 3864) | explicit iteration_proxy_value(IteratorType it) noexcept : anchor(...
        method iteration_proxy_value (line 3867) | iteration_proxy_value& operator*()
        method iteration_proxy_value (line 3873) | iteration_proxy_value& operator++()
        method string_type (line 3894) | const string_type& key() const
        method value (line 3922) | typename IteratorType::reference value() const
      class iteration_proxy (line 3929) | class iteration_proxy
        method iteration_proxy (line 3937) | explicit iteration_proxy(typename IteratorType::reference cont) no...
        method begin (line 3941) | iteration_proxy_value<IteratorType> begin() noexcept
        method end (line 3947) | iteration_proxy_value<IteratorType> end() noexcept
      function get (line 3956) | auto get(const nlohmann::detail::iteration_proxy_value<IteratorType>...
      function get (line 3964) | auto get(const nlohmann::detail::iteration_proxy_value<IteratorType>...
      type external_constructor (line 4014) | struct external_constructor
      type external_constructor<value_t::boolean> (line 4017) | struct external_constructor<value_t::boolean>
        method construct (line 4020) | static void construct(BasicJsonType& j, typename BasicJsonType::bo...
      type external_constructor<value_t::string> (line 4029) | struct external_constructor<value_t::string>
        method construct (line 4032) | static void construct(BasicJsonType& j, const typename BasicJsonTy...
        method construct (line 4040) | static void construct(BasicJsonType& j, typename BasicJsonType::st...
        method construct (line 4050) | static void construct(BasicJsonType& j, const CompatibleStringType...
      type external_constructor<value_t::binary> (line 4059) | struct external_constructor<value_t::binary>
        method construct (line 4062) | static void construct(BasicJsonType& j, const typename BasicJsonTy...
        method construct (line 4071) | static void construct(BasicJsonType& j, typename BasicJsonType::bi...
      type external_constructor<value_t::number_float> (line 4081) | struct external_constructor<value_t::number_float>
        method construct (line 4084) | static void construct(BasicJsonType& j, typename BasicJsonType::nu...
      type external_constructor<value_t::number_unsigned> (line 4093) | struct external_constructor<value_t::number_unsigned>
        method construct (line 4096) | static void construct(BasicJsonType& j, typename BasicJsonType::nu...
      type external_constructor<value_t::number_integer> (line 4105) | struct external_constructor<value_t::number_integer>
        method construct (line 4108) | static void construct(BasicJsonType& j, typename BasicJsonType::nu...
      type external_constructor<value_t::array> (line 4117) | struct external_constructor<value_t::array>
        method construct (line 4120) | static void construct(BasicJsonType& j, const typename BasicJsonTy...
        method construct (line 4128) | static void construct(BasicJsonType& j, typename BasicJsonType::ar...
        method construct (line 4138) | static void construct(BasicJsonType& j, const CompatibleArrayType&...
        method construct (line 4148) | static void construct(BasicJsonType& j, const std::vector<bool>& arr)
        method construct (line 4162) | static void construct(BasicJsonType& j, const std::valarray<T>& arr)
      type external_constructor<value_t::object> (line 4176) | struct external_constructor<value_t::object>
        method construct (line 4179) | static void construct(BasicJsonType& j, const typename BasicJsonTy...
        method construct (line 4187) | static void construct(BasicJsonType& j, typename BasicJsonType::ob...
        method construct (line 4196) | static void construct(BasicJsonType& j, const CompatibleObjectType...
      function to_json (line 4213) | void to_json(BasicJsonType& j, T b) noexcept
      function to_json (line 4220) | void to_json(BasicJsonType& j, const CompatibleString& s)
      function to_json (line 4226) | void to_json(BasicJsonType& j, typename BasicJsonType::string_t&& s)
      function to_json (line 4233) | void to_json(BasicJsonType& j, FloatType val) noexcept
      function to_json (line 4240) | void to_json(BasicJsonType& j, CompatibleNumberUnsignedType val) noe...
      function to_json (line 4247) | void to_json(BasicJsonType& j, CompatibleNumberIntegerType val) noex...
      function to_json (line 4254) | void to_json(BasicJsonType& j, EnumType e) noexcept
      function to_json (line 4261) | void to_json(BasicJsonType& j, const std::vector<bool>& e)
      function to_json (line 4274) | void to_json(BasicJsonType& j, const CompatibleArrayType& arr)
      function to_json (line 4280) | void to_json(BasicJsonType& j, const typename BasicJsonType::binary_...
      function to_json (line 4287) | void to_json(BasicJsonType& j, const std::valarray<T>& arr)
      function to_json (line 4293) | void to_json(BasicJsonType& j, typename BasicJsonType::array_t&& arr)
      function to_json (line 4300) | void to_json(BasicJsonType& j, const CompatibleObjectType& obj)
      function to_json (line 4306) | void to_json(BasicJsonType& j, typename BasicJsonType::object_t&& obj)
      function to_json (line 4316) | void to_json(BasicJsonType& j, const T(&arr)[N])
      function to_json (line 4322) | void to_json(BasicJsonType& j, const std::pair<T1, T2>& p)
      function to_json (line 4330) | void to_json(BasicJsonType& j, const T& b)
      function to_json_tuple_impl (line 4336) | void to_json_tuple_impl(BasicJsonType& j, const Tuple& t, index_sequ...
      function to_json (line 4342) | void to_json(BasicJsonType& j, const T& t)
      type to_json_fn (line 4347) | struct to_json_fn
      function combine (line 4595) | inline std::size_t combine(std::size_t seed, std::size_t h) noexcept
      function hash (line 4613) | std::size_t hash(const BasicJsonType& j)
      type input_format_t (line 4744) | enum class input_format_t { json, cbor, msgpack, ubjson, bson }
      class file_input_adapter (line 4754) | class file_input_adapter
        method file_input_adapter (line 4760) | explicit file_input_adapter(std::FILE* f) noexcept
        method file_input_adapter (line 4765) | file_input_adapter(const file_input_adapter&) = delete;
        method file_input_adapter (line 4766) | file_input_adapter(file_input_adapter&&) = default;
        method file_input_adapter (line 4767) | file_input_adapter& operator=(const file_input_adapter&) = delete;
        method file_input_adapter (line 4768) | file_input_adapter& operator=(file_input_adapter&&) = delete;
        method get_character (line 4770) | std::char_traits<char>::int_type get_character() noexcept
      class input_stream_adapter (line 4790) | class input_stream_adapter
        method input_stream_adapter (line 4805) | explicit input_stream_adapter(std::istream& i)
        method input_stream_adapter (line 4810) | input_stream_adapter(const input_stream_adapter&) = delete;
        method input_stream_adapter (line 4811) | input_stream_adapter& operator=(input_stream_adapter&) = delete;
        method input_stream_adapter (line 4812) | input_stream_adapter& operator=(input_stream_adapter&& rhs) = delete;
        method input_stream_adapter (line 4814) | input_stream_adapter(input_stream_adapter&& rhs) noexcept : is(rhs...
        method get_character (line 4823) | std::char_traits<char>::int_type get_character()
      class iterator_input_adapter (line 4843) | class iterator_input_adapter
        method iterator_input_adapter (line 4848) | iterator_input_adapter(IteratorType first, IteratorType last)
        method get_character (line 4851) | typename std::char_traits<char_type>::int_type get_character()
        method empty (line 4872) | bool empty() const
      type wide_string_input_helper (line 4881) | struct wide_string_input_helper
      type wide_string_input_helper<BaseInputAdapter, 4> (line 4884) | struct wide_string_input_helper<BaseInputAdapter, 4>
        method fill_buffer (line 4887) | static void fill_buffer(BaseInputAdapter& input,
      type wide_string_input_helper<BaseInputAdapter, 2> (line 4942) | struct wide_string_input_helper<BaseInputAdapter, 2>
        method fill_buffer (line 4945) | static void fill_buffer(BaseInputAdapter& input,
      class wide_string_input_adapter (line 5005) | class wide_string_input_adapter
        method wide_string_input_adapter (line 5010) | wide_string_input_adapter(BaseInputAdapter base)
        method get_character (line 5013) | typename std::char_traits<char>::int_type get_character() noexcept
        method fill_buffer (line 5034) | void fill_buffer()
      type iterator_input_adapter_factory (line 5050) | struct iterator_input_adapter_factory
        method adapter_type (line 5056) | static adapter_type create(IteratorType first, IteratorType last)
      type is_iterator_of_multibyte (line 5063) | struct is_iterator_of_multibyte
      type iterator_input_adapter_factory<IteratorType, enable_if_t<is_iterator_of_multibyte<IteratorType>::value>> (line 5073) | struct iterator_input_adapter_factory<IteratorType, enable_if_t<is_i...
        method adapter_type (line 5080) | static adapter_type create(IteratorType first, IteratorType last)
      function input_adapter (line 5088) | typename iterator_input_adapter_factory<IteratorType>::adapter_type ...
      function input_adapter (line 5096) | auto input_adapter(const ContainerType& container) -> decltype(input...
      function file_input_adapter (line 5106) | inline file_input_adapter input_adapter(std::FILE* file)
        method file_input_adapter (line 4760) | explicit file_input_adapter(std::FILE* f) noexcept
        method file_input_adapter (line 4765) | file_input_adapter(const file_input_adapter&) = delete;
        method file_input_adapter (line 4766) | file_input_adapter(file_input_adapter&&) = default;
        method file_input_adapter (line 4767) | file_input_adapter& operator=(const file_input_adapter&) = delete;
        method file_input_adapter (line 4768) | file_input_adapter& operator=(file_input_adapter&&) = delete;
        method get_character (line 4770) | std::char_traits<char>::int_type get_character() noexcept
      function input_stream_adapter (line 5111) | inline input_stream_adapter input_adapter(std::istream& stream)
        method input_stream_adapter (line 4805) | explicit input_stream_adapter(std::istream& i)
        method input_stream_adapter (line 4810) | input_stream_adapter(const input_stream_adapter&) = delete;
        method input_stream_adapter (line 4811) | input_stream_adapter& operator=(input_stream_adapter&) = delete;
        method input_stream_adapter (line 4812) | input_stream_adapter& operator=(input_stream_adapter&& rhs) = delete;
        method input_stream_adapter (line 4814) | input_stream_adapter(input_stream_adapter&& rhs) noexcept : is(rhs...
        method get_character (line 4823) | std::char_traits<char>::int_type get_character()
      function input_stream_adapter (line 5116) | inline input_stream_adapter input_adapter(std::istream&& stream)
        method input_stream_adapter (line 4805) | explicit input_stream_adapter(std::istream& i)
        method input_stream_adapter (line 4810) | input_stream_adapter(const input_stream_adapter&) = delete;
        method input_stream_adapter (line 4811) | input_stream_adapter& operator=(input_stream_adapter&) = delete;
        method input_stream_adapter (line 4812) | input_stream_adapter& operator=(input_stream_adapter&& rhs) = delete;
        method input_stream_adapter (line 4814) | input_stream_adapter(input_stream_adapter&& rhs) noexcept : is(rhs...
        method get_character (line 4823) | std::char_traits<char>::int_type get_character()
      function contiguous_bytes_input_adapter (line 5131) | contiguous_bytes_input_adapter input_adapter(CharT b)
      function input_adapter (line 5139) | auto input_adapter(T (&array)[N]) -> decltype(input_adapter(array, a...
      class span_input_adapter (line 5147) | class span_input_adapter
        method span_input_adapter (line 5156) | span_input_adapter(CharT b, std::size_t l)
        method span_input_adapter (line 5163) | span_input_adapter(IteratorType first, IteratorType last)
        method contiguous_bytes_input_adapter (line 5166) | contiguous_bytes_input_adapter&& get()
      class json_sax_dom_parser (line 5328) | class json_sax_dom_parser
        method json_sax_dom_parser (line 5342) | explicit json_sax_dom_parser(BasicJsonType& r, const bool allow_ex...
        method json_sax_dom_parser (line 5347) | json_sax_dom_parser(const json_sax_dom_parser&) = delete;
        method json_sax_dom_parser (line 5348) | json_sax_dom_parser(json_sax_dom_parser&&) = default;
        method json_sax_dom_parser (line 5349) | json_sax_dom_parser& operator=(const json_sax_dom_parser&) = delete;
        method json_sax_dom_parser (line 5350) | json_sax_dom_parser& operator=(json_sax_dom_parser&&) = default;
        method null (line 5353) | bool null()
        method boolean (line 5359) | bool boolean(bool val)
        method number_integer (line 5365) | bool number_integer(number_integer_t val)
        method number_unsigned (line 5371) | bool number_unsigned(number_unsigned_t val)
        method number_float (line 5377) | bool number_float(number_float_t val, const string_t& /*unused*/)
        method string (line 5383) | bool string(string_t& val)
        method binary (line 5389) | bool binary(binary_t& val)
        method start_object (line 5395) | bool start_object(std::size_t len)
        method key (line 5408) | bool key(string_t& val)
        method end_object (line 5415) | bool end_object()
        method start_array (line 5421) | bool start_array(std::size_t len)
        method end_array (line 5434) | bool end_array()
        method parse_error (line 5441) | bool parse_error(std::size_t /*unused*/, const std::string& /*unus...
        method is_errored (line 5453) | constexpr bool is_errored() const
        method JSON_HEDLEY_RETURNS_NON_NULL (line 5466) | JSON_HEDLEY_RETURNS_NON_NULL
      class json_sax_dom_callback_parser (line 5502) | class json_sax_dom_callback_parser
        method json_sax_dom_callback_parser (line 5513) | json_sax_dom_callback_parser(BasicJsonType& r,
        method json_sax_dom_callback_parser (line 5522) | json_sax_dom_callback_parser(const json_sax_dom_callback_parser&) ...
        method json_sax_dom_callback_parser (line 5523) | json_sax_dom_callback_parser(json_sax_dom_callback_parser&&) = def...
        method json_sax_dom_callback_parser (line 5524) | json_sax_dom_callback_parser& operator=(const json_sax_dom_callbac...
        method json_sax_dom_callback_parser (line 5525) | json_sax_dom_callback_parser& operator=(json_sax_dom_callback_pars...
        method null (line 5528) | bool null()
        method boolean (line 5534) | bool boolean(bool val)
        method number_integer (line 5540) | bool number_integer(number_integer_t val)
        method number_unsigned (line 5546) | bool number_unsigned(number_unsigned_t val)
        method number_float (line 5552) | bool number_float(number_float_t val, const string_t& /*unused*/)
        method string (line 5558) | bool string(string_t& val)
        method binary (line 5564) | bool binary(binary_t& val)
        method start_object (line 5570) | bool start_object(std::size_t len)
        method key (line 5588) | bool key(string_t& val)
        method end_object (line 5605) | bool end_object()
        method start_array (line 5634) | bool start_array(std::size_t len)
        method end_array (line 5651) | bool end_array()
        method parse_error (line 5680) | bool parse_error(std::size_t /*unused*/, const std::string& /*unus...
        method is_errored (line 5692) | constexpr bool is_errored() const
        method handle_value (line 5714) | std::pair<bool, BasicJsonType*> handle_value(Value&& v, const bool...
      class json_sax_acceptor (line 5798) | class json_sax_acceptor
        method null (line 5807) | bool null()
        method boolean (line 5812) | bool boolean(bool /*unused*/)
        method number_integer (line 5817) | bool number_integer(number_integer_t /*unused*/)
        method number_unsigned (line 5822) | bool number_unsigned(number_unsigned_t /*unused*/)
        method number_float (line 5827) | bool number_float(number_float_t /*unused*/, const string_t& /*unu...
        method string (line 5832) | bool string(string_t& /*unused*/)
        method binary (line 5837) | bool binary(binary_t& /*unused*/)
        method start_object (line 5842) | bool start_object(std::size_t /*unused*/ = std::size_t(-1))
        method key (line 5847) | bool key(string_t& /*unused*/)
        method end_object (line 5852) | bool end_object()
        method start_array (line 5857) | bool start_array(std::size_t /*unused*/ = std::size_t(-1))
        method end_array (line 5862) | bool end_array()
        method parse_error (line 5867) | bool parse_error(std::size_t /*unused*/, const std::string& /*unus...
      class lexer_base (line 5905) | class lexer_base
        type token_type (line 5909) | enum class token_type
      class lexer (line 5982) | class lexer : public lexer_base<BasicJsonType>
        method lexer (line 5994) | explicit lexer(InputAdapterType&& adapter, bool ignore_comments_ =...
        method lexer (line 6001) | lexer(const lexer&) = delete;
        method lexer (line 6002) | lexer(lexer&&) = default;
        method lexer (line 6003) | lexer& operator=(lexer&) = delete;
        method lexer (line 6004) | lexer& operator=(lexer&&) = default;
        method JSON_HEDLEY_PURE (line 6013) | JSON_HEDLEY_PURE
        method get_codepoint (line 6040) | int get_codepoint()
        method next_byte_in_range (line 6088) | bool next_byte_in_range(std::initializer_list<char_int_type> ranges)
        method token_type (line 6125) | token_type scan_string()
        method scan_comment (line 6715) | bool scan_comment()
        method strtof (line 6783) | static void strtof(float& f, const char* str, char** endptr) noexcept
        method strtof (line 6789) | static void strtof(double& f, const char* str, char** endptr) noex...
        method strtof (line 6795) | static void strtof(long double& f, const char* str, char** endptr)...
        method token_type (line 6840) | token_type scan_number()  // lgtm [cpp/use-of-goto]
      type is_sax (line 7573) | struct is_sax
      type is_sax_static_asserts (line 7604) | struct is_sax_static_asserts
      type cbor_tag_handler_t (line 7668) | enum class cbor_tag_handler_t
      function little_endianess (line 7681) | static inline bool little_endianess(int num = 1) noexcept
      class binary_reader (line 7695) | class binary_reader
        method binary_reader (line 7712) | explicit binary_reader(InputAdapterType&& adapter) : ia(std::move(...
        method binary_reader (line 7718) | binary_reader(const binary_reader&) = delete;
        method binary_reader (line 7719) | binary_reader(binary_reader&&) = default;
        method binary_reader (line 7720) | binary_reader& operator=(const binary_reader&) = delete;
        method binary_reader (line 7721) | binary_reader& operator=(binary_reader&&) = default;
        method JSON_HEDLEY_NON_NULL (line 7732) | JSON_HEDLEY_NON_NULL(3)
        method parse_bson_internal (line 7794) | bool parse_bson_internal()
        method get_bson_cstr (line 7819) | bool get_bson_cstr(string_t& result)
        method get_bson_string (line 7849) | bool get_bson_string(const NumberType len, string_t& result)
        method get_bson_binary (line 7870) | bool get_bson_binary(const NumberType len, binary_t& result)
        method parse_bson_element_internal (line 7896) | bool parse_bson_element_internal(const char_int_type element_type,
        method parse_bson_element_list (line 7974) | bool parse_bson_element_list(const bool is_array)
        method parse_bson_array (line 8012) | bool parse_bson_array()
        method parse_cbor_internal (line 8042) | bool parse_cbor_internal(const bool get_char,
        method get_cbor_string (line 8487) | bool get_cbor_string(string_t& result)
        method get_cbor_binary (line 8582) | bool get_cbor_binary(binary_t& result)
        method get_cbor_array (line 8676) | bool get_cbor_array(const std::size_t len,
        method get_cbor_object (line 8714) | bool get_cbor_object(const std::size_t len,
        method parse_msgpack_internal (line 8767) | bool parse_msgpack_internal()
        method get_msgpack_string (line 9147) | bool get_msgpack_string(string_t& result)
        method get_msgpack_binary (line 9229) | bool get_msgpack_binary(binary_t& result)
        method get_msgpack_array (line 9340) | bool get_msgpack_array(const std::size_t len)
        method get_msgpack_object (line 9362) | bool get_msgpack_object(const std::size_t len)
        method parse_ubjson_internal (line 9399) | bool parse_ubjson_internal(const bool get_char = true)
        method get_ubjson_string (line 9418) | bool get_ubjson_string(string_t& result, const bool get_char = true)
        method get_ubjson_size_value (line 9472) | bool get_ubjson_size_value(std::size_t& result)
        method get_ubjson_size_type (line 9549) | bool get_ubjson_size_type(std::pair<std::size_t, char_int_type>& r...
        method get_ubjson_value (line 9590) | bool get_ubjson_value(const char_int_type prefix)
        method get_ubjson_array (line 9691) | bool get_ubjson_array()
        method get_ubjson_object (line 9753) | bool get_ubjson_object()
        method get_ubjson_high_precision_number (line 9828) | bool get_ubjson_high_precision_number()
        method char_int_type (line 9890) | char_int_type get()
        method char_int_type (line 9899) | char_int_type get_ignore_noop()
        method get_number (line 9924) | bool get_number(const input_format_t format, NumberType& result)
        method get_string (line 9967) | bool get_string(const input_format_t format,
        method get_binary (line 10000) | bool get_binary(const input_format_t format,
        method JSON_HEDLEY_NON_NULL (line 10023) | JSON_HEDLEY_NON_NULL(3)
        method get_token_string (line 10037) | std::string get_token_string() const
        method exception_message (line 10050) | std::string exception_message(const input_format_t format,
      type parse_event_t (line 10137) | enum class parse_event_t : uint8_t
      class parser (line 10163) | class parser
        method parser (line 10174) | explicit parser(InputAdapterType&& adapter,
        method parse (line 10196) | void parse(const bool strict, BasicJsonType& result)
        method accept (line 10257) | bool accept(const bool strict = true)
        method sax_parse (line 10265) | bool sax_parse(SAX* sax, const bool strict = true)
        method sax_parse_internal (line 10285) | bool sax_parse_internal(SAX* sax)
        method token_type (line 10567) | token_type get_token()
        method exception_message (line 10572) | std::string exception_message(const token_type expected, const std...
      class primitive_iterator_t (line 10636) | class primitive_iterator_t
        method difference_type (line 10647) | constexpr difference_type get_value() const noexcept
        method set_begin (line 10653) | void set_begin() noexcept
        method set_end (line 10659) | void set_end() noexcept
        method is_begin (line 10665) | constexpr bool is_begin() const noexcept
        method is_end (line 10671) | constexpr bool is_end() const noexcept
        method primitive_iterator_t (line 10686) | primitive_iterator_t operator+(difference_type n) noexcept
        method difference_type (line 10693) | constexpr difference_type operator-(primitive_iterator_t lhs, prim...
        method primitive_iterator_t (line 10698) | primitive_iterator_t& operator++() noexcept
        method primitive_iterator_t (line 10704) | primitive_iterator_t const operator++(int) noexcept
        method primitive_iterator_t (line 10711) | primitive_iterator_t& operator--() noexcept
        method primitive_iterator_t (line 10717) | primitive_iterator_t const operator--(int) noexcept
        method primitive_iterator_t (line 10724) | primitive_iterator_t& operator+=(difference_type n) noexcept
        method primitive_iterator_t (line 10730) | primitive_iterator_t& operator-=(difference_type n) noexcept
      type internal_iterator (line 10750) | struct internal_iterator
      class iteration_proxy (line 10788) | class iteration_proxy
        method iteration_proxy (line 3937) | explicit iteration_proxy(typename IteratorType::reference cont) no...
        method begin (line 3941) | iteration_proxy_value<IteratorType> begin() noexcept
        method end (line 3947) | iteration_proxy_value<IteratorType> end() noexcept
      class iteration_proxy_value (line 10789) | class iteration_proxy_value
        method iteration_proxy_value (line 3864) | explicit iteration_proxy_value(IteratorType it) noexcept : anchor(...
        method iteration_proxy_value (line 3867) | iteration_proxy_value& operator*()
        method iteration_proxy_value (line 3873) | iteration_proxy_value& operator++()
        method string_type (line 3894) | const string_type& key() const
        method value (line 3922) | typename IteratorType::reference value() const
      class iter_impl (line 10808) | class iter_impl
        method iter_impl (line 10846) | iter_impl() = default;
        method iter_impl (line 10854) | explicit iter_impl(pointer object) noexcept : m_object(object)
        method iter_impl (line 10896) | iter_impl(const iter_impl<const BasicJsonType>& other) noexcept
        method iter_impl (line 10906) | iter_impl& operator=(const iter_impl<const BasicJsonType>& other) ...
        method iter_impl (line 10918) | iter_impl(const iter_impl<typename std::remove_const<BasicJsonType...
        method iter_impl (line 10928) | iter_impl& operator=(const iter_impl<typename std::remove_const<Ba...
        method set_begin (line 10940) | void set_begin() noexcept
        method set_end (line 10977) | void set_end() noexcept
        method reference (line 11008) | reference operator*() const
        method pointer (line 11045) | pointer operator->() const
        method iter_impl (line 11079) | iter_impl const operator++(int)
        method iter_impl (line 11090) | iter_impl& operator++()
        method iter_impl (line 11122) | iter_impl const operator--(int)
        method iter_impl (line 11133) | iter_impl& operator--()
        method iter_impl (line 11255) | iter_impl& operator+=(difference_type i)
        method iter_impl (line 11284) | iter_impl& operator-=(difference_type i)
        method iter_impl (line 11293) | iter_impl operator+(difference_type i) const
        method iter_impl (line 11304) | iter_impl operator+(difference_type i, const iter_impl& it)
        method iter_impl (line 11315) | iter_impl operator-(difference_type i) const
        method difference_type (line 11326) | difference_type operator-(const iter_impl& other) const
        method reference (line 11347) | reference operator[](difference_type n) const
        method reference (line 11394) | reference value() const
      class json_reverse_iterator (line 11444) | class json_reverse_iterator : public std::reverse_iterator<Base>
        method json_reverse_iterator (line 11454) | explicit json_reverse_iterator(const typename base_iterator::itera...
        method json_reverse_iterator (line 11458) | explicit json_reverse_iterator(const base_iterator& it) noexcept :...
        method json_reverse_iterator (line 11461) | json_reverse_iterator const operator++(int)
        method json_reverse_iterator (line 11467) | json_reverse_iterator& operator++()
        method json_reverse_iterator (line 11473) | json_reverse_iterator const operator--(int)
        method json_reverse_iterator (line 11479) | json_reverse_iterator& operator--()
        method json_reverse_iterator (line 11485) | json_reverse_iterator& operator+=(difference_type i)
        method json_reverse_iterator (line 11491) | json_reverse_iterator operator+(difference_type i) const
        method json_reverse_iterator (line 11497) | json_reverse_iterator operator-(difference_type i) const
        method difference_type (line 11503) | difference_type operator-(const json_reverse_iterator& other) const
        method reference (line 11509) | reference operator[](difference_type n) const
        method key (line 11515) | auto key() const -> decltype(std::declval<Base>().key())
        method reference (line 11522) | reference value() const
      class json_ref (line 12527) | class json_ref
        method json_ref (line 12532) | json_ref(value_type&& value)
        method json_ref (line 12538) | json_ref(const value_type& value)
        method json_ref (line 12543) | json_ref(std::initializer_list<json_ref> init)
        method json_ref (line 12552) | json_ref(Args && ... args)
        method json_ref (line 12559) | json_ref(json_ref&&) = default;
        method json_ref (line 12560) | json_ref(const json_ref&) = delete;
        method json_ref (line 12561) | json_ref& operator=(const json_ref&) = delete;
        method json_ref (line 12562) | json_ref& operator=(json_ref&&) = delete;
        method value_type (line 12565) | value_type moved_or_copied() const
        method value_type (line 12574) | value_type const& operator*() const
        method value_type (line 12579) | value_type const* operator->() const
      type output_adapter_protocol (line 12632) | struct output_adapter_protocol
      class output_vector_adapter (line 12645) | class output_vector_adapter : public output_adapter_protocol<CharType>
        method output_vector_adapter (line 12648) | explicit output_vector_adapter(std::vector<CharType>& vec) noexcept
        method write_character (line 12652) | void write_character(CharType c) override
        method JSON_HEDLEY_NON_NULL (line 12657) | JSON_HEDLEY_NON_NULL(2)
      class output_stream_adapter (line 12669) | class output_stream_adapter : public output_adapter_protocol<CharType>
        method output_stream_adapter (line 12672) | explicit output_stream_adapter(std::basic_ostream<CharType>& s) no...
        method write_character (line 12676) | void write_character(CharType c) override
        method JSON_HEDLEY_NON_NULL (line 12681) | JSON_HEDLEY_NON_NULL(2)
      class output_string_adapter (line 12693) | class output_string_adapter : public output_adapter_protocol<CharType>
        method output_string_adapter (line 12696) | explicit output_string_adapter(StringType& s) noexcept
        method write_character (line 12700) | void write_character(CharType c) override
        method JSON_HEDLEY_NON_NULL (line 12705) | JSON_HEDLEY_NON_NULL(2)
      class output_adapter (line 12716) | class output_adapter
        method output_adapter (line 12719) | output_adapter(std::vector<CharType>& vec)
        method output_adapter (line 12722) | output_adapter(std::basic_ostream<CharType>& s)
        method output_adapter (line 12725) | output_adapter(StringType& s)
      class binary_writer (line 12752) | class binary_writer
        method binary_writer (line 12764) | explicit binary_writer(output_adapter_t<CharType> adapter) : oa(ad...
        method write_bson (line 12773) | void write_bson(const BasicJsonType& j)
        method write_cbor (line 12793) | void write_cbor(const BasicJsonType& j)
        method write_msgpack (line 13098) | void write_msgpack(const BasicJsonType& j)
        method write_ubjson (line 13422) | void write_ubjson(const BasicJsonType& j, const bool use_count,
        method calc_bson_entry_header_size (line 13629) | static std::size_t calc_bson_entry_header_size(const string_t& name)
        method write_bson_entry_header (line 13644) | void write_bson_entry_header(const string_t& name,
        method write_bson_boolean (line 13656) | void write_bson_boolean(const string_t& name,
        method write_bson_double (line 13666) | void write_bson_double(const string_t& name,
        method calc_bson_string_size (line 13676) | static std::size_t calc_bson_string_size(const string_t& value)
        method write_bson_string (line 13684) | void write_bson_string(const string_t& name,
        method write_bson_null (line 13698) | void write_bson_null(const string_t& name)
        method calc_bson_integer_size (line 13706) | static std::size_t calc_bson_integer_size(const std::int64_t value)
        method write_bson_integer (line 13716) | void write_bson_integer(const string_t& name,
        method calc_bson_unsigned_size (line 13734) | static constexpr std::size_t calc_bson_unsigned_size(const std::ui...
        method write_bson_unsigned (line 13744) | void write_bson_unsigned(const string_t& name,
        method write_bson_object_entry (line 13766) | void write_bson_object_entry(const string_t& name,
        method calc_bson_array_size (line 13776) | static std::size_t calc_bson_array_size(const typename BasicJsonTy...
        method calc_bson_binary_size (line 13791) | static std::size_t calc_bson_binary_size(const typename BasicJsonT...
        method write_bson_array (line 13799) | void write_bson_array(const string_t& name,
        method write_bson_binary (line 13818) | void write_bson_binary(const string_t& name,
        method calc_bson_element_size (line 13833) | static std::size_t calc_bson_element_size(const string_t& name,
        method write_bson_element (line 13881) | void write_bson_element(const string_t& name,
        method calc_bson_object_size (line 13927) | static std::size_t calc_bson_object_size(const typename BasicJsonT...
        method write_bson_object (line 13942) | void write_bson_object(const typename BasicJsonType::object_t& value)
        method CharType (line 13958) | static constexpr CharType get_cbor_float_prefix(float /*unused*/)
        method CharType (line 13963) | static constexpr CharType get_cbor_float_prefix(double /*unused*/)
        method CharType (line 13972) | static constexpr CharType get_msgpack_float_prefix(float /*unused*/)
        method CharType (line 13977) | static constexpr CharType get_msgpack_float_prefix(double /*unused*/)
        method write_number_with_ubjson_prefix (line 13989) | void write_number_with_ubjson_prefix(const NumberType n,
        method write_number_with_ubjson_prefix (line 14002) | void write_number_with_ubjson_prefix(const NumberType n,
        method write_number_with_ubjson_prefix (line 14065) | void write_number_with_ubjson_prefix(const NumberType n,
        method CharType (line 14129) | CharType ubjson_prefix(const BasicJsonType& j) const noexcept
        method CharType (line 14209) | static constexpr CharType get_ubjson_float_prefix(float /*unused*/)
        method CharType (line 14214) | static constexpr CharType get_ubjson_float_prefix(double /*unused*/)
        method write_number (line 14235) | void write_number(const NumberType n)
        method write_compact_float (line 14251) | void write_compact_float(const number_float_t n, detail::input_for...
        method CharType (line 14278) | static constexpr CharType to_char_type(std::uint8_t x) noexcept
        method CharType (line 14285) | static CharType to_char_type(std::uint8_t x) noexcept
        method CharType (line 14296) | static constexpr CharType to_char_type(std::uint8_t x) noexcept
        method CharType (line 14307) | static constexpr CharType to_char_type(InputCharType x) noexcept
      type dtoa_impl (line 14376) | namespace dtoa_impl
        function Target (line 14380) | Target reinterpret_bits(const Source source)
        type diyfp (line 14389) | struct diyfp // f * 2^e
          method diyfp (line 14396) | constexpr diyfp(std::uint64_t f_, int e_) noexcept : f(f_), e(e_...
          method diyfp (line 14402) | static diyfp sub(const diyfp& x, const diyfp& y) noexcept
          method diyfp (line 14414) | static diyfp mul(const diyfp& x, const diyfp& y) noexcept
          method diyfp (line 14479) | static diyfp normalize(diyfp x) noexcept
          method diyfp (line 14496) | static diyfp normalize_to(const diyfp& x, const int target_expon...
        type boundaries (line 14507) | struct boundaries
        function boundaries (line 14521) | boundaries compute_boundaries(FloatType value)
        type cached_power (line 14646) | struct cached_power // c = f * 2^e ~= 10^k
        function cached_power (line 14660) | inline cached_power get_cached_power_for_binary_exponent(int e)
        function find_largest_pow10 (line 14824) | inline int find_largest_pow10(const std::uint32_t n, std::uint32_t...
        function grisu2_round (line 14880) | inline void grisu2_round(char* buf, int len, std::uint64_t dist, s...
        function grisu2_digit_gen (line 14921) | inline void grisu2_digit_gen(char* buffer, int& length, int& decim...
        function grisu2 (line 15162) | inline void grisu2(char* buf, int& len, int& decimal_exponent,
        function JSON_HEDLEY_NON_NULL (line 15221) | JSON_HEDLEY_NON_NULL(1)
      type error_handler_t (line 15469) | enum class error_handler_t
      class serializer (line 15477) | class serializer
        method serializer (line 15493) | serializer(output_adapter_t<char> s, const char ichar,
        method serializer (line 15505) | serializer(const serializer&) = delete;
        method serializer (line 15506) | serializer& operator=(const serializer&) = delete;
        method serializer (line 15507) | serializer(serializer&&) = delete;
        method serializer (line 15508) | serializer& operator=(serializer&&) = delete;
        method dump (line 15533) | void dump(const BasicJsonType& val,
        method dump_escaped (line 15817) | void dump_escaped(const string_t& s, const bool ensure_ascii)
        method count_digits (line 16073) | inline unsigned int count_digits(number_unsigned_t x) noexcept
        method dump_integer (line 16113) | void dump_integer(NumberType x)
        method dump_float (line 16199) | void dump_float(number_float_t x)
        method dump_float (line 16220) | void dump_float(number_float_t x, std::true_type /*is_ieee_single_...
        method dump_float (line 16228) | void dump_float(number_float_t x, std::false_type /*is_ieee_single...
        method decode (line 16298) | static std::uint8_t decode(std::uint8_t& state, std::uint32_t& cod...
        method number_unsigned_t (line 16337) | number_unsigned_t remove_sign(number_unsigned_t x)
        method number_unsigned_t (line 16352) | inline number_unsigned_t remove_sign(number_integer_t x) noexcept
    type detail (line 2318) | namespace detail
      type position_t (line 86) | struct position_t
      class exception (line 2352) | class exception : public std::exception
        method JSON_HEDLEY_RETURNS_NON_NULL (line 2356) | JSON_HEDLEY_RETURNS_NON_NULL
        method JSON_HEDLEY_NON_NULL (line 2366) | JSON_HEDLEY_NON_NULL(3)
        method name (line 2369) | static std::string name(const std::string& ename, int id_)
      class parse_error (line 2424) | class parse_error : public exception
        method parse_error (line 2436) | static parse_error create(int id_, const position_t& pos, const st...
        method parse_error (line 2443) | static parse_error create(int id_, std::size_t byte_, const std::s...
        method parse_error (line 2463) | parse_error(int id_, std::size_t byte_, const char* what_arg)
        method position_string (line 2466) | static std::string position_string(const position_t& pos)
      class invalid_iterator (line 2510) | class invalid_iterator : public exception
        method invalid_iterator (line 2513) | static invalid_iterator create(int id_, const std::string& what_arg)
        method JSON_HEDLEY_NON_NULL (line 2520) | JSON_HEDLEY_NON_NULL(3)
      class type_error (line 2564) | class type_error : public exception
        method type_error (line 2567) | static type_error create(int id_, const std::string& what_arg)
        method JSON_HEDLEY_NON_NULL (line 2574) | JSON_HEDLEY_NON_NULL(3)
      class out_of_range (line 2611) | class out_of_range : public exception
        method out_of_range (line 2614) | static out_of_range create(int id_, const std::string& what_arg)
        method JSON_HEDLEY_NON_NULL (line 2621) | JSON_HEDLEY_NON_NULL(3)
      class other_error (line 2649) | class other_error : public exception
        method other_error (line 2652) | static other_error create(int id_, const std::string& what_arg)
        method JSON_HEDLEY_NON_NULL (line 2659) | JSON_HEDLEY_NON_NULL(3)
      type index_sequence (line 2687) | struct index_sequence
        method size (line 2691) | static constexpr std::size_t size() noexcept
      type merge_and_renumber (line 2698) | struct merge_and_renumber
      type make_index_sequence (line 2705) | struct make_index_sequence
      type make_index_sequence<0> (line 2709) | struct make_index_sequence<0> : index_sequence<> {}
      type make_index_sequence<1> (line 2710) | struct make_index_sequence<1> : index_sequence<0> {}
      type priority_tag (line 2716) | struct priority_tag : priority_tag < N - 1 > {}
      type priority_tag<0> (line 2717) | struct priority_tag<0> {}
      type static_const (line 2721) | struct static_const
      type make_void (line 2750) | struct make_void
      type iterator_types (line 2766) | struct iterator_types {}
      type iterator_types <
    It,
    void_t<typename It::difference_type, typename It::value_type, typename It::pointer,
    typename It::reference, typename It::iterator_category >> (line 2769) | struct iterator_types <
      type iterator_traits (line 2784) | struct iterator_traits
      type iterator_traits < T, enable_if_t < !std::is_pointer<T>::value >> (line 2789) | struct iterator_traits < T, enable_if_t < !std::is_pointer<T>::value >>
      type iterator_traits<T*, enable_if_t<std::is_object<T>::value>> (line 2795) | struct iterator_traits<T*, enable_if_t<std::is_object<T>::value>>
      type nonesuch (line 2823) | struct nonesuch
        method nonesuch (line 2825) | nonesuch() = delete;
        method nonesuch (line 2827) | nonesuch(nonesuch const&) = delete;
        method nonesuch (line 2828) | nonesuch(nonesuch const&&) = delete;
      type detector (line 2837) | struct detector
      type is_basic_json (line 2977) | struct is_basic_json : std::false_type {}
      class json_ref (line 2987) | class json_ref
        method json_ref (line 12532) | json_ref(value_type&& value)
        method json_ref (line 12538) | json_ref(const value_type& value)
        method json_ref (line 12543) | json_ref(std::initializer_list<json_ref> init)
        method json_ref (line 12552) | json_ref(Args && ... args)
        method json_ref (line 12559) | json_ref(json_ref&&) = default;
        method json_ref (line 12560) | json_ref(const json_ref&) = delete;
        method json_ref (line 12561) | json_ref& operator=(const json_ref&) = delete;
        method json_ref (line 12562) | json_ref& operator=(json_ref&&) = delete;
        method value_type (line 12565) | value_type moved_or_copied() const
        method value_type (line 12574) | value_type const& operator*() const
        method value_type (line 12579) | value_type const* operator->() const
      type is_json_ref (line 2990) | struct is_json_ref : std::false_type {}
      type is_json_ref<json_ref<T>> (line 2993) | struct is_json_ref<json_ref<T>> : std::true_type {}
      type has_from_json (line 3034) | struct has_from_json : std::false_type {}
      type is_getable (line 3041) | struct is_getable
      type has_from_json < BasicJsonType, T,
           enable_if_t < !is_basic_json<T>::value >> (line 3047) | struct has_from_json < BasicJsonType, T,
      type has_non_default_from_json (line 3060) | struct has_non_default_from_json : std::false_type {}
      type has_non_default_from_json < BasicJsonType, T, enable_if_t < !is_basic_json<T>::value >> (line 3063) | struct has_non_default_from_json < BasicJsonType, T, enable_if_t < !...
      type has_to_json (line 3075) | struct has_to_json : std::false_type {}
      type has_to_json < BasicJsonType, T, enable_if_t < !is_basic_json<T>::value >> (line 3078) | struct has_to_json < BasicJsonType, T, enable_if_t < !is_basic_json<...
      type is_iterator_traits (line 3093) | struct is_iterator_traits : std::false_type {}
      type is_iterator_traits<iterator_traits<T>> (line 3096) | struct is_iterator_traits<iterator_traits<T>>
      type is_complete_type (line 3113) | struct is_complete_type : std::false_type {}
      type is_complete_type<T, decltype(void(sizeof(T)))> (line 3116) | struct is_complete_type<T, decltype(void(sizeof(T)))> : std::true_ty...
      type is_compatible_object_type_impl (line 3120) | struct is_compatible_object_type_impl : std::false_type {}
      type is_compatible_object_type_impl <
    BasicJsonType, CompatibleObjectType,
    enable_if_t < is_detected<mapped_type_t, CompatibleObjectType>::value&&
    is_detected<key_type_t, CompatibleObjectType>::value >> (line 3123) | struct is_compatible_object_type_impl <
      type is_compatible_object_type (line 3140) | struct is_compatible_object_type
      type is_constructible_object_type_impl (line 3145) | struct is_constructible_object_type_impl : std::false_type {}
      type is_constructible_object_type_impl <
    BasicJsonType, ConstructibleObjectType,
    enable_if_t < is_detected<mapped_type_t, ConstructibleObjectType>::value&&
    is_detected<key_type_t, ConstructibleObjectType>::value >> (line 3148) | struct is_constructible_object_type_impl <
      type is_constructible_object_type (line 3172) | struct is_constructible_object_type
      type is_compatible_string_type_impl (line 3178) | struct is_compatible_string_type_impl : std::false_type {}
      type is_compatible_string_type_impl <
    BasicJsonType, CompatibleStringType,
    enable_if_t<is_detected_exact<typename BasicJsonType::string_t::value_type,
    value_type_t, CompatibleStringType>::value >> (line 3181) | struct is_compatible_string_type_impl <
      type is_compatible_string_type (line 3191) | struct is_compatible_string_type
      type is_constructible_string_type_impl (line 3196) | struct is_constructible_string_type_impl : std::false_type {}
      type is_constructible_string_type_impl <
    BasicJsonType, ConstructibleStringType,
    enable_if_t<is_detected_exact<typename BasicJsonType::string_t::value_type,
    value_type_t, ConstructibleStringType>::value >> (line 3199) | struct is_constructible_string_type_impl <
      type is_constructible_string_type (line 3210) | struct is_constructible_string_type
      type is_compatible_array_type_impl (line 3214) | struct is_compatible_array_type_impl : std::false_type {}
      type is_compatible_array_type (line 3233) | struct is_compatible_array_type
      type is_constructible_array_type_impl (line 3237) | struct is_constructible_array_type_impl : std::false_type {}
      type is_constructible_array_type_impl <
    BasicJsonType, ConstructibleArrayType,
    enable_if_t<std::is_same<ConstructibleArrayType,
    typename BasicJsonType::value_type>::value >> (line 3240) | struct is_constructible_array_type_impl <
      type is_constructible_array_type_impl <
    BasicJsonType, ConstructibleArrayType,
    enable_if_t < !std::is_same<ConstructibleArrayType,
    typename BasicJsonType::value_type>::value&&
    std::is_default_constructible<ConstructibleArrayType>::value&&
(std::is_move_assignable<ConstructibleArrayType>::value ||
 std::is_copy_assignable<ConstructibleArrayType>::value)&&
is_detected<value_type_t, ConstructibleArrayType>::value&&
is_detected<iterator_t, ConstructibleArrayType>::value&&
is_complete_type <
detected_t<value_type_t, ConstructibleArrayType >>::value >> (line 3247) | struct is_constructible_array_type_impl <
      type is_constructible_array_type (line 3276) | struct is_constructible_array_type
      type is_compatible_integer_type_impl (line 3281) | struct is_compatible_integer_type_impl : std::false_type {}
      type is_compatible_integer_type_impl <
    RealIntegerType, CompatibleNumberIntegerType,
    enable_if_t < std::is_integral<RealIntegerType>::value&&
    std::is_integral<CompatibleNumberIntegerType>::value&&
    !std::is_same<bool, CompatibleNumberIntegerType>::value >> (line 3284) | struct is_compatible_integer_type_impl <
      type is_compatible_integer_type (line 3302) | struct is_compatible_integer_type
      type is_compatible_type_impl (line 3307) | struct is_compatible_type_impl: std::false_type {}
      type is_compatible_type_impl <
    BasicJsonType, CompatibleType,
    enable_if_t<is_complete_type<CompatibleType>::value >> (line 3310) | struct is_compatible_type_impl <
      type is_compatible_type (line 3319) | struct is_compatible_type
      type conjunction (line 3323) | struct conjunction : std::true_type { }
      type conjunction<B1> (line 3324) | struct conjunction<B1> : B1 { }
      type is_constructible_tuple (line 3330) | struct is_constructible_tuple : std::false_type {}
      type value_t (line 3377) | enum class value_t : std::uint8_t
      function from_json (line 3426) | void from_json(const BasicJsonType& j, typename std::nullptr_t& n)
      function get_arithmetic_value (line 3440) | void get_arithmetic_value(const BasicJsonType& j, ArithmeticType& val)
      function from_json (line 3466) | void from_json(const BasicJsonType& j, typename BasicJsonType::boole...
      function from_json (line 3476) | void from_json(const BasicJsonType& j, typename BasicJsonType::strin...
      function from_json (line 3492) | void from_json(const BasicJsonType& j, ConstructibleStringType& s)
      function from_json (line 3503) | void from_json(const BasicJsonType& j, typename BasicJsonType::numbe...
      function from_json (line 3509) | void from_json(const BasicJsonType& j, typename BasicJsonType::numbe...
      function from_json (line 3515) | void from_json(const BasicJsonType& j, typename BasicJsonType::numbe...
      function from_json (line 3522) | void from_json(const BasicJsonType& j, EnumType& e)
      function from_json (line 3532) | void from_json(const BasicJsonType& j, std::forward_list<T, Allocato...
      function from_json (line 3549) | void from_json(const BasicJsonType& j, std::valarray<T>& l)
      function from_json (line 3564) | auto from_json(const BasicJsonType& j, T (&arr)[N])
      function from_json_array_impl (line 3574) | void from_json_array_impl(const BasicJsonType& j, typename BasicJson...
      function from_json_array_impl (line 3580) | auto from_json_array_impl(const BasicJsonType& j, std::array<T, N>& ...
      function from_json_array_impl (line 3591) | auto from_json_array_impl(const BasicJsonType& j, ConstructibleArray...
      function from_json_array_impl (line 3612) | void from_json_array_impl(const BasicJsonType& j, ConstructibleArray...
      function from_json (line 3637) | auto from_json(const BasicJsonType& j, ConstructibleArrayType& arr)
      function from_json (line 3652) | void from_json(const BasicJsonType& j, typename BasicJsonType::binar...
      function from_json (line 3664) | void from_json(const BasicJsonType& j, ConstructibleObjectType& obj)
      function from_json (line 3696) | void from_json(const BasicJsonType& j, ArithmeticType& val)
      function from_json (line 3727) | void from_json(const BasicJsonType& j, std::pair<A1, A2>& p)
      function from_json_tuple_impl (line 3733) | void from_json_tuple_impl(const BasicJsonType& j, Tuple& t, index_se...
      function from_json (line 3739) | void from_json(const BasicJsonType& j, std::tuple<Args...>& t)
      function from_json (line 3747) | void from_json(const BasicJsonType& j, std::map<Key, Value, Compare,...
      function from_json (line 3767) | void from_json(const BasicJsonType& j, std::unordered_map<Key, Value...
      type from_json_fn (line 3784) | struct from_json_fn
      function int_to_string (line 3835) | void int_to_string( string_type& target, std::size_t value )
      class iteration_proxy_value (line 3841) | class iteration_proxy_value
        method iteration_proxy_value (line 3864) | explicit iteration_proxy_value(IteratorType it) noexcept : anchor(...
        method iteration_proxy_value (line 3867) | iteration_proxy_value& operator*()
        method iteration_proxy_value (line 3873) | iteration_proxy_value& operator++()
        method string_type (line 3894) | const string_type& key() const
        method value (line 3922) | typename IteratorType::reference value() const
      class iteration_proxy (line 3929) | class iteration_proxy
        method iteration_proxy (line 3937) | explicit iteration_proxy(typename IteratorType::reference cont) no...
        method begin (line 3941) | iteration_proxy_value<IteratorType> begin() noexcept
        method end (line 3947) | iteration_proxy_value<IteratorType> end() noexcept
      function get (line 3956) | auto get(const nlohmann::detail::iteration_proxy_value<IteratorType>...
      function get (line 3964) | auto get(const nlohmann::detail::iteration_proxy_value<IteratorType>...
      type external_constructor (line 4014) | struct external_constructor
      type external_constructor<value_t::boolean> (line 4017) | struct external_constructor<value_t::boolean>
        method construct (line 4020) | static void construct(BasicJsonType& j, typename BasicJsonType::bo...
      type external_constructor<value_t::string> (line 4029) | struct external_constructor<value_t::string>
        method construct (line 4032) | static void construct(BasicJsonType& j, const typename BasicJsonTy...
        method construct (line 4040) | static void construct(BasicJsonType& j, typename BasicJsonType::st...
        method construct (line 4050) | static void construct(BasicJsonType& j, const CompatibleStringType...
      type external_constructor<value_t::binary> (line 4059) | struct external_constructor<value_t::binary>
        method construct (line 4062) | static void construct(BasicJsonType& j, const typename BasicJsonTy...
        method construct (line 4071) | static void construct(BasicJsonType& j, typename BasicJsonType::bi...
      type external_constructor<value_t::number_float> (line 4081) | struct external_constructor<value_t::number_float>
        method construct (line 4084) | static void construct(BasicJsonType& j, typename BasicJsonType::nu...
      type external_constructor<value_t::number_unsigned> (line 4093) | struct external_constructor<value_t::number_unsigned>
        method construct (line 4096) | static void construct(BasicJsonType& j, typename BasicJsonType::nu...
      type external_constructor<value_t::number_integer> (line 4105) | struct external_constructor<value_t::number_integer>
        method construct (line 4108) | static void construct(BasicJsonType& j, typename BasicJsonType::nu...
      type external_constructor<value_t::array> (line 4117) | struct external_constructor<value_t::array>
        method construct (line 4120) | static void construct(BasicJsonType& j, const typename BasicJsonTy...
        method construct (line 4128) | static void construct(BasicJsonType& j, typename BasicJsonType::ar...
        method construct (line 4138) | static void construct(BasicJsonType& j, const CompatibleArrayType&...
        method construct (line 4148) | static void construct(BasicJsonType& j, const std::vector<bool>& arr)
        method construct (line 4162) | static void construct(BasicJsonType& j, const std::valarray<T>& arr)
      type external_constructor<value_t::object> (line 4176) | struct external_constructor<value_t::object>
        method construct (line 4179) | static void construct(BasicJsonType& j, const typename BasicJsonTy...
        method construct (line 4187) | static void construct(BasicJsonType& j, typename BasicJsonType::ob...
        method construct (line 4196) | static void construct(BasicJsonType& j, const CompatibleObjectType...
      function to_json (line 4213) | void to_json(BasicJsonType& j, T b) noexcept
      function to_json (line 4220) | void to_json(BasicJsonType& j, const CompatibleString& s)
      function to_json (line 4226) | void to_json(BasicJsonType& j, typename BasicJsonType::string_t&& s)
      function to_json (line 4233) | void to_json(BasicJsonType& j, FloatType val) noexcept
      function to_json (line 4240) | void to_json(BasicJsonType& j, CompatibleNumberUnsignedType val) noe...
      function to_json (line 4247) | void to_json(BasicJsonType& j, CompatibleNumberIntegerType val) noex...
      function to_json (line 4254) | void to_json(BasicJsonType& j, EnumType e) noexcept
      function to_json (line 4261) | void to_json(BasicJsonType& j, const std::vector<bool>& e)
      function to_json (line 4274) | void to_json(BasicJsonType& j, const CompatibleArrayType& arr)
      function to_json (line 4280) | void to_json(BasicJsonType& j, const typename BasicJsonType::binary_...
      function to_json (line 4287) | void to_json(BasicJsonType& j, const std::valarray<T>& arr)
      function to_json (line 4293) | void to_json(BasicJsonType& j, typename BasicJsonType::array_t&& arr)
      function to_json (line 4300) | void to_json(BasicJsonType& j, const CompatibleObjectType& obj)
      function to_json (line 4306) | void to_json(BasicJsonType& j, typename BasicJsonType::object_t&& obj)
      function to_json (line 4316) | void to_json(BasicJsonType& j, const T(&arr)[N])
      function to_json (line 4322) | void to_json(BasicJsonType& j, const std::pair<T1, T2>& p)
      function to_json (line 4330) | void to_json(BasicJsonType& j, const T& b)
      function to_json_tuple_impl (line 4336) | void to_json_tuple_impl(BasicJsonType& j, const Tuple& t, index_sequ...
      function to_json (line 4342) | void to_json(BasicJsonType& j, const T& t)
      type to_json_fn (line 4347) | struct to_json_fn
      function combine (line 4595) | inline std::size_t combine(std::size_t seed, std::size_t h) noexcept
      function hash (line 4613) | std::size_t hash(const BasicJsonType& j)
      type input_format_t (line 4744) | enum class input_format_t { json, cbor, msgpack, ubjson, bson }
      class file_input_adapter (line 4754) | class file_input_adapter
        method file_input_adapter (line 4760) | explicit file_input_adapter(std::FILE* f) noexcept
        method file_input_adapter (line 4765) | file_input_adapter(const file_input_adapter&) = delete;
        method file_input_adapter (line 4766) | file_input_adapter(file_input_adapter&&) = default;
        method file_input_adapter (line 4767) | file_input_adapter& operator=(const file_input_adapter&) = delete;
        method file_input_adapter (line 4768) | file_input_adapter& operator=(file_input_adapter&&) = delete;
        method get_character (line 4770) | std::char_traits<char>::int_type get_character() noexcept
      class input_stream_adapter (line 4790) | class input_stream_adapter
        method input_stream_adapter (line 4805) | explicit input_stream_adapter(std::istream& i)
        method input_stream_adapter (line 4810) | input_stream_adapter(const input_stream_adapter&) = delete;
        method input_stream_adapter (line 4811) | input_stream_adapter& operator=(input_stream_adapter&) = delete;
        method input_stream_adapter (line 4812) | input_stream_adapter& operator=(input_stream_adapter&& rhs) = delete;
        method input_stream_adapter (line 4814) | input_stream_adapter(input_stream_adapter&& rhs) noexcept : is(rhs...
        method get_character (line 4823) | std::char_traits<char>::int_type get_character()
      class iterator_input_adapter (line 4843) | class iterator_input_adapter
        method iterator_input_adapter (line 4848) | iterator_input_adapter(IteratorType first, IteratorType last)
        method get_character (line 4851) | typename std::char_traits<char_type>::int_type get_character()
        method empty (line 4872) | bool empty() const
      type wide_string_input_helper (line 4881) | struct wide_string_input_helper
      type wide_string_input_helper<BaseInputAdapter, 4> (line 4884) | struct wide_string_input_helper<BaseInputAdapter, 4>
        method fill_buffer (line 4887) | static void fill_buffer(BaseInputAdapter& input,
      type wide_string_input_helper<BaseInputAdapter, 2> (line 4942) | struct wide_string_input_helper<BaseInputAdapter, 2>
        method fill_buffer (line 4945) | static void fill_buffer(BaseInputAdapter& input,
      class wide_string_input_adapter (line 5005) | class wide_string_input_adapter
        method wide_string_input_adapter (line 5010) | wide_string_input_adapter(BaseInputAdapter base)
        method get_character (line 5013) | typename std::char_traits<char>::int_type get_character() noexcept
        method fill_buffer (line 5034) | void fill_buffer()
      type iterator_input_adapter_factory (line 5050) | struct iterator_input_adapter_factory
        method adapter_type (line 5056) | static adapter_type create(IteratorType first, IteratorType last)
      type is_iterator_of_multibyte (line 5063) | struct is_iterator_of_multibyte
      type iterator_input_adapter_factory<IteratorType, enable_if_t<is_iterator_of_multibyte<IteratorType>::value>> (line 5073) | struct iterator_input_adapter_factory<IteratorType, enable_if_t<is_i...
        method adapter_type (line 5080) | static adapter_type create(IteratorType first, IteratorType last)
      function input_adapter (line 5088) | typename iterator_input_adapter_factory<IteratorType>::adapter_type ...
      function input_adapter (line 5096) | auto input_adapter(const ContainerType& container) -> decltype(input...
      function file_input_adapter (line 5106) | inline file_input_adapter input_adapter(std::FILE* file)
        method file_input_adapter (line 4760) | explicit file_input_adapter(std::FILE* f) noexcept
        method file_input_adapter (line 4765) | file_input_adapter(const file_input_adapter&) = delete;
        method file_input_adapter (line 4766) | file_input_adapter(file_input_adapter&&) = default;
        method file_input_adapter (line 4767) | file_input_adapter& operator=(const file_input_adapter&) = delete;
        method file_input_adapter (line 4768) | file_input_adapter& operator=(file_input_adapter&&) = delete;
        method get_character (line 4770) | std::char_traits<char>::int_type get_character() noexcept
      function input_stream_adapter (line 5111) | inline input_stream_adapter input_adapter(std::istream& stream)
        method input_stream_adapter (line 4805) | explicit input_stream_adapter(std::istream& i)
        method input_stream_adapter (line 4810) | input_stream_adapter(const input_stream_adapter&) = delete;
        method input_stream_adapter (line 4811) | input_stream_adapter& operator=(input_stream_adapter&) = delete;
        method input_stream_adapter (line 4812) | input_stream_adapter& operator=(input_stream_adapter&& rhs) = delete;
        method input_stream_adapter (line 4814) | input_stream_adapter(input_stream_adapter&& rhs) noexcept : is(rhs...
        method get_character (line 4823) | std::char_traits<char>::int_type get_character()
      function input_stream_adapter (line 5116) | inline input_stream_adapter input_adapter(std::istream&& stream)
        method input_stream_adapter (line 4805) | explicit input_stream_adapter(std::istream& i)
        method input_stream_adapter (line 4810) | input_stream_adapter(const input_stream_adapter&) = delete;
        method input_stream_adapter (line 4811) | input_stream_adapter& operator=(input_stream_adapter&) = delete;
        method input_stream_adapter (line 4812) | input_stream_adapter& operator=(input_stream_adapter&& rhs) = delete;
        method input_stream_adapter (line 4814) | input_stream_adapter(input_stream_adapter&& rhs) noexcept : is(rhs...
        method get_character (line 4823) | std::char_traits<char>::int_type get_character()
      function contiguous_bytes_input_adapter (line 5131) | contiguous_bytes_input_adapter input_adapter(CharT b)
      function input_adapter (line 5139) | auto input_adapter(T (&array)[N]) -> decltype(input_adapter(array, a...
      class span_input_adapter (line 5147) | class span_input_adapter
        method span_input_adapter (line 5156) | span_input_adapter(CharT b, std::size_t l)
        method span_input_adapter (line 5163) | span_input_adapter(IteratorType first, IteratorType last)
        method contiguous_bytes_input_adapter (line 5166) | contiguous_bytes_input_adapter&& get()
      class json_sax_dom_parser (line 5328) | class json_sax_dom_parser
        method json_sax_dom_parser (line 5342) | explicit json_sax_dom_parser(BasicJsonType& r, const bool allow_ex...
        method json_sax_dom_parser (line 5347) | json_sax_dom_parser(const json_sax_dom_parser&) = delete;
        method json_sax_dom_parser (line 5348) | json_sax_dom_parser(json_sax_dom_parser&&) = default;
        method json_sax_dom_parser (line 5349) | json_sax_dom_parser& operator=(const json_sax_dom_parser&) = delete;
        method json_sax_dom_parser (line 5350) | json_sax_dom_parser& operator=(json_sax_dom_parser&&) = default;
        method null (line 5353) | bool null()
        method boolean (line 5359) | bool boolean(bool val)
        method number_integer (line 5365) | bool number_integer(number_integer_t val)
        method number_unsigned (line 5371) | bool number_unsigned(number_unsigned_t val)
        method number_float (line 5377) | bool number_float(number_float_t val, const string_t& /*unused*/)
        method string (line 5383) | bool string(string_t& val)
        method binary (line 5389) | bool binary(binary_t& val)
        method start_object (line 5395) | bool start_object(std::size_t len)
        method key (line 5408) | bool key(string_t& val)
        method end_object (line 5415) | bool end_object()
        method start_array (line 5421) | bool start_array(std::size_t len)
        method end_array (line 5434) | bool end_array()
        method parse_error (line 5441) | bool parse_error(std::size_t /*unused*/, const std::string& /*unus...
        method is_errored (line 5453) | constexpr bool is_errored() const
        method JSON_HEDLEY_RETURNS_NON_NULL (line 5466) | JSON_HEDLEY_RETURNS_NON_NULL
      class json_sax_dom_callback_parser (line 5502) | class json_sax_dom_callback_parser
        method json_sax_dom_callback_parser (line 5513) | json_sax_dom_callback_parser(BasicJsonType& r,
        method json_sax_dom_callback_parser (line 5522) | json_sax_dom_callback_parser(const json_sax_dom_callback_parser&) ...
        method json_sax_dom_callback_parser (line 5523) | json_sax_dom_callback_parser(json_sax_dom_callback_parser&&) = def...
        method json_sax_dom_callback_parser (line 5524) | json_sax_dom_callback_parser& operator=(const json_sax_dom_callbac...
        method json_sax_dom_callback_parser (line 5525) | json_sax_dom_callback_parser& operator=(json_sax_dom_callback_pars...
        method null (line 5528) | bool null()
        method boolean (line 5534) | bool boolean(bool val)
        method number_integer (line 5540) | bool number_integer(number_integer_t val)
        method number_unsigned (line 5546) | bool number_unsigned(number_unsigned_t val)
        method number_float (line 5552) | bool number_float(number_float_t val, const string_t& /*unused*/)
        method string (line 5558) | bool string(string_t& val)
        method binary (line 5564) | bool binary(binary_t& val)
        method start_object (line 5570) | bool start_object(std::size_t len)
        method key (line 5588) | bool key(string_t& val)
        method end_object (line 5605) | bool end_object()
        method start_array (line 5634) | bool start_array(std::size_t len)
        method end_array (line 5651) | bool end_array()
        method parse_error (line 5680) | bool parse_error(std::size_t /*unused*/, const std::string& /*unus...
        method is_errored (line 5692) | constexpr bool is_errored() const
        method handle_value (line 5714) | std::pair<bool, BasicJsonType*> handle_value(Value&& v, const bool...
      class json_sax_acceptor (line 5798) | class json_sax_acceptor
        method null (line 5807) | bool null()
        method boolean (line 5812) | bool boolean(bool /*unused*/)
        method number_integer (line 5817) | bool number_integer(number_integer_t /*unused*/)
        method number_unsigned (line 5822) | bool number_unsigned(number_unsigned_t /*unused*/)
        method number_float (line 5827) | bool number_float(number_float_t /*unused*/, const string_t& /*unu...
        method string (line 5832) | bool string(string_t& /*unused*/)
        method binary (line 5837) | bool binary(binary_t& /*unused*/)
        method start_object (line 5842) | bool start_object(std::size_t /*unused*/ = std::size_t(-1))
        method key (line 5847) | bool key(string_t& /*unused*/)
        method end_object (line 5852) | bool end_object()
        method start_array (line 5857) | bool start_array(std::size_t /*unused*/ = std::size_t(-1))
        method end_array (line 5862) | bool end_array()
        method parse_error (line 5867) | bool parse_error(std::size_t /*unused*/, const std::string& /*unus...
      class lexer_base (line 5905) | class lexer_base
        type token_type (line 5909) | enum class token_type
      class lexer (line 5982) | class lexer : public lexer_base<BasicJsonType>
        method lexer (line 5994) | explicit lexer(InputAdapterType&& adapter, bool ignore_comments_ =...
        method lexer (line 6001) | lexer(const lexer&) = delete;
        method lexer (line 6002) | lexer(lexer&&) = default;
        method lexer (line 6003) | lexer& operator=(lexer&) = delete;
        method lexer (line 6004) | lexer& operator=(lexer&&) = default;
        method JSON_HEDLEY_PURE (line 6013) | JSON_HEDLEY_PURE
        method get_codepoint (line 6040) | int get_codepoint()
        method next_byte_in_range (line 6088) | bool next_byte_in_range(std::initializer_list<char_int_type> ranges)
        method token_type (line 6125) | token_type scan_string()
        method scan_comment (line 6715) | bool scan_comment()
        method strtof (line 6783) | static void strtof(float& f, const char* str, char** endptr) noexcept
        method strtof (line 6789) | static void strtof(double& f, const char* str, char** endptr) noex...
        method strtof (line 6795) | static void strtof(long double& f, const char* str, char** endptr)...
        method token_type (line 6840) | token_type scan_number()  // lgtm [cpp/use-of-goto]
      type is_sax (line 7573) | struct is_sax
      type is_sax_static_asserts (line 7604) | struct is_sax_static_asserts
      type cbor_tag_handler_t (line 7668) | enum class cbor_tag_handler_t
      function little_endianess (line 7681) | static inline bool little_endianess(int num = 1) noexcept
      class binary_reader (line 7695) | class binary_reader
        method binary_reader (line 7712) | explicit binary_reader(InputAdapterType&& adapter) : ia(std::move(...
        method binary_reader (line 7718) | binary_reader(const binary_reader&) = delete;
        method binary_reader (line 7719) | binary_reader(binary_reader&&) = default;
        method binary_reader (line 7720) | binary_reader& operator=(const binary_reader&) = delete;
        method binary_reader (line 7721) | binary_reader& operator=(binary_reader&&) = default;
        method JSON_HEDLEY_NON_NULL (line 7732) | JSON_HEDLEY_NON_NULL(3)
        method parse_bson_internal (line 7794) | bool parse_bson_internal()
        method get_bson_cstr (line 7819) | bool get_bson_cstr(string_t& result)
        method get_bson_string (line 7849) | bool get_bson_string(const NumberType len, string_t& result)
        method get_bson_binary (line 7870) | bool get_bson_binary(const NumberType len, binary_t& result)
        method parse_bson_element_internal (line 7896) | bool parse_bson_element_internal(const char_int_type element_type,
        method parse_bson_element_list (line 7974) | bool parse_bson_element_list(const bool is_array)
        method parse_bson_array (line 8012) | bool parse_bson_array()
        method parse_cbor_internal (line 8042) | bool parse_cbor_internal(const bool get_char,
        method get_cbor_string (line 8487) | bool get_cbor_string(string_t& result)
        method get_cbor_binary (line 8582) | bool get_cbor_binary(binary_t& result)
        method get_cbor_array (line 8676) | bool get_cbor_array(const std::size_t len,
        method get_cbor_object (line 8714) | bool get_cbor_object(const std::size_t len,
        method parse_msgpack_internal (line 8767) | bool parse_msgpack_internal()
        method get_msgpack_string (line 9147) | bool get_msgpack_string(string_t& result)
        method get_msgpack_binary (line 9229) | bool get_msgpack_binary(binary_t& result)
        method get_msgpack_array (line 9340) | bool get_msgpack_array(const std::size_t len)
        method get_msgpack_object (line 9362) | bool get_msgpack_object(const std::size_t len)
        method parse_ubjson_internal (line 9399) | bool parse_ubjson_internal(const bool get_char = true)
        method get_ubjson_string (line 9418) | bool get_ubjson_string(string_t& result, const bool get_char = true)
        method get_ubjson_size_value (line 9472) | bool get_ubjson_size_value(std::size_t& result)
        method get_ubjson_size_type (line 9549) | bool get_ubjson_size_type(std::pair<std::size_t, char_int_type>& r...
        method get_ubjson_value (line 9590) | bool get_ubjson_value(const char_int_type prefix)
        method get_ubjson_array (line 9691) | bool get_ubjson_array()
        method get_ubjson_object (line 9753) | bool get_ubjson_object()
        method get_ubjson_high_precision_number (line 9828) | bool get_ubjson_high_precision_number()
        method char_int_type (line 9890) | char_int_type get()
        method char_int_type (line 9899) | char_int_type get_ignore_noop()
        method get_number (line 9924) | bool get_number(const input_format_t format, NumberType& result)
        method get_string (line 9967) | bool get_string(const input_format_t format,
        method get_binary (line 10000) | bool get_binary(const input_format_t format,
        method JSON_HEDLEY_NON_NULL (line 10023) | JSON_HEDLEY_NON_NULL(3)
        method get_token_string (line 10037) | std::string get_token_string() const
        method exception_message (line 10050) | std::string exception_message(const input_format_t format,
      type parse_event_t (line 10137) | enum class parse_event_t : uint8_t
      class parser (line 10163) | class parser
        method parser (line 10174) | explicit parser(InputAdapterType&& adapter,
        method parse (line 10196) | void parse(const bool strict, BasicJsonType& result)
        method accept (line 10257) | bool accept(const bool strict = true)
        method sax_parse (line 10265) | bool sax_parse(SAX* sax, const bool strict = true)
        method sax_parse_internal (line 10285) | bool sax_parse_internal(SAX* sax)
        method token_type (line 10567) | token_type get_token()
        method exception_message (line 10572) | std::string exception_message(const token_type expected, const std...
      class primitive_iterator_t (line 10636) | class primitive_iterator_t
        method difference_type (line 10647) | constexpr difference_type get_value() const noexcept
        method set_begin (line 10653) | void set_begin() noexcept
        method set_end (line 10659) | void set_end() noexcept
        method is_begin (line 10665) | constexpr bool is_begin() const noexcept
        method is_end (line 10671) | constexpr bool is_end() const noexcept
        method primitive_iterator_t (line 10686) | primitive_iterator_t operator+(difference_type n) noexcept
        method difference_type (line 10693) | constexpr difference_type operator-(primitive_iterator_t lhs, prim...
        method primitive_iterator_t (line 10698) | primitive_iterator_t& operator++() noexcept
        method primitive_iterator_t (line 10704) | primitive_iterator_t const operator++(int) noexcept
        method primitive_iterator_t (line 10711) | primitive_iterator_t& operator--() noexcept
        method primitive_iterator_t (line 10717) | primitive_iterator_t const operator--(int) noexcept
        method primitive_iterator_t (line 10724) | primitive_iterator_t& operator+=(difference_type n) noexcept
        method primitive_iterator_t (line 10730) | primitive_iterator_t& operator-=(difference_type n) noexcept
      type internal_iterator (line 10750) | struct internal_iterator
      class iteration_proxy (line 10788) | class iteration_proxy
        method iteration_proxy (line 3937) | explicit iteration_proxy(typename IteratorType::reference cont) no...
        method begin (line 3941) | iteration_proxy_value<IteratorType> begin() noexcept
        method end (line 3947) | iteration_proxy_value<IteratorType> end() noexcept
      class iteration_proxy_value (line 10789) | class iteration_proxy_value
        method iteration_proxy_value (line 3864) | explicit iteration_proxy_value(IteratorType it) noexcept : anchor(...
        method iteration_proxy_value (line 3867) | iteration_proxy_value& operator*()
        method iteration_proxy_value (line 3873) | iteration_proxy_value& operator++()
        method string_type (line 3894) | const string_type& key() const
        method value (line 3922) | typename IteratorType::reference value() const
      class iter_impl (line 10808) | class iter_impl
        method iter_impl (line 10846) | iter_impl() = default;
        method iter_impl (line 10854) | explicit iter_impl(pointer object) noexcept : m_object(object)
        method iter_impl (line 10896) | iter_impl(const iter_impl<const BasicJsonType>& other) noexcept
        method iter_impl (line 10906) | iter_impl& operator=(const iter_impl<const BasicJsonType>& other) ...
        method iter_impl (line 10918) | iter_impl(const iter_impl<typename std::remove_const<BasicJsonType...
        method iter_impl (line 10928) | iter_impl& operator=(const iter_impl<typename std::remove_const<Ba...
        method set_begin (line 10940) | void set_begin() noexcept
        method set_end (line 10977) | void set_end() noexcept
        method reference (line 11008) | reference operator*() const
        method pointer (line 11045) | pointer operator->() const
        method iter_impl (line 11079) | iter_impl const operator++(int)
        method iter_impl (line 11090) | iter_impl& operator++()
        method iter_impl (line 11122) | iter_impl const operator--(int)
        method iter_impl (line 11133) | iter_impl& operator--()
        method iter_impl (line 11255) | iter_impl& operator+=(difference_type i)
        method iter_impl (line 11284) | iter_impl& operator-=(difference_type i)
        method iter_impl (line 11293) | iter_impl operator+(difference_type i) const
        method iter_impl (line 11304) | iter_impl operator+(difference_type i, const iter_impl& it)
        method iter_impl (line 11315) | iter_impl operator-(difference_type i) const
        method difference_type (line 11326) | difference_type operator-(const iter_impl& other) const
        method reference (line 11347) | reference operator[](difference_type n) const
        method reference (line 11394) | reference value() const
      class json_reverse_iterator (line 11444) | class json_reverse_iterator : public std::reverse_iterator<Base>
        method json_reverse_iterator (line 11454) | explicit json_reverse_iterator(const typename base_iterator::itera...
        method json_reverse_iterator (line 11458) | explicit json_reverse_iterator(const base_iterator& it) noexcept :...
        method json_reverse_iterator (line 11461) | json_reverse_iterator const operator++(int)
        method json_reverse_iterator (line 11467) | json_reverse_iterator& operator++()
        method json_reverse_iterator (line 11473) | json_reverse_iterator const operator--(int)
        method json_reverse_iterator (line 11479) | json_reverse_iterator& operator--()
        method json_reverse_iterator (line 11485) | json_reverse_iterator& operator+=(difference_type i)
        method json_reverse_iterator (line 11491) | json_reverse_iterator operator+(difference_type i) const
        method json_reverse_iterator (line 11497) | json_reverse_iterator operator-(difference_type i) const
        method difference_type (line 11503) | difference_type operator-(const json_reverse_iterator& other) const
        method reference (line 11509) | reference operator[](difference_type n) const
        method key (line 11515) | auto key() const -> decltype(std::declval<Base>().key())
        method reference (line 11522) | reference value() const
      class json_ref (line 12527) | class json_ref
        method json_ref (line 12532) | json_ref(value_type&& value)
        method json_ref (line 12538) | json_ref(const value_type& value)
        method json_ref (line 12543) | json_ref(std::initializer_list<json_ref> init)
        method json_ref (line 12552) | json_ref(Args && ... args)
        method json_ref (line 12559) | json_ref(json_ref&&) = default;
        method json_ref (line 12560) | json_ref(const json_ref&) = delete;
        method json_ref (line 12561) | json_ref& operator=(const json_ref&) = delete;
        method json_ref (line 12562) | json_ref& operator=(json_ref&&) = delete;
        method value_type (line 12565) | value_type moved_or_copied() const
        method value_type (line 12574) | value_type const& operator*() const
        method value_type (line 12579) | value_type const* operator->() const
      type output_adapter_protocol (line 12632) | struct output_adapter_protocol
      class output_vector_adapter (line 12645) | class output_vector_adapter : public output_adapter_protocol<CharType>
        method output_vector_adapter (line 12648) | explicit output_vector_adapter(std::vector<CharType>& vec) noexcept
        method write_character (line 12652) | void write_character(CharType c) override
        method JSON_HEDLEY_NON_NULL (line 12657) | JSON_HEDLEY_NON_NULL(2)
      class output_stream_adapter (line 12669) | class output_stream_adapter : public output_adapter_protocol<CharType>
        method output_stream_adapter (line 12672) | explicit output_stream_adapter(std::basic_ostream<CharType>& s) no...
        method write_character (line 12676) | void write_character(CharType c) override
        method JSON_HEDLEY_NON_NULL (line 12681) | JSON_HEDLEY_NON_NULL(2)
      class output_string_adapter (line 12693) | class output_string_adapter : public output_adapter_protocol<CharType>
        method output_string_adapter (line 12696) | explicit output_string_adapter(StringType& s) noexcept
        method write_character (line 12700) | void write_character(CharType c) override
        method JSON_HEDLEY_NON_NULL (line 12705) | JSON_HEDLEY_NON_NULL(2)
      class output_adapter (line 12716) | class output_adapter
        method output_adapter (line 12719) | output_adapter(std::vector<CharType>& vec)
        method output_adapter (line 12722) | output_adapter(std::basic_ostream<CharType>& s)
        method output_adapter (line 12725) | output_adapter(StringType& s)
      class binary_writer (line 12752) | class binary_writer
        method binary_writer (line 12764) | explicit binary_writer(output_adapter_t<CharType> adapter) : oa(ad...
        method write_bson (line 12773) | void write_bson(const BasicJsonType& j)
        method write_cbor (line 12793) | void write_cbor(const BasicJsonType& j)
        method write_msgpack (line 13098) | void write_msgpack(const BasicJsonType& j)
        method write_ubjson (line 13422) | void write_ubjson(const BasicJsonType& j, const bool use_count,
        method calc_bson_entry_header_size (line 13629) | static std::size_t calc_bson_entry_header_size(const string_t& name)
        method write_bson_entry_header (line 13644) | void write_bson_entry_header(const string_t& name,
        method write_bson_boolean (line 13656) | void write_bson_boolean(const string_t& name,
        method write_bson_double (line 13666) | void write_bson_double(const string_t& name,
        method calc_bson_string_size (line 13676) | static std::size_t calc_bson_string_size(const string_t& value)
        method write_bson_string (line 13684) | void write_bson_string(const string_t& name,
        method write_bson_null (line 13698) | void write_bson_null(const string_t& name)
        method calc_bson_integer_size (line 13706) | static std::size_t calc_bson_integer_size(const std::int64_t value)
        method write_bson_integer (line 13716) | void write_bson_integer(const string_t& name,
        method calc_bson_unsigned_size (line 13734) | static constexpr std::size_t calc_bson_unsigned_size(const std::ui...
        method write_bson_unsigned (line 13744) | void write_bson_unsigned(const string_t& name,
        method write_bson_object_entry (line 13766) | void write_bson_object_entry(const string_t& name,
        method calc_bson_array_size (line 13776) | static std::size_t calc_bson_array_size(const typename BasicJsonTy...
        method calc_bson_binary_size (line 13791) | static std::size_t calc_bson_binary_size(const typename BasicJsonT...
        method write_bson_array (line 13799) | void write_bson_array(const string_t& name,
        method write_bson_binary (line 13818) | void write_bson_binary(const string_t& name,
        method calc_bson_element_size (line 13833) | static std::size_t calc_bson_element_size(const string_t& name,
        method write_bson_element (line 13881) | void write_bson_element(const string_t& name,
        method calc_bson_object_size (line 13927) | static std::size_t calc_bson_object_size(const typename BasicJsonT...
        method write_bson_object (line 13942) | void write_bson_object(const typename BasicJsonType::object_t& value)
        method CharType (line 13958) | static constexpr CharType get_cbor_float_prefix(float /*unused*/)
        method CharType (line 13963) | static constexpr CharType get_cbor_float_prefix(double /*unused*/)
        method CharType (line 13972) | static constexpr CharType get_msgpack_float_prefix(float /*unused*/)
        method CharType (line 13977) | static constexpr CharType get_msgpack_float_prefix(double /*unused*/)
        method write_number_with_ubjson_prefix (line 13989) | void write_number_with_ubjson_prefix(const NumberType n,
        method write_number_with_ubjson_prefix (line 14002) | void write_number_with_ubjson_prefix(const NumberType n,
        method write_number_with_ubjson_prefix (line 14065) | void write_number_with_ubjson_prefix(const NumberType n,
        method CharType (line 14129) | CharType ubjson_prefix(const BasicJsonType& j) const noexcept
        method CharType (line 14209) | static constexpr CharType get_ubjson_float_prefix(float /*unused*/)
        method CharType (line 14214) | static constexpr CharType get_ubjson_float_prefix(double /*unused*/)
        method write_number (line 14235) | void write_number(const NumberType n)
        method write_compact_float (line 14251) | void write_compact_float(const number_float_t n, detail::input_for...
        method CharType (line 14278) | static constexpr CharType to_char_type(std::uint8_t x) noexcept
        method CharType (line 14285) | static CharType to_char_type(std::uint8_t x) noexcept
        method CharType (line 14296) | static constexpr CharType to_char_type(std::uint8_t x) noexcept
        method CharType (line 14307) | static constexpr CharType to_char_type(InputCharType x) noexcept
      type dtoa_impl (line 14376) | namespace dtoa_impl
        function Target (line 14380) | Target reinterpret_bits(const Source source)
        type diyfp (line 14389) | struct diyfp // f * 2^e
          method diyfp (line 14396) | constexpr diyfp(std::uint64_t f_, int e_) noexcept : f(f_), e(e_...
          method diyfp (line 14402) | static diyfp sub(const diyfp& x, const diyfp& y) noexcept
          method diyfp (line 14414) | static diyfp mul(const diyfp& x, const diyfp& y) noexcept
          method diyfp (line 14479) | static diyfp normalize(diyfp x) noexcept
          method diyfp (line 14496) | static diyfp normalize_to(const diyfp& x, const int target_expon...
        type boundaries (line 14507) | struct boundaries
        function boundaries (line 14521) | boundaries compute_boundaries(FloatType value)
        type cached_power (line 14646) | struct cached_power // c = f * 2^e ~= 10^k
        function cached_power (line 14660) | inline cached_power get_cached_power_for_binary_exponent(int e)
        function find_largest_pow10 (line 14824) | inline int find_largest_pow10(const std::uint32_t n, std::uint32_t...
        function grisu2_round (line 14880) | inline void grisu2_round(char* buf, int len, std::uint64_t dist, s...
        function grisu2_digit_gen (line 14921) | inline void grisu2_digit_gen(char* buffer, int& length, int& decim...
        function grisu2 (line 15162) | inline void grisu2(char* buf, int& len, int& decimal_exponent,
        function JSON_HEDLEY_NON_NULL (line 15221) | JSON_HEDLEY_NON_NULL(1)
      type error_handler_t (line 15469) | enum class error_handler_t
      class serializer (line 15477) | class serializer
        method serializer (line 15493) | serializer(output_adapter_t<char> s, const char ichar,
        method serializer (line 15505) | serializer(const serializer&) = delete;
        method serializer (line 15506) | serializer& operator=(const serializer&) = delete;
        method serializer (line 15507) | serializer(serializer&&) = delete;
        method serializer (line 15508) | serializer& operator=(serializer&&) = delete;
        method dump (line 15533) | void dump(const BasicJsonType& val,
        method dump_escaped (line 15817) | void dump_escaped(const string_t& s, const bool ensure_ascii)
        method count_digits (line 16073) | inline unsigned int count_digits(number_unsigned_t x) noexcept
        method dump_integer (line 16113) | void dump_integer(NumberType x)
        method dump_float (line 16199) | void dump_float(number_float_t x)
        method dump_float (line 16220) | void dump_float(number_float_t x, std::true_type /*is_ieee_single_...
        method dump_float (line 16228) | void dump_float(number_float_t x, std::false_type /*is_ieee_single...
        method decode (line 16298) | static std::uint8_t decode(std::uint8_t& state, std::uint32_t& cod...
        method number_unsigned_t (line 16337) | number_unsigned_t remove_sign(number_unsigned_t x)
        method number_unsigned_t (line 16352) | inline number_unsigned_t remove_sign(number_integer_t x) noexcept
    type detail (line 2675) | namespace detail
      type position_t (line 86) | struct position_t
      class exception (line 2352) | class exception : public std::exception
        method JSON_HEDLEY_RETURNS_NON_NULL (line 2356) | JSON_HEDLEY_RETURNS_NON_NULL
        method JSON_HEDLEY_NON_NULL (line 2366) | JSON_HEDLEY_NON_NULL(3)
        method name (line 2369) | static std::string name(const std::string& ename, int id_)
      class parse_error (line 2424) | class parse_error : public exception
        method parse_error (line 2436) | static parse_error create(int id_, const position_t& pos, const st...
        method parse_error (line 2443) | static parse_error create(int id_, std::size_t byte_, const std::s...
        method parse_error (line 2463) | parse_error(int id_, std::size_t byte_, const char* what_arg)
        method position_string (line 2466) | static std::string position_string(const position_t& pos)
      class invalid_iterator (line 2510) | class invalid_iterator : public exception
        method invalid_iterator (line 2513) | static invalid_iterator create(int id_, const std::string& what_arg)
        method JSON_HEDLEY_NON_NULL (line 2520) | JSON_HEDLEY_NON_NULL(3)
      class type_error (line 2564) | class type_error : public exception
        method type_error (line 2567) | static type_error create(int id_, const std::string& what_arg)
        method JSON_HEDLEY_NON_NULL (line 2574) | JSON_HEDLEY_NON_NULL(3)
      class out_of_range (line 2611) | class out_of_range : public exception
        method out_of_range (line 2614) | static out_of_range create(int id_, const std::string& what_arg)
        method JSON_HEDLEY_NON_NULL (line 2621) | JSON_HEDLEY_NON_NULL(3)
      class other_error (line 2649) | class other_error : public exception
        method other_error (line 2652) | static other_error create(int id_, const std::string& what_arg)
        method JSON_HEDLEY_NON_NULL (line 2659) | JSON_HEDLEY_NON_NULL(3)
      type index_sequence (line 2687) | struct index_sequence
        method size (line 2691) | static constexpr std::size_t size() noexcept
      type merge_and_renumber (line 2698) | struct merge_and_renumber
      type make_index_sequence (line 2705) | struct make_index_sequence
      type make_index_sequence<0> (line 2709) | struct make_index_sequence<0> : index_sequence<> {}
      type make_index_sequence<1> (line 2710) | struct make_index_sequence<1> : index_sequence<0> {}
      type priority_tag (line 2716) | struct priority_tag : priority_tag < N - 1 > {}
      type priority_tag<0> (line 2717) | struct priority_tag<0> {}
      type static_const (line 2721) | struct static_const
      type make_void (line 2750) | struct make_void
      type iterator_types (line 2766) | struct iterator_types {}
      type iterator_types <
    It,
    void_t<typename It::difference_type, typename It::value_type, typename It::pointer,
    typename It::reference, typename It::iterator_category >> (line 2769) | struct iterator_types <
      type iterator_traits (line 2784) | struct iterator_traits
      type iterator_traits < T, enable_if_t < !std::is_pointer<T>::value >> (line 2789) | struct iterator_traits < T, enable_if_t < !std::is_pointer<T>::value >>
      type iterator_traits<T*, enable_if_t<std::is_object<T>::value>> (line 2795) | struct iterator_traits<T*, enable_if_t<std::is_object<T>::value>>
      type nonesuch (line 2823) | struct nonesuch
        method nonesuch (line 2825) | nonesuch() = delete;
        method nonesuch (line 2827) | nonesuch(nonesuch const&) = delete;
        method nonesuch (line 2828) | nonesuch(nonesuch const&&) = delete;
      type detector (line 2837) | struct detector
      type is_basic_json (line 2977) | struct is_basic_json : std::false_type {}
      class json_ref (line 2987) | class json_ref
        method json_ref (line 12532) | json_ref(value_type&& value)
        method json_ref (line 12538) | json_ref(const value_type& value)
        method json_ref (line 12543) | json_ref(std::initializer_list<json_ref> init)
        method json_ref (line 12552) | json_ref(Args && ... args)
        method json_ref (line 12559) | json_ref(json_ref&&) = default;
        method json_ref (line 12560) | json_ref(const json_ref&) = delete;
        method json_ref (line 12561) | json_ref& operator=(const json_ref&) = delete;
        method json_ref (line 12562) | json_ref& operator=(json_ref&&) = delete;
        method value_type (line 12565) | value_type moved_or_copied() const
        method value_type (line 12574) | value_type const& operator*() const
        method value_type (line 12579) | value_type const* operator->() const
      type is_json_ref (line 2990) | struct is_json_ref : std::false_type {}
      type is_json_ref<json_ref<T>> (line 2993) | struct is_json_ref<json_ref<T>> : std::true_type {}
      type has_from_json (line 3034) | struct has_from_json : std::false_type {}
      type is_getable (line 3041) | struct is_getable
      type has_from_json < BasicJsonType, T,
           enable_if_t < !is_basic_json<T>::value >> (line 3047) | struct has_from_json < BasicJsonType, T,
      type has_non_default_from_json (line 3060) | struct has_non_default_from_json : std::false_type {}
      type has_non_default_from_json < BasicJsonType, T, enable_if_t < !is_basic_json<T>::value >> (line 3063) | struct has_non_default_from_json < BasicJsonType, T, enable_if_t < !...
      type has_to_json (line 3075) | struct has_to_json : std::false_type {}
      type has_to_json < BasicJsonType, T, enable_if_t < !is_basic_json<T>::value >> (line 3078) | struct has_to_json < BasicJsonType, T, enable_if_t < !is_basic_json<...
      type is_iterator_traits (line 3093) | struct is_iterator_traits : std::false_type {}
      type is_iterator_traits<iterator_traits<T>> (line 3096) | struct is_iterator_traits<iterator_traits<T>>
      type is_complete_type (line 3113) | struct is_complete_type : std::false_type {}
      type is_complete_type<T, decltype(void(sizeof(T)))> (line 3116) | struct is_complete_type<T, decltype(void(sizeof(T)))> : std::true_ty...
      type is_compatible_object_type_impl (line 3120) | struct is_compatible_object_type_impl : std::false_type {}
      type is_compatible_object_type_impl <
    BasicJsonType, CompatibleObjectType,
    enable_if_t < is_detected<mapped_type_t, CompatibleObjectType>::value&&
    is_detected<key_type_t, CompatibleObjectType>::value >> (line 3123) | struct is_compatible_object_type_impl <
      type is_compatible_object_type (line 3140) | struct is_compatible_object_type
      type is_constructible_object_type_impl (line 3145) | struct is_constructible_object_type_impl : std::false_type {}
      type is_constructible_object_type_impl <
    BasicJsonType, ConstructibleObjectType,
    enable_if_t < is_detected<mapped_type_t, ConstructibleObjectType>::value&&
    is_detected<key_type_t, ConstructibleObjectType>::value >> (line 3148) | struct is_constructible_object_type_impl <
      type is_constructible_object_type (line 3172) | struct is_constructible_object_type
      type is_compatible_string_type_impl (line 3178) | struct is_compatible_string_type_impl : std::false_type {}
      type is_compatible_string_type_impl <
    BasicJsonType, CompatibleStringType,
    enable_if_t<is_detected_exact<typename BasicJsonType::string_t::value_type,
    value_type_t, CompatibleStringType>::value >> (line 3181) | struct is_compatible_string_type_impl <
      type is_compatible_string_type (line 3191) | struct is_compatible_string_type
      type is_constructible_string_type_impl (line 3196) | struct is_constructible_string_type_impl : std::false_type {}
      type is_constructible_string_type_impl <
    BasicJsonType, ConstructibleStringType,
    enable_if_t<is_detected_exact<typename BasicJsonType::string_t::value_type,
    value_type_t, ConstructibleStringType>::value >> (line 3199) | struct is_constructible_string_type_impl <
      type is_constructible_string_type (line 3210) | struct is_constructible_string_type
      type is_compatible_array_type_impl (line 3214) | struct is_compatible_array_type_impl : std::false_type {}
      type is_compatible_array_type (line 3233) | struct is_compatible_array_type
      type is_constructible_array_type_impl (line 3237) | struct is_constructible_array_type_impl : std::false_type {}
      type is_constructible_array_type_impl <
    BasicJsonType, ConstructibleArrayType,
    enable_if_t<std::is_same<ConstructibleArrayType,
    typename BasicJsonType::value_type>::value >> (line 3240) | struct is_constructible_array_type_impl <
      type is_constructible_array_type_impl <
    BasicJsonType, ConstructibleArrayType,
    enable_if_t < !std::is_same<ConstructibleArrayType,
    typename BasicJsonType::value_type>::value&&
    std::is_default_constructible<ConstructibleArrayType>::value&&
(std::is_move_assignable<ConstructibleArrayType>::value ||
 std::is_copy_assignable<ConstructibleArrayType>::value)&&
is_detected<value_type_t, ConstructibleArrayType>::value&&
is_detected<iterator_t, ConstructibleArrayType>::value&&
is_complete_type <
detected_t<value_type_t, ConstructibleArrayType >>::value >> (line 3247) | struct is_constructible_array_type_impl <
      type is_constructible_array_type (line 3276) | struct is_constructible_array_type
      type is_compatible_integer_type_impl (line 3281) | struct is_compatible_integer_type_impl : std::false_type {}
      type is_compatible_integer_type_impl <
    RealIntegerType, CompatibleNumberIntegerType,
    enable_if_t < std::is_integral<RealIntegerType>::value&&
    std::is_integral<CompatibleNumberIntegerType>::value&&
    !std::is_same<bool, CompatibleNumberIntegerType>::value >> (line 3284) | struct is_compatible_integer_type_impl <
      type is_compatible_integer_type (line 3302) | struct is_compatible_integer_type
      type is_compatible_type_impl (line 3307) | struct is_compatible_type_impl: std::false_type {}
      type is_compatible_type_impl <
    BasicJsonType, CompatibleType,
    enable_if_t<is_complete_type<CompatibleType>::value >> (line 3310) | struct is_compatible_type_impl <
      type is_compatible_type (line 3319) | struct is_compatible_type
      type conjunction (line 3323) | struct conjunction : std::true_type { }
      type conjunction<B1> (line 3324) | struct conjunction<B1> : B1 { }
      type is_constructible_tuple (line 3330) | struct is_constructible_tuple : std::false_type {}
      type value_t (line 3377) | enum class value_t : std::uint8_t
      function from_json (line 3426) | void from_json(const BasicJsonType& j, typename std::nullptr_t& n)
      function get_arithmetic_value (line 3440) | void get_arithmetic_value(const BasicJsonType& j, ArithmeticType& val)
      function from_json (line 3466) | void from_json(const BasicJsonType& j, typename BasicJsonType::boole...
      function from_json (line 3476) | void from_json(const BasicJsonType& j, typename BasicJsonType::strin...
      function from_json (line 3492) | void from_json(const BasicJsonType& j, ConstructibleStringType& s)
      function from_json (line 3503) | void from_json(const BasicJsonType& j, typename BasicJsonType::numbe...
      function from_json (line 3509) | void from_json(const BasicJsonType& j, typename BasicJsonType::numbe...
      function from_json (line 3515) | void from_json(const BasicJsonType& j, typename BasicJsonType::numbe...
      function from_json (line 3522) | void from_json(const BasicJsonType& j, EnumType& e)
      function from_json (line 3532) | void from_json(const BasicJsonType& j, std::forward_list<T, Allocato...
      function from_json (line 3549) | void from_json(const BasicJsonType& j, std::valarray<T>& l)
      function from_json (line 3564) | auto from_json(const BasicJsonType& j, T (&arr)[N])
      function from_json_array_impl (line 3574) | void from_json_array_impl(const BasicJsonType& j, typename BasicJson...
      function from_json_array_impl (line 3580) | auto from_json_array_impl(const BasicJsonType& j, std::array<T, N>& ...
      function from_json_array_impl (line 3591) | auto from_json_array_impl(const BasicJsonType& j, ConstructibleArray...
      function from_json_array_impl (line 3612) | void from_json_array_impl(const BasicJsonType& j, ConstructibleArray...
      function from_json (line 3637) | auto from_json(const BasicJsonType& j, ConstructibleArrayType& arr)
      function from_json (line 3652) | void from_json(const BasicJsonType& j, typename BasicJsonType::binar...
      function from_json (line 3664) | void from_json(const BasicJsonType& j, ConstructibleObjectType& obj)
      function from_json (line 3696) | void from_json(const BasicJsonType& j, ArithmeticType& val)
      function from_json (line 3727) | void from_json(const BasicJsonType& j, std::pair<A1, A2>& p)
      function from_json_tuple_impl (line 3733) | void from_json_tuple_impl(const BasicJsonType& j, Tuple& t, index_se...
      function from_json (line 3739) | void from_json(const BasicJsonType& j, std::tuple<Args...>& t)
      function from_json (line 3747) | void from_json(const BasicJsonType& j, std::map<Key, Value, Compare,...
      function from_json (line 3767) | void from_json(const BasicJsonType& j, std::unordered_map<Key, Value...
      type from_json_fn (line 3784) | struct from_json_fn
      function int_to_string (line 3835) | void int_to_string( string_type& target, std::size_t value )
      class iteration_proxy_value (line 3841) | class iteration_proxy_value
        method iteration_proxy_value (line 3864) | explicit iteration_proxy_value(IteratorType it) noexcept : anchor(...
        method iteration_proxy_value (line 3867) | iteration_proxy_value& operator*()
        method iteration_proxy_value (line 3873) | iteration_proxy_value& operator++()
        method string_type (line 3894) | const string_type& key() const
        method value (line 3922) | typename IteratorType::reference value() const
      class iteration_proxy (line 3929) | class iteration_proxy
        method iteration_proxy (line 3937) | explicit iteration_proxy(typename IteratorType::reference cont) no...
        method begin (line 3941) | iteration_proxy_value<IteratorType> begin() noexcept
        method end (line 3947) | iteration_proxy_value<IteratorType> end() noexcept
      function get (line 3956) | auto get(const nlohmann::detail::iteration_proxy_value<IteratorType>...
      function get (line 3964) | auto get(const nlohmann::detail::iteration_proxy_value<IteratorType>...
      type external_constructor (line 4014) | struct external_constructor
      type external_constructor<value_t::boolean> (line 4017) | struct external_constructor<value_t::boolean>
        method construct (line 4020) | static void construct(BasicJsonType& j, typename BasicJsonType::bo...
      type external_constructor<value_t::string> (line 4029) | struct external_constructor<value_t::string>
        method construct (line 4032) | static void construct(BasicJsonType& j, const typename BasicJsonTy...
        method construct (line 4040) | static void construct(BasicJsonType& j, typename BasicJsonType::st...
        method construct (line 4050) | static void construct(BasicJsonType& j, const CompatibleStringType...
      type external_constructor<value_t::binary> (line 4059) | struct external_constructor<value_t::binary>
        method construct (line 4062) | static void construct(BasicJsonType& j, const typename BasicJsonTy...
        method construct (line 4071) | static void construct(BasicJsonType& j, typename BasicJsonType::bi...
      type external_constructor<value_t::number_float> (line 4081) | struct external_constructor<value_t::number_float>
        method construct (line 4084) | static void construct(BasicJsonType& j, typename BasicJsonType::nu...
      type external_constructor<value_t::number_unsigned> (line 4093) | struct external_constructor<value_t::number_unsigned>
        method construct (line 4096) | static void construct(BasicJsonType& j, typename BasicJsonType::nu...
      type external_constructor<value_t::number_integer> (line 4105) | struct external_constructor<value_t::number_integer>
        method construct (line 4108) | static void construct(BasicJsonType& j, typename BasicJsonType::nu...
      type external_constructor<value_t::array> (line 4117) | struct external_constructor<value_t::array>
        method construct (line 4120) | static void construct(BasicJsonType& j, const typename BasicJsonTy...
        method construct (line 4128) | static void construct(BasicJsonType& j, typename BasicJsonType::ar...
        method construct (line 4138) | static void construct(BasicJsonType& j, const CompatibleArrayType&...
        method construct (line 4148) | static void construct(BasicJsonType& j, const std::vector<bool>& arr)
        method construct (line 4162) | static void construct(BasicJsonType& j, const std::valarray<T>& arr)
      type external_constructor<value_t::object> (line 4176) | struct external_constructor<value_t::object>
        method construct (line 4179) | static void construct(BasicJsonType& j, const typename BasicJsonTy...
        method construct (line 4187) | static void construct(BasicJsonType& j, typename BasicJsonType::ob...
        method construct (line 4196) | static void construct(BasicJsonType& j, const CompatibleObjectType...
      function to_json (line 4213) | void to_json(BasicJsonType& j, T b) noexcept
      function to_json (line 4220) | void to_json(BasicJsonType& j, const CompatibleString& s)
      function to_json (line 4226) | void to_json(BasicJsonType& j, typename BasicJsonType::string_t&& s)
      function to_json (line 4233) | void to_json(BasicJsonType& j, FloatType val) noexcept
      function to_json (line 4240) | void to_json(BasicJsonType& j, CompatibleNumberUnsignedType val) noe...
      function to_json (line 4247) | void to_json(BasicJsonType& j, CompatibleNumberIntegerType val) noex...
      function to_json (line 4254) | void to_json(BasicJsonType& j, EnumType e) noexcept
      function to_json (line 4261) | void to_json(BasicJsonType& j, const std::vector<bool>& e)
      function to_json (line 4274) | void to_json(BasicJsonType& j, const CompatibleArrayType& arr)
      function to_json (line 4280) | void to_json(BasicJsonType& j, const typename BasicJsonType::binary_...
      function to_json (line 4287) | void to_json(BasicJsonType& j, const std::valarray<T>& arr)
      function to_json (line 4293) | void to_json(BasicJsonType& j, typename BasicJsonType::array_t&& arr)
      function to_json (line 4300) | void to_json(BasicJsonType& j, const CompatibleObjectType& obj)
      function to_json (line 4306) | void to_json(BasicJsonType& j, typename BasicJsonType::object_t&& obj)
      function to_json (line 4316) | void to_json(BasicJsonType& j, const T(&arr)[N])
      function to_json (line 4322) | void to_json(BasicJsonType& j, const std::pair<T1, T2>& p)
      function to_json (line 4330) | void to_json(BasicJsonType& j, const T& b)
      function to_json_tuple_impl (line 4336) | void to_json_tuple_impl(BasicJsonType& j, const Tuple& t, index_sequ...
      function to_json (line 4342) | void to_json(BasicJsonType& j, const T& t)
      type to_json_fn (line 4347) | struct to_json_fn
      function combine (line 4595) | inline std::size_t combine(std::size_t seed, std::size_t h) noexcept
      function hash (line 4613) | std::size_t hash(const BasicJsonType& j)
      type input_format_t (line 4744) | enum class input_format_t { json, cbor, msgpack, ubjson, bson }
      class file_input_adapter (line 4754) | class file_input_adapter
        method file_input_adapter (line 4760) | explicit file_input_adapter(std::FILE* f) noexcept
        method file_input_adapter (line 4765) | file_input_adapter(const file_input_adapter&) = delete;
        method file_input_adapter (line 4766) | file_input_adapter(file_input_adapter&&) = default;
        method file_input_adapter (line 4767) | file_input_adapter& operator=(const file_input_adapter&) = delete;
        method file_input_adapter (line 4768) | file_input_adapter& operator=(file_input_adapter&&) = delete;
        method get_character (line 4770) | std::char_traits<char>::int_type get_character() noexcept
      class input_stream_adapter (line 4790) | class input_stream_adapter
        method input_stream_adapter (line 4805) | explicit input_stream_adapter(std::istream& i)
        method input_stream_adapter (line 4810) | input_stream_adapter(const input_stream_adapter&) = delete;
        method input_stream_adapter (line 4811) | input_stream_adapter& operator=(input_stream_adapter&) = delete;
        method input_stream_adapter (line 4812) | input_stream_adapter& operator=(input_stream_adapter&& rhs) = delete;
        method input_stream_adapter (line 4814) | input_stream_adapter(input_stream_adapter&& rhs) noexcept : is(rhs...
        method get_character (line 4823) | std::char_traits<char>::int_type get_character()
      class iterator_input_adapter (line 4843) | class iterator_input_adapter
        method iterator_input_adapter (line 4848) | iterator_input_adapter(IteratorType first, IteratorType last)
        method get_character (line 4851) | typename std::char_traits<char_type>::int_type get_character()
        method empty (line 4872) | bool empty() const
      type wide_string_input_helper (line 4881) | struct wide_string_input_helper
      type wide_string_input_helper<BaseInputAdapter, 4> (line 4884) | struct wide_string_input_helper<BaseInputAdapter, 4>
        method fill_buffer (line 4887) | static void fill_buffer(BaseInputAdapter& input,
      type wide_string_input_helper<BaseInputAdapter, 2> (line 4942) | struct wide_string_input_helper<BaseInputAdapter, 2>
        method fill_buffer (line 4945) | static void fill_buffer(BaseInputAdapter& input,
      class wide_string_input_adapter (line 5005) | class wide_string_input_adapter
        method wide_string_input_adapter (line 5010) | wide_string_input_adapter(BaseInputAdapter base)
        method get_character (line 5013) | typename std::char_traits<char>::int_type get_character() noexcept
        method fill_buffer (line 5034) | void fill_buffer()
      type iterator_input_adapter_factory (line 5050) | struct iterator_input_adapter_factory
        method adapter_type (line 5056) | static adapter_type create(IteratorType first, IteratorType last)
      type is_iterator_of_multibyte (line 5063) | struct is_iterator_of_multibyte
      type iterator_input_adapter_factory<IteratorType, enable_if_t<is_iterator_of_multibyte<IteratorType>::value>> (line 5073) | struct iterator_input_adapter_factory<IteratorType, enable_if_t<is_i...
        method adapter_type (line 5080) | static adapter_type create(IteratorType first, IteratorType last)
      function input_adapter (line 5088) | typename iterator_input_adapter_factory<IteratorType>::adapter_type ...
      function input_adapter (line 5096) | auto input_adapter(const ContainerType& container) -> decltype(input...
      function file_input_adapter (line 5106) | inline file_input_adapter input_adapter(std::FILE* file)
        method file_input_adapter (line 4760) | explicit file_input_adapter(std::FILE* f) noexcept
        method file_input_adapter (line 4765) | file_input_adapter(const file_input_adapter&) = delete;
        method file_input_adapter (line 4766) | file_input_adapter(file_input_adapter&&) = default;
        method file_input_adapter (line 4767) | file_input_adapter& operator=(const file_input_adapter&) = delete;
        method file_input_adapter (line 4768) | file_input_adapter& operator=(file_input_adapter&&) = delete;
        method get_character (line 4770) | std::char_traits<char>::int_type get_character() noexcept
      function input_stream_adapter (line 5111) | inline input_stream_adapter input_adapter(std::istream& stream)
        method input_stream_adapter (line 4805) | explicit input_stream_adapter(std::istream& i)
        method input_stream_adapter (line 4810) | input_stream_adapter(const input_stream_adapter&) = delete;
        method input_stream_adapter (line 4811) | input_stream_adapter& operator=(input_stream_adapter&) = delete;
        method input_stream_adapter (line 4812) | input_stream_adapter& operator=(input_stream_adapter&& rhs) = delete;
        method input_stream_adapter (line 4814) | input_stream_adapter(input_stream_adapter&& rhs) noexcept : is(rhs...
        method get_character (line 4823) | std::char_traits<char>::int_type get_character()
      function input_stream_adapter (line 5116) | inline input_stream_adapter input_adapter(std::istream&& stream)
        method input_stream_adapter (line 4805) | explicit input_stream_adapter(std::istream& i)
        method input_stream_adapter (line 4810) | input_stream_adapter(const input_stream_adapter&) = delete;
        method input_stream_adapter (line 4811) | input_stream_adapter& operator=(input_stream_adapter&) = delete;
        method input_stream_adapter (line 4812) | input_stream_adapter& operator=(input_stream_adapter&& rhs) = delete;
        method input_stream_adapter (line 4814) | input_stream_adapter(input_stream_adapter&& rhs) noexcept : is(rhs...
        method get_character (line 4823) | std::char_traits<char>::int_type get_character()
      function contiguous_bytes_input_adapter (line 5131) | contiguous_bytes_input_adapter input_adapter(CharT b)
      function input_adapter (line 5139) | auto input_adapter(T (&array)[N]) -> decltype(input_adapter(array, a...
      class span_input_adapter (line 5147) | class span_input_adapter
        method span_input_adapter (line 5156) | span_input_adapter(CharT b, std::size_t l)
        method span_input_adapter (line 5163) | span_input_adapter(IteratorType first, IteratorType last)
        method contiguous_bytes_input_adapter (line 5166) | contiguous_bytes_input_adapter&& get()
      class json_sax_dom_parser (line 5328) | class json_sax_dom_parser
        method json_sax_dom_parser (line 5342) | explicit json_sax_dom_parser(BasicJsonType& r, const bool allow_ex...
        method json_sax_dom_parser (line 5347) | json_sax_dom_parser(const json_sax_dom_parser&) = delete;
        method json_sax_dom_parser (line 5348) | json_sax_dom_parser(json_sax_dom_parser&&) = default;
        method json_sax_dom_parser (line 5349) | json_sax_dom_parser& operator=(const json_sax_dom_parser&) = delete;
        method json_sax_dom_parser (line 5350) | json_sax_dom_parser& operator=(json_sax_dom_parser&&) = default;
        method null (line 5353) | bool null()
        method boolean (line 5359) | bool boolean(bool val)
        method number_integer (line 5365) | bool number_integer(number_integer_t val)
        method number_unsigned (line 5371) | bool number_unsigned(number_unsigned_t val)
        method number_float (line 5377) | bool number_float(number_float_t val, const string_t& /*unused*/)
        method string (line 5383) | bool string(string_t& val)
        method binary (line 5389) | bool binary(binary_t& val)
        method start_object (line 5395) | bool start_object(std::size_t len)
        method key (line 5408) | bool key(string_t& val)
        method end_object (line 5415) | bool end_object()
        method start_array (line 5421) | bool start_array(std::size_t len)
        method end_array (line 5434) | bool end_array()
        method parse_error (line 5441) | bool parse_error(std::size_t /*unused*/, const std::string& /*unus...
        method is_errored (line 5453) | constexpr bool is_errored() const
        method JSON_HEDLEY_RETURNS_NON_NULL (line 5466) | JSON_HEDLEY_RETURNS_NON_NULL
      class json_sax_dom_callback_parser (line 5502) | class json_sax_dom_callback_parser
        method json_sax_dom_callback_parser (line 5513) | json_sax_dom_callback_parser(BasicJsonType& r,
        method json_sax_dom_callback_parser (line 5522) | json_sax_dom_callback_parser(const json_sax_dom_callback_parser&) ...
        method json_sax_dom_callback_parser (line 5523) | json_sax_dom_callback_parser(json_sax_dom_callback_parser&&) = def...
        method json_sax_dom_callback_parser (line 5524) | json_sax_dom_callback_parser& operator=(const json_sax_dom_callbac...
        method json_sax_dom_callback_parser (line 5525) | json_sax_dom_callback_parser& operator=(json_sax_dom_callback_pars...
        method null (line 5528) | bool null()
        method boolean (line 5534) | bool boolean(bool val)
        method number_integer (line 5540) | bool number_integer(number_integer_t val)
        method number_unsigned (line 5546) | bool number_unsigned(number_unsigned_t val)
        method number_float (line 5552) | bool number_float(number_float_t val, const string_t& /*unused*/)
        method string (line 5558) | bool string(string_t& val)
        method binary (line 5564) | bool binary(binary_t& val)
        method start_object (line 5570) | bool start_object(std::size_t len)
        method key (line 5588) | bool key(string_t& val)
        method end_object (line 5605) | bool end_object()
        method start_array (line 5634) | bool start_array(std::size_t len)
        method end_array (line 5651) | bool end_array()
        method parse_error (line 5680) | bool parse_error(std::size_t /*unused*/, const std::string& /*unus...
        method is_errored (line 5692) | constexpr bool is_errored() const
        method handle_value (line 5714) | std::pair<bool, BasicJsonType*> handle_value(Value&& v, const bool...
      class json_sax_acceptor (line 5798) | class json_sax_acceptor
        method null (line 5807) | bool null()
        method boolean (line 5812) | bool boolean(bool /*unused*/)
        method number_integer (line 5817) | bool number_integer(number_integer_t /*unused*/)
        method number_unsigned (line 5822) | bool number_unsigned(number_unsigned_t /*unused*/)
        method number_float (line 5827) | bool number_float(number_float_t /*unused*/, const string_t& /*unu...
        method string (line 5832) | bool string(string_t& /*unused*/)
        method binary (line 5837) | bool binary(binary_t& /*unused*/)
        method start_object (line 5842) | bool start_object(std::size_t /*unused*/ = std::size_t(-1))
        method key (line 5847) | bool key(string_t& /*unused*/)
        method end_object (line 5852) | bool end_object()
        method start_array (line 5857) | bool start_array(std::size_t /*unused*/ = std::size_t(-1))
        method end_array (line 5862) | bool end_array()
        method parse_error (line 5867) | bool parse_error(std::size_t /*unused*/, const std::string& /*unus...
      class lexer_base (line 5905) | class lexer_base
        type token_type (line 5909) | enum class token_type
      class lexer (line 5982) | class lexer : public lexer_base<BasicJsonType>
        method lexer (line 5994) | explicit lexer(InputAdapterType&& adapter, bool ignore_comments_ =...
        method lexer (line 6001) | lexer(const lexer&) = delete;
        method lexer (line 6002) | lexer(lexer&&) = default;
        method lexer (line 6003) | lexer& operator=(lexer&) = delete;
        method lexer (line 6004) | lexer& operator=(lexer&&) = default;
        method JSON_HEDLEY_PURE (line 6013) | JSON_HEDLEY_PURE
        method get_codepoint (line 6040) | int get_codepoint()
        method next_byte_in_range (line 6088) | bool next_byte_in_range(std::initializer_list<char_int_type> ranges)
        method token_type (line 6125) | token_type scan_string()
        method scan_comment (line 6715) | bool scan_comment()
        method strtof (line 6783) | static void strtof(float& f, const char* str, char** endptr) noexcept
        method strtof (line 6789) | static void strtof(double& f, const char* str, char** endptr) noex...
        method strtof (line 6795) | static void strtof(long double& f, const char* str, char** endptr)...
        method token_type (line 6840) | token_type scan_number()  // lgtm [cpp/use-of-goto]
      type is_sax (line 7573) | struct is_sax
      type is_sax_static_asserts (line 7604) | struct is_sax_static_asserts
      type cbor_tag_handler_t (line 7668) | enum class cbor_tag_handler_t
      function little_endianess (line 7681) | static inline bool little_endianess(int num = 1) noexcept
      class binary_reader (line 7695) | class binary_reader
        method binary_reader (line 7712) | explicit binary_reader(InputAdapterType&& adapter) : ia(std::move(...
        method binary_reader (line 7718) | binary_reader(const binary_reader&) = delete;
        method binary_reader (line 7719) | binary_reader(binary_reader&&) = default;
        method binary_reader (line 7720) | binary_reader& operator=(const binary_reader&) = delete;
        method binary_reader (line 7721) | binary_reader& operator=(binary_reader&&) = default;
        method JSON_HEDLEY_NON_NULL (line 7732) | JSON_HEDLEY_NON_NULL(3)
        method parse_bson_internal (line 7794) | bool parse_bson_internal()
        method get_bson_cstr (line 7819) | bool get_bson_cstr(string_t& result)
        method get_bson_string (line 7849) | bool get_bson_string(const NumberType len, string_t& result)
        method get_bson_binary (line 7870) | bool get_bson_binary(const NumberType len, binary_t& result)
        method parse_bson_element_internal (line 7896) | bool parse_bson_element_internal(const char_int_type element_type,
        method parse_bson_element_list (line 7974) | bool parse_bson_element_list(const bool is_array)
        method parse_bson_array (line 8012) | bool parse_bson_array()
        method parse_cbor_internal (line 8042) | bool parse_cbor_internal(const bool get_char,
        method get_cbor_string (line 8487) | bool get_cbor_string(string_t& result)
        method get_cbor_binary (line 8582) | bool get_cbor_binary(binary_t& result)
        method get_cbor_array (line 8676) | bool get_cbor_array(const std::size_t len,
        method get_cbor_object (line 8714) | bool get_cbor_object(const std::size_t len,
        method parse_msgpack_internal (line 8767) | bool parse_msgpack_internal()
        method get_msgpack_string (line 9147) | bool get_msgpack_string(string_t& result)
        method get_msgpack_binary (line 9229) | bool get_msgpack_binary(binary_t& result)
        method get_msgpack_array (line 9340) | bool get_msgpack_array(const std::size_t len)
        method get_msgpack_object (line 9362) | bool get_msgpack_object(const std::size_t len)
        method parse_ubjson_internal (line 9399) | bool parse_ubjson_internal(const bool get_char = true)
        method get_ubjson_string (line 9418) | bool get_ubjson_string(string_t& result, const bool get_char = true)
        method get_ubjson_size_value (line 9472) | bool get_ubjson_size_value(std::size_t& result)
        method get_ubjson_size_type (line 9549) | bool get_ubjson_size_type(std::pair<std::size_t, char_int_type>& r...
        method get_ubjson_value (line 9590) | bool get_ubjson_value(const char_int_type prefix)
        method get_ubjson_array (line 9691) | bool get_ubjson_array()
        method get_ubjson_object (line 9753) | bool get_ubjson_object()
        method get_ubjson_high_precision_number (line 9828) | bool get_ubjson_high_precision_number()
        method char_int_type (line 9890) | char_int_type get()
        method char_int_type (line 9899) | char_int_type get_ignore_noop()
        method get_number (line 9924) | bool get_number(const input_format_t format, NumberType& result)
        method get_string (line 9967) | bool get_string(const input_format_t format,
        method get_binary (line 10000) | bool get_binary(const input_format_t format,
        method JSON_HEDLEY_NON_NULL (line 10023) | JSON_HEDLEY_NON_NULL(3)
        method get_token_string (line 10037) | std::string get_token_string() const
        method exception_message (line 10050) | std::string exception_message(const input_format_t format,
      type parse_event_t (line 10137) | enum class parse_event_t : uint8_t
      class parser (line 10163) | class parser
        method parser (line 10174) | explicit parser(InputAdapterType&& adapter,
        method parse (line 10196) | void parse(const bool strict, BasicJsonType& result)
        method accept (line 10257) | bool accept(const bool strict = true)
        method sax_parse (line 10265) | bool sax_parse(SAX* sax, const bool strict = true)
        method sax_parse_internal (line 10285) | bool sax_parse_internal(SAX* sax)
        method token_type (line 10567) | token_type get_token()
        method exception_message (line 10572) | std::string exception_message(const token_type expected, const std...
      class primitive_iterator_t (line 10636) | class primitive_iterator_t
        method difference_type (line 10647) | constexpr difference_type get_value() const noexcept
        method set_begin (line 10653) | void set_begin() noexcept
        method set_end (line 10659) | void set_end() noexcept
        method is_begin (line 10665) | constexpr bool is_begin() const noexcept
        method is_end (line 10671) | constexpr bool is_end() const noexcept
        method primitive_iterator_t (line 10686) | primitive_iterator_t operator+(difference_type n) noexcept
        method difference_type (line 10693) | constexpr difference_type operator-(primitive_iterator_t lhs, prim...
        method primitive_iterator_t (line 10698) | primitive_iterator_t& operator++() noexcept
        method primitive_iterator_t (line 10704) | primitive_iterator_t const operator++(int) noexcept
        method primitive_iterator_t (line 10711) | primitive_iterator_t& operator--() noexcept
        method primitive_iterator_t (line 10717) | primitive_iterator_t const operator--(int) noexcept
        method primitive_iterator_t (line 10724) | primitive_iterator_t& operator+=(difference_type n) noexcept
        method primitive_iterator_t (line 10730) | primitive_iterator_t& operator-=(difference_type n) noexcept
      type internal_iterator (line 10750) | struct internal_iterator
      class iteration_proxy (line 10788) | class iteration_proxy
        method iteration_proxy (line 3937) | explicit iteration_proxy(typename IteratorType::reference cont) no...
        method begin (line 3941) | iteration_proxy_value<IteratorType> begin() noexcept
        method end (line 3947) | iteration_proxy_value<IteratorType> end() noexcept
      class iteration_proxy_value (line 10789) | class iteration_proxy_value
        method iteration_proxy_value (line 3864) | explicit iteration_proxy_value(IteratorType it) noexcept : anchor(...
        method iteration_proxy_value (line 3867) | iteration_proxy_value& operator*()
        method iteration_proxy_value (line 3873) | iteration_proxy_value& operator++()
        method string_type (line 3894) | const string_type& key() const
        method value (line 3922) | typename IteratorType::reference value() const
      class iter_impl (line 10808) | class iter_impl
        method iter_impl (line 10846) | iter_impl() = default;
        method iter_impl (line 10854) | explicit iter_impl(pointer object) noexcept : m_object(object)
        method iter_impl (line 10896) | iter_impl(const iter_impl<const BasicJsonType>& other) noexcept
        method iter_impl (line 10906) | iter_impl& operator=(const iter_impl<const BasicJsonType>& other) ...
        method iter_impl (line 10918) | iter_impl(const iter_impl<typename std::remove_const<BasicJsonType...
        method iter_impl (line 10928) | iter_impl& operator=(const iter_impl<typename std::remove_const<Ba...
        method set_begin (line 10940) | void set_begin() noexcept
        method set_end (line 10977) | void set_end() noexcept
        method reference (line 11008) | reference operator*() const
        method pointer (line 11045) | pointer operator->() const
        method iter_impl (line 11079) | iter_impl const operator++(int)
        method iter_impl (line 11090) | iter_impl& operator++()
        method iter_impl (line 11122) | iter_impl const operator--(int)
        method iter_impl (line 11133) | iter_impl& operator--()
        method iter_impl (line 11255) | iter_impl& operator+=(difference_type i)
        method iter_impl (line 11284) | iter_impl& operator-=(difference_type i)
        method iter_impl (line 11293) | iter_impl operator+(difference_type i) const
        method iter_impl (line 11304) | iter_impl operator+(difference_type i, const iter_impl& it)
        method iter_impl (line 11315) | iter_impl operator-(difference_type i) const
        method difference_type (line 11326) | difference_type operator-(const iter_impl& other) const
        method reference (line 11347) | reference operator[](difference_type n) const
        method reference (line 11394) | reference value() const
      class json_reverse_iterator (line 11444) | class json_reverse_iterator : public std::reverse_iterator<Base>
        method json_reverse_iterator (line 11454) | explicit json_reverse_iterator(const typename base_iterator::itera...
        method json_reverse_iterator (line 11458) | explicit json_reverse_iterator(const base_iterator& it) noexcept :...
        method json_reverse_iterator (line 11461) | json_reverse_iterator const operator++(int)
        method json_reverse_iterator (line 11467) | json_reverse_iterator& operator++()
        method json_reverse_iterator (line 11473) | json_reverse_iterator const operator--(int)
        method json_reverse_iterator (line 11479) | json_reverse_iterator& operator--()
        method json_reverse_iterator (line 11485) | json_reverse_iterator& operator+=(difference_type i)
        method json_reverse_iterator (line 11491) | json_reverse_iterator operator+(difference_type i) const
        method json_reverse_iterator (line 11497) | json_reverse_iterator operator-(difference_type i) const
        method difference_type (line 11503) | difference_type operator-(const json_reverse_iterator& other) const
        method reference (line 11509) | reference operator[](difference_type n) const
        method key (line 11515) | auto key() const -> decltype(std::declval<Base>().key())
        method reference (line 11522) | reference value() const
      class json_ref (line 12527) | class json_ref
        method json_ref (line 12532) | json_ref(value_type&& value)
        method json_ref (line 12538) | json_ref(const value_type& value)
        method json_ref (line 12543) | json_ref(std::initializer_list<json_ref> init)
        method json_ref (line 12552) | json_ref(Args && ... args)
        method json_ref (line 12559) | json_ref(json_ref&&) = default;
        method json_ref (line 12560) | json_ref(const json_ref&) = delete;
        method json_ref (line 12561) | json_ref& operator=(const json_ref&) = delete;
        method json_ref (line 12562) | json_ref& operator=(json_ref&&) = delete;
        method value_type (line 12565) | value_type moved_or_copied() const
        method value_type (line 12574) | value_type const& operator*() const
        method value_type (line 12579) | value_type const* operator->() const
      type output_adapter_protocol (line 12632) | struct output_adapter_protocol
      class output_vector_adapter (line 12645) | class output_vector_adapter : public output_adapter_protocol<CharType>
        method output_vector_adapter (line 12648) | explicit output_vector_adapter(std::vector<CharType>& vec) noexcept
        method write_character (line 12652) | void write_character(CharType c) override
        method JSON_HEDLEY_NON_NULL (line 12657) | JSON_HEDLEY_NON_NULL(2)
      class output_stream_adapter (line 12669) | class output_stream_adapter : public output_adapter_protocol<CharType>
        method output_stream_adapter (line 12672) | explicit output_stream_adapter(std::basic_ostream<CharType>& s) no...
        method write_character (line 12676) | void write_character(CharType c) override
        method JSON_HEDLEY_NON_NULL (line 12681) | JSON_HEDLEY_NON_NULL(2)
      class output_string_adapter (line 12693) | class output_string_adapter : public output_adapter_protocol<CharType>
        method output_string_adapter (line 12696) | explicit output_string_adapter(StringType& s) noexcept
        method write_character (line 12700) | void write_character(CharType c) override
        method JSON_HEDLEY_NON_NULL (line 12705) | JSON_HEDLEY_NON_NULL(2)
      class output_adapter (line 12716) | class output_adapter
        method output_adapter (line 12719) | output_adapter(std::vector<CharType>& vec)
        method output_adapter (line 12722) | output_adapter(std::basic_ostream<CharType>& s)
        method output_adapter (line 12725) | output_adapter(StringType& s)
      class binary_writer (line 12752) | class binary_writer
        method binary_writer (line 12764) | explicit binary_writer(output_adapter_t<CharType> adapter) : oa(ad...
        method write_bson (line 12773) | void write_bson(const BasicJsonType& j)
        method write_cbor (line 12793) | void write_cbor(const BasicJsonType& j)
        method write_msgpack (line 13098) | void write_msgpack(const BasicJsonType& j)
        method write_ubjson (line 13422) | void write_ubjson(const BasicJsonType& j, const bool use_count,
        method calc_bson_entry_header_size (line 13629) | static std::size_t calc_bson_entry_header_size(const string_t& name)
        method write_bson_entry_header (line 13644) | void write_bson_entry_header(const string_t& name,
        method write_bson_boolean (line 13656) | void write_bson_boolean(const string_t& name,
        method write_bson_double (line 13666) | void write_bson_double(const string_t& name,
        method calc_bson_string_size (line 13676) | static std::size_t calc_bson_string_size(const string_t& value)
        method write_bson_string (line 13684) | void write_bson_string(const string_t& name,
        method write_bson_null (line 13698) | void write_bson_null(const string_t& name)
        method calc_bson_integer_size (line 13706) | static std::size_t calc_bson_integer_size(const std::int64_t value)
        method write_bson_integer (line 13716) | void write_bson_integer(const string_t& name,
        method calc_bson_unsigned_size (line 13734) | static constexpr std::size_t calc_bson_unsigned_size(const std::ui...
        method write_bson_unsigned (line 13744) | void write_bson_unsigned(const string_t& name,
        method write_bson_object_entry (line 13766) | void write_bson_object_entry(const string_t& name,
        method calc_bson_array_size (line 13776) | static std::size_t calc_bson_array_size(const typename BasicJsonTy...
        method calc_bson_binary_size (line 13791) | static std::size_t calc_bson_binary_size(const typename BasicJsonT...
        method write_bson_array (line 13799) | void write_bson_array(const string_t& name,
        method write_bson_binary (line 13818) | void write_bson_binary(const string_t& name,
        method calc_bson_element_size (line 13833) | static std::size_t calc_bson_element_size(const string_t& name,
        method write_bson_element (line 13881) | void write_bson_element(const string_t& name,
        method calc_bson_object_size (line 13927) | static std::size_t calc_bson_object_size(const typename BasicJsonT...
        method write_bson_object (line 13942) | void write_bson_object(const typename BasicJsonType::object_t& value)
        method CharType (line 13958) | static constexpr CharType get_cbor_float_prefix(float /*unused*/)
        method CharType (line 13963) | static constexpr CharType get_cbor_float_prefix(double /*unused*/)
        method CharType (line 13972) | static constexpr CharType get_msgpack_float_prefix(float /*unused*/)
        method CharType (line 13977) | static constexpr CharType get_msgpack_float_prefix(double /*unused*/)
        method write_number_with_ubjson_prefix (line 13989) | void write_number_with_ubjson_prefix(const NumberType n,
        method write_number_with_ubjson_prefix (line 14002) | void write_number_with_ubjson_prefix(const NumberType n,
        method write_number_with_ubjson_prefix (line 14065) | void write_number_with_ubjson_prefix(const NumberType n,
        method CharType (line 14129) | CharType ubjson_prefix(const BasicJsonType& j) const noexcept
        method CharType (line 14209) | static constexpr CharType get_ubjson_float_prefix(float /*unused*/)
        method CharType (line 14214) | static constexpr CharType get_ubjson_float_prefix(double /*unused*/)
        method write_number (line 14235) | void write_number(const NumberType n)
        method write_compact_float (line 14251) | void write_compact_float(const number_float_t n, detail::input_for...
        method CharType (line 14278) | static constexpr CharType to_char_type(std::uint8_t x) noexcept
        method CharType (line 14285) | static CharType to_char_type(std::uint8_t x) noexcept
        method CharType (line 14296) | static constexpr CharType to_char_type(std::uint8_t x) noexcept
        method CharType (line 14307) | static constexpr CharType to_char_type(InputCharType x) noexcept
      type dtoa_impl (line 14376) | namespace dtoa_impl
        function Target (line 14380) | Target reinterpret_bits(const Source source)
        type diyfp (line 14389) | struct diyfp // f * 2^e
          method diyfp (line 14396) | constexpr diyfp(std::uint64_t f_, int e_) noexcept : f(f_), e(e_...
          method diyfp (line 14402) | static diyfp sub(const diyfp& x, const diyfp& y) noexcept
          method diyfp (line 14414) | static diyfp mul(const diyfp& x, const diyfp& y) noexcept
          method diyfp (line 14479) | static diyfp normalize(diyfp x) noexcept
          method diyfp (line 14496) | static diyfp normalize_to(const diyfp& x, const int target_expon...
        type boundaries (line 14507) | struct boundaries
        function boundaries (line 14521) | boundaries compute_boundaries(FloatType value)
        type cached_power (line 14646) | struct cached_power // c = f * 2^e ~= 10^k
        function cached_power (line 14660) | inline cached_power get_cached_power_for_binary_exponent(int e)
        function find_largest_pow10 (line 14824) | inline int find_largest_pow10(const std::uint32_t n, std::uint32_t...
        function grisu2_round (line 14880) | inline void grisu2_round(char* buf, int len, std::uint64_t dist, s...
        function grisu2_digit_gen (line 14921) | inline void grisu2_digit_gen(char* buffer, int& length, int& decim...
        function grisu2 (line 15162) | inline void grisu2(char* buf, int& len, int& decimal_exponent,
        function JSON_HEDLEY_NON_NULL (line 15221) | JSON_HEDLEY_NON_NULL(1)
      type error_handler_t (line 15469) | enum class error_handler_t
      class serializer (line 15477) | class serializer
        method serializer (line 15493) | serializer(output_adapter_t<char> s, const char ichar,
        method serializer (line 15505) | serializer(const serializer&) = delete;
        method serializer (line 15506) | serializer& operator=(const serializer&) = delete;
        method serializer (line 15507) | serializer(serializer&&) = delete;
        method serializer (line 15508) | serializer& operator=(serializer&&) = delete;
        method dump (line 15533) | void dump(const BasicJsonType& val,
        method dump_escaped (line 15817) | void dump_escaped(const string_t& s, const bool ensure_ascii)
        method count_digits (line 16073) | inline unsigned int count_digits(number_unsigned_t x) noexcept
        method dump_integer (line 16113) | void dump_integer(NumberType x)
        method dump_float (line 16199) | void dump_float(number_float_t x)
        method dump_float (line 16220) | void dump_float(number_float_t x, std::true_type /*is_ieee_single_...
        method dump_float (line 16228) | void dump_float(number_float_t x, std::false_type /*is_ieee_single...
        method decode (line 16298) | static std::uint8_t decode(std::uint8_t& state, std::uint32_t& cod...
        method number_unsigned_t (line 16337) | number_unsigned_t remove_sign(number_unsigned_t x)
        method number_unsigned_t (line 16352) | inline number_unsigned_t remove_sign(number_integer_t x) noexcept
    type detail (line 2748) | namespace detail
      type position_t (line 86) | struct position_t
      class exception (line 2352) | class exception : public std::exception
        method JSON_HEDLEY_RETURNS_NON_NULL (line 2356) | JSON_HEDLEY_RETURNS_NON_NULL
        method JSON_HEDLEY_NON_NULL (line 2366) | JSON_HEDLEY_NON_NULL(3)
        method name (line 2369) | static std::string name(const std::string& ename, int id_)
      class parse_error (line 2424) | class parse_error : public exception
        method parse_error (line 2436) | static parse_error create(int id_, const position_t& pos, const st...
        method parse_error (line 2443) | static parse_error create(int id_, std::size_t byte_, const std::s...
        method parse_error (line 2463) | parse_error(int id_, std::size_t byte_, const char* what_arg)
        method position_string (line 2466) | static std::string position_string(const position_t& pos)
      class invalid_iterator (line 2510) | class invalid_iterator : public exception
        method invalid_iterator (line 2513) | static invalid_iterator create(int id_, const std::string& what_arg)
        method JSON_HEDLEY_NON_NULL (line 2520) | JSON_HEDLEY_NON_NULL(3)
      class type_error (line 2564) | class type_error : public exception
        method type_error (line 2567) | static type_error create(int id_, const std::string& what_arg)
        method JSON_HEDLEY_NON_NULL (line 2574) | JSON_HEDLEY_NON_NULL(3)
      class out_of_range (line 2611) | class out_of_range : public exception
        method out_of_range (line 2614) | static out_of_range create(int id_, const std::string& what_arg)
        method JSON_HEDLEY_NON_NULL (line 2621) | JSON_HEDLEY_NON_NULL(3)
      class other_error (line 2649) | class other_error : public exception
        method other_error (line 2652) | static other_error create(int id_, const std::string& what_arg)
        method JSON_HEDLEY_NON_NULL (line 2659) | JSON_HEDLEY_NON_NULL(3)
      type index_sequence (line 2687) | struct index_sequence
        method size (line 2691) | static constexpr std::size_t size() noexcept
      type merge_and_renumber (line 2698) | struct merge_and_renumber
      type make_index_sequence (line 2705) | struct make_index_sequence
      type make_index_sequence<0> (line 2709) | struct make_index_sequence<0> : index_sequence<> {}
      type make_index_sequence<1> (line 2710) | struct make_index_sequence<1> : index_sequence<0> {}
      type priority_tag (line 2716) | struct priority_tag : priority_tag < N - 1 > {}
      type priority_tag<0> (line 2717) | struct priority_tag<0> {}
      type static_const (line 2721) | struct static_const
      type make_void (line 2750) | struct make_void
      type iterator_types (line 2766) | struct iterator_types {}
      type iterator_types <
    It,
    void_t<typename It::difference_type, typename It::value_type, typename It::pointer,
    typename It::reference, typename It::iterator_category >> (line 2769) | struct iterator_types <
      type iterator_traits (line 2784) | struct iterator_traits
      type iterator_traits < T, enable_if_t < !std::is_pointer<T>::value >> (line 2789) | struct iterator_traits < T, enable_if_t < !std::is_pointer<T>::value >>
      type iterator_traits<T*, enable_if_t<std::is_object<T>::value>> (line 2795) | struct iterator_traits<T*, enable_if_t<std::is_object<T>::value>>
      type nonesuch (line 2823) | struct nonesuch
        method nonesuch (line 2825) | nonesuch() = delete;
        method nonesuch (line 2827) | nonesuch(nonesuch const&) = delete;
        method nonesuch (line 2828) | nonesuch(nonesuch const&&) = delete;
      type detector (line 2837) | struct detector
      type is_basic_json (line 2977) | struct is_basic_json : std::false_type {}
      class json_ref (line 2987) | class json_ref
        method json_ref (line 12532) | json_ref(value_type&& value)
        method json_ref (line 12538) | json_ref(const value_type& value)
        method json_ref (line 12543) | json_ref(std::initializer_list<json_ref> init)
        method json_ref (line 12552) | json_ref(Args && ... args)
        method json_ref (line 12559) | json_ref(json_ref&&) = default;
        method json_ref (line 12560) | json_ref(const json_ref&) = delete;
        method json_ref (line 12561) | json_ref& operator=(const json_ref&) = delete;
        method json_ref (line 12562) | json_ref& operator=(json_ref&&) = delete;
        method value_type (line 12565) | value_type moved_or_copied() const
        method value_type (line 12574) | value_type const& operator*() const
        method value_type (line 12579) | value_type const* operator->() const
      type is_json_ref (line 2990) | struct is_json_ref : std::false_type {}
      type is_json_ref<json_ref<T>> (line 2993) | struct is_json_ref<json_ref<T>> : std::true_type {}
      type has_from_json (line 3034) | struct has_from_json : std::false_type {}
      type is_getable (line 3041) | struct is_getable
      type has_from_json < BasicJsonType, T,
           enable_if_t < !is_basic_json<T>::value >> (line 3047) | struct has_from_json < BasicJsonType, T,
      type has_non_default_from_json (line 3060) | struct has_non_default_from_json : std::false_type {}
      type has_non_default_from_json < BasicJsonType, T, enable_if_t < !is_basic_json<T>::value >> (line 3063) | struct has_non_default_from_json < BasicJsonType, T, enable_if_t < !...
      type has_to_json (line 3075) | struct has_to_json : std::false_type {}
      type has_to_json < BasicJsonType, T, enable_if_t < !is_basic_json<T>::value >> (line 3078) | struct has_to_json < BasicJsonType, T, enable_if_t < !is_basic_json<...
      type is_iterator_traits (line 3093) | struct is_iterator_traits : std::false_type {}
      type is_iterator_traits<iterator_traits<T>> (line 3096) | struct is_iterator_traits<iterator_traits<T>>
      type is_complete_type (line 3113) | struct is_complete_type : std::false_type {}
      type is_complete_type<T, decltype(void(sizeof(T)))> (line 3116) | struct is_complete_type<T, decltype(void(sizeof(T)))> : std::true_ty...
      type is_compatible_object_type_impl (line 3120) | struct is_compatible_object_type_impl : std::false_type {}
      type is_compatible_object_type_impl <
    BasicJsonType, CompatibleObjectType,
    enable_if_t < is_detected<mapped_type_t, CompatibleObjectType>::value&&
    is_detected<key_type_t, CompatibleObjectType>::value >> (line 3123) | struct is_compatible_object_type_impl <
      type is_compatible_object_type (line 3140) | struct is_compatible_object_type
      type is_constructible_object_type_impl (line 3145) | struct is_constructible_object_type_impl : std::false_type {}
      type is_constructible_object_type_impl <
    BasicJsonType, ConstructibleObjectType,
    enable_if_t < is_detected<mapped_type_t, ConstructibleObjectType>::value&&
    is_detected<key_type_t, ConstructibleObjectType>::value >> (line 3148) | struct is_constructible_object_type_impl <
      type is_constructible_object_type (line 3172) | struct is_constructible_object_type
      type is_compatible_string_type_impl (line 3178) | struct is_compatible_string_type_impl : std::false_type {}
      type is_compatible_string_type_impl <
    BasicJsonType, CompatibleStringType,
    enable_if_t<is_detected_exact<typename BasicJsonType::string_t::value_type,
    value_type_t, CompatibleStringType>::value >> (line 3181) | struct is_compatible_string_type_impl <
      type is_compatible_string_type (line 3191) | struct is_compatible_string_type
      type is_constructible_string_type_impl (line 3196) | struct is_constructible_string_type_impl : std::false_type {}
      type is_constructible_string_type_impl <
    BasicJsonType, ConstructibleStringType,
    enable_if_t<is_detected_exact<typename BasicJsonType::string_t::value_type,
    value_type_t, ConstructibleStringType>::value >> (line 3199) | struct is_constructible_string_type_impl <
      type is_constructible_string_type (line 3210) | struct is_constructible_string_type
      type is_compatible_array_type_impl (line 3214) | struct is_compatible_array_type_impl : std::false_type {}
      type is_compatible_array_type (line 3233) | struct is_compatible_array_type
      type is_constructible_array_type_impl (line 3237) | struct is_constructible_array_type_impl : std::false_type {}
      type is_constructible_array_type_impl <
    BasicJsonType, ConstructibleArrayType,
    enable_if_t<std::is_same<ConstructibleArrayType,
    typename BasicJsonType::value_type>::value >> (line 3240) | struct is_constructible_array_type_impl <
      type is_constructible_array_type_impl <
    BasicJsonType, ConstructibleArrayType,
    enable_if_t < !std::is_same<ConstructibleArrayType,
    typename BasicJsonType::value_type>::value&&
    std::is_default_constructible<ConstructibleArrayType>::value&&
(std::is_move_assignable<ConstructibleArrayType>::value ||
 std::is_copy_assignable<ConstructibleArrayType>::value)&&
is_detected<value_type_t, ConstructibleArrayType>::value&&
is_detected<iterator_t, ConstructibleArrayType>::value&&
is_complete_type <
detected_t<value_type_t, ConstructibleArrayType >>::value >> (line 3247) | struct is_constructible_array_type_impl <
      type is_constructible_array_type (line 3276) | struct is_constructible_array_type
      type is_compatible_integer_type_impl (line 3281) | struct is_compatible_integer_type_impl : std::false_type {}
      type is_compatible_integer_type_impl <
    RealIntegerType, CompatibleNumberIntegerType,
    enable_if_t < std::is_integral<RealIntegerType>::value&&
    std::is_integral<CompatibleNumberIntegerType>::value&&
    !std::is_same<bool, CompatibleNumberIntegerType>::value >> (line 3284) | struct is_compatible_integer_type_impl <
      type is_compatible_integer_type (line 3302) | struct is_compatible_integer_type
      type is_compatible_type_impl (line 3307) | struct is_compatible_type_impl: std::false_type {}
      type is_compatible_type_impl <
    BasicJsonType, CompatibleType,
    enable_if_t<is_complete_type<CompatibleType>::value >> (line 3310) | struct is_compatible_type_impl <
      type is_compatible_type (line 3319) | struct is_compatible_type
      type conjunction (line 3323) | struct conjunction : std::true_type { }
      type conjunction<B1> (line 3324) | struct conjunction<B1> : B1 { }
      type is_constructible_tuple (line 3330) | struct is_constructible_tuple : std::false_type {}
      type value_t (line 3377) | enum class value_t : std::uint8_t
      function from_json (line 3426) | void from_json(const BasicJsonType& j, typename std::nullptr_t& n)
      function get_arithmetic_value (line 3440) | void get_arithmetic_value(const BasicJsonType& j, ArithmeticType& val)
      function from_json (line 3466) | void from_json(const BasicJsonType& j, typename BasicJsonType::boole...
      function from_json (line 3476) | void from_json(const BasicJsonType& j, typename BasicJsonType::strin...
      function from_json (line 3492) | void from_json(const BasicJsonType& j, ConstructibleStringType& s)
      function from_json (line 3503) | void from_json(const BasicJsonType& j, typename BasicJsonType::numbe...
      function from_json (line 3509) | void from_json(const BasicJsonType& j, typename BasicJsonType::numbe...
      function from_json (line 3515) | void from_json(const BasicJsonType& j, typename BasicJsonType::numbe...
      function from_json (line 3522) | void from_json(const BasicJsonType& j, EnumType& e)
      function from_json (line 3532) | void from_json(const BasicJsonType& j, std::forward_list<T, Allocato...
      function from_json (line 3549) | void from_json(const BasicJsonType& j, std::valarray<T>& l)
      function from_json (line 3564) | auto from_json(const BasicJsonType& j, T (&arr)[N])
      function from_json_array_impl (line 3574) | void from_json_array_impl(const BasicJsonType& j, typename BasicJson...
      function from_json_array_impl (line 3580) | auto from_json_array_impl(const BasicJsonType& j, std::array<T, N>& ...
      function from_json_array_impl (line 3591) | auto from_json_array_impl(const BasicJsonType& j, ConstructibleArray...
      function from_json_array_impl (line 3612) | void from_json_array_impl(const BasicJsonType& j, ConstructibleArray...
      function from_json (line 3637) | auto from_json(const BasicJsonType& j, ConstructibleArrayType& arr)
      function from_json (line 3652) | void from_json(const BasicJsonType& j, typename BasicJsonType::binar...
      function from_json (line 3664) | void from_json(const BasicJsonType& j, ConstructibleObjectType& obj)
      function from_json (line 3696) | void from_json(const BasicJsonType& j, ArithmeticType& val)
      function from_json (line 3727) | void from_json(const BasicJsonType& j, std::pair<A1, A2>& p)
      function from_json_tuple_impl (line 3733) | void from_json_tuple_impl(const BasicJsonType& j, Tuple& t, index_se...
      function from_json (line 3739) | void from_json(const BasicJsonType& j, std::tuple<Args...>& t)
      function from_json (line 3747) | void from_json(const BasicJsonType& j, std::map<Key, Value, Compare,...
      function from_json (line 3767) | void from_json(const BasicJsonType& j, std::unordered_map<Key, Value...
      type from_json_fn (line 3784) | struct from_json_fn
      function int_to_string (line 3835) | void int_to_string( string_type& target, std::size_t value )
      class iteration_proxy_value (line 3841) | class iteration_proxy_value
        method iteration_proxy_value (line 3864) | explicit iteration_proxy_value(IteratorType it) noexcept : anchor(...
        method iteration_proxy_value (line 3867) | iteration_proxy_value& operator*()
        method iteration_proxy_value (line 3873) | iteration_proxy_value& operator++()
        method string_type (line 3894) | const string_type& key() const
        method value (line 3922) | typename IteratorType::reference value() const
      class iteration_proxy (line 3929) | class iteration_proxy
        method iteration_proxy (line 3937) | explicit iteration_proxy(typename IteratorType::reference cont) no...
        method begin (line 3941) | iteration_proxy_value<IteratorType> begin() noexcept
        method end (line 3947) | iteration_proxy_value<IteratorType> end() noexcept
      function get (line 3956) | auto get(const nlohmann::detail::iteration_proxy_value<IteratorType>...
      function get (line 3964) | auto get(const nlohmann::detail::iteration_proxy_value<IteratorType>...
      type external_constructor (line 4014) | struct external_constructor
      type external_constructor<value_t::boolean> (line 4017) | struct external_constructor<value_t::boolean>
        method construct (line 4020) | static void construct(BasicJsonType& j, typename BasicJsonType::bo...
      type external_constructor<value_t::string> (line 4029) | struct external_constructor<value_t::string>
        method construct (line 4032) | static void construct(BasicJsonType& j, const typename BasicJsonTy...
        method construct (line 4040) | static void construct(BasicJsonType& j, typename BasicJsonType::st...
        method construct (line 4050) | static void construct(BasicJsonType& j, const CompatibleStringType...
      type external_constructor<value_t::binary> (line 4059) | struct external_constructor<value_t::binary>
        method construct (line 4062) | static void construct(BasicJsonType& j, const typename BasicJsonTy...
        method construct (line 4071) | static void construct(BasicJsonType& j, typename BasicJsonType::bi...
      type external_constructor<value_t::number_float> (line 4081) | struct external_constructor<value_t::number_float>
        method construct (line 4084) | static void construct(BasicJsonType& j, typename BasicJsonType::nu...
      type external_constructor<value_t::number_unsigned> (line 4093) | struct external_constructor<value_t::number_unsigned>
        method construct (line 4096) | static void construct(BasicJsonType& j, typename BasicJsonType::nu...
      type external_constructor<value_t::number_integer> (line 4105) | struct external_constructor<value_t::number_integer>
        method construct (line 4108) | static void construct(BasicJsonType& j, typename BasicJsonType::nu...
      type external_constructor<value_t::array> (line 4117) | struct external_constructor<value_t::array>
        method construct (line 4120) | static void construct(BasicJsonType& j, const typename BasicJsonTy...
        method construct (line 4128) | static void construct(BasicJsonType& j, typename BasicJsonType::ar...
        method construct (line 4138) | static void construct(BasicJsonType& j, const CompatibleArrayType&...
        method construct (line 4148) | static void construct(BasicJsonType& j, const std::vector<bool>& arr)
        method construct (line 4162) | static void construct(BasicJsonType& j, const std::valarray<T>& arr)
      type external_constructor<value_t::object> (line 4176) | struct external_constructor<va
Copy disabled (too large) Download .json
Condensed preview — 3943 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (32,052K chars).
[
  {
    "path": ".gitignore",
    "chars": 364,
    "preview": "# Prerequisites\n*.d\n\n# Compiled Object files\n*.slo\n*.lo\n*.o\n\n# Precompiled Headers\n*.gch\n*.pch\n\n# Compiled Dynamic libra"
  },
  {
    "path": ".gitmodules",
    "chars": 194,
    "preview": "[submodule \"libs/vcglib\"]\n\tpath = libs/vcglib\n\turl = ../../cnr-isti-vclab/vcglib\n[submodule \"libs/xfield_tracer\"]\n\tpath "
  },
  {
    "path": "LICENSE",
    "chars": 35147,
    "preview": "                    GNU GENERAL PUBLIC LICENSE\n                       Version 3, 29 June 2007\n\n Copyright (C) 2007 Free "
  },
  {
    "path": "README.md",
    "chars": 9277,
    "preview": "# Reliable Feature-Line Driven Quad-Remeshing\n\n[Nico Pietroni](www.nicopietroni.com), Stefano Nuvoli, \n[Thomas Alderighi"
  },
  {
    "path": "components/field_computation/AutoRemesher.h",
    "chars": 26315,
    "preview": "/***************************************************************************/\r\n/* Copyright(C) 2021\r\n\r\n\r\nThe authors of\r"
  },
  {
    "path": "components/field_computation/AutoRemesherMio.h",
    "chars": 70,
    "preview": "        typedef vcg::tri::EdgeCollapser<Mesh, VertexPair> Collapser;\r\n"
  },
  {
    "path": "components/field_computation/basic_setup.txt",
    "chars": 156,
    "preview": "do_remesh 1\nremesh_iterations 15\nremesh_target_aspect_ratio 0.35\nremesh_termination_delta 10000\nsharp_feature_thr 35\nsha"
  },
  {
    "path": "components/field_computation/basic_setup_mechanical.txt",
    "chars": 156,
    "preview": "do_remesh 1\nremesh_iterations 15\nremesh_target_aspect_ratio 0.35\nremesh_termination_delta 10000\nsharp_feature_thr 35\nsha"
  },
  {
    "path": "components/field_computation/basic_setup_organic.txt",
    "chars": 156,
    "preview": "do_remesh 1\nremesh_iterations 15\nremesh_target_aspect_ratio 0.35\nremesh_termination_delta 10000\nsharp_feature_thr -1\nsha"
  },
  {
    "path": "components/field_computation/compute_field_300_mechanical.command",
    "chars": 317,
    "preview": "#!/bin/bash\n\nfor i in ../../test/300/Mechanical/*.obj; do\n\n\n    complete_file=\"${i}\"\n    only_file_name=$(basename $comp"
  },
  {
    "path": "components/field_computation/compute_field_300_organic.command",
    "chars": 311,
    "preview": "#!/bin/bash\n\nfor i in ../../test/300/Organic/*.obj; do\n\n\n    complete_file=\"${i}\"\n    only_file_name=$(basename $complet"
  },
  {
    "path": "components/field_computation/field_computation.pro",
    "chars": 3355,
    "preview": "############################ PROJECT FILES ############################\n\ninclude(../../libs/libs.pri)\n\nHEADERS = \\\n    g"
  },
  {
    "path": "components/field_computation/fields/field_smoother.h",
    "chars": 18176,
    "preview": "/****************************************************************************\n* VCGLib                                  "
  },
  {
    "path": "components/field_computation/fields/n_polyvector.cpp",
    "chars": 17200,
    "preview": "// This file is part of libigl, a simple c++ geometry processing library.\n//\n// Copyright (C) 2014 Olga Diamanti <olga.d"
  },
  {
    "path": "components/field_computation/fields/n_polyvector.h",
    "chars": 1218,
    "preview": "// This file is part of libigl, a simple c++ geometry processing library.\n//\n// Copyright (C) 2014 Olga Diamanti <olga.d"
  },
  {
    "path": "components/field_computation/fields/polyroots.cpp",
    "chars": 1424,
    "preview": "// This file is part of libigl, a simple c++ geometry processing library.\n//\n// Copyright (C) 2014 Olga Diamanti <olga.d"
  },
  {
    "path": "components/field_computation/fields/polyroots.h",
    "chars": 1190,
    "preview": "// This file is part of libigl, a simple c++ geometry processing library.\n//\n// Copyright (C) 2014 Olga Diamanti <olga.d"
  },
  {
    "path": "components/field_computation/gl_utils.h",
    "chars": 1753,
    "preview": "/***************************************************************************/\n/* Copyright(C) 2021\n\n\nThe authors of\n\nRel"
  },
  {
    "path": "components/field_computation/glwidget.cpp",
    "chars": 28620,
    "preview": "/***************************************************************************/\n/* Copyright(C) 2021\n\n\nThe authors of\n\nRel"
  },
  {
    "path": "components/field_computation/glwidget.h",
    "chars": 1689,
    "preview": "/***************************************************************************/\n/* Copyright(C) 2021\n\n\nThe authors of\n\nRel"
  },
  {
    "path": "components/field_computation/main.cpp",
    "chars": 7535,
    "preview": "/***************************************************************************/\n/* Copyright(C) 2021\n\n\nThe authors of\n\nRel"
  },
  {
    "path": "components/field_computation/mesh_field_smoother.h",
    "chars": 5089,
    "preview": "/***************************************************************************/\n/* Copyright(C) 2021\n\n\nThe authors of\n\nRel"
  },
  {
    "path": "components/field_computation/mesh_manager.h",
    "chars": 27793,
    "preview": "/***************************************************************************/\n/* Copyright(C) 2021\n\n\nThe authors of\n\nRel"
  },
  {
    "path": "components/field_computation/poly_mesh_type.h",
    "chars": 5291,
    "preview": "/***************************************************************************/\n/* Copyright(C) 2021\n\n\nThe authors of\n\nRel"
  },
  {
    "path": "components/field_computation/triangle_mesh_type.h",
    "chars": 24166,
    "preview": "/***************************************************************************/\n/* Copyright(C) 2021\n\n\nThe authors of\n\nRel"
  },
  {
    "path": "components/field_tracing/basic_setup.txt",
    "chars": 122,
    "preview": "Drift 100\nSrate 0.01\nSplitOnRem 1\nMaxVal 5\nCCability 1\nMatchVal 1\nAddNeed 1\nFinalRem 1\nForceSplit 0\nSubd 0\nMetaCollapse "
  },
  {
    "path": "components/field_tracing/field_tracing.pro",
    "chars": 2729,
    "preview": "############################ PROJECT FILES ############################\n\ninclude(../../libs/libs.pri)\n\nHEADERS = \\\n    g"
  },
  {
    "path": "components/field_tracing/glwidget.cpp",
    "chars": 36846,
    "preview": "/***************************************************************************/\n/* Copyright(C) 2021\n\n\nThe authors of\n\nRel"
  },
  {
    "path": "components/field_tracing/glwidget.h",
    "chars": 1818,
    "preview": "/***************************************************************************/\n/* Copyright(C) 2021\n\n\nThe authors of\n\nRel"
  },
  {
    "path": "components/field_tracing/main.cpp",
    "chars": 4765,
    "preview": "/***************************************************************************/\n/* Copyright(C) 2021\n\n\nThe authors of\n\nRel"
  },
  {
    "path": "components/field_tracing/moc_glwidget.cpp",
    "chars": 2535,
    "preview": "/****************************************************************************\n** Meta object code from reading C++ file "
  },
  {
    "path": "components/field_tracing/trace_field_300_mechanical.command",
    "chars": 424,
    "preview": "#!/bin/bash\n\nfor i in ../../test/300/Mechanical/*.obj; do\n\n\n    complete_file=\"${i}\"\n    only_file_name=$(basename $comp"
  },
  {
    "path": "components/field_tracing/trace_field_300_organic.command",
    "chars": 421,
    "preview": "#!/bin/bash\n\nfor i in ../../test/300/Organic/*.obj; do\n\n\n    complete_file=\"${i}\"\n    only_file_name=$(basename $complet"
  },
  {
    "path": "components/quad_from_patches/basic_setup.txt",
    "chars": 532,
    "preview": "alpha 0.02\nilpMethod 1\ntimeLimit 200\ngapLimit 0.0\ncallbackTimeLimit 8 3.00 5.000 10.0 20.0 30.0 60.0 90.0 120.0\ncallback"
  },
  {
    "path": "components/quad_from_patches/configuration.pri",
    "chars": 204,
    "preview": "############################ CONFIGURATION ############################\n\n#DEFINES += QUADRETOPOLOGY_DEBUG_SAVE_MESHES\n#D"
  },
  {
    "path": "components/quad_from_patches/field_smoother.h",
    "chars": 16833,
    "preview": "/****************************************************************************\n* VCGLib                                  "
  },
  {
    "path": "components/quad_from_patches/load_save.cpp",
    "chars": 4060,
    "preview": "/***************************************************************************/\n/* Copyright(C) 2021\n\n\nThe authors of\n\nRel"
  },
  {
    "path": "components/quad_from_patches/load_save.h",
    "chars": 1291,
    "preview": "/***************************************************************************/\n/* Copyright(C) 2021\n\n\nThe authors of\n\nRel"
  },
  {
    "path": "components/quad_from_patches/local_para_smooth.h",
    "chars": 19696,
    "preview": "/***************************************************************************/\n/* Copyright(C) 2021\n\n\nThe authors of\n\nRel"
  },
  {
    "path": "components/quad_from_patches/main.cpp",
    "chars": 18390,
    "preview": "/***************************************************************************/\n/* Copyright(C) 2021\n\n\nThe authors of\n\nRel"
  },
  {
    "path": "components/quad_from_patches/mesh_types.h",
    "chars": 15198,
    "preview": "#ifndef DEFAULTMESHTYPES_H\n#define DEFAULTMESHTYPES_H\n\n#include <vcg/complex/complex.h>\n#include <vcg/complex/algorithms"
  },
  {
    "path": "components/quad_from_patches/quad_from_patches.cpp",
    "chars": 11171,
    "preview": "/***************************************************************************/\n/* Copyright(C) 2021\n\n\nThe authors of\n\nRel"
  },
  {
    "path": "components/quad_from_patches/quad_from_patches.h",
    "chars": 1603,
    "preview": "/***************************************************************************/\n/* Copyright(C) 2021\n\n\nThe authors of\n\nRel"
  },
  {
    "path": "components/quad_from_patches/quad_from_patches.pro",
    "chars": 2105,
    "preview": "############################ TARGET AND FLAGS ############################\n\n#App config\nTARGET = quad_from_patches\nTEMPL"
  },
  {
    "path": "components/quad_from_patches/quad_mesh_tracer.cpp",
    "chars": 7917,
    "preview": "/***************************************************************************/\n/* Copyright(C) 2021\n\n\nThe authors of\n\nRel"
  },
  {
    "path": "components/quad_from_patches/quad_mesh_tracer.h",
    "chars": 1901,
    "preview": "/***************************************************************************/\n/* Copyright(C) 2021\n\n\nThe authors of\n\nRel"
  },
  {
    "path": "components/quad_from_patches/quadrangulate_300_mechanical.command",
    "chars": 386,
    "preview": "\nfor i in ../../test/300/Mechanical/*.obj; do\n\n\n    complete_file=\"${i}\"\n    only_file_name=$(basename $complete_file)\n "
  },
  {
    "path": "components/quad_from_patches/quadrangulate_300_organic.command",
    "chars": 383,
    "preview": "\nfor i in ../../test/300/Organic/*.obj; do\n\n\n    complete_file=\"${i}\"\n    only_file_name=$(basename $complete_file)\n    "
  },
  {
    "path": "components/quad_from_patches/quadrangulate_loopy_cuts.command",
    "chars": 14677,
    "preview": "./quad_from_patches ./../../test/LoopyCuts/1/1_rem_rem_p0.obj 0\n./quad_from_patches ./../../test/LoopyCuts/12/12_rem_rem"
  },
  {
    "path": "components/quad_from_patches/quadrangulatedataset.sh",
    "chars": 754,
    "preview": "#USAGE: command dataset_path test_number\n#\n#EXAMPLE: ./quadrangulatedataset.sh /mnt/OS/Workspace/Progetti/supercaprettol"
  },
  {
    "path": "components/quad_from_patches/smooth_mesh.h",
    "chars": 42697,
    "preview": "/***************************************************************************/\n/* Copyright(C) 2021\n\n\nThe authors of\n\nRel"
  },
  {
    "path": "components/quad_from_patches/test_edge.obj",
    "chars": 34114,
    "preview": "####\n#\n# OBJ File Generated by Meshlab\n#\n####\n# Object test_edge.obj\n#\n# Vertices: 758\n# Faces: 0\n#\n####\nv 144.889500 12"
  },
  {
    "path": "components/quad_from_patches/test_tri.obj",
    "chars": 1734793,
    "preview": "####\n#\n# OBJ File Generated by Meshlab\n#\n####\n# Object test_tri.obj\n#\n# Vertices: 23934\n# Faces: 47864\n#\n####\nmtllib ./t"
  },
  {
    "path": "components/quad_from_patches/test_tri.obj.mtl",
    "chars": 765,
    "preview": "#\n# Wavefront material file\n# Converted by Meshlab Group\n#\n\nnewmtl material_0\nKa 0.200000 0.200000 0.200000\nKd 0.898039 "
  },
  {
    "path": "components/results_processing/lazy_website/index.php",
    "chars": 7428,
    "preview": "<html><head><style>\n\n@keyframes fadeinout {\n\t0% { opacity:1;\t}\n\t45% { opacity:1; }\n\t55% { opacity:0; }\n\t100% { opacity:0"
  },
  {
    "path": "components/results_processing/libs.pri",
    "chars": 11420,
    "preview": "LIBS_DIR = $$PWD/../../../../\nmessage($$PWD)\nmessage($$LIBS_DIR)\n# VCGlib\ncontains(LIBS_EXTERNAL, vcg) {\n\tisEmpty(VCG_DI"
  },
  {
    "path": "components/results_processing/orientability_check/main.cpp",
    "chars": 2738,
    "preview": "#include <iostream>\n\n#include <QDir>\n#include <QFile>\n#include <QTextStream>\n#include <QDirIterator>\n\n#include <mesh_def"
  },
  {
    "path": "components/results_processing/orientability_check/mesh_def.h",
    "chars": 1539,
    "preview": "#ifndef MESH_DEF_H\n#define MESH_DEF_H\n\n\n#include <vcg/complex/complex.h>\n#include <vcg/complex/algorithms/polygon_suppor"
  },
  {
    "path": "components/results_processing/orientability_check/orientability_check.pro",
    "chars": 324,
    "preview": "QT += core\n\nDEFINES *= QT_NO_OPENGL_ES_2\nDEFINES *= QT_NO_KEYWORDS\n\nCONFIG += c++11\n\nTARGET = orientability_check\n\nCONFI"
  },
  {
    "path": "components/results_processing/orientability_check/readme.txt",
    "chars": 66,
    "preview": "To compile correctly setup the ../libs.pri file point to the vcg\n\n"
  },
  {
    "path": "components/results_processing/polyMetrics/external/matplotlib-cpp/.gitignore",
    "chars": 294,
    "preview": "# Compiled Object files\n*.slo\n*.lo\n*.o\n*.obj\n\n# Precompiled Headers\n*.gch\n*.pch\n\n# Compiled Dynamic libraries\n*.so\n*.dyl"
  },
  {
    "path": "components/results_processing/polyMetrics/external/matplotlib-cpp/LICENSE",
    "chars": 1078,
    "preview": "The MIT License (MIT)\n\nCopyright (c) 2014 Benno Evers\n\nPermission is hereby granted, free of charge, to any person obtai"
  },
  {
    "path": "components/results_processing/polyMetrics/external/matplotlib-cpp/LICENSE.matplotlib",
    "chars": 2878,
    "preview": "This library does not contain any files from the matplotlib project, nor\ndoes it make any changes to it. On the other ha"
  },
  {
    "path": "components/results_processing/polyMetrics/external/matplotlib-cpp/README.md",
    "chars": 9342,
    "preview": "matplotlib-cpp\n==============\n\nWelcome to matplotlib-cpp, possibly the simplest C++ plotting library.\nIt is built to res"
  },
  {
    "path": "components/results_processing/polyMetrics/external/matplotlib-cpp/contrib/CMakeLists.txt",
    "chars": 1121,
    "preview": "cmake_minimum_required(VERSION 3.7)\nproject (MatplotlibCPP_Test)\n\nset(CMAKE_CXX_STANDARD 11)\nset(CMAKE_CXX_STANDARD_REQU"
  },
  {
    "path": "components/results_processing/polyMetrics/external/matplotlib-cpp/contrib/README.md",
    "chars": 1104,
    "preview": "# contrib/\n\nThis folder contains contributions that may be useful to users of this library, but\nhave a too specialized a"
  },
  {
    "path": "components/results_processing/polyMetrics/external/matplotlib-cpp/examples/.gitignore",
    "chars": 106,
    "preview": "animation\nbar\nbasic\nfill\nfill_inbetween\nimshow\nminimal\nmodern\nnonblock\nquiver\nsubplot\nsurface\nupdate\nxkcd\n"
  },
  {
    "path": "components/results_processing/polyMetrics/external/matplotlib-cpp/examples/animation.cpp",
    "chars": 752,
    "preview": "#define _USE_MATH_DEFINES\n#include <cmath>\n#include \"../matplotlibcpp.h\"\n\nnamespace plt = matplotlibcpp;\n\nint main()\n{\n\t"
  },
  {
    "path": "components/results_processing/polyMetrics/external/matplotlib-cpp/examples/bar.cpp",
    "chars": 328,
    "preview": "#define _USE_MATH_DEFINES\n\n#include <iostream>\n#include <string>\n#include \"../matplotlibcpp.h\"\nnamespace plt = matplotli"
  },
  {
    "path": "components/results_processing/polyMetrics/external/matplotlib-cpp/examples/basic.cpp",
    "chars": 1056,
    "preview": "#define _USE_MATH_DEFINES\n#include <iostream>\n#include <cmath>\n#include \"../matplotlibcpp.h\"\n\nnamespace plt = matplotlib"
  },
  {
    "path": "components/results_processing/polyMetrics/external/matplotlib-cpp/examples/fill.cpp",
    "chars": 951,
    "preview": "#define _USE_MATH_DEFINES\n#include \"../matplotlibcpp.h\"\n#include <cmath>\n\nusing namespace std;\nnamespace plt = matplotli"
  },
  {
    "path": "components/results_processing/polyMetrics/external/matplotlib-cpp/examples/fill_inbetween.cpp",
    "chars": 678,
    "preview": "#define _USE_MATH_DEFINES\n#include \"../matplotlibcpp.h\"\n#include <cmath>\n#include <iostream>\n\nusing namespace std;\nnames"
  },
  {
    "path": "components/results_processing/polyMetrics/external/matplotlib-cpp/examples/imshow.cpp",
    "chars": 662,
    "preview": "#define _USE_MATH_DEFINES\n#include <cmath>\n#include <iostream>\n#include \"../matplotlibcpp.h\"\n\nusing namespace std;\nnames"
  },
  {
    "path": "components/results_processing/polyMetrics/external/matplotlib-cpp/examples/minimal.cpp",
    "chars": 121,
    "preview": "#include \"../matplotlibcpp.h\"\n\nnamespace plt = matplotlibcpp;\n\nint main() {\n    plt::plot({1,3,2,4});\n    plt::show();\n}"
  },
  {
    "path": "components/results_processing/polyMetrics/external/matplotlib-cpp/examples/modern.cpp",
    "chars": 812,
    "preview": "#define _USE_MATH_DEFINES\n#include <cmath>\n#include \"../matplotlibcpp.h\"\n\nusing namespace std;\nnamespace plt = matplotli"
  },
  {
    "path": "components/results_processing/polyMetrics/external/matplotlib-cpp/examples/nonblock.cpp",
    "chars": 1039,
    "preview": "#define _USE_MATH_DEFINES\n#include <cmath>\n#include \"../matplotlibcpp.h\"\n\nnamespace plt = matplotlibcpp;\n\n\nusing namespa"
  },
  {
    "path": "components/results_processing/polyMetrics/external/matplotlib-cpp/examples/quiver.cpp",
    "chars": 447,
    "preview": "#include \"../matplotlibcpp.h\"\n\nnamespace plt = matplotlibcpp;\n\nint main()\n{\n    // u and v are respectively the x and y "
  },
  {
    "path": "components/results_processing/polyMetrics/external/matplotlib-cpp/examples/subplot.cpp",
    "chars": 587,
    "preview": "#define _USE_MATH_DEFINES\n#include <cmath>\n#include \"../matplotlibcpp.h\"\n\nusing namespace std;\nnamespace plt = matplotli"
  },
  {
    "path": "components/results_processing/polyMetrics/external/matplotlib-cpp/examples/subplot2grid.cpp",
    "chars": 919,
    "preview": "#define _USE_MATH_DEFINES\n#include <cmath>\n#include \"../matplotlibcpp.h\"\n\nusing namespace std;\nnamespace plt = matplotli"
  },
  {
    "path": "components/results_processing/polyMetrics/external/matplotlib-cpp/examples/surface.cpp",
    "chars": 561,
    "preview": "#include \"../matplotlibcpp.h\"\n\n#include <cmath>\n\nnamespace plt = matplotlibcpp;\n\nint main()\n{\n    std::vector<std::vecto"
  },
  {
    "path": "components/results_processing/polyMetrics/external/matplotlib-cpp/examples/update.cpp",
    "chars": 1345,
    "preview": "#define _USE_MATH_DEFINES\n#include <cmath>\n#include \"../matplotlibcpp.h\"\n#include <chrono>\n\nnamespace plt = matplotlibcp"
  },
  {
    "path": "components/results_processing/polyMetrics/external/matplotlib-cpp/examples/xkcd.cpp",
    "chars": 427,
    "preview": "#define _USE_MATH_DEFINES\n#include <cmath>\n#include \"../matplotlibcpp.h\"\n#include <vector>\n\nnamespace plt = matplotlibcp"
  },
  {
    "path": "components/results_processing/polyMetrics/external/matplotlib-cpp/matplotlibcpp.h",
    "chars": 63919,
    "preview": "#pragma once\n\n#include <vector>\n#include <map>\n#include <array>\n#include <numeric>\n#include <algorithm>\n#include <stdexc"
  },
  {
    "path": "components/results_processing/polyMetrics/external/matplotlib-cpp/numpy_flags.py",
    "chars": 290,
    "preview": "from os import path\n\ntry:\n    from numpy import __file__ as numpyloc\n\n    # Get numpy directory\n    numpy_dir = path.dir"
  },
  {
    "path": "components/results_processing/polyMetrics/external/nlohmann/json.hpp",
    "chars": 926233,
    "preview": "/*\n    __ _____ _____ _____\n __|  |   __|     |   | |  JSON for Modern C++\n|  |  |__   |  |  | | | |  version 3.9.1\n|___"
  },
  {
    "path": "components/results_processing/polyMetrics/main.cpp",
    "chars": 22825,
    "preview": "#include <iostream>\n\n#include <QDir>\n#include <QFile>\n#include <QTextStream>\n#include <QDirIterator>\n\n#include <mesh_def"
  },
  {
    "path": "components/results_processing/polyMetrics/mesh_def.h",
    "chars": 1567,
    "preview": "#ifndef MESH_DEF_H\n#define MESH_DEF_H\n\n\n#include <vcg/complex/complex.h>\n#include <vcg/complex/algorithms/polygon_suppor"
  },
  {
    "path": "components/results_processing/polyMetrics/polyMetrics.pro",
    "chars": 577,
    "preview": "QT += core\n\nDEFINES *= QT_NO_OPENGL_ES_2\nDEFINES *= QT_NO_KEYWORDS\n\nCONFIG += c++11\n\nTARGET = polyMetrics\n\nCONFIG -= app"
  },
  {
    "path": "components/results_processing/polyMetrics/readme.txt",
    "chars": 171,
    "preview": "To compile correctly setup the ../libs.pri file and the following in polyMetrics.pro\n\nINCLUDEPATH *= /pathtopython/Pytho"
  },
  {
    "path": "components/results_processing/snapshotRenderer/blenderBatchFolderRender.py",
    "chars": 1729,
    "preview": "import bpy\nimport glob, os, sys\n\n# takes directory basename and returns names of files to be rendered\ndef getToRenderNam"
  },
  {
    "path": "components/results_processing/snapshotRenderer/blenderBatchRender.py",
    "chars": 1170,
    "preview": "import bpy\nimport glob, os, sys\n\nargv = sys.argv\nargv = argv[argv.index(\"--\") + 1:]\n\ndirectory = os.path.abspath(argv[0]"
  },
  {
    "path": "components/results_processing/snapshotRenderer/readme.txt",
    "chars": 692,
    "preview": "SIMPLE script for batch mesh rendering.\n\nFILES:\n\t- blenderBatchRender.py : \n\t\t\tPython script for executing the batch pro"
  },
  {
    "path": "components/viz_mesh_results/configuration.pri",
    "chars": 592,
    "preview": "LIBIGL_PATH = /Users/nicopietroni/Desktop/sandbox/pietroni/lib/libigl\nEIGEN_PATH = $$LIBIGL_PATH/external/nanogui/ext/ei"
  },
  {
    "path": "components/viz_mesh_results/main.cpp",
    "chars": 4568,
    "preview": "#include <vcg/complex/complex.h>\n#include <vcg/complex/algorithms/polygonal_algorithms.h>\n#include <vcg/complex/algorith"
  },
  {
    "path": "components/viz_mesh_results/mesh_types.h",
    "chars": 10129,
    "preview": "#ifndef DEFAULTMESHTYPES_H\n#define DEFAULTMESHTYPES_H\n\n#include <wrap/io_trimesh/import.h>\n#include <wrap/io_trimesh/imp"
  },
  {
    "path": "components/viz_mesh_results/viz_mesh_results.pro",
    "chars": 1254,
    "preview": "############################ TARGET AND FLAGS ############################\n\n#App config\nTARGET = viz_mesh_result\nTEMPLAT"
  },
  {
    "path": "libs/CoMISo/CHANGELOG",
    "chars": 1191,
    "preview": "#============================================================================================\n\nCoMISo 1.0-rc1:\n- Initial"
  },
  {
    "path": "libs/CoMISo/CMakeLists LIBIGL.txt",
    "chars": 3811,
    "preview": "cmake_minimum_required (VERSION 2.6)\r\n\r\nproject(CoMISo)\r\n\r\nSET(CMAKE_SKIP_RPATH  TRUE)\r\n\r\n# add our macro directory to c"
  },
  {
    "path": "libs/CoMISo/CMakeLists.txt",
    "chars": 3783,
    "preview": "cmake_minimum_required (VERSION 2.6)\r\n\r\nproject(CoMISo)\r\n\r\nSET(CMAKE_SKIP_RPATH  TRUE)\r\n\r\n# add our macro directory to c"
  },
  {
    "path": "libs/CoMISo/CMakeListsOLD.txt",
    "chars": 11949,
    "preview": "cmake_minimum_required (VERSION 2.6)\r\n\r\nproject(CoMISo)\r\n\r\n# add our macro directory to cmake search path\r\nset (CMAKE_MO"
  },
  {
    "path": "libs/CoMISo/COPYING",
    "chars": 35148,
    "preview": "                    GNU GENERAL PUBLIC LICENSE\n                       Version 3, 29 June 2007\n\n Copyright (C) 2007 Free "
  },
  {
    "path": "libs/CoMISo/CoMISo.cmake",
    "chars": 118,
    "preview": "# add our macro directory to cmake search path\nset (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake)\n"
  },
  {
    "path": "libs/CoMISo/CoMISo_BUILD_LINUX.txt",
    "chars": 278,
    "preview": "#Install\nsudo apt-get install g++\nsudo apt-get install cmake\nsudo apt-get install libboost-dev\nsudo apt-get install libb"
  },
  {
    "path": "libs/CoMISo/Config/CoMISoDefines.hh",
    "chars": 2286,
    "preview": "/*===========================================================================*\\\n *                                      "
  },
  {
    "path": "libs/CoMISo/Config/config.hh",
    "chars": 152,
    "preview": "// Build time dependencies for CoMiso\n\n\n#define COMISO_BLAS_AVAILABLE 1\n#define COMISO_GMM_AVAILABLE 1\n\n\n\n\n\n\n\n\n\n\n\n\n\n#def"
  },
  {
    "path": "libs/CoMISo/Config/config.hh.in",
    "chars": 662,
    "preview": "// Build time dependencies for CoMiso\n\n@COMISO_QT4_CONFIG_FILE_SETTINGS@\n@COMISO_BLAS_CONFIG_FILE_SETTINGS@\n@COMISO_GMM_"
  },
  {
    "path": "libs/CoMISo/EigenSolver/ArpackSolver.cc",
    "chars": 4125,
    "preview": "//=============================================================================\n//\n//  CLASS ArpackSolver - IMPLEMENTATI"
  },
  {
    "path": "libs/CoMISo/EigenSolver/ArpackSolver.hh",
    "chars": 3219,
    "preview": "//=============================================================================\n//\n//  CLASS ArpackSolver\n//\n//========="
  },
  {
    "path": "libs/CoMISo/EigenSolver/EigenArpackMatrixT.cc",
    "chars": 1159,
    "preview": "//=============================================================================\n//\n//  CLASS EigenArpackMatrixT - IMPLEM"
  },
  {
    "path": "libs/CoMISo/EigenSolver/EigenArpackMatrixT.hh",
    "chars": 3673,
    "preview": "//=============================================================================\n//\n//  CLASS EigenArpackMatrixT\n//\n//==="
  },
  {
    "path": "libs/CoMISo/Examples/factored_solver/CMakeLists.txt",
    "chars": 1135,
    "preview": "include (ACGCommon)\ninclude (CoMISoExample)\n\n# source code directories\nset (directories \n  . \n)\n\n# collect all header an"
  },
  {
    "path": "libs/CoMISo/Examples/factored_solver/main.cc",
    "chars": 8395,
    "preview": "/*===========================================================================*\\\n *                                      "
  },
  {
    "path": "libs/CoMISo/Examples/quadratic_solver/CMakeLists.txt",
    "chars": 1141,
    "preview": "include (ACGCommon)\ninclude (CoMISoExample)\n\n# source code directories\nset (directories \n  . \n)\n\n# collect all header an"
  },
  {
    "path": "libs/CoMISo/Examples/quadratic_solver/main.cc",
    "chars": 8336,
    "preview": "/*===========================================================================*\\\n *                                      "
  },
  {
    "path": "libs/CoMISo/Examples/small_eigenproblem/CMakeLists.txt",
    "chars": 1149,
    "preview": "include (ACGCommon)\ninclude (CoMISoExample)\n\n# source code directories\nset (directories \n  . \n)\n\n# collect all header an"
  },
  {
    "path": "libs/CoMISo/Examples/small_eigenproblem/main.cc",
    "chars": 4171,
    "preview": "/*===========================================================================*\\\n *                                      "
  },
  {
    "path": "libs/CoMISo/Examples/small_factored_example/CMakeLists.txt",
    "chars": 1176,
    "preview": "include (ACGCommon)\ninclude (CoMISoExample)\n\n# source code directories\nset (directories \n  . \n)\n\n# collect all header an"
  },
  {
    "path": "libs/CoMISo/Examples/small_factored_example/main.cc",
    "chars": 5104,
    "preview": "/*===========================================================================*\\\n *                                      "
  },
  {
    "path": "libs/CoMISo/Examples/small_miqp/CMakeLists.txt",
    "chars": 1099,
    "preview": "include (ACGCommon)\ninclude (CoMISoExample)\n\n# source code directories\nset (directories \n   .\n)\n\n# collect all header an"
  },
  {
    "path": "libs/CoMISo/Examples/small_miqp/main.cc",
    "chars": 5659,
    "preview": "/*===========================================================================*\\\n *                                      "
  },
  {
    "path": "libs/CoMISo/Examples/small_nleast_squares/CMakeLists.txt",
    "chars": 1162,
    "preview": "include (ACGCommon)\ninclude (CoMISoExample)\n\n# source code directories\nset (directories \n  . \n)\n\n# collect all header an"
  },
  {
    "path": "libs/CoMISo/Examples/small_nleast_squares/main.cc",
    "chars": 3742,
    "preview": "/*===========================================================================*\\\n *                                      "
  },
  {
    "path": "libs/CoMISo/Examples/small_nsolver/CMakeLists.txt",
    "chars": 1127,
    "preview": "include (ACGCommon)\ninclude (CoMISoExample)\n\n# source code directories\nset (directories \n  . \n)\n\n# collect all header an"
  },
  {
    "path": "libs/CoMISo/Examples/small_nsolver/main.cc",
    "chars": 3742,
    "preview": "/*===========================================================================*\\\n *                                      "
  },
  {
    "path": "libs/CoMISo/Examples/small_quadratic_example/CMakeLists.txt",
    "chars": 1183,
    "preview": "include (ACGCommon)\ninclude (CoMISoExample)\n\n# source code directories\nset (directories \n  . \n)\n\n# collect all header an"
  },
  {
    "path": "libs/CoMISo/Examples/small_quadratic_example/main.cc",
    "chars": 5068,
    "preview": "/*===========================================================================*\\\n *                                      "
  },
  {
    "path": "libs/CoMISo/Examples/small_quadratic_resolve_example/CMakeLists.txt",
    "chars": 1189,
    "preview": "include (ACGCommon)\ninclude (CoMISoExample)\n\n# source code directories\nset (directories \n  . \n)\n\n# collect all header an"
  },
  {
    "path": "libs/CoMISo/Examples/small_quadratic_resolve_example/main.cc",
    "chars": 5613,
    "preview": "/*===========================================================================*\\\n *                                      "
  },
  {
    "path": "libs/CoMISo/Examples/small_sparseqr/CMakeLists.txt",
    "chars": 1127,
    "preview": "include (ACGCommon)\ninclude (CoMISoExample)\n\n# source code directories\nset (directories \n  . \n)\n\n# collect all header an"
  },
  {
    "path": "libs/CoMISo/Examples/small_sparseqr/main.cc",
    "chars": 7388,
    "preview": "/*===========================================================================*\\\n *                                      "
  },
  {
    "path": "libs/CoMISo/NSolver/BoundConstraint.cc",
    "chars": 2804,
    "preview": "//=============================================================================\n//\n//  CLASS BoundConstraint - IMPLEMENT"
  },
  {
    "path": "libs/CoMISo/NSolver/BoundConstraint.hh",
    "chars": 2493,
    "preview": "//=============================================================================\n//\n//  CLASS BoundConstraint\n//\n//======"
  },
  {
    "path": "libs/CoMISo/NSolver/COMISOSolver.cc",
    "chars": 4462,
    "preview": "//=============================================================================\n//\n//  CLASS COMISOSolver - IMPLEMENTATI"
  },
  {
    "path": "libs/CoMISo/NSolver/COMISOSolver.hh",
    "chars": 2474,
    "preview": "//=============================================================================\n//\n//  CLASS COMISOSolver\n//\n//========="
  },
  {
    "path": "libs/CoMISo/NSolver/CPLEXSolver.cc",
    "chars": 1768,
    "preview": "//=============================================================================\n//\n//  CLASS CPLEXSolver - IMPLEMENTATIO"
  },
  {
    "path": "libs/CoMISo/NSolver/CPLEXSolver.hh",
    "chars": 3107,
    "preview": "//=============================================================================\n//\n//  CLASS CPLEXSolver\n//\n//=========="
  },
  {
    "path": "libs/CoMISo/NSolver/CPLEXSolverT.cc",
    "chars": 9290,
    "preview": "//=============================================================================\n//\n//  CLASS GCPLEXSolver - IMPLEMENTATI"
  },
  {
    "path": "libs/CoMISo/NSolver/GUROBISolver.cc",
    "chars": 7793,
    "preview": "//=============================================================================\n//\n//  CLASS GUROBISolver - IMPLEMENTATI"
  },
  {
    "path": "libs/CoMISo/NSolver/GUROBISolver.hh",
    "chars": 2679,
    "preview": "//=============================================================================\n//\n//  CLASS GUROBISolver\n//\n//========="
  },
  {
    "path": "libs/CoMISo/NSolver/GurobiHelper.cc",
    "chars": 5462,
    "preview": "/*\n * GurobiHelper.cc\n *\n *  Created on: Jan 4, 2012\n *      Author: ebke\n */\n\n#include \"GurobiHelper.hh\"\n\n#if COMISO_GU"
  },
  {
    "path": "libs/CoMISo/NSolver/GurobiHelper.hh",
    "chars": 1522,
    "preview": "/*\n * GurobiHelper.hh\n *\n *  Created on: Jan 4, 2012\n *      Author: ebke\n */\n\n\n#ifndef GUROBIHELPER_HH_\n#define GUROBIH"
  },
  {
    "path": "libs/CoMISo/NSolver/IPOPTSolver.cc",
    "chars": 23635,
    "preview": "//=============================================================================\n//\n//  CLASS IPOPTSolver - IMPLEMENTATIO"
  },
  {
    "path": "libs/CoMISo/NSolver/IPOPTSolver.hh",
    "chars": 13137,
    "preview": "//=============================================================================\n//\n//  CLASS IPOPTSolver\n//\n//=========="
  },
  {
    "path": "libs/CoMISo/NSolver/LeastSquaresProblem.cc",
    "chars": 4654,
    "preview": "//=============================================================================\n//\n//  CLASS LeastSquaresProblem - IMPLE"
  },
  {
    "path": "libs/CoMISo/NSolver/LeastSquaresProblem.hh",
    "chars": 2408,
    "preview": "//=============================================================================\n//\n//  CLASS LeastSquaresProblem\n//\n//=="
  },
  {
    "path": "libs/CoMISo/NSolver/LinearConstraint.cc",
    "chars": 2374,
    "preview": "//=============================================================================\n//\n//  CLASS LinearConstraint\n//\n//====="
  },
  {
    "path": "libs/CoMISo/NSolver/LinearConstraint.hh",
    "chars": 2607,
    "preview": "//=============================================================================\n//\n//  CLASS NConstraintGmmInterface\n//\n"
  },
  {
    "path": "libs/CoMISo/NSolver/LinearConstraintHandlerElimination.cc",
    "chars": 5991,
    "preview": "//=============================================================================\n//\n//  CLASS LinearConstraintHandlerElim"
  },
  {
    "path": "libs/CoMISo/NSolver/LinearConstraintHandlerElimination.hh",
    "chars": 4298,
    "preview": "//=============================================================================\n//\n//  CLASS LinearConstraintHandlerElim"
  },
  {
    "path": "libs/CoMISo/NSolver/LinearConstraintHandlerEliminationT.cc",
    "chars": 3666,
    "preview": "//=============================================================================\n//\n//  CLASS LinearConstraintHandlerElim"
  },
  {
    "path": "libs/CoMISo/NSolver/LinearConstraintHandlerPenalty.cc",
    "chars": 3320,
    "preview": "//=============================================================================\n//\n//  CLASS LinearConstraintHandlerPena"
  },
  {
    "path": "libs/CoMISo/NSolver/LinearConstraintHandlerPenalty.hh",
    "chars": 3150,
    "preview": "//=============================================================================\n//\n//  CLASS LinearConstraintHandlerElim"
  },
  {
    "path": "libs/CoMISo/NSolver/LinearConstraintHandlerPenaltyT.cc",
    "chars": 1803,
    "preview": "//=============================================================================\n//\n//  CLASS LinearConstraintHandlerPena"
  },
  {
    "path": "libs/CoMISo/NSolver/NConstraintInterface.hh",
    "chars": 3452,
    "preview": "//=============================================================================\n//\n//  CLASS NConstraintInterface\n//\n//="
  },
  {
    "path": "libs/CoMISo/NSolver/NPDerivativeChecker.hh",
    "chars": 5897,
    "preview": "//=============================================================================\n//\n//  CLASS NPDERIVATIVECHECKER\n//\n//=="
  },
  {
    "path": "libs/CoMISo/NSolver/NPLinearConstraints.cc",
    "chars": 4323,
    "preview": "//=============================================================================\n//\n//  CLASS NPLinearConstraints\n//\n//=="
  },
  {
    "path": "libs/CoMISo/NSolver/NPLinearConstraints.hh",
    "chars": 3921,
    "preview": "//=============================================================================\n//\n//  CLASS NPLinearConstraints\n//\n//=="
  },
  {
    "path": "libs/CoMISo/NSolver/NPLinearConstraintsT.cc",
    "chars": 1498,
    "preview": "//=============================================================================\n//\n//  CLASS NPLinearConstraints\n//\n//=="
  },
  {
    "path": "libs/CoMISo/NSolver/NPTiming.cc",
    "chars": 2825,
    "preview": "//=============================================================================\n//\n//  CLASS NPTiming\n//\n//============="
  },
  {
    "path": "libs/CoMISo/NSolver/NPTiming.hh",
    "chars": 2027,
    "preview": "//=============================================================================\n//\n//  CLASS NPTiming\n//\n//============="
  },
  {
    "path": "libs/CoMISo/NSolver/NProblemGmmInterface.hh",
    "chars": 2117,
    "preview": "//=============================================================================\n//\n//  CLASS NProblemGmmInterface\n//  **"
  },
  {
    "path": "libs/CoMISo/NSolver/NProblemInterface.cc",
    "chars": 144,
    "preview": "#include \"NProblemInterface.hh\"\n\nnamespace COMISO {\n\nNProblemInterface::NProblemInterface() {\n}\n\nNProblemInterface::~NPr"
  },
  {
    "path": "libs/CoMISo/NSolver/NProblemInterface.hh",
    "chars": 2451,
    "preview": "//=============================================================================\n//\n//  CLASS NProblemGmmInterface\n//\n//="
  },
  {
    "path": "libs/CoMISo/NSolver/NewtonSolver.cc",
    "chars": 3070,
    "preview": "//=============================================================================\n//\n//  CLASS NewtonSolver - IMPLEMENTATI"
  },
  {
    "path": "libs/CoMISo/NSolver/NewtonSolver.hh",
    "chars": 2040,
    "preview": "//=============================================================================\n//\n//  CLASS NewtonSolver\n//\n//========="
  },
  {
    "path": "libs/CoMISo/NSolver/SuperSparseMatrixT.cc",
    "chars": 813,
    "preview": "//=============================================================================\n//\n//  CLASS SuperSparseMatrixT - IMPLEM"
  },
  {
    "path": "libs/CoMISo/NSolver/SuperSparseMatrixT.hh",
    "chars": 4732,
    "preview": "//=============================================================================\n//\n//  CLASS SuperSparseMatrixT\n//\n//==="
  },
  {
    "path": "libs/CoMISo/NSolver/TAOSolver.cc",
    "chars": 27218,
    "preview": "//=============================================================================\n//\n//  CLASS TAOSolver - IMPLEMENTATION\n"
  },
  {
    "path": "libs/CoMISo/NSolver/TAOSolver.hh",
    "chars": 2757,
    "preview": "//=============================================================================\n//\n//  CLASS TAOSolver\n//\n//============"
  },
  {
    "path": "libs/CoMISo/NSolver/TestInterface.hh",
    "chars": 2012,
    "preview": "//=============================================================================\n//\n//  CLASS BaseTaoGmmInterface\n//\n//=="
  },
  {
    "path": "libs/CoMISo/NSolver/VariableType.hh",
    "chars": 1055,
    "preview": "//=============================================================================\n//\n//  ENUM VariableType\n//\n//=========="
  },
  {
    "path": "libs/CoMISo/QtWidgets/MISolverDialogUI.cc",
    "chars": 5872,
    "preview": "/*===========================================================================*\\\n *                                      "
  },
  {
    "path": "libs/CoMISo/QtWidgets/MISolverDialogUI.hh",
    "chars": 4044,
    "preview": "/*===========================================================================*\\\n *                                      "
  },
  {
    "path": "libs/CoMISo/QtWidgets/QtMISolverDialogBaseUI.ui",
    "chars": 9306,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>QtMISolverDialogBaseUI</class>\n <widget class=\"QDialog"
  },
  {
    "path": "libs/CoMISo/README.txt",
    "chars": 2940,
    "preview": "CoMISo Version 1.0 rc1\nwww.rwth-graphics.de\nzimmer@informatik.rwth-aachen.de\nbommes@informatik.rwth-aachen.de\n\nUpdate! V"
  },
  {
    "path": "libs/CoMISo/Solver/CholmodSolver.cc",
    "chars": 6974,
    "preview": "/*===========================================================================*\\\n *                                      "
  },
  {
    "path": "libs/CoMISo/Solver/CholmodSolver.hh",
    "chars": 4672,
    "preview": "/*===========================================================================*\\\n *                                      "
  },
  {
    "path": "libs/CoMISo/Solver/CholmodSolverT.cc",
    "chars": 4483,
    "preview": "/*===========================================================================*\\\n *                                      "
  },
  {
    "path": "libs/CoMISo/Solver/ConstrainedSolver.cc",
    "chars": 3978,
    "preview": "/*===========================================================================*\\\n *                                      "
  },
  {
    "path": "libs/CoMISo/Solver/ConstrainedSolver.hh",
    "chars": 18544,
    "preview": "/*===========================================================================*\\\n *                                      "
  },
  {
    "path": "libs/CoMISo/Solver/ConstrainedSolverT.cc",
    "chars": 47263,
    "preview": "/*===========================================================================*\\\n *                                      "
  },
  {
    "path": "libs/CoMISo/Solver/EigenLDLTSolver.cc",
    "chars": 4061,
    "preview": "/*===========================================================================*\\\n *                                      "
  },
  {
    "path": "libs/CoMISo/Solver/EigenLDLTSolver.hh",
    "chars": 4563,
    "preview": "/*===========================================================================*\\\n *                                      "
  },
  {
    "path": "libs/CoMISo/Solver/EigenLDLTSolverT.cc",
    "chars": 4180,
    "preview": "/*===========================================================================*\\\n *                                      "
  },
  {
    "path": "libs/CoMISo/Solver/Eigen_Tools.cc",
    "chars": 19641,
    "preview": "/*===========================================================================*\\\n *                                      "
  },
  {
    "path": "libs/CoMISo/Solver/Eigen_Tools.hh",
    "chars": 5216,
    "preview": "/*===========================================================================*\\\n *                                      "
  },
  {
    "path": "libs/CoMISo/Solver/GMM_Tools.cc",
    "chars": 33052,
    "preview": "/*===========================================================================*\\\n *                                      "
  },
  {
    "path": "libs/CoMISo/Solver/GMM_Tools.hh",
    "chars": 11120,
    "preview": "/*===========================================================================*\\\n *                                      "
  },
  {
    "path": "libs/CoMISo/Solver/IterativeSolverT.cc",
    "chars": 6183,
    "preview": "//=============================================================================\n//\n//  CLASS IterativeSolverT - IMPLEMEN"
  },
  {
    "path": "libs/CoMISo/Solver/IterativeSolverT.hh",
    "chars": 2911,
    "preview": "//=============================================================================\n//\n//  CLASS IterativeSolverT\n//\n//====="
  },
  {
    "path": "libs/CoMISo/Solver/MISolver.cc",
    "chars": 19429,
    "preview": "/*===========================================================================*\\\n *                                      "
  },
  {
    "path": "libs/CoMISo/Solver/MISolver.hh",
    "chars": 13205,
    "preview": "/*===========================================================================*\\\n *                                      "
  },
  {
    "path": "libs/CoMISo/Solver/MISolverT.cc",
    "chars": 6051,
    "preview": "/*===========================================================================*\\\n *                                      "
  },
  {
    "path": "libs/CoMISo/Solver/SparseQRSolver.cc",
    "chars": 7005,
    "preview": "\t/*===========================================================================*\\\n *                                     "
  },
  {
    "path": "libs/CoMISo/Solver/SparseQRSolver.hh",
    "chars": 6468,
    "preview": "/*===========================================================================*\\\n *                                      "
  },
  {
    "path": "libs/CoMISo/Solver/SparseQRSolverT.cc",
    "chars": 11970,
    "preview": "/*===========================================================================*\\\n *                                      "
  },
  {
    "path": "libs/CoMISo/Solver/TaucsSolver.cc",
    "chars": 5955,
    "preview": "#include \"TaucsSolver.hh\"\n\n//== COMPILE-TIME PACKAGE REQUIREMENTS ========================================\n#include <CoM"
  },
  {
    "path": "libs/CoMISo/Solver/TaucsSolver.hh",
    "chars": 3712,
    "preview": "//=============================================================================\n//\n//  CLASS TaucsSolver\n//\n//  Author: "
  },
  {
    "path": "libs/CoMISo/Solver/TaucsSolverT.cc",
    "chars": 2013,
    "preview": "#define COMISO_TAUCS_SOLVER_TEMPLATES_C\n\n#include \"TaucsSolver.hh\"\n\n\n//== COMPILE-TIME PACKAGE REQUIREMENTS ============"
  },
  {
    "path": "libs/CoMISo/Solver/UMFPACKSolver.cc",
    "chars": 6795,
    "preview": "/*===========================================================================*\\\n *                                      "
  }
]

// ... and 3743 more files (download for full content)

About this extraction

This page contains the full source code of the nicopietroni/quadwild GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 3943 files (29.2 MB), approximately 7.9M tokens, and a symbol index with 14875 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!