From 86ec618327e4d88d07cb4c54b9dd7bb4a603b445 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Tue, 24 Sep 2024 11:30:05 +0500 Subject: [PATCH] ifcopenshell.stream - add simple test --- src/ifcopenshell-python/test/files/basic.ifc | 77 ++++++++++++++++++++ src/ifcopenshell-python/test/test_stream.py | 47 ++++++++++++ 2 files changed, 124 insertions(+) create mode 100644 src/ifcopenshell-python/test/files/basic.ifc create mode 100644 src/ifcopenshell-python/test/test_stream.py diff --git a/src/ifcopenshell-python/test/files/basic.ifc b/src/ifcopenshell-python/test/files/basic.ifc new file mode 100644 index 0000000000..b38ea13997 --- /dev/null +++ b/src/ifcopenshell-python/test/files/basic.ifc @@ -0,0 +1,77 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition[DesignTransferView]'),'2;1'); +FILE_NAME('simple.ifc','2024-09-24T10:19:09+05:00',(''),(''),'IfcOpenShell 0.0.0','Bonsai 0.8.1-alpha240909-de29f0d','Nobody'); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('3kv235yMjDO9tHiTzD8QuS',$,'My Project',$,$,$,$,(#14,#26),#9); +#2=IFCSIUNIT(*,.LENGTHUNIT.,$,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,$,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,$,.CUBIC_METRE.); +#5=IFCDIMENSIONALEXPONENTS(0,0,0,0,0,0,0); +#6=IFCSIUNIT(*,.PLANEANGLEUNIT.,$,.RADIAN.); +#7=IFCMEASUREWITHUNIT(IFCREAL(0.0174532925199433),#6); +#8=IFCCONVERSIONBASEDUNIT(#5,.PLANEANGLEUNIT.,'degree',#7); +#9=IFCUNITASSIGNMENT((#8,#3,#4,#2)); +#10=IFCCARTESIANPOINT((0.,0.,0.)); +#11=IFCDIRECTION((0.,0.,1.)); +#12=IFCDIRECTION((1.,0.,0.)); +#13=IFCAXIS2PLACEMENT3D(#10,#11,#12); +#14=IFCGEOMETRICREPRESENTATIONCONTEXT($,'Model',3,1.E-05,#13,$); +#15=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Body','Model',*,*,*,*,#14,$,.MODEL_VIEW.,$); +#16=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Axis','Model',*,*,*,*,#14,$,.GRAPH_VIEW.,$); +#17=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Box','Model',*,*,*,*,#14,$,.MODEL_VIEW.,$); +#18=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Annotation','Model',*,*,*,*,#14,$,.SECTION_VIEW.,$); +#19=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Annotation','Model',*,*,*,*,#14,$,.ELEVATION_VIEW.,$); +#20=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Annotation','Model',*,*,*,*,#14,$,.MODEL_VIEW.,$); +#21=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Annotation','Model',*,*,*,*,#14,$,.PLAN_VIEW.,$); +#22=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Profile','Model',*,*,*,*,#14,$,.ELEVATION_VIEW.,$); +#23=IFCCARTESIANPOINT((0.,0.)); +#24=IFCDIRECTION((1.,0.)); +#25=IFCAXIS2PLACEMENT2D(#23,#24); +#26=IFCGEOMETRICREPRESENTATIONCONTEXT($,'Plan',2,1.E-05,#25,$); +#27=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Axis','Plan',*,*,*,*,#26,$,.GRAPH_VIEW.,$); +#28=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Body','Plan',*,*,*,*,#26,$,.PLAN_VIEW.,$); +#29=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Annotation','Plan',*,*,*,*,#26,$,.PLAN_VIEW.,$); +#30=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Annotation','Plan',*,*,*,*,#26,$,.REFLECTED_PLAN_VIEW.,$); +#31=IFCSITE('28uvBpFyH6$wV_xdXBcxs5',$,'My Site',$,$,#54,$,$,$,$,$,$,$,$); +#37=IFCBUILDING('2O7wp_Y998t9AqwuADKLOw',$,'My Building',$,$,#60,$,$,$,$,$,$); +#43=IFCBUILDINGSTOREY('3ZWkJ5Z0f7ue2_fvi3MZMP',$,'My Storey',$,$,#66,$,$,$,$); +#49=IFCRELAGGREGATES('1pyuIX$Hf7WxKiPjDpddJO',$,$,$,#1,(#31)); +#50=IFCCARTESIANPOINT((0.,0.,0.)); +#51=IFCDIRECTION((0.,0.,1.)); +#52=IFCDIRECTION((1.,0.,0.)); +#53=IFCAXIS2PLACEMENT3D(#50,#51,#52); +#54=IFCLOCALPLACEMENT($,#53); +#55=IFCRELAGGREGATES('1ZwcrXBcT6tOIzpuPVSrMo',$,$,$,#31,(#37)); +#56=IFCCARTESIANPOINT((0.,0.,0.)); +#57=IFCDIRECTION((0.,0.,1.)); +#58=IFCDIRECTION((1.,0.,0.)); +#59=IFCAXIS2PLACEMENT3D(#56,#57,#58); +#60=IFCLOCALPLACEMENT(#54,#59); +#61=IFCRELAGGREGATES('0W0RC2ScLEPu85NSJp2qA9',$,$,$,#37,(#43)); +#62=IFCCARTESIANPOINT((0.,0.,0.)); +#63=IFCDIRECTION((0.,0.,1.)); +#64=IFCDIRECTION((1.,0.,0.)); +#65=IFCAXIS2PLACEMENT3D(#62,#63,#64); +#66=IFCLOCALPLACEMENT(#60,#65); +#69=IFCACTUATOR('0IsfoyWNPD6fjgrV6Lb1eP',$,'Actuator',$,$,#85,#80,$,.ELECTRICACTUATOR.); +#70=IFCRELCONTAINEDINSPATIALSTRUCTURE('24TYZUJp1A_QOmCaw9tR$O',$,$,$,(#69),#43); +#71=IFCCARTESIANPOINTLIST3D(((-0.25,-0.25,-0.25),(-0.25,-0.25,0.25),(-0.25,0.25,-0.25),(-0.25,0.25,0.25),(0.25,-0.25,-0.25),(0.25,-0.25,0.25),(0.25,0.25,-0.25),(0.25,0.25,0.25))); +#72=IFCINDEXEDPOLYGONALFACE((1,2,4,3)); +#73=IFCINDEXEDPOLYGONALFACE((3,4,8,7)); +#74=IFCINDEXEDPOLYGONALFACE((7,8,6,5)); +#75=IFCINDEXEDPOLYGONALFACE((5,6,2,1)); +#76=IFCINDEXEDPOLYGONALFACE((3,7,5,1)); +#77=IFCINDEXEDPOLYGONALFACE((8,4,2,6)); +#78=IFCPOLYGONALFACESET(#71,$,(#72,#73,#74,#75,#76,#77),$); +#79=IFCSHAPEREPRESENTATION(#15,'Body','Tessellation',(#78)); +#80=IFCPRODUCTDEFINITIONSHAPE($,$,(#79)); +#81=IFCCARTESIANPOINT((0.,0.,0.)); +#82=IFCDIRECTION((0.,0.,1.)); +#83=IFCDIRECTION((1.,0.,0.)); +#84=IFCAXIS2PLACEMENT3D(#81,#82,#83); +#85=IFCLOCALPLACEMENT(#66,#84); +ENDSEC; +END-ISO-10303-21; diff --git a/src/ifcopenshell-python/test/test_stream.py b/src/ifcopenshell-python/test/test_stream.py new file mode 100644 index 0000000000..f9c3b1c710 --- /dev/null +++ b/src/ifcopenshell-python/test/test_stream.py @@ -0,0 +1,47 @@ +# IfcOpenShell - IFC toolkit and geometry engine +# Copyright (C) 2021 Thomas Krijnen +# +# This file is part of IfcOpenShell. +# +# IfcOpenShell is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# IfcOpenShell is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with IfcOpenShell. If not, see . + +import pytest +import test.bootstrap +import ifcopenshell +from pathlib import Path + +TEST_FILE = Path(__file__).parent / "files" / "basic.ifc" + + +class TestFile: + def test_run(self): + stream_file = ifcopenshell.open(TEST_FILE, should_stream=True) + assert stream_file.schema == "IFC4" + + def test_by_id(self): + stream_file = ifcopenshell.open(TEST_FILE, should_stream=True) + assert (element := stream_file.by_id(1)) + assert str(element) == "#1=IFCPROJECT('3kv235yMjDO9tHiTzD8QuS',$,'My Project',$,$,$,$,(#14,#26),#9);" + + def test_by_type(self): + stream_file = ifcopenshell.open(TEST_FILE, should_stream=True) + assert (elements := stream_file.by_type("IfcProject")) + assert str(elements[0]) == "#1=IFCPROJECT('3kv235yMjDO9tHiTzD8QuS',$,'My Project',$,$,$,$,(#14,#26),#9);" + + +class TestEntity: + def test_getattr(self): + stream_file = ifcopenshell.open(TEST_FILE, should_stream=True) + assert (element := stream_file.by_id(1)) + assert element.Name == "My Project"