# `libfive` libfive logo A Rust wrapper for [*libfive*](https://libfive.com/). ## Example ```rust use libfive::*; let f_rep_shape = Tree::sphere(1.0.into(), TreeVec3::default()) .difference_multi(vec![ Tree::sphere(0.6.into(), TreeVec3::default()), Tree::cylinder_z( 0.6.into(), 2.0.into(), TreeVec3::new(0.0, 0.0, -1.0), ), Tree::cylinder_z( 0.6.into(), 2.0.into(), TreeVec3::new(0.0, 0.0, -1.0), ) .reflect_xz(), Tree::cylinder_z( 0.6.into(), 2.0.into(), TreeVec3::new(0.0, 0.0, -1.0), ) .reflect_yz(), ]); f_rep_shape.to_stl( "f_rep_shape.stl", &Region3::new(-2.0, 2.0, -2.0, 2.0, -2.0, 2.0), // Resolution 100.0, )?; ``` This results in this STL mesh: Generated f-rep. shape ## Documentation Build docs locally: ``` cargo doc -p libfive --no-deps --all-features --open ``` ## Features * [`ahash`](https://crates.io/crates/ahash) – On by default. Use [`AHashMap`](https://docs.rs/ahash/latest/ahash/struct.AHashMap.html) for hashing when resolving variable names. Disabling this will fall back to the slower [`HashMap`](std::collections::HashMap). * `stdlib` – On by default. Add an extensive list of higher level operations – the *libfive stdlib*. To disable either/both of the above features unset default features in `Cargo.toml`: ```toml [dependencies.libfive] default-features = false ``` * `packed_opcodes` - Tightly pack opcodes. This breaks compatibility with older saved f-rep files. ## Dependencies ### macOS With `homebrew` installed, run: ``` brew install cmake pkg-config eigen libpng boost ``` ### Ubuntu/Debian `libfive` should build out of the box on the latest Ubuntu LTS (currently 20.04). If you find that's not the case, please open an issue in the [upstream repository](https://github.com/libfive/libfive/issues)! Install the following dependencies with `apt`: ``` sudo apt-get install cmake pkg-config libeigen3-dev libpng-dev libboost-all-dev ``` ### Arch Linux Install the following dependencies: ``` sudo pacman -S cmake pkgconf eigen libpng boost boost-libs ``` ### Windows (VS2019) Install [Git](https://git-scm.com/download/win), choosing settings so that it can be invoked from a Windows _Command Prompt_ (the defaults should be fine). Install [VS2019](https://visualstudio.microsoft.com/vs/) (Community Edition), configured for `Desktop development with C++`. You _only_ need _MSVC_, _Windows 10 SDK_, and _C++ CMake tools for Windows_. Feel free to uncheck other optional packages in the right sidebar. Then run the installation! Next, install dependencies using `vcpkg`. > :warning: This step touches many files, so you may want to disable the _Antimalware Service Executable_, which will otherwise scan every single file and slow things down dramatically: in `Windows Security`→`Virus & threat protection settings`, uncheck `Real-time protection`. In a Windows _Command Prompt_: ``` git clone https://github.com/Microsoft/vcpkg.git .\vcpkg\bootstrap-vcpkg.bat .\vcpkg\vcpkg.exe install --triplet x64-windows eigen3 boost-container boost-bimap boost-interval boost-lockfree boost-functional boost-algorithm boost-math libpng ``` Go get some coffee or something – this will take a while. # Building Just the usual. ``` cargo build ```