diff --git a/Cargo.lock b/Cargo.lock index 2d83207..aa858fc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -222,7 +222,7 @@ dependencies = [ [[package]] name = "enok" -version = "0.4.7" +version = "0.4.8" dependencies = [ "anyhow", "approx", diff --git a/Cargo.toml b/Cargo.toml index e6d3e14..2cc592b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "enok" -version = "0.4.7" +version = "0.4.8" edition = "2021" description = "Årlig energiberegning og energirapport for boliger etter NS 3031 (timesmetode, ISO 52016-1)" license = "MIT" diff --git a/src/inndata/ifc.rs b/src/inndata/ifc.rs index ecd22ed..f471554 100644 --- a/src/inndata/ifc.rs +++ b/src/inndata/ifc.rs @@ -187,6 +187,7 @@ pub fn fra_tekst_med(tekst: &str, standardnavn: &str, valg: &Importvalg) -> Resu normal: flate.map(|f| f.normal), z: plass.map(|p| p.2).unwrap_or(0.0) + flate.map(|f| f.hoyde).unwrap_or(0.0), topp: plass.map(|p| p.2).unwrap_or(0.0) + flate.map(|f| f.topp).unwrap_or(0.0), + omkrets: flate.map(|f| f.omkrets()).unwrap_or(0.0), }); } @@ -391,7 +392,8 @@ pub fn fra_tekst_med(tekst: &str, standardnavn: &str, valg: &Importvalg) -> Resu mot, b_faktor: None, absorptans: None, - omkrets: None, + omkrets: (typ == FlateType::Gulv && mot == Mot::Grunn && d.omkrets > 0.0) + .then_some(d.omkrets), dybde: (i_kjeller && mot == Mot::Grunn).then_some(kjellerdybde - over_bakken), over_terreng: (i_kjeller && mot == Mot::Grunn).then_some(over_bakken), sone, @@ -1320,6 +1322,8 @@ struct Del { z: f64, /// Overkanten av delen over byggets nullpunkt, m. For en kjellervegg er det overkant mur. topp: f64, + /// Omkretsen av delens omriss, m. Et gulv mot grunnen trenger den for B′. + omkrets: f64, } /// Oversetter en fritekstverdi fra modellen til en bygningskategori. diff --git a/src/inndata/ifcgeom.rs b/src/inndata/ifcgeom.rs index ba0e118..539e37a 100644 --- a/src/inndata/ifcgeom.rs +++ b/src/inndata/ifcgeom.rs @@ -224,6 +224,22 @@ fn overlapper(a: &[f64; 4], b: &[f64; 4]) -> bool { dekning(a[0], a[1], b[0], b[1]) && dekning(a[2], a[3], b[2], b[3]) } +impl Hovedflate { + /// Omkretsen av flatens omriss, m, regnet av utstrekningen i flatens eget plan. + /// + /// Et gulv mot grunnen trenger omkretsen for B′ etter NS-EN ISO 13370. Omrisset regnes + /// som et rektangel, som stemmer godt for de fleste grunnflater. + pub fn omkrets(&self) -> f64 { + let bredde = self.plan[1] - self.plan[0]; + let lengde = self.plan[3] - self.plan[2]; + if bredde > 0.0 && lengde > 0.0 { + 2.0 * (bredde + lengde) + } else { + 0.0 + } + } +} + /// Henter geometrien til et produkt via `Representation`, med én oppføring per geometridel. pub fn netter_for_produkt(fil: &Fil, representasjon: Option) -> Vec { let mut deler = Vec::new();