Skip to content

blaind/ttf2mesh-rs

Repository files navigation

ttf2mesh   Build Status Latest Version Docs Version

A high-level Rust wrapper API for fetisov's ttf2mesh library for generating a 2d/3d mesh (vertices, indices and normals [only for 3D]) from TrueType (.ttf) glyphs.

Installing

Prequisites:

apt-get install build-essential patch

Add to Cargo.toml:

[dependencies]
ttf2mesh = "*" # change to latest version

Examples

See examples -folder and crate docs.

Simple usage:

use ttf2mesh::{Quality, TTFFile, Value};

let mut font = TTFFile::from_file("fonts/FiraMono-Medium.ttf").unwrap();

for char in "Hello_World".chars() {
    let mut glyph = font.glyph_from_char(char).unwrap();
    let mesh = glyph.to_2d_mesh(Quality::Medium).unwrap();

    println!("Mesh data char {:?}", char);
    println!(
        "- vertices: [{}]",
        mesh.iter_vertices()
            .map(|v| {
                let v = v.val();
                format!("({:.3}, {:.2})", v.0, v.1)
            })
            .collect::<Vec<_>>()
            .join(", ")
    );
    println!(
        "- faces: [{}]",
        mesh.iter_faces()
            .map(|v| {
                let v = v.val();
                format!("({}, {}, {})", v.0, v.1, v.2)
            })
            .collect::<Vec<_>>()
            .join(", ")
    );
    println!("");
}

Security

The API surface (mainly .ttf loading) has been fuzzed with cargo-fuzz.

Development

Install prequisites (see above).

Clone repository:

git clone https://github.com/blaind/ttf2mesh-rs.git

Update submodules

git submodule update --init

Develop

License

Licensed under MIT license

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the software by you, shall be licensed as above, without any additional terms or conditions.