Started BIM specification on our own

This commit is contained in:
Yorik van Havre 2016-06-14 15:44:39 -03:00
parent b9edba0c0c
commit 989e96b283
3 changed files with 163 additions and 0 deletions

39
BIM Specifications.md Normal file
View File

@ -0,0 +1,39 @@
# BIM Specifications
Originally elaborated by [OpeningDesign](http://www.openingdesign.com) / Ryan Schultz / Yorik van Havre and licensed under [CreativeCommons](http://creativecommons.org/licenses/by/4.0/). Feel free tu use, distribute or contribute to make it better.
### Foreword
This BIM specification, unlike most other BIM specifications available, is based on real-life, tested methods to get the job done and guarantee as much as possible the primary aim of BIM, real collaboration between the different actors of a building project.
This specification consists of simple rules to guarantee a maximum of fidelity in data transfers using the [IFC](https://en.wikipedia.org/wiki/Industry_Foundation_Classes) file format. The following rules work with any version of the IFC schema.
The correct implementation of these rules implies a good understanding of the [IFC format](http://www.buildingsmart-tech.org/ifc/IFC4x1/html/), and ways to verify the contents of IFC files others than in the software where it was authored. Several [free](http://www.ifcwiki.org/index.php/Open_Source) or [open-source](http://www.ifcwiki.org/index.php/Open_Source) applications allow to open, visualize and inspect IFC files and make sure that the rules below were correctly implemented.
### Rules
### 01. All objects and materials must have a human-readable name or description
Objects should have a name that allows a human being to understand what it is, in case the software that reads the IFC file fails to recognize or categorize it appropriately. For example, bad names are "Object00014", "Material43", "Wall034". Good names are "Kitchen chair", "Grey concrete", "East living room wall"
All IFC objects have a **Name** and a **Description**. Any of them can be used for this purpose.
This rules mainly applies to [IfcProduct](http://www.buildingsmart-tech.org/ifc/IFC4x1/html/schema/ifckernel/lexical/ifcproduct.htm) entities in IFC: They are the final, individual objects that compose a building. For example, a wall, a column, a chair, a window. It doesn't consider objects that are part of a final product, when they are composed of multiple objects, for example a leg of a chair or a brick of a wall. It is sufficient to have the chair correctly named, not necessarily each component of the chair.
| Support | Import | Export |
| ------------------------ | ------ | ------ |
| FreeCAD | IFC name translated to FreeCAD object name, IFC description not imported into FreeCAD | FreeCAD object name exported as IFC name, FreeCAD object description, if present, exported as IFC description |
| Revit | | |
Test file: [wall_with_name_and_description.ifc](Specifications test files/wall_with_name_and_description.ifc)
### 02. All objects should be grouped in meaningful ways
Grouping objects using [IfcGroups](http://www.buildingsmart-tech.org/ifc/IFC4x1/html/schema/ifckernel/lexical/ifcgroup.htm) allows a human being to clearly recognize objects as being part of a same area, funcion or category. Groups can be nested inside other groups. A same object cannot be part of several groups.
| Support | Import | Export |
| ------------------------ | ------ | ------ |
| FreeCAD | IFC groups translated to FreeCAD groups. Nesting is respected. | FreeCAD groups are exported to IFC groups, but groups are not part of IfcBuildingStoreys. |
| Revit | | |
Test file: [wall_in_nested_groups.ifc](Specifications test files/wall_in_nested_groups.ifc)

View File

@ -0,0 +1,64 @@
ISO-10303-21;
HEADER;
FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1');
FILE_NAME('/home/yorik/wall_in_nested_groups.ifc','2016-06-14T18:28:11',('Yorik van Havre ','yorik@uncreated.net'),(''),'IfcOpenShell','IfcOpenShell','');
FILE_SCHEMA(('IFC4'));
ENDSEC;
DATA;
#1=IFCPERSON($,$,'Yorik van Havre ',$,$,$,$,$);
#2=IFCORGANIZATION($,'',$,$,$);
#3=IFCPERSONANDORGANIZATION(#1,#2,$);
#4=IFCAPPLICATION(#2,'0.17 build 7737 (Git)','FreeCAD','118df2cf_ed21_438e_a41');
#5=IFCOWNERHISTORY(#3,#4,$,.ADDED.,$,#3,#4,1465928891);
#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.));
#11=IFCGEOMETRICREPRESENTATIONCONTEXT('Plan','Model',3,1.E-05,#9,#10);
#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=IFCPROJECT('b0639dbc_aa2a_47c2_9e8',#5,'Unnamed',$,$,$,$,(#11),#19);
#21=IFCCARTESIANPOINT((1.,0.1));
#22=IFCCARTESIANPOINT((0.,0.1));
#23=IFCCARTESIANPOINT((0.,-0.1));
#24=IFCCARTESIANPOINT((1.,-0.1));
#25=IFCCARTESIANPOINT((1.,0.1));
#26=IFCPOLYLINE((#21,#22,#23,#24,#25));
#27=IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,$,#26);
#28=IFCDIRECTION((1.,0.,0.));
#29=IFCDIRECTION((0.,0.,1.));
#30=IFCCARTESIANPOINT((0.,0.,0.));
#31=IFCAXIS2PLACEMENT3D(#30,#29,#28);
#32=IFCDIRECTION((-0.,-0.,1.));
#33=IFCEXTRUDEDAREASOLID(#27,#31,#32,2.);
#34=IFCCOLOURRGB($,1.,1.,1.);
#35=IFCSURFACESTYLERENDERING(#34,$,$,$,$,$,$,$,.FLAT.);
#36=IFCSURFACESTYLE($,.BOTH.,(#35));
#37=IFCPRESENTATIONSTYLEASSIGNMENT((#36));
#38=IFCSTYLEDITEM(#33,(#37),$);
#39=IFCDIRECTION((1.,0.,0.));
#40=IFCDIRECTION((0.,0.,1.));
#41=IFCCARTESIANPOINT((0.,0.,0.));
#42=IFCAXIS2PLACEMENT3D(#41,#40,#39);
#43=IFCLOCALPLACEMENT($,#42);
#44=IFCSHAPEREPRESENTATION(#11,'Body','SweptSolid',(#33));
#45=IFCPRODUCTDEFINITIONSHAPE($,$,(#44));
#46=IFCWALL('2$zF5uCbqHvgBr093rt3ko',#5,'My test wall','This wall should be inside the subgroup',$,#43,#45,$,$);
#47=IFCSITE('2$zbfACbqHvgBr093rt3ko',#5,'Default Site','',$,$,$,$,.ELEMENT.,$,$,$,$,$);
#48=IFCRELAGGREGATES('2$zcECCbqHvgBr093rt3ko',#5,'ProjectLink','',#20,(#47));
#49=IFCBUILDING('2$zd9QCbqHvgBr093rt3ko',#5,'Default Building','',$,$,$,$,.ELEMENT.,$,$,$);
#50=IFCRELAGGREGATES('2$zdgsCbqHvgBr093rt3ko',#5,'SiteLink','',#47,(#49));
#51=IFCRELCONTAINEDINSPATIALSTRUCTURE('2$zeBWCbqHvgBr093rt3ko',#5,'BuildingLink','',(#46),#49);
#52=IFCGROUP('2$zfHWCbqHvgBr093rt3ko',#5,'A subgroup inside the main group','',$);
#53=IFCRELASSIGNSTOGROUP('2$zfisCbqHvgBr093rt3ko',#5,'GroupLink','',(#46),$,#52);
#54=IFCGROUP('2$zgFECbqHvgBr093rt3ko',#5,'The main group','',$);
#55=IFCRELASSIGNSTOGROUP('2$zgfKCbqHvgBr093rt3ko',#5,'GroupLink','',(#52),$,#54);
ENDSEC;
END-ISO-10303-21;

View File

@ -0,0 +1,60 @@
ISO-10303-21;
HEADER;
FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1');
FILE_NAME('/home/yorik/testwall.ifc','2016-06-14T18:16:33',('Yorik van Havre ','yorik@uncreated.net'),(''),'IfcOpenShell','IfcOpenShell','');
FILE_SCHEMA(('IFC4'));
ENDSEC;
DATA;
#1=IFCPERSON($,$,'Yorik van Havre ',$,$,$,$,$);
#2=IFCORGANIZATION($,'',$,$,$);
#3=IFCPERSONANDORGANIZATION(#1,#2,$);
#4=IFCAPPLICATION(#2,'0.17 build 7737 (Git)','FreeCAD','118df2cf_ed21_438e_a41');
#5=IFCOWNERHISTORY(#3,#4,$,.ADDED.,$,#3,#4,1465928193);
#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.));
#11=IFCGEOMETRICREPRESENTATIONCONTEXT('Plan','Model',3,1.E-05,#9,#10);
#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=IFCPROJECT('e7dba137_793e_48f4_b75',#5,'Unnamed',$,$,$,$,(#11),#19);
#21=IFCCARTESIANPOINT((1.,0.1));
#22=IFCCARTESIANPOINT((0.,0.1));
#23=IFCCARTESIANPOINT((0.,-0.1));
#24=IFCCARTESIANPOINT((1.,-0.1));
#25=IFCCARTESIANPOINT((1.,0.1));
#26=IFCPOLYLINE((#21,#22,#23,#24,#25));
#27=IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,$,#26);
#28=IFCDIRECTION((1.,0.,0.));
#29=IFCDIRECTION((0.,0.,1.));
#30=IFCCARTESIANPOINT((0.,0.,0.));
#31=IFCAXIS2PLACEMENT3D(#30,#29,#28);
#32=IFCDIRECTION((-0.,-0.,1.));
#33=IFCEXTRUDEDAREASOLID(#27,#31,#32,2.);
#34=IFCCOLOURRGB($,1.,1.,1.);
#35=IFCSURFACESTYLERENDERING(#34,$,$,$,$,$,$,$,.FLAT.);
#36=IFCSURFACESTYLE($,.BOTH.,(#35));
#37=IFCPRESENTATIONSTYLEASSIGNMENT((#36));
#38=IFCSTYLEDITEM(#33,(#37),$);
#39=IFCDIRECTION((1.,0.,0.));
#40=IFCDIRECTION((0.,0.,1.));
#41=IFCCARTESIANPOINT((0.,0.,0.));
#42=IFCAXIS2PLACEMENT3D(#41,#40,#39);
#43=IFCLOCALPLACEMENT($,#42);
#44=IFCSHAPEREPRESENTATION(#11,'Body','SweptSolid',(#33));
#45=IFCPRODUCTDEFINITIONSHAPE($,$,(#44));
#46=IFCWALL('0W2jcACbmHvfMr093rt3ko',#5,'My test wall','This is a test wall to check rule number one',$,#43,#45,$,$);
#47=IFCSITE('0W39iICbmHvfMr093rt3ko',#5,'Default Site','',$,$,$,$,.ELEMENT.,$,$,$,$,$);
#48=IFCRELAGGREGATES('0W3AJMCbmHvfMr093rt3ko',#5,'ProjectLink','',#20,(#47));
#49=IFCBUILDING('0W3BFWCbmHvfMr093rt3ko',#5,'Default Building','',$,$,$,$,.ELEMENT.,$,$,$);
#50=IFCRELAGGREGATES('0W3Bo2CbmHvfMr093rt3ko',#5,'SiteLink','',#47,(#49));
#51=IFCRELCONTAINEDINSPATIALSTRUCTURE('0W3CJeCbmHvfMr093rt3ko',#5,'BuildingLink','',(#46),#49);
ENDSEC;
END-ISO-10303-21;