modelio-rs 0.2.1

Safe Rust bindings for Apple's ModelIO framework — assets, meshes, materials, lights, cameras, voxels, textures, and animation on macOS
Documentation
use modelio::prelude::*;

fn main() -> modelio::Result<()> {
    let object = Object::new()?;
    let transform = Transform::new()?;
    transform.set_translation([1.0, 2.0, 3.0]);
    object.set_transform_component(Some(&transform.as_transform_component()));

    let stack = TransformStack::new()?;
    let translate_op = stack.add_translate_op("translate", false)?;
    translate_op
        .animated_value()
        .expect("translate animated value")
        .set_float3([2.0, 0.0, 0.0], 0.0);
    let rotate_op = stack.add_rotate_op("rotate", TransformOpRotationOrder::Xyz, false)?;
    rotate_op
        .animated_value()
        .expect("rotate animated value")
        .set_float3([0.0, 0.5, 0.0], 0.0);

    println!("object global matrix={:?}", TransformComponent::global_transform_with_object(&object, 0.0));
    println!("stack op count={}", stack.count());
    println!("stack matrix={:?}", stack.float4x4_at_time(0.0));
    Ok(())
}