chijin 0.3.4

Minimal Rust bindings for OpenCASCADE (OCC 7.9)
use glam::{DVec2, DVec3};

/// A triangle mesh produced by [`Shape::mesh_with_tolerance`](crate::Shape::mesh_with_tolerance).
///
/// All vectors have the same length: one entry per vertex.
/// `indices` contains triangle indices (groups of 3).
#[derive(Debug, Clone)]
pub struct Mesh {
    /// Vertex positions in 3D space.
    pub vertices: Vec<DVec3>,
    /// UV coordinates, normalized to [0, 1] per face.
    pub uvs: Vec<DVec2>,
    /// Vertex normals.
    pub normals: Vec<DVec3>,
    /// Triangle indices (groups of 3, referencing into `vertices`).
    pub indices: Vec<usize>,
    /// Per-triangle face ID (`TopoDS_TShape*` address). Length equals `indices.len() / 3`.
    pub face_ids: Vec<u64>,
}