diff --git a/UnitTests/Schemas/IFC4X1/sectioned-solid-horizontal/CMakeLists.txt b/UnitTests/Schemas/IFC4X1/sectioned-solid-horizontal/CMakeLists.txt new file mode 100644 index 000000000..f88390f7b --- /dev/null +++ b/UnitTests/Schemas/IFC4X1/sectioned-solid-horizontal/CMakeLists.txt @@ -0,0 +1,20 @@ +# +# Copyright (c) 2021 Technical University of Munich +# Chair of Computational Modeling and Simulation. +# +# TUM Open Infra Platform is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License Version 3 +# as published by the Free Software Foundation. +# +# TUM Open Infra Platform 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# + +include(CreateUnitTests) + +CreateIfcFileVisualUnitTestForSchema(sectioned-solid-horizontal IFC4X1) diff --git a/UnitTests/Schemas/IFC4X1/sectioned-solid-horizontal/Data/sectioned-solid-horizontal.ifc b/UnitTests/Schemas/IFC4X1/sectioned-solid-horizontal/Data/sectioned-solid-horizontal.ifc new file mode 100644 index 000000000..469454fa3 --- /dev/null +++ b/UnitTests/Schemas/IFC4X1/sectioned-solid-horizontal/Data/sectioned-solid-horizontal.ifc @@ -0,0 +1,311 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('PGSuperExport.ifc','2021-06-18T10:23:00',('Richard Brice, PE'),('WSDOT'),'IfcOpenShell 0.6.0b0','BridgeLink:PGSuper Version 6.2.0.0',''); +FILE_SCHEMA(('IFC4X1')); +ENDSEC; +DATA; +#1=IFCDIMENSIONALEXPONENTS(0,0,0,0,0,0,0); +#2=IFCSIUNIT(*,.LENGTHUNIT.,$,.METRE.); +#3=IFCSIUNIT(*,.PLANEANGLEUNIT.,$,.RADIAN.); +#4=IFCUNITASSIGNMENT((#2,#3)); +#5=IFCPROJECT('0jKRhrenn0oAY4vPuEW$IC',$,'My Bridge Project',$,$,$,$,(#18),#4); +#6=IFCPERSON($,$,'',$,$,$,$,$); +#7=IFCORGANIZATION('Washington State Department of Transportation, Bridge and Structures Office','Richard Brice, PE',$,$,$); +#8=IFCPERSONANDORGANIZATION(#6,#7,$); +#9=IFCAPPLICATION(#7,'6.2.0.0','BridgeLink:PGSuper','PGSuper'); +#10=IFCOWNERHISTORY(#8,#9,$,.ADDED.,1624036980,#8,#9,1624036980); +#11=IFCDIRECTION((1.,0.,0.)); +#12=IFCDIRECTION((0.,0.,1.)); +#13=IFCCARTESIANPOINT((0.,0.,0.)); +#14=IFCAXIS2PLACEMENT3D(#13,#12,#11); +#15=IFCLOCALPLACEMENT($,#14); +#16=IFCSITE('1vEqF9vcD4DxuQ3IUQeCq5',#10,'My Bridge Project',$,$,#15,$,$,.ELEMENT.,$,$,$,$,$); +#17=IFCRELAGGREGATES('0$Hjd1_Af7URKUcYE$t6rw',#10,$,$,#5,(#16)); +#18=IFCGEOMETRICREPRESENTATIONCONTEXT('3D','Model',3,$,$,$); +#19=IFCCARTESIANPOINT((-39.624,0.)); +#20=IFCLINESEGMENT2D(#19,0.,139.624); +#21=IFCALIGNMENT2DHORIZONTALSEGMENT($,$,$,#20); +#22=IFCALIGNMENT2DHORIZONTAL(-39.624,(#21)); +#23=IFCALIGNMENT2DVERSEGLINE($,$,$,0.,139.624,0.,0.); +#24=IFCALIGNMENT2DVERTICAL((#23)); +#25=IFCALIGNMENTCURVE(#22,#24,$); +#26=IFCALIGNMENT('2aViFhKAf778GNenSrKZWZ',#10,'My Alignment',$,$,$,$,#25,$); +#27=IFCDIRECTION((1.,0.,0.)); +#28=IFCDIRECTION((0.,0.,1.)); +#29=IFCCARTESIANPOINT((0.,0.,0.)); +#30=IFCAXIS2PLACEMENT3D(#29,#28,#27); +#31=IFCLOCALPLACEMENT(#15,#30); +#32=IFCBUILDING('0r471Jxq1EqRfiLLjL$6Ig',#10,'My Bridge',$,$,#31,$,$,.ELEMENT.,$,$,$); +#33=IFCRELAGGREGATES('0fBW$l8SD0P9PxWJIDvdba',#10,$,$,#16,(#32)); +#34=IFCELEMENTASSEMBLY('01aq5vCiD4MPZcc8mZZqHT',#10,'Span 1, Girder A',$,$,$,$,$,.FACTORY.,.GIRDER.); +#35=IFCCARTESIANPOINT((0.3048,3.6576)); +#36=IFCLINESEGMENT2D(#35,0.,39.0144); +#37=IFCALIGNMENT2DHORIZONTALSEGMENT($,$,$,#36); +#38=IFCALIGNMENT2DHORIZONTAL(0.,(#37)); +#39=IFCALIGNMENT2DVERSEGLINE($,$,$,0.,39.0144,-0.352552,0.); +#40=IFCALIGNMENT2DVERTICAL((#39)); +#41=IFCALIGNMENTCURVE(#38,#40,$); +#42=IFCCARTESIANPOINT((-0.,0.)); +#43=IFCCARTESIANPOINT((0.6223,0.)); +#44=IFCCARTESIANPOINT((0.6223,-0.0762)); +#45=IFCCARTESIANPOINT((0.6223,-0.0762)); +#46=IFCCARTESIANPOINT((0.1539875,-0.1524)); +#47=IFCCARTESIANPOINT((0.0777875,-0.2286)); +#48=IFCCARTESIANPOINT((0.0777875,-1.355725)); +#49=IFCCARTESIANPOINT((0.1539875,-1.431925)); +#50=IFCCARTESIANPOINT((0.4873625,-1.546225)); +#51=IFCCARTESIANPOINT((0.4873625,-1.651)); +#52=IFCCARTESIANPOINT((0.4619625,-1.6764)); +#53=IFCCARTESIANPOINT((-0.,-1.6764)); +#54=IFCCARTESIANPOINT((-0.4619625,-1.6764)); +#55=IFCCARTESIANPOINT((-0.4873625,-1.651)); +#56=IFCCARTESIANPOINT((-0.4873625,-1.546225)); +#57=IFCCARTESIANPOINT((-0.1539875,-1.431925)); +#58=IFCCARTESIANPOINT((-0.0777875,-1.355725)); +#59=IFCCARTESIANPOINT((-0.0777875,-0.2286)); +#60=IFCCARTESIANPOINT((-0.1539875,-0.1524)); +#61=IFCCARTESIANPOINT((-0.6223,-0.0762)); +#62=IFCCARTESIANPOINT((-0.6223,-0.0762)); +#63=IFCCARTESIANPOINT((-0.6223,0.)); +#64=IFCCARTESIANPOINT((-0.,0.)); +#65=IFCPOLYLINE((#42,#43,#44,#45,#46,#47,#48,#49,#50,#51,#52,#53,#54,#55,#56,#57,#58,#59,#60,#61,#62,#63,#64)); +#66=IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,'CrossSectionProfile',#65); +#67=IFCDISTANCEEXPRESSION(0.,$,$,$,$); +#68=IFCDISTANCEEXPRESSION(39.0144,$,$,$,$); +#69=IFCSECTIONEDSOLIDHORIZONTAL(#41,(#66,#66),(#67,#68),.F.); +#70=IFCSHAPEREPRESENTATION(#18,'Body','AdvancedSweptSolid',(#69)); +#71=IFCPRODUCTDEFINITIONSHAPE($,$,(#70)); +#72=IFCBEAM('0fg5kAfRHFQw0QzcEJKQYF',#10,'Span 1, Girder A',$,$,$,#71,$,.NOTDEFINED.); +#73=IFCRELAGGREGATES('06R7lMyTr0tRQbrq0FqiMU',#10,'AggGirderSegments',$,#34,(#72)); +#74=IFCELEMENTASSEMBLY('3GKdXi8_P9XQPkAl0LVC7T',#10,'Span 1, Girder B',$,$,$,$,$,.FACTORY.,.GIRDER.); +#75=IFCCARTESIANPOINT((0.3048,1.8288)); +#76=IFCLINESEGMENT2D(#75,0.,39.0144); +#77=IFCALIGNMENT2DHORIZONTALSEGMENT($,$,$,#76); +#78=IFCALIGNMENT2DHORIZONTAL(0.,(#77)); +#79=IFCALIGNMENT2DVERSEGLINE($,$,$,0.,39.0144,-0.315976,0.); +#80=IFCALIGNMENT2DVERTICAL((#79)); +#81=IFCALIGNMENTCURVE(#78,#80,$); +#82=IFCCARTESIANPOINT((-0.,0.)); +#83=IFCCARTESIANPOINT((0.6223,0.)); +#84=IFCCARTESIANPOINT((0.6223,-0.0762)); +#85=IFCCARTESIANPOINT((0.6223,-0.0762)); +#86=IFCCARTESIANPOINT((0.1539875,-0.1524)); +#87=IFCCARTESIANPOINT((0.0777875,-0.2286)); +#88=IFCCARTESIANPOINT((0.0777875,-1.355725)); +#89=IFCCARTESIANPOINT((0.1539875,-1.431925)); +#90=IFCCARTESIANPOINT((0.4873625,-1.546225)); +#91=IFCCARTESIANPOINT((0.4873625,-1.651)); +#92=IFCCARTESIANPOINT((0.4619625,-1.6764)); +#93=IFCCARTESIANPOINT((-0.,-1.6764)); +#94=IFCCARTESIANPOINT((-0.4619625,-1.6764)); +#95=IFCCARTESIANPOINT((-0.4873625,-1.651)); +#96=IFCCARTESIANPOINT((-0.4873625,-1.546225)); +#97=IFCCARTESIANPOINT((-0.1539875,-1.431925)); +#98=IFCCARTESIANPOINT((-0.0777875,-1.355725)); +#99=IFCCARTESIANPOINT((-0.0777875,-0.2286)); +#100=IFCCARTESIANPOINT((-0.1539875,-0.1524)); +#101=IFCCARTESIANPOINT((-0.6223,-0.0762)); +#102=IFCCARTESIANPOINT((-0.6223,-0.0762)); +#103=IFCCARTESIANPOINT((-0.6223,0.)); +#104=IFCCARTESIANPOINT((-0.,0.)); +#105=IFCPOLYLINE((#82,#83,#84,#85,#86,#87,#88,#89,#90,#91,#92,#93,#94,#95,#96,#97,#98,#99,#100,#101,#102,#103,#104)); +#106=IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,'CrossSectionProfile',#105); +#107=IFCDISTANCEEXPRESSION(0.,$,$,$,$); +#108=IFCDISTANCEEXPRESSION(39.0144,$,$,$,$); +#109=IFCSECTIONEDSOLIDHORIZONTAL(#81,(#106,#106),(#107,#108),.F.); +#110=IFCSHAPEREPRESENTATION(#18,'Body','AdvancedSweptSolid',(#109)); +#111=IFCPRODUCTDEFINITIONSHAPE($,$,(#110)); +#112=IFCBEAM('2RO80KTODD0gJpL996nVdJ',#10,'Span 1, Girder B',$,$,$,#111,$,.NOTDEFINED.); +#113=IFCRELAGGREGATES('3Zmz87j2H6DBOwE7hYxwl3',#10,'AggGirderSegments',$,#74,(#112)); +#114=IFCELEMENTASSEMBLY('3yjxssw4r88ghLsvDvetW3',#10,'Span 1, Girder C',$,$,$,$,$,.FACTORY.,.GIRDER.); +#115=IFCCARTESIANPOINT((0.3048,0.)); +#116=IFCLINESEGMENT2D(#115,0.,39.0144); +#117=IFCALIGNMENT2DHORIZONTALSEGMENT($,$,$,#116); +#118=IFCALIGNMENT2DHORIZONTAL(0.,(#117)); +#119=IFCALIGNMENT2DVERSEGLINE($,$,$,0.,39.0144,-0.2794,0.); +#120=IFCALIGNMENT2DVERTICAL((#119)); +#121=IFCALIGNMENTCURVE(#118,#120,$); +#122=IFCCARTESIANPOINT((-0.,2.22044604925031E-16)); +#123=IFCCARTESIANPOINT((0.6223,2.22044604925031E-16)); +#124=IFCCARTESIANPOINT((0.6223,-0.0761999999999998)); +#125=IFCCARTESIANPOINT((0.6223,-0.0761999999999998)); +#126=IFCCARTESIANPOINT((0.1539875,-0.1524)); +#127=IFCCARTESIANPOINT((0.0777875,-0.2286)); +#128=IFCCARTESIANPOINT((0.0777875,-1.355725)); +#129=IFCCARTESIANPOINT((0.1539875,-1.431925)); +#130=IFCCARTESIANPOINT((0.4873625,-1.546225)); +#131=IFCCARTESIANPOINT((0.4873625,-1.651)); +#132=IFCCARTESIANPOINT((0.4619625,-1.6764)); +#133=IFCCARTESIANPOINT((-0.,-1.6764)); +#134=IFCCARTESIANPOINT((-0.4619625,-1.6764)); +#135=IFCCARTESIANPOINT((-0.4873625,-1.651)); +#136=IFCCARTESIANPOINT((-0.4873625,-1.546225)); +#137=IFCCARTESIANPOINT((-0.1539875,-1.431925)); +#138=IFCCARTESIANPOINT((-0.0777875,-1.355725)); +#139=IFCCARTESIANPOINT((-0.0777875,-0.2286)); +#140=IFCCARTESIANPOINT((-0.1539875,-0.1524)); +#141=IFCCARTESIANPOINT((-0.6223,-0.0761999999999998)); +#142=IFCCARTESIANPOINT((-0.6223,-0.0761999999999998)); +#143=IFCCARTESIANPOINT((-0.6223,2.22044604925031E-16)); +#144=IFCCARTESIANPOINT((-0.,2.22044604925031E-16)); +#145=IFCPOLYLINE((#122,#123,#124,#125,#126,#127,#128,#129,#130,#131,#132,#133,#134,#135,#136,#137,#138,#139,#140,#141,#142,#143,#144)); +#146=IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,'CrossSectionProfile',#145); +#147=IFCDISTANCEEXPRESSION(0.,$,$,$,$); +#148=IFCDISTANCEEXPRESSION(39.0144,$,$,$,$); +#149=IFCSECTIONEDSOLIDHORIZONTAL(#121,(#146,#146),(#147,#148),.F.); +#150=IFCSHAPEREPRESENTATION(#18,'Body','AdvancedSweptSolid',(#149)); +#151=IFCPRODUCTDEFINITIONSHAPE($,$,(#150)); +#152=IFCBEAM('3jW$v1IcX2_gqTMy3_lqgH',#10,'Span 1, Girder C',$,$,$,#151,$,.NOTDEFINED.); +#153=IFCRELAGGREGATES('2w4ceKIeX4Lupdza8R_Mfl',#10,'AggGirderSegments',$,#114,(#152)); +#154=IFCELEMENTASSEMBLY('1YUTCgCN19xR4vy5bl$LGM',#10,'Span 1, Girder D',$,$,$,$,$,.FACTORY.,.GIRDER.); +#155=IFCCARTESIANPOINT((0.3048,-1.8288)); +#156=IFCLINESEGMENT2D(#155,0.,39.0144); +#157=IFCALIGNMENT2DHORIZONTALSEGMENT($,$,$,#156); +#158=IFCALIGNMENT2DHORIZONTAL(0.,(#157)); +#159=IFCALIGNMENT2DVERSEGLINE($,$,$,0.,39.0144,-0.315976,0.); +#160=IFCALIGNMENT2DVERTICAL((#159)); +#161=IFCALIGNMENTCURVE(#158,#160,$); +#162=IFCCARTESIANPOINT((-0.,0.)); +#163=IFCCARTESIANPOINT((0.6223,0.)); +#164=IFCCARTESIANPOINT((0.6223,-0.0762)); +#165=IFCCARTESIANPOINT((0.6223,-0.0762)); +#166=IFCCARTESIANPOINT((0.1539875,-0.1524)); +#167=IFCCARTESIANPOINT((0.0777875,-0.2286)); +#168=IFCCARTESIANPOINT((0.0777875,-1.355725)); +#169=IFCCARTESIANPOINT((0.1539875,-1.431925)); +#170=IFCCARTESIANPOINT((0.4873625,-1.546225)); +#171=IFCCARTESIANPOINT((0.4873625,-1.651)); +#172=IFCCARTESIANPOINT((0.4619625,-1.6764)); +#173=IFCCARTESIANPOINT((-0.,-1.6764)); +#174=IFCCARTESIANPOINT((-0.4619625,-1.6764)); +#175=IFCCARTESIANPOINT((-0.4873625,-1.651)); +#176=IFCCARTESIANPOINT((-0.4873625,-1.546225)); +#177=IFCCARTESIANPOINT((-0.1539875,-1.431925)); +#178=IFCCARTESIANPOINT((-0.0777875,-1.355725)); +#179=IFCCARTESIANPOINT((-0.0777875,-0.2286)); +#180=IFCCARTESIANPOINT((-0.1539875,-0.1524)); +#181=IFCCARTESIANPOINT((-0.6223,-0.0762)); +#182=IFCCARTESIANPOINT((-0.6223,-0.0762)); +#183=IFCCARTESIANPOINT((-0.6223,0.)); +#184=IFCCARTESIANPOINT((-0.,0.)); +#185=IFCPOLYLINE((#162,#163,#164,#165,#166,#167,#168,#169,#170,#171,#172,#173,#174,#175,#176,#177,#178,#179,#180,#181,#182,#183,#184)); +#186=IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,'CrossSectionProfile',#185); +#187=IFCDISTANCEEXPRESSION(0.,$,$,$,$); +#188=IFCDISTANCEEXPRESSION(39.0144,$,$,$,$); +#189=IFCSECTIONEDSOLIDHORIZONTAL(#161,(#186,#186),(#187,#188),.F.); +#190=IFCSHAPEREPRESENTATION(#18,'Body','AdvancedSweptSolid',(#189)); +#191=IFCPRODUCTDEFINITIONSHAPE($,$,(#190)); +#192=IFCBEAM('1pSC2RNyn4iP3CH07jc3LD',#10,'Span 1, Girder D',$,$,$,#191,$,.NOTDEFINED.); +#193=IFCRELAGGREGATES('0um5yy57j4PhysrTknSmm6',#10,'AggGirderSegments',$,#154,(#192)); +#194=IFCELEMENTASSEMBLY('1DSx9xAkb08g67R04K02CY',#10,'Span 1, Girder E',$,$,$,$,$,.FACTORY.,.GIRDER.); +#195=IFCCARTESIANPOINT((0.3048,-3.6576)); +#196=IFCLINESEGMENT2D(#195,0.,39.0144); +#197=IFCALIGNMENT2DHORIZONTALSEGMENT($,$,$,#196); +#198=IFCALIGNMENT2DHORIZONTAL(0.,(#197)); +#199=IFCALIGNMENT2DVERSEGLINE($,$,$,0.,39.0144,-0.352552,0.); +#200=IFCALIGNMENT2DVERTICAL((#199)); +#201=IFCALIGNMENTCURVE(#198,#200,$); +#202=IFCCARTESIANPOINT((-0.,0.)); +#203=IFCCARTESIANPOINT((0.6223,0.)); +#204=IFCCARTESIANPOINT((0.6223,-0.0762)); +#205=IFCCARTESIANPOINT((0.6223,-0.0762)); +#206=IFCCARTESIANPOINT((0.1539875,-0.1524)); +#207=IFCCARTESIANPOINT((0.0777875,-0.2286)); +#208=IFCCARTESIANPOINT((0.0777875,-1.355725)); +#209=IFCCARTESIANPOINT((0.1539875,-1.431925)); +#210=IFCCARTESIANPOINT((0.4873625,-1.546225)); +#211=IFCCARTESIANPOINT((0.4873625,-1.651)); +#212=IFCCARTESIANPOINT((0.4619625,-1.6764)); +#213=IFCCARTESIANPOINT((-0.,-1.6764)); +#214=IFCCARTESIANPOINT((-0.4619625,-1.6764)); +#215=IFCCARTESIANPOINT((-0.4873625,-1.651)); +#216=IFCCARTESIANPOINT((-0.4873625,-1.546225)); +#217=IFCCARTESIANPOINT((-0.1539875,-1.431925)); +#218=IFCCARTESIANPOINT((-0.0777875,-1.355725)); +#219=IFCCARTESIANPOINT((-0.0777875,-0.2286)); +#220=IFCCARTESIANPOINT((-0.1539875,-0.1524)); +#221=IFCCARTESIANPOINT((-0.6223,-0.0762)); +#222=IFCCARTESIANPOINT((-0.6223,-0.0762)); +#223=IFCCARTESIANPOINT((-0.6223,0.)); +#224=IFCCARTESIANPOINT((-0.,0.)); +#225=IFCPOLYLINE((#202,#203,#204,#205,#206,#207,#208,#209,#210,#211,#212,#213,#214,#215,#216,#217,#218,#219,#220,#221,#222,#223,#224)); +#226=IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,'CrossSectionProfile',#225); +#227=IFCDISTANCEEXPRESSION(0.,$,$,$,$); +#228=IFCDISTANCEEXPRESSION(39.0144,$,$,$,$); +#229=IFCSECTIONEDSOLIDHORIZONTAL(#201,(#226,#226),(#227,#228),.F.); +#230=IFCSHAPEREPRESENTATION(#18,'Body','AdvancedSweptSolid',(#229)); +#231=IFCPRODUCTDEFINITIONSHAPE($,$,(#230)); +#232=IFCBEAM('121DhMx0D67fAd$jWZRlAl',#10,'Span 1, Girder E',$,$,$,#231,$,.NOTDEFINED.); +#233=IFCRELAGGREGATES('2Z0cXG5wb6xPAm3LAJdTLN',#10,'AggGirderSegments',$,#194,(#232)); +#234=IFCCARTESIANPOINT((-4.572,-0.26924)); +#235=IFCCARTESIANPOINT((-4.572,-0.09144)); +#236=IFCCARTESIANPOINT((-0.,0.)); +#237=IFCCARTESIANPOINT((4.572,-0.09144)); +#238=IFCCARTESIANPOINT((4.572,-0.26924)); +#239=IFCCARTESIANPOINT((4.2799,-0.352552)); +#240=IFCCARTESIANPOINT((3.0353,-0.352552)); +#241=IFCCARTESIANPOINT((3.0353,-0.270256)); +#242=IFCCARTESIANPOINT((3.01625,-0.251206)); +#243=IFCCARTESIANPOINT((2.47015,-0.239522)); +#244=IFCCARTESIANPOINT((2.4511,-0.258572)); +#245=IFCCARTESIANPOINT((2.4511,-0.315976)); +#246=IFCCARTESIANPOINT((1.2065,-0.315976)); +#247=IFCCARTESIANPOINT((1.2065,-0.23368)); +#248=IFCCARTESIANPOINT((1.18745,-0.21463)); +#249=IFCCARTESIANPOINT((0.64135,-0.202946)); +#250=IFCCARTESIANPOINT((0.6223,-0.221996)); +#251=IFCCARTESIANPOINT((0.6223,-0.2794)); +#252=IFCCARTESIANPOINT((-0.6223,-0.2794)); +#253=IFCCARTESIANPOINT((-0.6223,-0.221996)); +#254=IFCCARTESIANPOINT((-0.64135,-0.202946)); +#255=IFCCARTESIANPOINT((-1.18745,-0.21463)); +#256=IFCCARTESIANPOINT((-1.2065,-0.23368)); +#257=IFCCARTESIANPOINT((-1.2065,-0.315976)); +#258=IFCCARTESIANPOINT((-2.4511,-0.315976)); +#259=IFCCARTESIANPOINT((-2.4511,-0.258572)); +#260=IFCCARTESIANPOINT((-2.47015,-0.239522)); +#261=IFCCARTESIANPOINT((-3.01625,-0.251206)); +#262=IFCCARTESIANPOINT((-3.0353,-0.270256)); +#263=IFCCARTESIANPOINT((-3.0353,-0.352552)); +#264=IFCCARTESIANPOINT((-4.2799,-0.352552)); +#265=IFCPOLYLINE((#234,#235,#236,#237,#238,#239,#240,#241,#242,#243,#244,#245,#246,#247,#248,#249,#250,#251,#252,#253,#254,#255,#256,#257,#258,#259,#260,#261,#262,#263,#264)); +#266=IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,$,#265); +#267=IFCDISTANCEEXPRESSION(40.4495,$,$,$,$); +#268=IFCDISTANCEEXPRESSION(78.4225,$,$,$,$); +#269=IFCSECTIONEDSOLIDHORIZONTAL(#25,(#266,#266),(#267,#268),.T.); +#270=IFCSHAPEREPRESENTATION(#18,'Body','AdvancedSweptSolid',(#269)); +#271=IFCPRODUCTDEFINITIONSHAPE($,$,(#270)); +#272=IFCSLAB('2bQooQLX1AEP5yRc7j6Gy4',#10,'MyDeck',$,$,$,#271,$,.NOTDEFINED.); +#273=IFCCARTESIANPOINT((4.572,-0.09144)); +#274=IFCCARTESIANPOINT((4.2418660201946,-0.084837320403892)); +#275=IFCCARTESIANPOINT((4.46635712646227,0.977686196139021)); +#276=IFCCARTESIANPOINT((4.72030634169719,0.972607211834322)); +#277=IFCCARTESIANPOINT((4.69541931860417,-0.271743942816794)); +#278=IFCCARTESIANPOINT((4.56844471098671,-0.269204450664445)); +#279=IFCPOLYLINE((#273,#274,#275,#276,#277,#278)); +#280=IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,$,#279); +#281=IFCDISTANCEEXPRESSION(40.4495,$,$,$,$); +#282=IFCDISTANCEEXPRESSION(78.4225,$,$,$,$); +#283=IFCSECTIONEDSOLIDHORIZONTAL(#25,(#280,#280),(#281,#282),.T.); +#284=IFCSHAPEREPRESENTATION(#18,'Body','AdvancedSweptSolid',(#283)); +#285=IFCPRODUCTDEFINITIONSHAPE($,$,(#284)); +#286=IFCRAILING('20_WHeJDP1ywaQC34sfoB4',#10,'Left Barrier',$,$,$,#285,$,.GUARDRAIL.); +#287=IFCCARTESIANPOINT((-4.56844471098671,-0.269204450664445)); +#288=IFCCARTESIANPOINT((-4.69541931860417,-0.271743942816794)); +#289=IFCCARTESIANPOINT((-4.72030634169719,0.972607211834322)); +#290=IFCCARTESIANPOINT((-4.46635712646227,0.977686196139021)); +#291=IFCCARTESIANPOINT((-4.2418660201946,-0.084837320403892)); +#292=IFCCARTESIANPOINT((-4.572,-0.09144)); +#293=IFCPOLYLINE((#287,#288,#289,#290,#291,#292)); +#294=IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,$,#293); +#295=IFCDISTANCEEXPRESSION(40.4495,$,$,$,$); +#296=IFCDISTANCEEXPRESSION(78.4225,$,$,$,$); +#297=IFCSECTIONEDSOLIDHORIZONTAL(#25,(#294,#294),(#295,#296),.T.); +#298=IFCSHAPEREPRESENTATION(#18,'Body','AdvancedSweptSolid',(#297)); +#299=IFCPRODUCTDEFINITIONSHAPE($,$,(#298)); +#300=IFCRAILING('3yIDZdE51Ef9gzuBJZB02F',#10,'Right Barrier',$,$,$,#299,$,.GUARDRAIL.); +#301=IFCRELCONTAINEDINSPATIALSTRUCTURE('0kJz0gd4zEt9_j7BGnOHCJ',#10,$,$,(#34,#74,#114,#154,#194,#272,#286,#300),#32); +#302=IFCRELCONTAINEDINSPATIALSTRUCTURE('3IP4lb2IfCb8OojqvCJFcc',#10,$,$,(#26),#32); +ENDSEC; +END-ISO-10303-21; diff --git a/UnitTests/Schemas/IFC4X1/sectioned-solid-horizontal/src/sectioned-solid-horizontal.cpp b/UnitTests/Schemas/IFC4X1/sectioned-solid-horizontal/src/sectioned-solid-horizontal.cpp new file mode 100644 index 000000000..c82e41d7c --- /dev/null +++ b/UnitTests/Schemas/IFC4X1/sectioned-solid-horizontal/src/sectioned-solid-horizontal.cpp @@ -0,0 +1,211 @@ +/* + Copyright (c) 2021 Technical University of Munich + Chair of Computational Modeling and Simulation. + + TUM Open Infra Platform is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License Version 3 + as published by the Free Software Foundation. + + TUM Open Infra Platform 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#include +#include + +#include + +#include +#include +#include + +using namespace testing; + + +class SectionedSolidHorizontal : public IfcVisualTest { +protected: + + // Test standard values + buw::Image4b _background = buw::Image4b(0, 0); + + virtual void SetUp() override { + IfcVisualTest::SetUp(); + + express_model = OpenInfraPlatform::IFC4X1::IFC4X1Reader::FromFile(filename.string()); + + importer = buw::makeReferenceCounted>(); + auto model = importer->collectData(express_model); + + _background = rendererIfc->captureImage(); + rendererIfc->setModel(model[0]); + } + + virtual void TearDown() override { + express_model.reset(); + IfcVisualTest::TearDown(); + } + + virtual std::string TestName() const { return "sectioned-solid-horizontal"; } + virtual std::string Schema() const { return "IFC4x1"; } + + const boost::filesystem::path filename = dataPath("sectioned-solid-horizontal.ifc"); + + std::shared_ptr express_model = nullptr; + buw::ReferenceCounted> importer = nullptr; +}; + +TEST_F(SectionedSolidHorizontal, AllEntitiesAreRead) { + EXPECT_THAT(express_model->entities.size(), Eq(302)); +} + +TEST_F(SectionedSolidHorizontal, IFCHasAnEssentialEntity) { + auto result1 = std::find_if(express_model->entities.begin(), express_model->entities.end(), [](auto &pair) -> bool { return pair.second->classname() == "IFCSECTIONEDSOLIDHORIZONTAL"; }); + //auto result2 = std::find_if(express_model->entities.begin(), express_model->entities.end(), [](auto &pair) -> bool { return pair.second->classname() == "IFCARBITRARYCLOSEDPROFILEDEF"; }); + //auto result3 = std::find_if(express_model->entities.begin(), express_model->entities.end(), [](auto &pair) -> bool { return pair.second->classname() == "IFCINDEXEDPOLYCURVE"; }); + //auto result4 = std::find_if(express_model->entities.begin(), express_model->entities.end(), [](auto &pair) -> bool { return pair.second->classname() == "IFCPOLYLINE"; }); + //auto result5 = std::find_if(express_model->entities.begin(), express_model->entities.end(), [](auto &pair) -> bool { return pair.second->classname() == "IFCALIGNMENTCURVE"; }); + + EXPECT_NE(result1, express_model->entities.end()); + //EXPECT_NE(result2, express_model->entities.end()); + //EXPECT_NE(result3, express_model->entities.end()); + //EXPECT_NE(result4, express_model->entities.end()); + //EXPECT_NE(result5, express_model->entities.end()); +} +/* +TEST_F(SectionedSolidHorizontal, CountEssentialEntities) { + auto result1 = std::count_if(express_model->entities.begin(), express_model->entities.end(), [](auto &pair) -> bool { return pair.second->classname() == "IFCSECTIONEDSOLIDHORIZONTAL"; }); + auto result2 = std::count_if(express_model->entities.begin(), express_model->entities.end(), [](auto &pair) -> bool { return pair.second->classname() == "IFCARBITRARYCLOSEDPROFILEDEF"; }); + auto result3 = std::count_if(express_model->entities.begin(), express_model->entities.end(), [](auto &pair) -> bool { return pair.second->classname() == "IFCINDEXEDPOLYCURVE"; }); + + EXPECT_EQ(result1, 16); + EXPECT_EQ(result2, 49); + EXPECT_EQ(result3, 49); +} +*/ + +TEST_F(SectionedSolidHorizontal, ImageIsSaved) +{ + // Arrange + buw::Image4b image = rendererIfc->captureImage(); + + // Act + buw::storeImage(testPath("sectioned-solid-horizontal.png").string(), image); + + // Assert + EXPECT_NO_THROW(buw::loadImage4b(testPath("sectioned-solid-horizontal.png").string())); +} + +TEST_F(SectionedSolidHorizontal, PlaneSurfaceViews) +{ + // Arrange + const auto expected_front = buw::loadImage4b(dataPath("sectioned-solid-horizontal_front.png").string()); + const auto expected_top = buw::loadImage4b(dataPath("sectioned-solid-horizontal_top.png").string()); + const auto expected_bottom = buw::loadImage4b(dataPath("sectioned-solid-horizontal_bottom.png").string()); + const auto expected_left = buw::loadImage4b(dataPath("sectioned-solid-horizontal_left.png").string()); + const auto expected_right = buw::loadImage4b(dataPath("sectioned-solid-horizontal_right.png").string()); + const auto expected_back = buw::loadImage4b(dataPath("sectioned-solid-horizontal_back.png").string()); + + // Act (Front) + rendererIfc->setViewDirection(buw::eViewDirection::Front); + buw::Image4b image_front = CaptureImage(); + // Act (Top) + rendererIfc->setViewDirection(buw::eViewDirection::Top); + buw::Image4b image_top = CaptureImage(); + // Act (Bottom) + rendererIfc->setViewDirection(buw::eViewDirection::Bottom); + buw::Image4b image_bottom = CaptureImage(); + // Act (Left) + rendererIfc->setViewDirection(buw::eViewDirection::Left); + buw::Image4b image_left = CaptureImage(); + // Act (Right) + rendererIfc->setViewDirection(buw::eViewDirection::Right); + buw::Image4b image_right = CaptureImage(); + // Act (Back) + rendererIfc->setViewDirection(buw::eViewDirection::Back); + buw::Image4b image_back = CaptureImage(); + + // uncomment following lines to also save the screen shot + /* + buw::storeImage(testPath("sectioned-solid-horizontal_front.png").string(), image_front); + buw::storeImage(testPath("sectioned-solid-horizontal_top.png").string(), image_top); + buw::storeImage(testPath("sectioned-solid-horizontal_bottom.png").string(), image_bottom); + buw::storeImage(testPath("sectioned-solid-horizontal_left.png").string(), image_left); + buw::storeImage(testPath("sectioned-solid-horizontal_right.png").string(), image_right); + buw::storeImage(testPath("sectioned-solid-horizontal_back.png").string(), image_back); + */ + + // Assert + EXPECT_EQ(image_front, expected_front); + EXPECT_EQ(image_top, expected_top); + EXPECT_EQ(image_bottom, expected_bottom); + EXPECT_EQ(image_left, expected_left); + EXPECT_EQ(image_right, expected_right); + EXPECT_EQ(image_back, expected_back); +} + +TEST_F(SectionedSolidHorizontal, VertexViews) +{ + // Arrange + const auto expected_front_left_bottom = buw::loadImage4b(dataPath("sectioned-solid-horizontal_front_left_bottom.png").string()); + const auto expected_front_right_bottom = buw::loadImage4b(dataPath("sectioned-solid-horizontal_front_right_bottom.png").string()); + const auto expected_top_left_front = buw::loadImage4b(dataPath("sectioned-solid-horizontal_top_left_front.png").string()); + const auto expected_top_front_right = buw::loadImage4b(dataPath("sectioned-solid-horizontal_top_front_right.png").string()); + const auto expected_top_left_back = buw::loadImage4b(dataPath("sectioned-solid-horizontal_top_left_back.png").string()); + const auto expected_top_right_back = buw::loadImage4b(dataPath("sectioned-solid-horizontal_top_right_back.png").string()); + const auto expected_back_left_bottom = buw::loadImage4b(dataPath("sectioned-solid-horizontal_back_left_bottom.png").string()); + const auto expected_right_bottom_back = buw::loadImage4b(dataPath("sectioned-solid-horizontal_right_bottom_back.png").string()); + + // Act (FrontLeftBottom) + rendererIfc->setViewDirection(buw::eViewDirection::FrontLeftBottom); + buw::Image4b image_front_left_bottom = CaptureImage(); + // Act (FrontRightBottom) + rendererIfc->setViewDirection(buw::eViewDirection::FrontRightBottom); + buw::Image4b image_front_right_bottom = CaptureImage(); + // Act (TopLeftFront) + rendererIfc->setViewDirection(buw::eViewDirection::TopLeftFront); + buw::Image4b image_top_left_front = CaptureImage(); + // Act (TopFrontRight) + rendererIfc->setViewDirection(buw::eViewDirection::TopFrontRight); + buw::Image4b image_top_front_right = CaptureImage(); + // Act (TopLeftBack) + rendererIfc->setViewDirection(buw::eViewDirection::TopLeftBack); + buw::Image4b image_top_left_back = CaptureImage(); + // Act (TopRightBack) + rendererIfc->setViewDirection(buw::eViewDirection::TopRightBack); + buw::Image4b image_top_right_back = CaptureImage(); + // Act (BackLeftBottom) + rendererIfc->setViewDirection(buw::eViewDirection::BackLeftBottom); + buw::Image4b image_back_left_bottom = CaptureImage(); + // Act (RightBottomBack) + rendererIfc->setViewDirection(buw::eViewDirection::RightBottomBack); + buw::Image4b image_right_bottom_back = CaptureImage(); + + // uncomment following lines to also save the screen shot + /* + buw::storeImage(testPath("sectioned-solid-horizontal_front_left_bottom.png").string(), image_front_left_bottom); + buw::storeImage(testPath("sectioned-solid-horizontal_front_right_bottom.png").string(), image_front_right_bottom); + buw::storeImage(testPath("sectioned-solid-horizontal_top_left_front.png").string(), image_top_left_front); + buw::storeImage(testPath("sectioned-solid-horizontal_top_front_right.png").string(), image_top_front_right); + buw::storeImage(testPath("sectioned-solid-horizontal_top_left_back.png").string(), image_top_left_back); + buw::storeImage(testPath("sectioned-solid-horizontal_top_right_back.png").string(), image_top_right_back); + buw::storeImage(testPath("sectioned-solid-horizontal_back_left_bottom.png").string(), image_back_left_bottom); + buw::storeImage(testPath("sectioned-solid-horizontal_right_bottom_back.png").string(), image_right_bottom_back); + */ + + // Assert + EXPECT_EQ(image_front_left_bottom, expected_front_left_bottom); + EXPECT_EQ(image_front_right_bottom, expected_front_right_bottom); + EXPECT_EQ(image_top_left_front, expected_top_left_front); + EXPECT_EQ(image_top_front_right, expected_top_front_right); + EXPECT_EQ(image_top_left_back, expected_top_left_back); + EXPECT_EQ(image_top_right_back, expected_top_right_back); + EXPECT_EQ(image_back_left_bottom, expected_back_left_bottom); + EXPECT_EQ(image_right_bottom_back, expected_right_bottom_back); +} + +