TestConvertFileLengthUnits - add attributes conversion tests

This commit is contained in:
Andrej730
2025-03-06 15:31:50 +05:00
parent e786687882
commit 14eb543662
@@ -17,11 +17,13 @@
# along with IfcOpenShell. If not, see <http://www.gnu.org/licenses/>. # along with IfcOpenShell. If not, see <http://www.gnu.org/licenses/>.
import test.bootstrap import test.bootstrap
import numpy as np
import ifcopenshell.api.unit import ifcopenshell.api.unit
import ifcopenshell.api.root import ifcopenshell.api.root
import ifcopenshell.api.georeference import ifcopenshell.api.georeference
import ifcopenshell.util.geolocation import ifcopenshell.util.geolocation
import ifcopenshell.util.unit as subject import ifcopenshell.util.unit as subject
from ifcopenshell.util.shape_builder import ShapeBuilder
from math import pi from math import pi
@@ -237,6 +239,34 @@ class TestConvertFileLengthUnits(test.bootstrap.IFC2X3):
output = subject.convert_file_length_units(self.file, target_units="METER") output = subject.convert_file_length_units(self.file, target_units="METER")
assert subject.get_full_unit_name(subject.get_project_unit(output, "LENGTHUNIT")) == "METRE" assert subject.get_full_unit_name(subject.get_project_unit(output, "LENGTHUNIT")) == "METRE"
def test_attribute_conversion(self):
ifcopenshell.api.root.create_entity(self.file, ifc_class="IfcProject")
unit = ifcopenshell.api.unit.add_si_unit(self.file, unit_type="LENGTHUNIT", prefix="MILLI")
builder = ShapeBuilder(self.file)
rectangle = builder.rectangle((100, 100))
extrusion = builder.extrude(rectangle, 1000)
ifcopenshell.api.unit.assign_unit(self.file, units=[unit])
output = subject.convert_file_length_units(self.file, target_units="METER")
assert subject.get_full_unit_name(subject.get_project_unit(output, "LENGTHUNIT")) == "METRE"
extrusion = output.by_type("IfcExtrudedAreaSolid")[0]
# Simple float attribute.
assert extrusion.Depth == 1
# List of floats in IFC2X3 and list of lists of floats in IFC4+.
rectangle = extrusion.SweptArea.OuterCurve
expected_points = [(0.0, 0.0), (0.1, 0.0), (0.1, 0.1), (0.0, 0.1)]
if self.file.schema == "IFC2X3":
# IfcPolyline.
points = [p.Coordinates for p in rectangle.Points]
expected_points += expected_points[:1]
else:
# IfcIndexedPolyCurve.
points = rectangle.Points.CoordList
assert np.allclose(points, expected_points)
def test_converting_map_conversion_if_there_is_no_map_unit(self): def test_converting_map_conversion_if_there_is_no_map_unit(self):
ifcopenshell.api.root.create_entity(self.file, ifc_class="IfcProject") ifcopenshell.api.root.create_entity(self.file, ifc_class="IfcProject")
unit = ifcopenshell.api.unit.add_si_unit(self.file, unit_type="LENGTHUNIT", prefix="MILLI") unit = ifcopenshell.api.unit.add_si_unit(self.file, unit_type="LENGTHUNIT", prefix="MILLI")