use super::MeshCollection;
use crate::zero_copy::frame_swap::swap_zup_to_yup_aabb;
use wasm_bindgen::prelude::*;
pub struct GeometryFingerprint {
pub express_id: u32,
pub hash: u64,
pub aabb: Option<[f64; 6]>,
pub volume: Option<f64>,
pub closure_bits: u8,
}
#[wasm_bindgen]
impl MeshCollection {
#[wasm_bindgen(getter, js_name = geometryHashIds)]
pub fn geometry_hash_ids(&self) -> js_sys::Uint32Array {
js_sys::Uint32Array::from(&self.geometry_hash_ids[..])
}
#[wasm_bindgen(getter, js_name = geometryHashValues)]
pub fn geometry_hash_values(&self) -> js_sys::BigUint64Array {
js_sys::BigUint64Array::from(&self.geometry_hash_values[..])
}
#[wasm_bindgen(getter, js_name = geometryAabbValues)]
pub fn geometry_aabb_values(&self) -> js_sys::Float64Array {
let y_up: Vec<f64> = self
.geometry_aabb_values
.chunks_exact(6)
.flat_map(|b| swap_zup_to_yup_aabb([b[0], b[1], b[2], b[3], b[4], b[5]]))
.collect();
js_sys::Float64Array::from(&y_up[..])
}
#[wasm_bindgen(getter, js_name = geometryVolumeValues)]
pub fn geometry_volume_values(&self) -> js_sys::Float64Array {
js_sys::Float64Array::from(&self.geometry_volume_values[..])
}
#[wasm_bindgen(getter, js_name = geometryClosureFlags)]
pub fn geometry_closure_flags(&self) -> js_sys::Uint8Array {
js_sys::Uint8Array::from(&self.geometry_closure_flags[..])
}
}
impl MeshCollection {
#[inline]
pub fn push_geometry_hash(&mut self, fp: GeometryFingerprint) {
self.geometry_hash_ids.push(fp.express_id);
self.geometry_hash_values.push(fp.hash);
self.geometry_aabb_values
.extend_from_slice(&fp.aabb.unwrap_or([f64::NAN; 6]));
self.geometry_volume_values.push(fp.volume.unwrap_or(f64::NAN));
self.geometry_closure_flags.push(fp.closure_bits);
}
}