use ifc_model::EntityId;
use crate::error::StyleResult;
use crate::light::source::LightSource;
use crate::view::Record;
const DISTRIBUTION_DATA_SOURCE: &[&str] =
&["IfcExternalReference", "IfcLightIntensityDistribution"];
#[derive(Debug, Clone, Copy)]
pub struct LightSourceGoniometric<'m, 's> {
record: Record<'m, 's>,
}
impl<'m, 's> LightSourceGoniometric<'m, 's> {
pub(crate) fn from_record(record: Record<'m, 's>) -> Self {
Self { record }
}
pub fn light_source(&self) -> LightSource<'m, 's> {
LightSource::from_record(self.record)
}
pub fn position(&self) -> StyleResult<EntityId> {
self.record.required_ref("Position", "IfcAxis2Placement3D")
}
pub fn colour_appearance(&self) -> StyleResult<Option<EntityId>> {
self.record.optional_ref("ColourAppearance", "IfcColourRgb")
}
pub fn colour_temperature(&self) -> StyleResult<f64> {
self.record.required_number("ColourTemperature")
}
pub fn luminous_flux(&self) -> StyleResult<f64> {
self.record.required_number("LuminousFlux")
}
pub fn light_emission_source(&self) -> StyleResult<&'m str> {
self.record.required_enum("LightEmissionSource")
}
pub fn light_distribution_data_source(&self) -> StyleResult<EntityId> {
self.record.required_ref_select(
"LightDistributionDataSource",
"IfcLightDistributionDataSourceSelect",
DISTRIBUTION_DATA_SOURCE,
)
}
}