mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-06 07:51:47 +00:00
Add test case
This commit is contained in:
@@ -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__])
|
||||||
Reference in New Issue
Block a user