# bevy_curvo [![License](https://img.shields.io/badge/license-MIT%2FApache-blue.svg)](https://github.com/mattatz/bevy_curvo#license) [![Crates.io](https://img.shields.io/crates/v/bevy_curvo.svg)](https://crates.io/crates/bevy_curvo) [![Docs](https://docs.rs/bevy_curvo/badge.svg)](https://docs.rs/bevy_curvo/latest/bevy_curvo/) [![Test](https://github.com/mattatz/bevy_curvo/actions/workflows/test.yml/badge.svg?branch=main)](https://github.com/mattatz/bevy_curvo/actions/workflows/test.yml) `bevy_curvo` is a helper library for rendering curves and surfaces modeled with [Curvo](https://github.com/mattatz/curvo) directly within the [Bevy](https://github.com/bevyengine/bevy) environment. [Demo](https://github.com/mattatz/bevy_curvo/assets/1085910/5a6864c5-85fa-44ee-b194-23aaa8ff452a) *You can try the demo on web. https://mattatz.github.io/bevy_curvo/* ## Usage ```rust // Create a set of points to interpolate let points = vec![ Point3::new(-1.0, -1.0, 0.), Point3::new(1.0, -1.0, 0.), Point3::new(1.0, 1.0, 0.), Point3::new(-1.0, 1.0, 0.), ]; // Create a NURBS curve that interpolates the given points with degree 3 let interpolated = NurbsCurve3D::<f64>::try_interpolate(&points, 3, None, None).unwrap(); // Create a NURBS surface by extruding the curve along the z-axis let extrusion = NurbsSurface::extrude(&interpolated, Vector3::z() * 3.0); // Create a SurfaceTessellation from the NURBS surface let tess = extrusion.tessellate(Some(AdaptiveTessellationOptions { norm_tolerance: 1e-2 * 2.5, ..Default::default() })); // Create a bevy friendly data from the tessellation let surface_mesh = NurbsSurfaceMesh::from(tess); commands.spawn(PbrBundle { // Here you can use the mesh to render the surface mesh: surface_mesh, material: materials.add(StandardMaterial { ..default() }), ..default() }); // or you can build a mesh for the surface let tri: Mesh = surface_mesh.build_surface_triangle_list(Some(RenderAssetUsages::default())); ``` ## Run the example ```sh cargo run --example scene --features=examples ``` or with [cargo-make](https://github.com/sagiegurari/cargo-make) ```sh cargo make example ``` ## Run the example in the browser By using [cargo-make](https://github.com/sagiegurari/cargo-make), wasm files are generated using wasm-bindgen-cli, and web applications are served using an http server. ```sh cargo make serve ``` ## Compatibility | bevy | bevy_curvo | | ---- | ---------- | | 0.13 | 0.1 |