use super::Positions;
use crate::prelude::*;
#[derive(Default, Clone)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct PointCloud {
pub positions: Positions,
pub colors: Option<Vec<Srgba>>,
}
impl std::fmt::Debug for PointCloud {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
let mut d = f.debug_struct("PointCloud");
d.field("positions", &self.positions.len());
d.field("colors", &self.colors.as_ref().map(|v| v.len()));
d.finish()
}
}
impl PointCloud {
pub fn cube() -> Self {
let positions = vec![
vec3(-1.0, -1.0, -1.0),
vec3(-1.0, -1.0, 1.0),
vec3(-1.0, 1.0, -1.0),
vec3(-1.0, 1.0, 1.0),
vec3(1.0, -1.0, -1.0),
vec3(1.0, -1.0, 1.0),
vec3(1.0, 1.0, -1.0),
vec3(1.0, 1.0, 1.0),
];
Self {
positions: Positions::F32(positions),
..Default::default()
}
}
pub fn compute_aabb(&self) -> AxisAlignedBoundingBox {
self.positions.compute_aabb()
}
}