Add test case

This commit is contained in:
Thomas Krijnen
2025-08-26 13:25:18 +02:00
parent 8888e45115
commit ff3fa48332
2 changed files with 208 additions and 0 deletions
@@ -0,0 +1,145 @@
ISO-10303-21;
HEADER;
FILE_DESCRIPTION(('ViewDefinition [CoordinationView]','RevitIdentifiers [ContentGUID: a0df3484-2dab-42c5-b806-8c10d313bee0, VersionGUID: 658c1394-f3a4-43d1-9b3c-eee44a0cd67a, NumberOfSaves: 2]','CoordinateReference [CoordinateBase: Shared Coordinates]'),'2;1');
FILE_NAME('Column_4x3.ifc','2025-03-12T13:53:30+00:00',(''),(''),'ODA SDAI 24.12','Autodesk Revit 25.4.0.32 (ENG) - IFC 25.4.0.32','');
FILE_SCHEMA(('IFC4X3_ADD2'));
ENDSEC;
DATA;
#1=IFCORGANIZATION($,'Autodesk Revit 2025 (ENG)',$,$,$);
#2=IFCAPPLICATION(#1,'2025','Autodesk Revit 2025 (ENG)','Revit');
#3=IFCCARTESIANPOINT((0.,0.,0.));
#4=IFCCARTESIANPOINT((0.,0.));
#5=IFCDIRECTION((1.,0.,0.));
#6=IFCDIRECTION((-1.,0.,0.));
#7=IFCDIRECTION((0.,1.,0.));
#8=IFCDIRECTION((0.,-1.,0.));
#9=IFCDIRECTION((0.,0.,1.));
#10=IFCDIRECTION((0.,0.,-1.));
#11=IFCDIRECTION((1.,0.));
#12=IFCDIRECTION((-1.,0.));
#13=IFCDIRECTION((0.,1.));
#14=IFCDIRECTION((0.,-1.));
#15=IFCPERSON($,'','sfriston',$,$,$,$,$);
#16=IFCORGANIZATION($,'','',$,$);
#17=IFCPERSONANDORGANIZATION(#15,#16,$);
#18=IFCOWNERHISTORY(#17,#2,$,.NOCHANGE.,$,$,$,1741776819);
#19=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.);
#20=IFCAXIS2PLACEMENT3D(#3,$,$);
#21=IFCDIRECTION((6.12323399573677E-17,1.));
#22=IFCGEOMETRICREPRESENTATIONCONTEXT($,'Model',3,0.01,#20,#21);
#23=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Axis','Model',*,*,*,*,#22,$,.GRAPH_VIEW.,$);
#24=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Body','Model',*,*,*,*,#22,$,.MODEL_VIEW.,$);
#25=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Box','Model',*,*,*,*,#22,$,.MODEL_VIEW.,$);
#26=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('FootPrint','Model',*,*,*,*,#22,$,.MODEL_VIEW.,$);
#27=IFCPROJECT('2WtpI4BQj2nRW6Z10ix44G',#18,'Project Number',$,$,'Project Name','Project Status',(#22),#134);
#28=IFCCLASSIFICATION('CSI (Construction Specifications Institute)','1998',$,'Uniformat','UniFormat Classification','https://www.csiresources.org/standards/uniformat',$);
#29=IFCAXIS2PLACEMENT3D(#3,$,$);
#30=IFCLOCALPLACEMENT(#41,#29);
#31=IFCPOSTALADDRESS($,$,$,$,('Enter address here'),$,'London','London','','United Kingdom');
#32=IFCBUILDING('2WtpI4BQj2nRW6Z10ix44H',#18,'',$,$,#30,$,'',.ELEMENT.,$,$,#31);
#33=IFCAXIS2PLACEMENT3D(#3,$,$);
#34=IFCLOCALPLACEMENT(#30,#33);
#35=IFCBUILDINGSTOREY('3Zu5Bv0LOHrPC10026FoQQ',#18,'Level 0',$,'Level:Circle Head - Project Datum',#34,$,'Level 0',.ELEMENT.,0.);
#36=IFCCARTESIANPOINT((0.,0.,4000.));
#37=IFCAXIS2PLACEMENT3D(#36,$,$);
#38=IFCLOCALPLACEMENT(#30,#37);
#39=IFCBUILDINGSTOREY('15Z0v90RiHrPC20026FoKR',#18,'Level 1',$,'Level:Circle Head - Project Datum',#38,$,'Level 1',.ELEMENT.,4000.);
#40=IFCAXIS2PLACEMENT3D(#3,$,$);
#41=IFCLOCALPLACEMENT($,#40);
#42=IFCSITE('2WtpI4BQj2nRW6Z10ix44I',#18,'Default',$,$,#41,$,$,.ELEMENT.,(51,30,23,112487),(0,-7,-37,-956022),0.,$,$);
#43=IFCPROPERTYSINGLEVALUE('Reference',$,IFCIDENTIFIER('Project Information'),$);
#44=IFCPROPERTYSET('2eqIbmOAscNen5$6huR8Xq',#18,'Pset_SiteCommon',$,(#43));
#45=IFCPROPERTYSINGLEVALUE('IsExternal',$,IFCBOOLEAN(.F.),$);
#46=IFCPROPERTYSET('23aMNsN69_fPNNwy7k03QC',#18,'Pset_SpaceCommon',$,(#43,#45));
#47=IFCRELDEFINESBYPROPERTIES('3Y58BrwSEMG4WuDkCGbgWd',#18,$,$,(#42),#44);
#48=IFCRELDEFINESBYPROPERTIES('0HzXjYMsQZ24nGDtNrqPeG',#18,$,$,(#42),#46);
#51=IFCAXIS2PLACEMENT3D(#3,$,$);
#53=IFCCARTESIANPOINT((0.,0.));
#54=IFCAXIS2PLACEMENT2D(#53,#11);
#55=IFCISHAPEPROFILEDEF(.AREA.,'UC305x305x97',#54,305.3,307.9,9.90000000000002,15.4,15.2,$,$);
#56=IFCCARTESIANPOINT((-0.,0.,-2500.));
#57=IFCAXIS2PLACEMENT3D(#56,#9,#6);
#58=IFCEXTRUDEDAREASOLID(#55,#57,#9,2500.);
#59=IFCSIUNIT(*,.PLANEANGLEUNIT.,$,.RADIAN.);
#60=IFCDIMENSIONALEXPONENTS(0,0,0,0,0,0,0);
#61=IFCMEASUREWITHUNIT(IFCPLANEANGLEMEASURE(0.0174532925199433),#59);
#62=IFCCONVERSIONBASEDUNIT(#60,.PLANEANGLEUNIT.,'DEGREE',#61);
#63=IFCSIUNIT(*,.AREAUNIT.,$,.SQUARE_METRE.);
#64=IFCCOLOURRGB($,0.968627450980392,0.968627450980392,0.968627450980392);
#65=IFCSURFACESTYLERENDERING(#64,0.,$,$,$,$,IFCNORMALISEDRATIOMEASURE(0.5),IFCSPECULAREXPONENT(128.),.NOTDEFINED.);
#66=IFCSURFACESTYLE('Metal - Steel 43-275',.BOTH.,(#65));
#67=IFCSTYLEDITEM(#58,(#66),$);
#68=IFCSHAPEREPRESENTATION(#24,'Body','SweptSolid',(#58));
#69=IFCAXIS2PLACEMENT3D(#3,$,$);
#70=IFCREPRESENTATIONMAP(#69,#68);
#71=IFCCOLUMNTYPE('1xkS0AgRTExwh4MNwOgZlD',#18,'UC-Universal Columns-Column:UC305x305x97',$,$,(#104),(#70),'12190',$,.COLUMN.);
#72=IFCMATERIAL('Metal - Steel 43-275',$,'Metal');
#73=IFCCOLOURRGB($,0.,0.,0.);
#74=IFCDRAUGHTINGPREDEFINEDCURVEFONT('continuous');
#75=IFCCURVESTYLE($,#74,$,#73,$);
#76=IFCFILLAREASTYLEHATCHING(#75,IFCPOSITIVELENGTHMEASURE(355.6),$,#4,45.);
#77=IFCCURVESTYLE($,#74,$,#73,$);
#78=IFCCARTESIANPOINT((0.,381.));
#79=IFCFILLAREASTYLEHATCHING(#77,IFCPOSITIVELENGTHMEASURE(355.6),$,#78,45.);
#80=IFCFILLAREASTYLE('Steel',(#76,#79),$);
#81=IFCSTYLEDITEM($,(#66,#80),$);
#82=IFCSTYLEDREPRESENTATION(#22,'Style','Material and Cut Pattern',(#81));
#83=IFCMATERIALDEFINITIONREPRESENTATION($,$,(#82),#72);
#84=IFCMATERIALPROFILE('UC305x305x97',$,#72,#55,$,$);
#85=IFCMATERIALPROFILESET('UC305x305x97',$,(#84),$);
#86=IFCCARTESIANTRANSFORMATIONOPERATOR3D($,$,#3,1.,$);
#87=IFCMAPPEDITEM(#70,#86);
#88=IFCSHAPEREPRESENTATION(#24,'Body','MappedRepresentation',(#87));
#89=IFCPRODUCTDEFINITIONSHAPE($,$,(#88));
#90=IFCCARTESIANPOINT((-384.581868533682,-142.731561117908,0.));
#91=IFCAXIS2PLACEMENT3D(#90,$,$);
#92=IFCLOCALPLACEMENT(#34,#91);
#93=IFCCOLUMN('1xkS0AgRTExwh4MNwOgZlF',#18,'UC-Universal Columns-Column:UC305x305x97:323405',$,'UC-Universal Columns-Column:UC305x305x97',#92,#89,'323405',.COLUMN.);
#94=IFCMATERIALPROFILESETUSAGE(#85,$,$);
#95=IFCPROPERTYSINGLEVALUE('Reference',$,IFCIDENTIFIER('UC305x305x97'),$);
#96=IFCPROPERTYSINGLEVALUE('LoadBearing',$,IFCBOOLEAN(.T.),$);
#97=IFCPROPERTYSET('2Kyssv$kPduAY5HpYkdCrw',#18,'Pset_ColumnCommon',$,(#45,#95,#96));
#98=IFCPROPERTYSET('2E7Xcrf_DiKNFkQbRhLvWM',#18,'Pset_EnvironmentalImpactIndicators',$,(#95));
#99=IFCPROPERTYSINGLEVALUE('Reference',$,IFCLABEL('UC305x305x97'),$);
#100=IFCPROPERTYSET('1sLpijh_wqTpS_F_2QKBAo',#18,'Pset_ReinforcementBarPitchOfColumn',$,(#99));
#101=IFCRELDEFINESBYPROPERTIES('3_kOamSQVXh_EoGxsxage3',#18,$,$,(#93),#97);
#102=IFCRELDEFINESBYPROPERTIES('15Go3bkBxe46jug3ptPJu$',#18,$,$,(#93),#98);
#103=IFCRELDEFINESBYPROPERTIES('1pHUPkPxgww0bggyxncELu',#18,$,$,(#93),#100);
#104=IFCPROPERTYSET('0AQD0eY0wih1QOXNiuj$Qc',#18,'Pset_ColumnCommon',$,(#96));
#105=IFCPROPERTYSINGLEVALUE('Reference',$,IFCIDENTIFIER('Circle Head - Project Datum'),$);
#106=IFCPROPERTYSINGLEVALUE('AboveGround',$,IFCLOGICAL(.F.),$);
#107=IFCPROPERTYSET('2QFFSloDKLdASEirlNrsWG',#18,'Pset_BuildingStoreyCommon',$,(#105,#106));
#108=IFCPROPERTYSET('2khPkDg4bBoX9QFSHYxSac',#18,'Pset_SpaceCommon',$,(#45,#105));
#109=IFCRELDEFINESBYPROPERTIES('24vWbHxUvnwTMhwrnGQFQP',#18,$,$,(#35),#107);
#110=IFCRELDEFINESBYPROPERTIES('2H1toi6agC_mYxUZT$TnC9',#18,$,$,(#35),#108);
#111=IFCRELCONTAINEDINSPATIALSTRUCTURE('3Zu5Bv0LOHrPC10066FoQQ',#18,$,$,(#93),#35);
#112=IFCPROPERTYSET('2y6jqut2mGsxPM5c1zUPr2',#18,'Pset_BuildingStoreyCommon',$,(#105,#106));
#113=IFCPROPERTYSET('0gGGxtUVcimZNbYugu0sB_',#18,'Pset_SpaceCommon',$,(#45,#105));
#114=IFCRELDEFINESBYPROPERTIES('03h9WtlPXy$ENv9AiS5UZC',#18,$,$,(#39),#112);
#115=IFCRELDEFINESBYPROPERTIES('2TN3LdVu1OLnLXbjiOXGUP',#18,$,$,(#39),#113);
#116=IFCRELAGGREGATES('2PcN$ItYEMyBNCqPOl6HsC',#18,$,$,#27,(#42));
#117=IFCRELAGGREGATES('25zzFe0MOSV8bFW$lLhYMm',#18,$,$,#42,(#32));
#118=IFCRELAGGREGATES('2$1LAsj$T3CPRLiPj39tWH',#18,$,$,#32,(#35,#39));
#119=IFCPROPERTYSINGLEVALUE('NumberOfStoreys',$,IFCCOUNTMEASURE(1),$);
#120=IFCPROPERTYSINGLEVALUE('IsLandmarked',$,IFCLOGICAL(.F.),$);
#121=IFCPROPERTYSET('3U5dlTKgNpdXvGG_h1UB1e',#18,'Pset_BuildingCommon',$,(#43,#119,#120));
#122=IFCPROPERTYSET('0qtiToowyEn_jqyPw36bkp',#18,'Pset_BuildingElementProxyCommon',$,(#43,#45));
#123=IFCPROPERTYSET('2Xe4e_z6nyyQBfJ9yOJXYv',#18,'Pset_BuildingStoreyCommon',$,(#43,#106));
#124=IFCPROPERTYSET('07mSmCWmizAULxEjtjvEjg',#18,'Pset_BuildingSystemCommon',$,(#43));
#125=IFCPROPERTYSET('1GCWRxA7BU8FaVCiUcq6nY',#18,'Pset_SpaceCommon',$,(#43,#45));
#126=IFCRELDEFINESBYPROPERTIES('3xYjKs1Tlm5uUJZprkLSk8',#18,$,$,(#32),#121);
#127=IFCRELDEFINESBYPROPERTIES('1Wd03xjOnSPTtTqMwLi2Lg',#18,$,$,(#32),#122);
#128=IFCRELDEFINESBYPROPERTIES('3j$dTd3Sjcf3$gHpCvuLB7',#18,$,$,(#32),#123);
#129=IFCRELDEFINESBYPROPERTIES('09MeCIXvuVClu2P8lIqAgG',#18,$,$,(#32),#124);
#130=IFCRELDEFINESBYPROPERTIES('2HoHooQ7$oNZlOP_3ex_aK',#18,$,$,(#32),#125);
#131=IFCRELASSOCIATESMATERIAL('2n2HQdKqzYK7QnaOEEelx_',#18,$,$,(#71),#85);
#132=IFCRELDEFINESBYTYPE('11G_CSisKD8eybmW1Vx0bN',#18,$,$,(#93),#71);
#133=IFCPRESENTATIONLAYERASSIGNMENT('S-280-M_COLUMN',$,(#68,#88),$);
#134=IFCUNITASSIGNMENT((#19,#62,#63));
#135=IFCPROPERTYSINGLEVALUE('Label',$,IFCLABEL('Pset 1'),$);
#136=IFCPROPERTYSET('2n2HQdKqzYK7QnaOEEelxy',$,'PSet_1',$,(#135));
#137=IFCPROPERTYSINGLEVALUE('Label',$,IFCLABEL('Pset 2'),$);
#138=IFCPROPERTYSET('2n2HQdKqzYK7QnaOEEelxz',$,'PSet_2',$,(#137));
#139=IFCRELDEFINESBYPROPERTIES('2n2HQdKqzYK7QnaOEEelzz',$,$,$,(#93),IFCPROPERTYSETDEFINITIONSET((#136,#138)));
ENDSEC;
END-ISO-10303-21;
@@ -0,0 +1,63 @@
# IfcOpenShell - IFC toolkit and geometry engine
# Copyright (C) 2021 Thomas Krijnen <thomas@aecgeeks.com>
#
# 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 <http://www.gnu.org/licenses/>.
import gc
import os
import struct
import pytest
import ifcopenshell
import tempfile
fn = os.path.join(os.path.dirname(__file__), "fixtures/ColumnPSetsOfSets.ifc")
def test_stream():
assert next(filter(lambda d: d.get("id") == 139, ifcopenshell.stream2(fn)))["RelatingPropertyDefinition"] == {
"type": "IfcPropertySetDefinitionSet",
"value": ({"ref": 136}, {"ref": 138}),
}
def test_file():
f = ifcopenshell.open(fn)
assert f[139].RelatingPropertyDefinition.is_a("IfcPropertySetDefinitionSet")
assert {x.id() for x in f[139].RelatingPropertyDefinition[0]} == {136, 138}
def test_rocks():
with tempfile.TemporaryDirectory() as d:
rfn = os.path.join(d, os.path.basename(fn))
ifcopenshell.convert_path_to_rocksdb(fn, rfn)
assert os.path.exists(rfn)
f = ifcopenshell.open(rfn)
assert f[139].RelatingPropertyDefinition.is_a("IfcPropertySetDefinitionSet")
assert {x.id() for x in f[139].RelatingPropertyDefinition[0]} == {136, 138}
b = f.wrapped_data.key_value_store_query("i|139|5")[2:]
iden = struct.unpack("Q", b)[0]
b = f.wrapped_data.key_value_store_query(f"t|{iden}|0")[1:]
assert set(struct.unpack("Q", b[i : i + 8])[0] for i in range(1, len(b), 9)) == {136, 138}
del f
gc.collect()
if __name__ == "__main__":
pytest.main(["-sx", __file__])