Added second roundtrip test with non-vertical extrusions

This commit is contained in:
Yorik van Havre 2020-05-13 14:40:51 +02:00
parent c2d0600d08
commit e689112c7e
6 changed files with 142 additions and 16 deletions

View File

@ -1,6 +1,10 @@
# IFC roundtripping specifications
This file lists "exercises" to be performed by a BIM application to achieve adequate round-tripping
with IFC files. The application should successfully complete all the steps.
## 1. importing and exporting a simple extrusion
The application should be able to export and import an IFC file containing one IfcBuildingElementProxy
@ -23,19 +27,64 @@ made of an IfcPolyline, like the example below:
#### Import criteria
* The profile position and extrusion direction are correct
* The extrusion can be changed after import
* The base polyline can be edited after import
#### Export criteria
* The exported IFC file contains an IfcBuildingElementProxy, with an IfcExtrudedAreaSolid as its representation
and an IfcArbitraryClosedProfileDef made of an IfcPolyline as its profile
* The exported IFC file contains an IfcBuildingElementProxy, with an IfcExtrudedAreaSolid as its representation and an IfcArbitraryClosedProfileDef made of an IfcPolyline as its profile
* The position and extrusion direction are correct when the IFC file is viewed with [ifc++](http://ifcquery.com)
#### Results
| | BlenderBIM | FreeCAD | Revit | ArchiCAD | BricsCAD |
| -------------- | ---------- | ------------------------------------------------------------ | ----- | -------- | -------- |
| passed? | | yes | | | |
| exported file: | | [result 1.FCStd](Specifications%20test%20files/Roundtrip%20Results/Roundtrip%201%20FreeCAD.FCStd) | | | |
| imported file: | | [result 1.ifc](Specifications%20test%20files/Roundtrip%20Results/Roundtrip%201%20FreeCAD.ifc) | | | |
| exported file: | | [simple extrusion.ifc](Specification%20test%20files/Roundtrip%20Results/simple%20extrusion.ifc) | | | |
| imported file: | | [simple extrusion.FCStd](Specification%20test%20files/Roundtrip%20Results/simple%20extrusion.FCStd) | | | |
## 2. importing and exporting non-vertical extrusions
The application should be able to export and import an IFC file containing three IfcBuildingElementProxy entities, each with one representation, which is an IfcExtrudedAreaSolid, each based on IfcArbitraryClosedProfileDef made of an IfcPolyline, like the example below. One profile should lie on the XY plane, one in the YZ plane, and a third on a plane made of one of the former rotated 45° along the Y axis. Extrusion directions should be normal to the profiles.
```
#20= IFCBUILDINGELEMENTPROXY('0ohBfsArr3ruXYxacT4yl5',#1,'NOTDEFINED',$,$,#2,#21,$,.NOTDEFINED.);
#21= IFCPRODUCTDEFINITIONSHAPE($,$,(#22));
#22= IFCSHAPEREPRESENTATION(#9,'Body','SweptSolid',(#23));
#23= IFCEXTRUDEDAREASOLID(#24,#31,#25,2000.);
#24 = IFCARBITRARYCLOSEDPROFILEDEF(.AREA., $, #26);
#26 = IFCPOLYLINE((#27, #28, #29, #30));
#27 = IFCCARTESIANPOINT((0., 0.));
#28 = IFCCARTESIANPOINT((1000., 0.));
#29 = IFCCARTESIANPOINT((1000., 1000.));
#30 = IFCCARTESIANPOINT((0., 1000.));
#25= IFCDIRECTION((0.,0.,1.));
#31= IFCAXIS2PLACEMENT3D(#32,#33,#34);
#32= IFCDIRECTION((0.7071,0.,-0.7071));
#33= IFCDIRECTION((0.7071,0.,0.7071));
#34= IFCCARTESIANPOINT((1000.,0.,2000.));
```
#### Import criteria
* The extrusion directions and profile positions are correct
* The extrusions can be changed after import
* The base polylines can be edited after import
#### Export criteria
* The exported IFC file contains three IfcBuildingElementProxy, each with an IfcExtrudedAreaSolid as its representation and an IfcArbitraryClosedProfileDef made of an IfcPolyline as its profile.
* The positions and extrusion directions are correct when the IFC file is viewed with [ifc++](http://ifcquery.com)
#### Results
| | BlenderBIM | FreeCAD | Revit | ArchiCAD | BricsCAD |
| -------------- | ---------- | ------------------------------------------------------------ | ----- | -------- | -------- |
| passed? | | yes | | | |
| exported file: | | [multipl extrusions.ifc](Specification%20test%20files/Roundtrip%20Results/multiple%20extrusions.ifc) | | | |
| imported file: | | [multiple extrusions.FCStd](Specification%20test%20files/Roundtrip%20Results/multiple%20extrusions.FCStd) | | | |

View File

@ -0,0 +1,77 @@
ISO-10303-21;
HEADER;
FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1');
FILE_NAME('multiple.ifc','2020-05-13T12:10:58',('Yorik van Havre','yorik@uncreated.net'),('uncreated.net'),'IfcOpenShell 0.6.0b0','IfcOpenShell 0.6.0b0','');
FILE_SCHEMA(('IFC4'));
ENDSEC;
DATA;
#1=IFCPERSON($,$,'Yorik van Havre',$,$,$,$,$);
#2=IFCORGANIZATION($,'uncreated.net',$,$,$);
#3=IFCPERSONANDORGANIZATION(#1,#2,$);
#4=IFCAPPLICATION(#2,'0.19 build 21059 (Git)','FreeCAD','118df2cf_ed21_438e_a41');
#5=IFCOWNERHISTORY(#3,#4,$,.ADDED.,1589371858,#3,#4,1589371858);
#6=IFCDIRECTION((1.,0.,0.));
#7=IFCDIRECTION((0.,0.,1.));
#8=IFCCARTESIANPOINT((0.,0.,0.));
#9=IFCAXIS2PLACEMENT3D(#8,#7,#6);
#10=IFCDIRECTION((0.,1.,0.));
#12=IFCDIMENSIONALEXPONENTS(0,0,0,0,0,0,0);
#13=IFCSIUNIT(*,.LENGTHUNIT.,$,.METRE.);
#14=IFCSIUNIT(*,.AREAUNIT.,$,.SQUARE_METRE.);
#15=IFCSIUNIT(*,.VOLUMEUNIT.,$,.CUBIC_METRE.);
#16=IFCSIUNIT(*,.PLANEANGLEUNIT.,$,.RADIAN.);
#17=IFCMEASUREWITHUNIT(IFCPLANEANGLEMEASURE(0.017453292519943295),#16);
#18=IFCCONVERSIONBASEDUNIT(#12,.PLANEANGLEUNIT.,'DEGREE',#17);
#19=IFCUNITASSIGNMENT((#13,#14,#15,#18));
#20=IFCDIRECTION((0.,1.));
#21=IFCGEOMETRICREPRESENTATIONCONTEXT($,'Model',3,1.E-05,#9,#20);
#22=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Body','Model',*,*,*,*,#21,$,.MODEL_VIEW.,$);
#23=IFCPROJECT('03biTKmWH94Au6pQcFXMDQ',#5,'multiple',$,$,$,$,(#21),#19);
#24=IFCCARTESIANPOINT((-0.9,-0.4));
#25=IFCCARTESIANPOINT((0.9,-0.4));
#26=IFCCARTESIANPOINT((0.9,0.4));
#27=IFCCARTESIANPOINT((-0.9,0.4));
#28=IFCPOLYLINE((#24,#25,#26,#27,#24));
#29=IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,$,#28);
#30=IFCCARTESIANPOINT((1.,-0.5,0.));
#31=IFCAXIS2PLACEMENT3D(#30,#7,#6);
#32=IFCEXTRUDEDAREASOLID(#29,#31,#7,2.);
#33=IFCCOLOURRGB($,0.800000011920929,0.800000011920929,0.800000011920929);
#34=IFCSURFACESTYLERENDERING(#33,$,$,$,$,$,$,$,.FLAT.);
#35=IFCSURFACESTYLE($,.BOTH.,(#34));
#36=IFCPRESENTATIONSTYLEASSIGNMENT((#35));
#37=IFCSTYLEDITEM(#32,(#36),$);
#38=IFCLOCALPLACEMENT($,#9);
#39=IFCSHAPEREPRESENTATION(#22,'Body','SweptSolid',(#32));
#40=IFCPRODUCTDEFINITIONSHAPE($,$,(#39));
#41=IFCBUILDINGELEMENTPROXY('0iRwTtZ1vDVg4QoKF$wB$X',#5,'Extrude','',$,#38,#40,$,$);
#42=IFCCARTESIANPOINT((0.9,-0.4));
#43=IFCCARTESIANPOINT((0.9,0.4));
#44=IFCPOLYLINE((#24,#42,#43,#27,#24));
#45=IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,$,#44);
#46=IFCDIRECTION((0.707106781186547,0.,-0.707106781186548));
#47=IFCDIRECTION((0.707106781186548,0.,0.707106781186547));
#48=IFCCARTESIANPOINT((-0.736396103067893,-0.499999998127686,2.63639610288445));
#49=IFCAXIS2PLACEMENT3D(#48,#47,#46);
#50=IFCDIRECTION((-5.9211894646675E-16,0.,1.));
#51=IFCEXTRUDEDAREASOLID(#45,#49,#50,3.);
#52=IFCSTYLEDITEM(#51,(#36),$);
#53=IFCSHAPEREPRESENTATION(#22,'Body','SweptSolid',(#51));
#54=IFCPRODUCTDEFINITIONSHAPE($,$,(#53));
#55=IFCBUILDINGELEMENTPROXY('2vghw0Vaf489N2O8RV4mLV',#5,'Extrude001','',$,#38,#54,$,$);
#56=IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,$,#28);
#57=IFCDIRECTION((2.22044604925031E-16,0.,-1.));
#58=IFCDIRECTION((1.,0.,2.22044604925031E-16));
#59=IFCCARTESIANPOINT((0.,-0.49999964237211,6.99999999999999));
#60=IFCAXIS2PLACEMENT3D(#59,#58,#57);
#61=IFCDIRECTION((4.22044604925031E-16,0.,1.));
#62=IFCEXTRUDEDAREASOLID(#56,#60,#61,4.);
#63=IFCSTYLEDITEM(#62,(#36),$);
#64=IFCSHAPEREPRESENTATION(#22,'Body','SweptSolid',(#62));
#65=IFCPRODUCTDEFINITIONSHAPE($,$,(#64));
#66=IFCBUILDINGELEMENTPROXY('2GBoYAn8514wJYrda0FRVd',#5,'Extrude002','',$,#38,#65,$,$);
#67=IFCBUILDING('3vCTfBNwr06RC435WkcWzH',#5,'Default Building','',$,$,$,$,.ELEMENT.,$,$,$);
#68=IFCRELAGGREGATES('1XJ7237LnFRBGAAyHPPeXv',#5,'ProjectLink','',#23,(#67));
#69=IFCRELCONTAINEDINSPATIALSTRUCTURE('0tFdoxcCv2DBSaVbW1CUk$',#5,'UnassignedObjectsLink','',(#41,#55,#66),#67);
ENDSEC;
END-ISO-10303-21;

View File

@ -1,15 +1,15 @@
ISO-10303-21;
HEADER;
FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1');
FILE_NAME('Roundtrip 1 FreeCAD.ifc','2020-05-12T09:14:56',('Yorik van Havre','yorik@uncreated.net'),('uncreated.net'),'IfcOpenShell 0.6.0b0','IfcOpenShell 0.6.0b0','');
FILE_NAME('Roundtrip 1 FreeCAD.ifc','2020-05-12T14:33:17',('Yorik van Havre','yorik@uncreated.net'),('uncreated.net'),'IfcOpenShell 0.6.0b0','IfcOpenShell 0.6.0b0','');
FILE_SCHEMA(('IFC4'));
ENDSEC;
DATA;
#1=IFCPERSON($,$,'Yorik van Havre',$,$,$,$,$);
#2=IFCORGANIZATION($,'uncreated.net',$,$,$);
#3=IFCPERSONANDORGANIZATION(#1,#2,$);
#4=IFCAPPLICATION(#2,'0.19 build 21031 (Git)','FreeCAD','118df2cf_ed21_438e_a41');
#5=IFCOWNERHISTORY(#3,#4,$,.ADDED.,1589274896,#3,#4,1589274896);
#4=IFCAPPLICATION(#2,'0.19 build 21037 (Git)','FreeCAD','118df2cf_ed21_438e_a41');
#5=IFCOWNERHISTORY(#3,#4,$,.ADDED.,1589293997,#3,#4,1589293997);
#6=IFCDIRECTION((1.,0.,0.));
#7=IFCDIRECTION((0.,0.,1.));
#8=IFCCARTESIANPOINT((0.,0.,0.));
@ -26,11 +26,11 @@ DATA;
#20=IFCDIRECTION((0.,1.));
#21=IFCGEOMETRICREPRESENTATIONCONTEXT($,'Model',3,1.E-05,#9,#20);
#22=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Body','Model',*,*,*,*,#21,$,.MODEL_VIEW.,$);
#23=IFCPROJECT('1K2xYCBpz8y87tDwWzJsPw',#5,'Roundtrip_1_FreeCAD',$,$,$,$,(#21),#19);
#24=IFCCARTESIANPOINT((0.,0.));
#25=IFCCARTESIANPOINT((1.,0.));
#26=IFCCARTESIANPOINT((1.,1.));
#27=IFCCARTESIANPOINT((0.,1.));
#23=IFCPROJECT('3ltNA1mHP9zgbu3TvKgPyU',#5,'Roundtrip_1_FreeCAD',$,$,$,$,(#21),#19);
#24=IFCCARTESIANPOINT((-0.5,-0.5));
#25=IFCCARTESIANPOINT((0.5,-0.5));
#26=IFCCARTESIANPOINT((0.5,0.5));
#27=IFCCARTESIANPOINT((-0.5,0.5));
#28=IFCPOLYLINE((#24,#25,#26,#27,#24));
#29=IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,$,#28);
#30=IFCCARTESIANPOINT((0.5,0.5,0.));
@ -44,9 +44,9 @@ DATA;
#38=IFCLOCALPLACEMENT($,#9);
#39=IFCSHAPEREPRESENTATION(#22,'Body','SweptSolid',(#32));
#40=IFCPRODUCTDEFINITIONSHAPE($,$,(#39));
#41=IFCBUILDINGELEMENTPROXY('3y8yjHmoj7i8DD_OroWdOV',#5,'Extrude','',$,#38,#40,$,$);
#42=IFCBUILDING('1FrEBU1fL92wMs5ElgGseN',#5,'Default Building','',$,$,$,$,.ELEMENT.,$,$,$);
#43=IFCRELAGGREGATES('3MOFXVItb6CPui8Ug4CY_v',#5,'ProjectLink','',#23,(#42));
#44=IFCRELCONTAINEDINSPATIALSTRUCTURE('3FHP$lA3L11QsR8zQO4IBj',#5,'UnassignedObjectsLink','',(#41),#42);
#41=IFCBUILDINGELEMENTPROXY('1XW1Z55iD4$APiBt2cTMkk',#5,'Extrude','',$,#38,#40,$,$);
#42=IFCBUILDING('2uvHtdWM92VhLMt9mwINS2',#5,'Default Building','',$,$,$,$,.ELEMENT.,$,$,$);
#43=IFCRELAGGREGATES('2t_v229DH6IQuULMAvUyMw',#5,'ProjectLink','',#23,(#42));
#44=IFCRELCONTAINEDINSPATIALSTRUCTURE('2dVuI5I79578O7tDwslWNg',#5,'UnassignedObjectsLink','',(#41),#42);
ENDSEC;
END-ISO-10303-21;