use crate::api::IfcAPI;
use crate::zero_copy::MeshCollection;
use wasm_bindgen::prelude::*;
use super::batch::PartitionedBatch;
impl IfcAPI {
fn source_bytes_arc(&self) -> std::sync::Arc<Vec<u8>> {
self.cached_source_bytes
.lock()
.unwrap_or_else(std::sync::PoisonError::into_inner)
.clone()
.unwrap_or_default()
}
}
#[wasm_bindgen]
impl IfcAPI {
#[wasm_bindgen(js_name = setSourceBytes)]
pub fn set_source_bytes(&self, data: Vec<u8>) {
let mut slot = self
.cached_source_bytes
.lock()
.unwrap_or_else(std::sync::PoisonError::into_inner);
*slot = Some(std::sync::Arc::new(data));
}
#[wasm_bindgen(js_name = processGeometryBatchFromSource)]
#[allow(clippy::too_many_arguments)]
pub fn process_geometry_batch_from_source(
&self,
jobs_flat: &[u32],
unit_scale: f64,
rtc_x: f64,
rtc_y: f64,
rtc_z: f64,
needs_shift: bool,
void_keys: &[u32],
void_counts: &[u32],
void_values: &[u32],
style_ids: &[u32],
style_colors: &[u8],
plane_angle_to_radians: Option<f64>,
material_element_ids: Option<Vec<u32>>,
material_color_counts: Option<Vec<u32>>,
material_colors_rgba: Option<Vec<u8>>,
) -> MeshCollection {
let source = self.source_bytes_arc();
self.process_geometry_batch(
&source,
jobs_flat,
unit_scale,
rtc_x,
rtc_y,
rtc_z,
needs_shift,
void_keys,
void_counts,
void_values,
style_ids,
style_colors,
plane_angle_to_radians,
material_element_ids,
material_color_counts,
material_colors_rgba,
)
}
#[wasm_bindgen(js_name = processGeometryBatchPartitionedFromSource)]
#[allow(clippy::too_many_arguments)]
pub fn process_geometry_batch_partitioned_from_source(
&self,
jobs_flat: &[u32],
unit_scale: f64,
rtc_x: f64,
rtc_y: f64,
rtc_z: f64,
needs_shift: bool,
void_keys: &[u32],
void_counts: &[u32],
void_values: &[u32],
style_ids: &[u32],
style_colors: &[u8],
plane_angle_to_radians: Option<f64>,
material_element_ids: Option<Vec<u32>>,
material_color_counts: Option<Vec<u32>>,
material_colors_rgba: Option<Vec<u8>>,
) -> PartitionedBatch {
let source = self.source_bytes_arc();
self.process_geometry_batch_partitioned(
&source,
jobs_flat,
unit_scale,
rtc_x,
rtc_y,
rtc_z,
needs_shift,
void_keys,
void_counts,
void_values,
style_ids,
style_colors,
plane_angle_to_radians,
material_element_ids,
material_color_counts,
material_colors_rgba,
)
}
}