58 lines
1.4 KiB
Rust
58 lines
1.4 KiB
Rust
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<Arc<Medium>>,
|
|
pub outside: Option<Arc<Medium>>,
|
|
}
|
|
|
|
impl MediumInterface {
|
|
pub fn new(inside: Option<Arc<Medium>>, outside: Option<Arc<Medium>>) -> 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
|
|
}
|
|
}
|
|
}
|
|
}
|