epoint-transform 0.0.2-alpha.1

Supplementary operations for processing 3D point clouds.
use crate::Error;
use epoint_core::PointCloud;
use polars::prelude::{IntoLazy, all, col};

pub fn filter_none_values_of_column_in_place(
    point_cloud: &mut PointCloud,
    column_name: &str,
) -> Result<(), Error> {
    let filtered_point_data = point_cloud
        .point_data
        .data_frame
        .clone()
        .lazy()
        .filter(col(column_name).is_not_null())
        .select([all().as_expr()])
        .collect()?;

    point_cloud.point_data.data_frame = filtered_point_data;

    Ok(())
}