| Crates.io | l3d-ffi |
| lib.rs | l3d-ffi |
| version | 0.2.3 |
| created_at | 2025-12-08 19:49:49.59583+00 |
| updated_at | 2025-12-16 14:29:03.84473+00 |
| description | UniFFI bindings for l3d_rs - for Android (Kotlin), iOS (Swift), and more |
| homepage | https://github.com/holg/l3d-rs |
| repository | https://github.com/holg/l3d-rs |
| max_upload_size | |
| id | 1974289 |
| size | 106,703 |
UniFFI bindings for l3d_rs - L3D luminaire file format parser.
UniFFI generates native bindings for:
cargo build --release -p l3d-ffi
# Install uniffi-bindgen
cargo install uniffi_bindgen
# Generate Kotlin bindings
uniffi-bindgen generate \
--library target/release/libl3d_ffi.dylib \
--language kotlin \
--out-dir bindings/kotlin
# Generate Swift bindings
uniffi-bindgen generate \
--library target/release/libl3d_ffi.dylib \
--language swift \
--out-dir bindings/swift
# Add Android targets
rustup target add aarch64-linux-android armv7-linux-androideabi x86_64-linux-android
# Build for Android
cargo build --release -p l3d-ffi --target aarch64-linux-android
cargo build --release -p l3d-ffi --target armv7-linux-androideabi
cargo build --release -p l3d-ffi --target x86_64-linux-android
# Add iOS targets
rustup target add aarch64-apple-ios x86_64-apple-ios aarch64-apple-ios-sim
# Build for iOS
cargo build --release -p l3d-ffi --target aarch64-apple-ios
cargo build --release -p l3d-ffi --target aarch64-apple-ios-sim
import uniffi.l3d_ffi.*
// Parse from bytes
val l3d = L3dFile(fileBytes)
// Or from file path
val l3d = L3dFile.fromPath("/path/to/file.l3d")
// Get geometry parts
val parts = l3d.getParts()
for (part in parts) {
println("Part: ${part.path}")
println("Transform: ${part.transform}")
}
// Get assets (OBJ files, textures)
val assets = l3d.getAssets()
// Convert to JSON
val json = l3d.toJson()
// Get version
val version = version()
import l3d_ffi
// Parse from bytes
let l3d = try L3dFile(data: fileData)
// Or from file path
let l3d = try L3dFile.fromPath(path: "/path/to/file.l3d")
// Get geometry parts
let parts = l3d.getParts()
for part in parts {
print("Part: \(part.path)")
print("Transform: \(part.transform)")
}
// Get assets
let assets = l3d.getAssets()
// Convert to JSON
let json = try l3d.toJson()
// Get version
let ver = version()
L3dFileMain class for parsing and accessing L3D files.
| Method | Description |
|---|---|
L3dFile(data) |
Parse L3D from byte array |
L3dFile.fromPath(path) |
Parse L3D from file path |
getStructureXml() |
Get raw structure.xml content |
toJson() |
Convert luminaire data to JSON |
getParts() |
Get list of geometry parts |
getAssets() |
Get list of asset files |
getPartCount() |
Number of geometry parts |
getAssetCount() |
Number of asset files |
L3dPartGeometry part with transformation.
| Field | Type | Description |
|---|---|---|
path |
String | Path to OBJ file |
transform |
[Float] | 4x4 matrix (16 floats) |
L3dAssetAsset file from the archive.
| Field | Type | Description |
|---|---|---|
name |
String | File path in archive |
content |
Bytes | Raw file content |
MIT OR GPL-3.0-or-later