Geolocation micromvd now supports checking true north

This commit is contained in:
Dion Moult
2021-04-07 16:08:02 +10:00
parent ae0789e4ec
commit 41141b8fc9
@@ -1,6 +1,8 @@
import math
import numpy as np
import ifcopenshell
import ifcopenshell.util.element
import ifcopenshell.util.placement
import ifcopenshell.util.geolocation
from behave import step
from bimtester import util
@@ -186,6 +188,26 @@ def step_impl(context, number):
check_ifc4_geolocation("IfcMapConversion", "Scale", number)
@step(u'The model must be rotated clockwise by "{number}" for true north to point up')
def step_impl(context, number):
number = util.assert_number(number)
project = IfcStore.file.by_type("IfcProject")[0]
for c in project.RepresentationContexts:
if c.TrueNorth:
actual_value = round(
ifcopenshell.util.geolocation.yaxis2angle(
c.TrueNorth.DirectionRatios[0], c.TrueNorth.DirectionRatios[1]
),
3,
)
value = round(number, 3)
assert actual_value == value, _('We expected a value of "{}" but instead got "{}"').format(
value, actual_value
)
return
assert False, _("True north is not defined in the file")
@step(u'The site "{guid}" has a longitude of "{number}"')
def step_impl(context, guid, number):
number = util.assert_number(number)
@@ -212,3 +234,14 @@ def step_impl(context, guid, number):
site = util.assert_guid(IfcStore.file, guid)
util.assert_type(site, "IfcSite")
util.assert_attribute(site, "RefElevation", number)
@step(u'The site "{guid}" must be coincident with the project origin')
def step_impl(context, guid):
site = util.assert_guid(IfcStore.file, guid)
util.assert_type(site, "IfcSite")
if not site.ObjectPlacement:
assert False, _("The site has no object placement")
site_placement = ifcopenshell.util.placement.get_local_placement(site.ObjectPlacement)[:,3][0:3]
origin = np.array([0, 0, 0])
assert np.allclose(origin, site_placement), _('The site location is at "{}" instead of "{}"')