From fc3c6599c72f8e39db907e9a237e97b33d5b5036 Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Wed, 11 Jan 2023 12:48:53 +0100 Subject: [PATCH] WR test cases for MLS / usedin() --- .../fixtures/rules/fail-wall-mls-ifc2x3.ifc | 20 ++++++++++++++ .../rules/fail-wall-no-mls-ifc2x3.ifc | 17 ++++++++++++ .../test/fixtures/rules/generate_17.py | 26 +++++++++++++++++++ .../fixtures/rules/pass-wall-mlsu-ifc2x3.ifc | 21 +++++++++++++++ 4 files changed, 84 insertions(+) create mode 100644 src/ifcopenshell-python/test/fixtures/rules/fail-wall-mls-ifc2x3.ifc create mode 100644 src/ifcopenshell-python/test/fixtures/rules/fail-wall-no-mls-ifc2x3.ifc create mode 100644 src/ifcopenshell-python/test/fixtures/rules/generate_17.py create mode 100644 src/ifcopenshell-python/test/fixtures/rules/pass-wall-mlsu-ifc2x3.ifc diff --git a/src/ifcopenshell-python/test/fixtures/rules/fail-wall-mls-ifc2x3.ifc b/src/ifcopenshell-python/test/fixtures/rules/fail-wall-mls-ifc2x3.ifc new file mode 100644 index 0000000000..1cd11d3309 --- /dev/null +++ b/src/ifcopenshell-python/test/fixtures/rules/fail-wall-mls-ifc2x3.ifc @@ -0,0 +1,20 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-12-25T12:56:47',(),(),'IfcOpenShell v0.7.0-fa6bbf2d','IfcOpenShell v0.7.0-fa6bbf2d',''); +FILE_SCHEMA(('IFC2X3')); +ENDSEC; +DATA; +#1=IFCPERSON('tfk',$,'Thomas',$,$,$,$,$); +#2=IFCORGANIZATION($,'AECgeeks',$,$,$); +#3=IFCPERSONANDORGANIZATION(#1,#2,$); +#4=IFCAPPLICATION(#2,'v0.7.0-fa6bbf2d','IfcOpenShell','IfcOpenShell v0.7.0-fa6bbf2d'); +#5=IFCSIUNIT(*,.LENGTHUNIT.,$,.METRE.); +#6=IFCUNITASSIGNMENT((#5)); +#7=IFCOWNERHISTORY(#3,#4,$,.ADDED.,$,$,$,1671969407); +#8=IFCWALLSTANDARDCASE('3A0qnrKy5ALRxyzNP1mYaN',#7,$,$,$,$,$,$); +#9=IFCMATERIALLAYER($,0.1,$); +#10=IFCMATERIALLAYERSET((#9),$); +#11=IFCRELASSOCIATESMATERIAL('2B7uDMC_v8wOWBBvP1Vtcc',#7,$,$,(#8),#10); +ENDSEC; +END-ISO-10303-21; diff --git a/src/ifcopenshell-python/test/fixtures/rules/fail-wall-no-mls-ifc2x3.ifc b/src/ifcopenshell-python/test/fixtures/rules/fail-wall-no-mls-ifc2x3.ifc new file mode 100644 index 0000000000..90a2dbb29b --- /dev/null +++ b/src/ifcopenshell-python/test/fixtures/rules/fail-wall-no-mls-ifc2x3.ifc @@ -0,0 +1,17 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-12-25T12:56:47',(),(),'IfcOpenShell v0.7.0-fa6bbf2d','IfcOpenShell v0.7.0-fa6bbf2d',''); +FILE_SCHEMA(('IFC2X3')); +ENDSEC; +DATA; +#1=IFCPERSON('tfk',$,'Thomas',$,$,$,$,$); +#2=IFCORGANIZATION($,'AECgeeks',$,$,$); +#3=IFCPERSONANDORGANIZATION(#1,#2,$); +#4=IFCAPPLICATION(#2,'v0.7.0-fa6bbf2d','IfcOpenShell','IfcOpenShell v0.7.0-fa6bbf2d'); +#5=IFCSIUNIT(*,.LENGTHUNIT.,$,.METRE.); +#6=IFCUNITASSIGNMENT((#5)); +#7=IFCOWNERHISTORY(#3,#4,$,.ADDED.,$,$,$,1671969407); +#8=IFCWALLSTANDARDCASE('313_Ms2Mn4GvZ$AjGfM64i',#7,$,$,$,$,$,$); +ENDSEC; +END-ISO-10303-21; diff --git a/src/ifcopenshell-python/test/fixtures/rules/generate_17.py b/src/ifcopenshell-python/test/fixtures/rules/generate_17.py new file mode 100644 index 0000000000..028ea4cc3c --- /dev/null +++ b/src/ifcopenshell-python/test/fixtures/rules/generate_17.py @@ -0,0 +1,26 @@ +import time +import ifcopenshell + +for i, nm in enumerate(("no-mls", "mls", "mlsu")): + f = ifcopenshell.file(schema="IFC2X3") + p = f.createIfcPerson(Id="tfk", GivenName="Thomas") + o = f.createIfcOrganization(Name="AECgeeks") + pando = f.createIfcPersonAndOrganization(p, o) + appl = f.createIfcApplication(o, ifcopenshell.version, "IfcOpenShell", f"IfcOpenShell {ifcopenshell.version}") + units = f.createIfcUnitAssignment(Units=[f.createIfcSIUnit(None, "LENGTHUNIT", None, "METRE")]) + ownerhist = f.createIfcOwnerHistory(pando, appl, ChangeAction="ADDED", CreationDate=int(time.time())) + wall = f.createIfcWallStandardCase( + ifcopenshell.guid.new(), + ownerhist + ) + if i in (1,2): + mls = f.createIfcMaterialLayerSet([f.createIfcMaterialLayer(None, 0.1)]) + if i == 2: + mls = f.createIfcMaterialLayerSetUsage(mls, 'AXIS2', 'POSITIVE', 0.) + f.createIfcRelAssociatesMaterial( + ifcopenshell.guid.new(), + ownerhist, + RelatedObjects=[wall], + RelatingMaterial=mls + ) + f.write(f"{'pass' if i == 2 else 'fail'}-wall-{nm}-ifc2x3.ifc") diff --git a/src/ifcopenshell-python/test/fixtures/rules/pass-wall-mlsu-ifc2x3.ifc b/src/ifcopenshell-python/test/fixtures/rules/pass-wall-mlsu-ifc2x3.ifc new file mode 100644 index 0000000000..e84b12d317 --- /dev/null +++ b/src/ifcopenshell-python/test/fixtures/rules/pass-wall-mlsu-ifc2x3.ifc @@ -0,0 +1,21 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2022-12-25T12:56:47',(),(),'IfcOpenShell v0.7.0-fa6bbf2d','IfcOpenShell v0.7.0-fa6bbf2d',''); +FILE_SCHEMA(('IFC2X3')); +ENDSEC; +DATA; +#1=IFCPERSON('tfk',$,'Thomas',$,$,$,$,$); +#2=IFCORGANIZATION($,'AECgeeks',$,$,$); +#3=IFCPERSONANDORGANIZATION(#1,#2,$); +#4=IFCAPPLICATION(#2,'v0.7.0-fa6bbf2d','IfcOpenShell','IfcOpenShell v0.7.0-fa6bbf2d'); +#5=IFCSIUNIT(*,.LENGTHUNIT.,$,.METRE.); +#6=IFCUNITASSIGNMENT((#5)); +#7=IFCOWNERHISTORY(#3,#4,$,.ADDED.,$,$,$,1671969407); +#8=IFCWALLSTANDARDCASE('0UESs$hdv87RIdHOSrIF3B',#7,$,$,$,$,$,$); +#9=IFCMATERIALLAYER($,0.1,$); +#10=IFCMATERIALLAYERSET((#9),$); +#11=IFCMATERIALLAYERSETUSAGE(#10,.AXIS2.,.POSITIVE.,0.); +#12=IFCRELASSOCIATESMATERIAL('1kPrksfuLC2uYKxDq_Z6_W',#7,$,$,(#8),#11); +ENDSEC; +END-ISO-10303-21;