{"id":13627339,"url":"https://github.com/unclejimbo/Euclid","last_synced_at":"2025-04-16T19:31:34.581Z","repository":{"id":89642227,"uuid":"83976310","full_name":"unclejimbo/Euclid","owner":"unclejimbo","description":"C++ Shape Analysis and Geometry Processing","archived":false,"fork":false,"pushed_at":"2024-05-09T09:12:25.000Z","size":6526,"stargazers_count":37,"open_issues_count":1,"forks_count":5,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-11-08T17:48:22.110Z","etag":null,"topics":["cgal","eigen","embree","geometry-processing","libigl","mesh","mesh-processing","shape-analysis","vulkan"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/unclejimbo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-03-05T14:29:32.000Z","updated_at":"2024-04-16T15:29:22.000Z","dependencies_parsed_at":"2024-01-14T08:32:54.882Z","dependency_job_id":"265fa685-6005-465b-8ae1-31b0a770c174","html_url":"https://github.com/unclejimbo/Euclid","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/unclejimbo%2FEuclid","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/unclejimbo%2FEuclid/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/unclejimbo%2FEuclid/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/unclejimbo%2FEuclid/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/unclejimbo","download_url":"https://codeload.github.com/unclejimbo/Euclid/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249268555,"owners_count":21240943,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cgal","eigen","embree","geometry-processing","libigl","mesh","mesh-processing","shape-analysis","vulkan"],"created_at":"2024-08-01T22:00:33.021Z","updated_at":"2025-04-16T19:31:29.572Z","avatar_url":"https://github.com/unclejimbo.png","language":"C++","funding_links":[],"categories":["General Libraries"],"sub_categories":[],"readme":"# Welcome to Euclid\n\n- [GitHub repo](https://github.com/unclejimbo/Euclid)\n- [Latest documentation](https://unclejimbo.github.io/Euclid/)\n\n## Introduction\n\nEuclid is a header only library for geometry processing and shape analysis.\n\nIt contains some utilities and algorithms which extend and cooperate with other popular libraries around there, like Eigen(libigl), CGAL, to name a few.\n\nThe purpose of Euclid is not to replace any of the above packages, but to glue things together as well as to provide more algorithms which do not appear in those libraries.\n\n## Dependencies\n\nDifferent packages in Euclid may require a different set of dependencies. Although some are dependency free (like the IO module), but most of them rely on the following packages, which are also marked as 'REQUIRED' if you configure using CMake, including\n\n- [Boost](https://www.boost.org/)\n- [CGAL](https://www.cgal.org/index.html)\n- [Eigen](http://eigen.tuxfamily.org/index.php?title=Main_Page)\n- [Libigl](http://libigl.github.io/libigl/)\n\nAdditional dependencies are required by some packages, including\n\n- [Spectra](https://spectralib.org/) for solving eigenvalue problems.\n- [Embree](http://embree.github.io) for fast cpu ray tracing.\n- [Vulkan](https://www.vulkan.org/) for headless gpu rendering.\n- [TTK](https://topology-tool-kit.github.io/) for topological shape analysis.\n- [Cereal](http://uscilab.github.io/cereal/index.html) for serialization.\n\nMake sure you properly compile and link to the above libraries when they are used. Also, Euclid uses features in the C++17 standard, so you'll need a C++17 enabled compiler.\n\n## Installation\n\nSince it's a header only library, it is not mandatory to configure this project with CMake. Although be sure to configure other dependencies properly, as some of them are not header only.\n\nIf you are using CMake, there are two ways to go:\n\nFirst you could use the [find script](https://github.com/unclejimbo/Euclid/blob/dev/cmake/Modules/FindEuclid.cmake) shipped with Euclid and configure other dependencies manually like below. This is preferable if you only need parts of the headers and do not wish to configure all the dependencies.\n\n```cmake\nfind_package(Euclid)\ntarget_include_directories(your-target Euclid_INCLUDE_DIR)\n// other dependencies, e.g. Eigen\n```\n\nOtherwise, you could configure Euclid using CMake first. It will output an EuclidConfig.cmake file in the build tree for you to use. You can set the variable `Euclid_DIR` to the path containing this file and then in your own CMakeLists.txt you could do\n\n```cmake\nfind_package(Euclid)\ntarget_link_libraries(your-target Euclid::Euclid)\n```\n\n## Getting Started\n\nHere's an example which reads a mesh file, converts it to a CGAL::Surface_mesh data structure, computes its discrete gaussian curvatures and ouput the values into mesh colors.\n\n```cpp\n#include \u003cvector\u003e\n#include \u003cCGAL/Simple_cartesian.h\u003e\n#include \u003cCGAL/Surface_mesh.h\u003e\n#include \u003cEuclid/IO/OffIO.h\u003e\n#include \u003cEuclid/IO/PlyIO.h\u003e\n#include \u003cEuclid/MeshUtil/CGALMesh.h\u003e\n#include \u003cEuclid/Geometry/TriMeshGeometry.h\u003e\n#include \u003cEuclid/Util/Color.h\u003e\n\nusing Kernel = CGAL::Simple_cartesian\u003cfloat\u003e;\nusing Point_3 = Kernel::Point_3;\nusing Mesh = CGAL::Surface_mesh\u003cPoint_3\u003e;\n\nint main()\n{\n    // Read triangle mesh into buffers\n    std::vector\u003cfloat\u003e positions;\n    std::vector\u003cunsigned\u003e indices;\n    Euclid::read_off\u003c3\u003e(\"Euclid_root/data/bumpy.off\", positions, nullptr, \u0026indices, nullptr);\n\n    // Generate a CGAL::Surface_mesh\n    Mesh mesh;\n    Euclid::make_mesh\u003c3\u003e(mesh, positions, indices);\n\n    // Compute gaussian curvatures\n    auto curvatures = Euclid::gaussian_curvatures(mesh);\n\n    // Turn curvatures into colors and output to a file\n    std::vector\u003cunsigned char\u003e colors;\n    Euclid::colormap(igl::COLOR_MAP_TYPE_JET, curvatures, colors, true);\n    Euclid::write_ply\u003c3\u003e(\n        \"outdir/bumpy.ply\", positions, nullptr, nullptr, \u0026indices, \u0026colors);\n}\n```\n\n## Examples\n\nSee the [examples](https://github.com/unclejimbo/Euclid/tree/dev/examples) folder for more tutorials. However, many modules are not covered yet. For a more complete example, you could check the [test cases](https://github.com/unclejimbo/Euclid/tree/dev/test) to see the usage of most functions and classes. More information on how to run the tests could be found [here](https://codedocs.xyz/unclejimbo/Euclid/md_docs_runtest.html).\n\n## License\n\nMIT for code not related to any third-party libraries.\n\nOtherwise it should follow whatever license the third-party libraries require.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Funclejimbo%2FEuclid","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Funclejimbo%2FEuclid","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Funclejimbo%2FEuclid/lists"}