use std::sync::Arc; #[derive(Debug, Clone)] pub struct HomogeneousMedium; #[derive(Debug, Clone)] pub struct GridMedium; #[derive(Debug, Clone)] pub struct RGBGridMedium; #[derive(Debug, Clone)] pub struct CloudMedium; #[derive(Debug, Clone)] pub struct NanoVDBMedium; #[derive(Debug, Clone)] pub enum Medium { Homogeneous(HomogeneousMedium), Grid(GridMedium), RGBGrid(RGBGridMedium), Cloud(CloudMedium), NanoVDB(NanoVDBMedium), } #[derive(Default, Clone)] pub struct MediumInterface { pub inside: Option>, pub outside: Option>, } impl MediumInterface { pub fn new(inside: Option>, outside: Option>) -> Self { Self { inside, outside } } pub fn is_medium_transition(&self) -> bool { if let Some(ref inside) = self.inside { // self.inside == Some if let Some(ref outside) = self.outside { // self.outside == Some let pi = inside as *const _ as *const usize; let po = outside as *const _ as *const usize; pi != po } else { // self.outside == None true } } else { // self.inside == None if let Some(ref _outside) = self.outside { // self.outside == Some true } else { // self.outside == None false } } } }