Industry Foundation Classes, IFC 2. Docs Goal B has been realized here; this website you are at right now. Please note that BIMWHALE.js has additional documention. These docs are intended for those who want to dive into the nitty gritty.
BIMWHALE.js Documentation 3. BIM-valen TBW is also available as a SaaS app. The website consist of three different tools that handles IFC files. It uses behind the scenes.
N.B The website is currently only avaible in Swedish.
Once complete, it will get translated into English.
The BIM Whale Project The BIM Whale (Swedish: BIM-valen ) is a project about .
The project is is abbreviated as: TBW (The BIM Whale).
The aim of TBW is to:
I: Introduce and explain the basics of IFC
II: Teach people how to parse an IFC file and retrieve basic information
Detailed instructions Create a HTML page with an
Welcome Welcome to The BIM Whale Project 's documentation.
triangle-exclamation
Please note: This website is currently under construction!
What is The BIM Whale Project?
How do I use The BIM Whale (BIMWHALE.js) on my website?
How do I configure The BIM Whale (BIMWHALE.js)?
. We'll call our input myFile.
Make sure you include TBW before your main function.
Use the FileReader API arrow-up-right to read the content of the IFC file. We will assume that the input is a correct IFC file. In other words, we will assume that the file contains text. That's why we call reader.readAsText(file).
Creating a new BIMWHAlE object
Calling the method parseIfcFile()
triangle-exclamation
Please note that the config object is missing at this moment.
The final result should look like this:
triangle-exclamation
Please note that this code doesn't output the result.
You won't see anything on your screen.
Simply log the IFC Entities like this:
Copy <!DOCTYPE html>
<html>
<body>
<h3>Example</h3>
<input type="file" id="myIfcFile">
<button onclick="myFile()">Click me</button>
<script>
function myFunction() {
// TODO
}
</script>
</body>
</html>
Copy <script src="https://cdn.jsdelivr.net/gh/andrewisen/bim-whale/dist/BIMWHALE.min.js"></script>
<script>
function myFunction() {
// TODO
}
</script>
Copy <script>
function myFunction() {
const ifcFile = document.getElementById('myFile').files[0];
}
</script>
Copy <script>
function myFunction() {
var file = document.getElementById('myFile').files[0];
var reader = new FileReader();
reader.onload = function(e) {
// TODO
};
reader.readAsText(file);
}
</script>
Copy <script src="https://cdn.jsdelivr.net/gh/andrewisen/bim-whale/dist/BIMWHALE.min.js"></script>
<script>
function myFunction() {
var file = document.getElementById('myFile').files[0];
var reader = new FileReader();
reader.onload = function(e) {
var lines = e.target.result.split(/\r\n|\n/);
// TODO
};
reader.readAsText(file);
}
</script>
Copy new BIMWHALE.file(lines, config);
Copy var ifcEntites = file.parseIfcFile();
Copy <!DOCTYPE html>
<html>
<body>
<h3>Example</h3>
<input type="file" id="myFile">
<button onclick="myFunction()">Click me</button>
<script src="https://cdn.jsdelivr.net/gh/andrewisen/bim-whale/dist/BIMWHALE.min.js"></script>
<script>
function myFunction() {
var file = document.getElementById('myFile').files[0];
var reader = new FileReader();
reader.onload = function(e) {
var lines = e.target.result.split(/\r\n|\n/);
var ifcFile = new BIMWHALE.IfcFile(lines, config);
var ifcEntites = ifcFile.parseIfcFile();
};
reader.readAsText(file);
}
</script>
</body>
</html>
Copy var ifcEntites = file.parseIfcFile();
console.log(ifcEntites)
In more specific terms, the goal of this project is to:
A: Provide a simple and fast IFC parser
B: Provide learning resources (documentation, videos, power points) to people within the AEC industry
To clarify, the focus with The BIM Whale Project is to educate people. The code itself and its functionality are secondary.
TBW consists of three different parts:
A JavaScript module | BIMWHALE.js
Documentation | This website
A SaaS app | www.bimvalen.se
The BIM Whale Project's primary logo Abbreviations Architecture, Engineering, and Construction.
Building Information Modelling
Industry Foundation Classes
FAQ What does The BIM Whale do?
Parse so-called User Defined IFC Property Sets from an IFC file.
Getting Started You can download the latest version of BIMWHALE.js from the content delivery network (CDN) .
Get Property Set Let's reuse our example in the section.
Simple Example This example will use the sample file.
circle-exclamation
Make sure you read the before continuing
We are looking to retrieve the Property Set called Custom_Pset.
Custom_Pset occurs five times in our file, see below:
Links Here's a collection usefull links.
The BIM Whale Project
Here are some links related to TBW project.
Quick Start This is a quick start guide - i.e. this is intended for those who are exprienced in web development. Check out the for a more detailed explanation.
Create a new BIMWHALE object
What does The BIM Whale NOT do?
Follow the EXPRESS standard
Industry Foundation Classes (IFC) is a standardized, digital description of a BIM model.
See IFC for more information.
A STEP-File is the file format that IFC uses.
Again, see IFC for more information.
Is this code "hand made"?
Yes, the code is hand made. The parsing is not derived from an EXPRESS definition.
Is the code ready for production?
Copy <!DOCTYPE html>
<html>
<body>
<h3>Example</h3>
<input type="file" id="myFile">
<button onclick="myFunction()">Click me</button>
<script src="https://cdn.jsdelivr.net/gh/andrewisen/bim-whale/dist/BIMWHALE.min.js"></script>
<script>
var config = {
requiredEntities:{
IFCPROPERTYSINGLEVALUE: "IfcPropertySingleValue",
IFCRELDEFINESBYPROPERTIES: "IfcRelDefinesByProperties",
IFCPROPERTYSET: "IfcPropertySet",
},
selectedEntities:{
IFCDOOR: "IfcDoor",
IFCWALLSTANDARDCASE: "IfcWallStandardCase",
},
selectedPropertySets: ["Custom_Pset"],
allEntities:{
...requiredEntities,
...selectedEntities,
},
};
function myFunction() {
var file = document.getElementById('myFile').files[0];
var reader = new FileReader();
reader.onload = function(e) {
var lines = e.target.result.split(/\r\n|\n/);
var ifcFile = new BIMWHALE.IfcFile(lines, config);
var ifcEntites = ifcFile.parseIfcFile();
};
reader.readAsText(file);
}
</script>
</body>
</html> circle-check
You are now done!
If you have understood the snippet above, then head over to Simple Example .
Otherwise, check the Detialed Instructions for a for a more in-depth explanation.
Copy var file = document.getElementById('myFile').files[0];
var reader = new FileReader();
reader.onload = function(e) {
var lines = e.target.result.split(/\r\n|\n/);
var ifcFile = new BIMWHALE.IfcFile(lines, config);
var ifcEntites = ifcFile.parseIfcFile();
};
reader.readAsText(file); To get the latest version, simply include this snippet in your HTML:
If you want a specific realase of BIMWHALE.js , then head to:
Go to the folder dist and select bundle.min.js. Notice the dropdown in the picture below. It says 0.0.1. This indicates which realease you are at.
These lines are not in a human-readable form. We cannot interpret this data. BIMWHALE.js will help us retrive and parse this data. Take a very quick at the input/output then go ahead to the next step.
hashtag
SaaS App | www.bimvalen.se
Industry Foundation Classes, IFC
Here are some useful links related to IFC.
IFC Specifications Database
Here are some useful links related to the Standard for the Exchange of Product model data, STEP.
What are Property Sets? Our BIM model was created in Revit.
We have created our own IFC export setup. With our custom setup, Revit exports a Property Set called Custom_Pset. This means that each object (each door, wall, window, etc.) will have a property set called Custom_Pset .
We can open our exported IFC file in Solibri Anywherearrow-up-right . Our information that we want to parse is avaible in the tab Custom_Pset.
circle-check
A property set is simply a set of properties
Prerequisites We will use Bootstraparrow-up-right as the CSS framework.
Regular Bootstrap tables lacks any functionality. will add that.
Both Bootstrap and DataTables require .
We are going to use to extend the select boxes.
Add Basic HTML Page Let's add an input:
A simple approach to run a function on each file change:
The covered the bascis of reading a file and using BIMWHALE.js.
circle-check
Our HTML should look something like this:
Create a Table Let's output our result to a table using DataTables.
We need to populate the table ourselves... this might be a bit tricky to do. Here's an example to help you get started. See for more information.
circle-check
Our HTML should look something like this:
Add Config - part 2 Let's convert the select2 input to something we can use. We are going to use in this example.
This might look very complicated, but don't worry.
We simply get our selection by calling $("#selectedEntitesInput").val()
Print Property Set Let's take a minitue to prettify the result. We can implement this simple function:
Calling this function will give us a prittier result:
circle-check
Good job! You are now ready for the Advanced Example
Final result You can check out the final result on , or use the box below.
Advanced Example Let's build something more practical. Make sure you have read and understood the . Before we begin, let's list some feature that the previous example lacked:
The config was hard coded. There was no way for the user to change it.
The infromation was only logged in the console. A regular user couldn't see the result.
Copy <script src="https://cdn.jsdelivr.net/gh/andrewisen/bim-whale/dist/BIMWHALE.min.js"></script>
Copy {
TypeMark: "_TYPE-MARK_",
Keynote: "_KEYNOTE_",
StoreyName: "Level: Level 1",
TypeDescription: "_DESCRIPTION_",
StatusConstruction: "New Construction",
NetArea: "14.04739",
Height: "4000.",
Width: "200.",
Length: "4000.",
Hyperlink: "_URL_"
}
{
TypeMark: "20",
Keynote: "--KEYNOTE--",
StoreyName: "Level: Level 1",
TypeDescription: "--DESCRIPTION--",
StatusConstruction: "New Construction",
NetArea: "3.18957899999998",
Height: "2134.",
Width: "915.",
SillHeight: "0.",
Hyperlink: "--URL--"
}
Copy #370= IFCPROPERTYSET('2WRKEbxzHDcwyFLp2OWZN6',#42,'Custom_Pset',$,(#365,#366,#367,#368,#369));
#420= IFCPROPERTYSET('0GscS$MUj8VORpWhZ8HE9A',#42,'Custom_Pset','',(#410,#411,#412,#413,#414,#415,#416,#417,#418,#419));
#603= IFCPROPERTYSET('1CXc3dmFPFfQbCU$bHsAfS',#42,'Custom_Pset','',(#593,#594,#595,#596,#597,#598,#599,#600,#601,#602));
#735= IFCPROPERTYSET('3CUt_fMl9Df9OKgw$sNH0T',#42,'Custom_Pset',$,(#729,#730,#731,#732,#733,#734));
#762= IFCPROPERTYSET('081bdaxsT7tvi7VV3hCTqa',#42,'Custom_Pset','',(#761)) * Model: DataRepository.ifc
* Model creation date: Wed Oct 28 18:06:26 2020
* Header model: DataRepository.ifc_HeaderModel
* Header model creation date: Wed Oct 28 18:06:26 2020
* EDMuser: sdai-user
* EDMgroup: sdai-group
* License ID and type: 5605 : Permanent license. Expiry date:
* EDMstepFileFactory options: 020000
******************************************************************************************/
FILE_DESCRIPTION(('ViewDefinition [CoordinationView_V2.0, QuantityTakeOffAddOnView]'),'2;1');
FILE_NAME('// PROJECT/NUMBER //','2020-10-28T18:06:27',(''),(''),'The EXPRESS Data Manager Version 5.02.0100.07 : 28 Aug 2013','21.1.0.108 - Exporter 21.1.0.108 - Alternate UI 21.1.0.108','');
FILE_SCHEMA(('IFC2X3'));
ENDSEC;
DATA;
#1= IFCORGANIZATION($,'Autodesk Revit 2021 (ENU)',$,$,$);
#5= IFCAPPLICATION(#1,'2021','Autodesk Revit 2021 (ENU)','Revit');
#6= IFCCARTESIANPOINT((0.,0.,0.));
#9= IFCCARTESIANPOINT((0.,0.));
#11= IFCDIRECTION((1.,0.,0.));
#13= IFCDIRECTION((-1.,0.,0.));
#15= IFCDIRECTION((0.,1.,0.));
#17= IFCDIRECTION((0.,-1.,0.));
#19= IFCDIRECTION((0.,0.,1.));
#21= IFCDIRECTION((0.,0.,-1.));
#23= IFCDIRECTION((1.,0.));
#25= IFCDIRECTION((-1.,0.));
#27= IFCDIRECTION((0.,1.));
#29= IFCDIRECTION((0.,-1.));
#31= IFCAXIS2PLACEMENT3D(#6,$,$);
#32= IFCLOCALPLACEMENT(#149,#31);
#35= IFCPERSON($,'//','//',('AUTHOR'),$,$,$,$);
#38= IFCORGANIZATION($,'// ORGANIZATION/NAME //','// ORGANIZATION/DESCRIPTION //',$,$);
#39= IFCPERSONANDORGANIZATION(#35,#38,$);
#42= IFCOWNERHISTORY(#39,#5,$,.NOCHANGE.,$,$,$,1603900718);
#43= IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.);
#44= IFCSIUNIT(*,.LENGTHUNIT.,$,.METRE.);
#45= IFCSIUNIT(*,.AREAUNIT.,$,.SQUARE_METRE.);
#46= IFCSIUNIT(*,.VOLUMEUNIT.,$,.CUBIC_METRE.);
#47= IFCSIUNIT(*,.PLANEANGLEUNIT.,$,.RADIAN.);
#48= IFCDIMENSIONALEXPONENTS(0,0,0,0,0,0,0);
#49= IFCMEASUREWITHUNIT(IFCRATIOMEASURE(0.0174532925199433),#47);
#50= IFCCONVERSIONBASEDUNIT(#48,.PLANEANGLEUNIT.,'DEGREE',#49);
#51= IFCSIUNIT(*,.MASSUNIT.,.KILO.,.GRAM.);
#52= IFCDERIVEDUNITELEMENT(#51,1);
#53= IFCDERIVEDUNITELEMENT(#44,-3);
#54= IFCDERIVEDUNIT((#52,#53),.MASSDENSITYUNIT.,$);
#56= IFCDERIVEDUNITELEMENT(#44,4);
#57= IFCDERIVEDUNIT((#56),.MOMENTOFINERTIAUNIT.,$);
#59= IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.);
#60= IFCSIUNIT(*,.FREQUENCYUNIT.,$,.HERTZ.);
#61= IFCSIUNIT(*,.THERMODYNAMICTEMPERATUREUNIT.,$,.KELVIN.);
#62= IFCSIUNIT(*,.THERMODYNAMICTEMPERATUREUNIT.,$,.DEGREE_CELSIUS.);
#63= IFCDERIVEDUNITELEMENT(#51,1);
#64= IFCDERIVEDUNITELEMENT(#61,-1);
#65= IFCDERIVEDUNITELEMENT(#59,-3);
#66= IFCDERIVEDUNIT((#63,#64,#65),.THERMALTRANSMITTANCEUNIT.,$);
#68= IFCSIUNIT(*,.LENGTHUNIT.,.DECI.,.METRE.);
#69= IFCDERIVEDUNITELEMENT(#44,3);
#70= IFCDERIVEDUNITELEMENT(#59,-1);
#71= IFCDERIVEDUNIT((#69,#70),.VOLUMETRICFLOWRATEUNIT.,$);
#73= IFCSIUNIT(*,.ELECTRICCURRENTUNIT.,$,.AMPERE.);
#74= IFCSIUNIT(*,.ELECTRICVOLTAGEUNIT.,$,.VOLT.);
#75= IFCSIUNIT(*,.POWERUNIT.,$,.WATT.);
#76= IFCSIUNIT(*,.FORCEUNIT.,.KILO.,.NEWTON.);
#77= IFCSIUNIT(*,.ILLUMINANCEUNIT.,$,.LUX.);
#78= IFCSIUNIT(*,.LUMINOUSFLUXUNIT.,$,.LUMEN.);
#79= IFCSIUNIT(*,.LUMINOUSINTENSITYUNIT.,$,.CANDELA.);
#80= IFCDERIVEDUNITELEMENT(#51,-1);
#81= IFCDERIVEDUNITELEMENT(#44,-2);
#82= IFCDERIVEDUNITELEMENT(#59,3);
#83= IFCDERIVEDUNITELEMENT(#78,1);
#84= IFCDERIVEDUNIT((#80,#81,#82,#83),.USERDEFINED.,'Luminous Efficacy');
#86= IFCDERIVEDUNITELEMENT(#44,1);
#87= IFCDERIVEDUNITELEMENT(#59,-1);
#88= IFCDERIVEDUNIT((#86,#87),.LINEARVELOCITYUNIT.,$);
#90= IFCSIUNIT(*,.PRESSUREUNIT.,$,.PASCAL.);
#91= IFCDERIVEDUNITELEMENT(#44,-2);
#92= IFCDERIVEDUNITELEMENT(#51,1);
#93= IFCDERIVEDUNITELEMENT(#59,-2);
#94= IFCDERIVEDUNIT((#91,#92,#93),.USERDEFINED.,'Friction Loss');
#96= IFCDERIVEDUNITELEMENT(#51,1);
#97= IFCDERIVEDUNITELEMENT(#44,1);
#98= IFCDERIVEDUNITELEMENT(#59,-2);
#99= IFCDERIVEDUNITELEMENT(#44,-1);
#100= IFCDERIVEDUNIT((#96,#97,#98,#99),.LINEARFORCEUNIT.,$);
#102= IFCDERIVEDUNITELEMENT(#51,1);
#103= IFCDERIVEDUNITELEMENT(#44,1);
#104= IFCDERIVEDUNITELEMENT(#59,-2);
#105= IFCDERIVEDUNITELEMENT(#44,-2);
#106= IFCDERIVEDUNIT((#102,#103,#104,#105),.PLANARFORCEUNIT.,$);
#108= IFCUNITASSIGNMENT((#43,#45,#46,#50,#51,#54,#57,#59,#60,#62,#66,#71,#73,#74,#75,#76,#77,#78,#79,#84,#88,#90,#94,#100,#106));
#110= IFCAXIS2PLACEMENT3D(#6,$,$);
#111= IFCDIRECTION((6.12303176911189E-17,1.));
#113= IFCGEOMETRICREPRESENTATIONCONTEXT($,'Model',3,0.01,#110,#111);
#116= IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Axis','Model',*,*,*,*,#113,$,.GRAPH_VIEW.,$);
#118= IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Body','Model',*,*,*,*,#113,$,.MODEL_VIEW.,$);
#119= IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Box','Model',*,*,*,*,#113,$,.MODEL_VIEW.,$);
#120= IFCGEOMETRICREPRESENTATIONSUBCONTEXT('FootPrint','Model',*,*,*,*,#113,$,.MODEL_VIEW.,$);
#121= IFCPROJECT('2nxdYR2RHCDBiKJulbA_QU',#42,'// PROJECT/NUMBER //',$,$,'// PROJECT/NAME //','// PROJECT/STATUS //',(#113),#108);
#127= IFCPOSTALADDRESS($,$,$,$,('Enter address here'),$,'','Boston','','MA');
#131= IFCBUILDING('2nxdYR2RHCDBiKJulbA_QV',#42,'// BUILDING/NAME //',$,$,#32,$,'// BUILDING/NAME //',.ELEMENT.,$,$,#127);
#137= IFCAXIS2PLACEMENT3D(#6,$,$);
#138= IFCLOCALPLACEMENT(#32,#137);
#140= IFCBUILDINGSTOREY('2nxdYR2RHCDBiKJuiQr1XP',#42,'Level 1',$,'Level:8mm Head',#138,$,'Level 1',.ELEMENT.,0.);
#142= IFCCARTESIANPOINT((0.,0.,4000.));
#144= IFCAXIS2PLACEMENT3D(#142,$,$);
#937= IFCAXIS2PLACEMENT3D(#6,#19,#13);
#823= IFCRELCONTAINEDINSPATIALSTRUCTURE('3Zu5Bv0LOHrPC10066FoQQ',#42,$,$,(#219,#572),#140);
#148= IFCAXIS2PLACEMENT3D(#6,$,$);
#149= IFCLOCALPLACEMENT($,#148);
#150= IFCSITE('2nxdYR2RHCDBiKJulbA_QS',#42,'Default',$,$,#149,$,$,.ELEMENT.,(42,21,31,181945),(-71,-3,-24,-263305),0.,$,$);
#154= IFCPROPERTYSINGLEVALUE('Category',$,IFCLABEL('Project Information'),$);
#155= IFCPROPERTYSET('2fyIDpiXL2EOHb_molX$RM',#42,'Pset_ProductRequirements',$,(#154));
#160= IFCRELDEFINESBYPROPERTIES('2Zkk7MDtv5UPXO7lnY9Pfr',#42,$,$,(#150),#155);
#164= IFCPROPERTYSINGLEVALUE('Author',$,IFCTEXT('// AUTHOR //'),$);
#165= IFCPROPERTYSINGLEVALUE('Building Name',$,IFCTEXT('// BUILDING/NAME //'),$);
#166= IFCPROPERTYSINGLEVALUE('Organization Description',$,IFCTEXT('// ORGANIZATION/DESCRIPTION //'),$);
#167= IFCPROPERTYSINGLEVALUE('Organization Name',$,IFCTEXT('// ORGANIZATION/NAME //'),$);
#168= IFCPROPERTYSINGLEVALUE('Category',$,IFCLABEL('Project Information'),$);
#169= IFCPROPERTYSINGLEVALUE('Client Name',$,IFCTEXT('// CLIENT/NAME //'),$);
#170= IFCPROPERTYSINGLEVALUE('Project Address',$,IFCTEXT('Enter address here'),$);
#171= IFCPROPERTYSINGLEVALUE('Project Issue Date',$,IFCTEXT('// ISSUE DATE //'),$);
#172= IFCPROPERTYSINGLEVALUE('Project Name',$,IFCTEXT('// PROJECT/NAME //'),$);
#173= IFCPROPERTYSINGLEVALUE('Project Number',$,IFCTEXT('// PROJECT/NUMBER //'),$);
#174= IFCPROPERTYSINGLEVALUE('Project Status',$,IFCTEXT('// PROJECT/STATUS //'),$);
#175= IFCPROPERTYSET('27PCKGLxT4mxtV86o6mgBW',#42,'Identity Data',$,(#164,#165,#166,#167));
#177= IFCRELDEFINESBYPROPERTIES('27PCKGLxT4mxtV8Mo6mgBW',#42,$,$,(#150),#175);
#180= IFCPROPERTYSET('3qEsWJfw50zAS2DD_Fn$yp',#42,'Other',$,(#168,#169,#170,#171,#172,#173,#174));
#182= IFCRELDEFINESBYPROPERTIES('2O3RVoVXf1igF5Ze9BKwLp',#42,$,$,(#150),#180);
#185= IFCCARTESIANPOINT((-1693.30861181816,-5.56914852525364,0.));
#187= IFCAXIS2PLACEMENT3D(#185,$,$);
#188= IFCLOCALPLACEMENT(#138,#187);
#190= IFCCARTESIANPOINT((4000.,0.));
#192= IFCPOLYLINE((#9,#190));
#194= IFCSHAPEREPRESENTATION(#116,'Axis','Curve2D',(#192));
#197= IFCCARTESIANPOINT((2000.,0.));
#199= IFCAXIS2PLACEMENT2D(#197,#25);
#200= IFCRECTANGLEPROFILEDEF(.AREA.,$,#199,4000.,200.);
#201= IFCAXIS2PLACEMENT3D(#6,$,$);
#202= IFCEXTRUDEDAREASOLID(#200,#201,#19,4000.);
#203= IFCCOLOURRGB($,0.501960784313725,0.501960784313725,0.501960784313725);
#204= IFCSURFACESTYLERENDERING(#203,0.,$,$,$,$,IFCNORMALISEDRATIOMEASURE(0.5),IFCSPECULAREXPONENT(64.),.NOTDEFINED.);
#205= IFCSURFACESTYLE('Default Wall',.BOTH.,(#204));
#207= IFCPRESENTATIONSTYLEASSIGNMENT((#205));
#209= IFCSTYLEDITEM(#202,(#207),$);
#212= IFCSHAPEREPRESENTATION(#118,'Body','SweptSolid',(#202));
#215= IFCPRODUCTDEFINITIONSHAPE($,$,(#194,#212));
#219= IFCWALLSTANDARDCASE('1F6umJ5H50aeL3A1As_wTm',#42,'Basic Wall:Bearing Wall:346660',$,'Basic Wall:Bearing Wall',#188,#215,'346660');
#228= IFCQUANTITYLENGTH('Height',$,$,4000.);
#229= IFCQUANTITYLENGTH('Length',$,$,4000.);
#230= IFCQUANTITYLENGTH('Width',$,$,200.);
#231= IFCQUANTITYAREA('GrossFootprintArea',$,$,0.8);
#232= IFCQUANTITYVOLUME('NetVolume',$,$,3200000000.);
#233= IFCQUANTITYAREA('NetSideArea',$,$,16000000.);
#234= IFCQUANTITYAREA('NetSideArea',$,$,14.04739);
#235= IFCQUANTITYVOLUME('NetVolume',$,$,2.809478);
#236= IFCELEMENTQUANTITY('1tNGP0o7zCuxUSDLATNaK3',#42,'BaseQuantities',$,$,(#228,#229,#230,#231,#232,#233,#234,#235));
#238= IFCRELDEFINESBYPROPERTIES('0Vgcm4Chb6OxnMJMYOlkea',#42,$,$,(#219),#236);
#242= IFCMATERIAL('Default Wall');
#245= IFCPRESENTATIONSTYLEASSIGNMENT((#205));
#247= IFCSTYLEDITEM($,(#245),$);
#249= IFCSTYLEDREPRESENTATION(#113,'Style','Material',(#247));
#252= IFCMATERIALDEFINITIONREPRESENTATION($,$,(#249),#242);
#255= IFCMATERIALLAYER(#242,200.,$);
#257= IFCMATERIALLAYERSET((#255),'Basic Wall:Bearing Wall');
#260= IFCMATERIALLAYERSETUSAGE(#257,.AXIS2.,.NEGATIVE.,100.);
#261= IFCWALLTYPE('1F6umJ5H50aeL3A1As_wV9',#42,'Basic Wall:Bearing Wall',$,$,(#332,#334,#336,#338,#340,#343,#346,#349,#352,#355,#359,#363,#370),$,'346781',$,.STANDARD.);
#263= IFCPROPERTYSINGLEVALUE('Base Constraint',$,IFCLABEL('Level: Level 1'),$);
#264= IFCPROPERTYSINGLEVALUE('Base Extension Distance',$,IFCLENGTHMEASURE(0.),$);
#265= IFCPROPERTYSINGLEVALUE('Base is Attached',$,IFCBOOLEAN(.F.),$);
#266= IFCPROPERTYSINGLEVALUE('Base Offset',$,IFCLENGTHMEASURE(0.),$);
#267= IFCPROPERTYSINGLEVALUE('Cross-Section',$,IFCIDENTIFIER('Vertical'),$);
#268= IFCPROPERTYSINGLEVALUE('Location Line',$,IFCIDENTIFIER('Wall Centerline'),$);
#269= IFCPROPERTYSINGLEVALUE('Related to Mass',$,IFCBOOLEAN(.F.),$);
#270= IFCPROPERTYSINGLEVALUE('Room Bounding',$,IFCBOOLEAN(.T.),$);
#271= IFCPROPERTYSINGLEVALUE('Top Constraint',$,IFCLABEL('Level: Level 2'),$);
#272= IFCPROPERTYSINGLEVALUE('Top Extension Distance',$,IFCLENGTHMEASURE(0.),$);
#273= IFCPROPERTYSINGLEVALUE('Top is Attached',$,IFCBOOLEAN(.F.),$);
#274= IFCPROPERTYSINGLEVALUE('Top Offset',$,IFCLENGTHMEASURE(0.),$);
#275= IFCPROPERTYSINGLEVALUE('Unconnected Height',$,IFCLENGTHMEASURE(4000.),$);
#276= IFCPROPERTYSINGLEVALUE('Phase Created',$,IFCLABEL('New Construction'),$);
#277= IFCPROPERTYSINGLEVALUE('Enable Analytical Model',$,IFCBOOLEAN(.F.),$);
#278= IFCPROPERTYSINGLEVALUE('Structural',$,IFCBOOLEAN(.F.),$);
#279= IFCPROPERTYSINGLEVALUE('Structural Usage',$,IFCIDENTIFIER('Non-bearing'),$);
#280= IFCPROPERTYSINGLEVALUE('Area',$,IFCAREAMEASURE(14.04739),$);
#281= IFCPROPERTYSINGLEVALUE('Length',$,IFCLENGTHMEASURE(4000.),$);
#282= IFCPROPERTYSINGLEVALUE('Volume',$,IFCVOLUMEMEASURE(2.809478),$);
#283= IFCPROPERTYSINGLEVALUE('Category',$,IFCLABEL('Walls'),$);
#284= IFCPROPERTYSINGLEVALUE('Family',$,IFCLABEL('Basic Wall: Bearing Wall'),$);
#285= IFCPROPERTYSINGLEVALUE('Family and Type',$,IFCLABEL('Basic Wall: Bearing Wall'),$);
#286= IFCPROPERTYSINGLEVALUE('Type',$,IFCLABEL('Basic Wall: Bearing Wall'),$);
#287= IFCPROPERTYSINGLEVALUE('Type Id',$,IFCLABEL('Basic Wall: Bearing Wall'),$);
#288= IFCPROPERTYSINGLEVALUE('Absorptance',$,IFCREAL(0.7),$);
#289= IFCPROPERTYSINGLEVALUE('Roughness',$,IFCINTEGER(3),$);
#290= IFCPROPERTYSINGLEVALUE('Coarse Scale Fill Color',$,IFCINTEGER(0),$);
#291= IFCPROPERTYSINGLEVALUE('Function',$,IFCIDENTIFIER('Exterior'),$);
#292= IFCPROPERTYSINGLEVALUE('Width',$,IFCLENGTHMEASURE(200.),$);
#293= IFCPROPERTYSINGLEVALUE('Wrapping at Ends',$,IFCIDENTIFIER('None'),$);
#294= IFCPROPERTYSINGLEVALUE('Wrapping at Inserts',$,IFCIDENTIFIER('Do not wrap'),$);
#295= IFCPROPERTYSINGLEVALUE('Assembly Code',$,IFCTEXT('_ASSEMBLY-CODE_'),$);
#296= IFCPROPERTYSINGLEVALUE('Assembly Description',$,IFCTEXT(''),$);
#297= IFCPROPERTYSINGLEVALUE('Description',$,IFCTEXT('_DESCRIPTION_'),$);
#298= IFCPROPERTYSINGLEVALUE('Fire Rating',$,IFCTEXT('_FIRE-RATING_'),$);
#299= IFCPROPERTYSINGLEVALUE('Keynote',$,IFCTEXT('_KEYNOTE_'),$);
#300= IFCPROPERTYSINGLEVALUE('Manufacturer',$,IFCTEXT('_MANUFACTURER_'),$);
#301= IFCPROPERTYSINGLEVALUE('Model',$,IFCTEXT('MODEL'),$);
#302= IFCPROPERTYSINGLEVALUE('Type Comments',$,IFCTEXT('_TYPE-COMMENTS_'),$);
#303= IFCPROPERTYSINGLEVALUE('Type Mark',$,IFCTEXT('_TYPE-MARK_'),$);
#304= IFCPROPERTYSINGLEVALUE('Type Name',$,IFCTEXT('Bearing Wall'),$);
#305= IFCPROPERTYSINGLEVALUE('URL',$,IFCTEXT('_URL_'),$);
#306= IFCPROPERTYSINGLEVALUE('Family Name',$,IFCTEXT('Basic Wall'),$);
#307= IFCPROPERTYSET('1F6umJ5H50aeL3BWQs_wTm',#42,'Constraints',$,(#263,#264,#265,#266,#267,#268,#269,#270,#271,#272,#273,#274,#275));
#309= IFCRELDEFINESBYPROPERTIES('1F6umJ5H50aeL3BmQs_wTm',#42,$,$,(#219),#307);
#312= IFCPROPERTYSET('1F6umJ5H50aeL3BX2s_wTm',#42,'Dimensions',$,(#280,#281,#282));
#314= IFCRELDEFINESBYPROPERTIES('1F6umJ5H50aeL3Bn2s_wTm',#42,$,$,(#219),#312);
#317= IFCPROPERTYSET('0Orq4sVkf4nuhG2_KyNA6v',#42,'Other',$,(#283,#284,#285,#286,#287));
#319= IFCRELDEFINESBYPROPERTIES('2piNnh9PP7P9X83hwTczmI',#42,$,$,(#219),#317);
#322= IFCPROPERTYSET('1F6umJ5H50aeL3BXss_wTm',#42,'Phasing',$,(#276));
#324= IFCRELDEFINESBYPROPERTIES('1F6umJ5H50aeL3Bnss_wTm',#42,$,$,(#219),#322);
#327= IFCPROPERTYSET('1F6umJ5H50aeL3BX_s_wTm',#42,'Structural',$,(#277,#278,#279));
#329= IFCRELDEFINESBYPROPERTIES('1F6umJ5H50aeL3Bn_s_wTm',#42,$,$,(#219),#327);
#332= IFCPROPERTYSET('1F6umJ5H50aeL3Ba_s_wV9',#42,'Analytical Properties',$,(#288,#289));
#334= IFCPROPERTYSET('1F6umJ5H50aeL3BXQs_wV9',#42,'Construction',$,(#291,#292,#293,#294));
#336= IFCPROPERTYSET('1F6umJ5H50aeL3BXUs_wV9',#42,'Graphics',$,(#290));
#338= IFCPROPERTYSET('1F6umJ5H50aeL3BXEs_wV9',#42,'Identity Data',$,(#295,#296,#297,#298,#299,#300,#301,#302,#303,#304,#305));
#340= IFCPROPERTYSET('3SvvqA__r5DgpdHwQyK3Bd',#42,'Other',$,(#283,#306));
#342= IFCPROPERTYSINGLEVALUE('FireRating',$,IFCLABEL('_FIRE-RATING_'),$);
#343= IFCPROPERTYSET('2FgIvz$DH78OxbP_6aQM2V',#42,'Pset_ConcreteElementGeneral',$,(#342));
#345= IFCPROPERTYSINGLEVALUE('Roughness',$,IFCPOSITIVELENGTHMEASURE(914.4),$);
#346= IFCPROPERTYSET('1oVspYgob9zvAirDJdqqfX',#42,'Pset_ElementShading',$,(#345));
#348= IFCPROPERTYSINGLEVALUE('Manufacturer',$,IFCLABEL('_MANUFACTURER_'),$);
#349= IFCPROPERTYSET('1aTixl2HD13BY1fMD6Ca95',#42,'Pset_ManufacturerTypeInformation',$,(#348));
#351= IFCPROPERTYSINGLEVALUE('Category',$,IFCLABEL('Walls'),$);
#352= IFCPROPERTYSET('3TpEitt5fAtunT40jgEguw',#42,'Pset_ProductRequirements',$,(#351));
#354= IFCPROPERTYSINGLEVALUE('Reference',$,IFCIDENTIFIER('Bearing Wall'),$);
#355= IFCPROPERTYSET('3G$HLInsX3ceLuR_J74pJp',#42,'Pset_QuantityTakeOff',$,(#354));
#357= IFCPROPERTYSINGLEVALUE('Description',$,IFCTEXT('_DESCRIPTION_'),$);
#358= IFCPROPERTYSINGLEVALUE('Reference',$,IFCLABEL('Bearing Wall'),$);
#359= IFCPROPERTYSET('30Z0TShUL41BB0lNR6torP',#42,'Pset_ReinforcementBarPitchOfWall',$,(#357,#358));
#361= IFCPROPERTYSINGLEVALUE('FireRating',$,IFCLABEL('_FIRE-RATING_'),$);
#362= IFCPROPERTYSINGLEVALUE('IsExternal',$,IFCBOOLEAN(.F.),$);
#363= IFCPROPERTYSET('1F6umJ5H50aeL38__s_wV9',#42,'Pset_WallCommon',$,(#354,#361,#362));
#365= IFCPROPERTYSINGLEVALUE('TypeMark',$,IFCLABEL('_TYPE-MARK_'),$);
#366= IFCPROPERTYSINGLEVALUE('Keynote',$,IFCLABEL('_KEYNOTE_'),$);
#367= IFCPROPERTYSINGLEVALUE('TypeDescription',$,IFCTEXT('_DESCRIPTION_'),$);
#368= IFCPROPERTYSINGLEVALUE('Width',$,IFCLENGTHMEASURE(200.),$);
#369= IFCPROPERTYSINGLEVALUE('Hyperlink',$,IFCTEXT('_URL_'),$);
#370= IFCPROPERTYSET('2WRKEbxzHDcwyFLp2OWZN6',#42,'Custom_Pset',$,(#365,#366,#367,#368,#369));
#386= IFCPROPERTYSINGLEVALUE('FireRating',$,IFCLABEL('_FIRE-RATING_'),$);
#387= IFCPROPERTYSET('3P2gpigy5Bxf21UPLtfxGn',#42,'Pset_ConcreteElementGeneral',$,(#386));
#389= IFCPROPERTYSINGLEVALUE('Roughness',$,IFCPOSITIVELENGTHMEASURE(914.4),$);
#390= IFCPROPERTYSET('3oPqgsplnDQBBauhDymfTT',#42,'Pset_ElementShading',$,(#389));
#392= IFCPROPERTYSINGLEVALUE('Manufacturer',$,IFCLABEL('_MANUFACTURER_'),$);
#393= IFCPROPERTYSET('0sSV0IAmn1$hYjAOaeItMd',#42,'Pset_ManufacturerTypeInformation',$,(#392));
#395= IFCPROPERTYSINGLEVALUE('Category',$,IFCLABEL('Walls'),$);
#396= IFCPROPERTYSET('0BJealGbf6YvPiyaIcPtbR',#42,'Pset_ProductRequirements',$,(#395));
#398= IFCPROPERTYSET('3B2kERP3j9yuxt6oSMSCYK',#42,'Pset_QuantityTakeOff',$,(#354));
#400= IFCPROPERTYSINGLEVALUE('Description',$,IFCTEXT('_DESCRIPTION_'),$);
#401= IFCPROPERTYSINGLEVALUE('Reference',$,IFCLABEL('Bearing Wall'),$);
#402= IFCPROPERTYSET('35fO62eKf7eBj26c0ZGCYK',#42,'Pset_ReinforcementBarPitchOfWall',$,(#400,#401));
#404= IFCPROPERTYSINGLEVALUE('FireRating',$,IFCLABEL('_FIRE-RATING_'),$);
#405= IFCPROPERTYSINGLEVALUE('IsExternal',$,IFCBOOLEAN(.T.),$);
#406= IFCPROPERTYSINGLEVALUE('ExtendToStructure',$,IFCBOOLEAN(.F.),$);
#407= IFCPROPERTYSINGLEVALUE('LoadBearing',$,IFCBOOLEAN(.F.),$);
#408= IFCPROPERTYSET('1F6umJ5H50aeL38__s_wTm',#42,'Pset_WallCommon',$,(#354,#404,#405,#406,#407));
#410= IFCPROPERTYSINGLEVALUE('TypeMark',$,IFCLABEL('_TYPE-MARK_'),$);
#411= IFCPROPERTYSINGLEVALUE('Keynote',$,IFCLABEL('_KEYNOTE_'),$);
#412= IFCPROPERTYSINGLEVALUE('StoreyName',$,IFCTEXT('Level: Level 1'),$);
#413= IFCPROPERTYSINGLEVALUE('TypeDescription',$,IFCTEXT('_DESCRIPTION_'),$);
#414= IFCPROPERTYSINGLEVALUE('StatusConstruction',$,IFCLABEL('New Construction'),$);
#415= IFCPROPERTYSINGLEVALUE('NetArea',$,IFCAREAMEASURE(14.04739),$);
#416= IFCPROPERTYSINGLEVALUE('Height',$,IFCLENGTHMEASURE(4000.),$);
#417= IFCPROPERTYSINGLEVALUE('Width',$,IFCLENGTHMEASURE(200.),$);
#418= IFCPROPERTYSINGLEVALUE('Length',$,IFCLENGTHMEASURE(4000.),$);
#419= IFCPROPERTYSINGLEVALUE('Hyperlink',$,IFCTEXT('_URL_'),$);
#420= IFCPROPERTYSET('0GscS$MUj8VORpWhZ8HE9A',#42,'Custom_Pset','',(#410,#411,#412,#413,#414,#415,#416,#417,#418,#419));
#422= IFCRELDEFINESBYPROPERTIES('2MFCuX$Tz2sPZWU81naSyy',#42,$,$,(#219),#387);
#425= IFCRELDEFINESBYPROPERTIES('2zJMZ6wET4dgTHfaIfMtfO',#42,$,$,(#219),#390);
#428= IFCRELDEFINESBYPROPERTIES('1X0JGVfDf1W9F9IK$qt1Lk',#42,$,$,(#219),#393);
#431= IFCRELDEFINESBYPROPERTIES('1Ol9CkDoP5Dun0TKKnif29',#42,$,$,(#219),#396);
#434= IFCRELDEFINESBYPROPERTIES('0JqUYZ7Z16zQrsbalAuwUh',#42,$,$,(#219),#398);
#437= IFCRELDEFINESBYPROPERTIES('2qcAwIAOvEYPa5s9UuUorV',#42,$,$,(#219),#402);
#440= IFCRELDEFINESBYPROPERTIES('1xmcmfIjT6CR2StfT5_wlv',#42,$,$,(#219),#408);
#443= IFCRELDEFINESBYPROPERTIES('36lLKbnX5EwwW25YA80Mtv',#42,$,$,(#219),#420);
#446= IFCCLASSIFICATION('http://www.csiorg.net/uniformat','1998',$,'Uniformat');
#448= IFCCLASSIFICATIONREFERENCE('http://www.csiorg.net/uniformat','_ASSEMBLY-CODE_',$,#446);
#449= IFCRELASSOCIATESCLASSIFICATION('1Tbe43SmzDeheUB6aGPLmp',#42,'Uniformat Classification','',(#219),#448);
#452= IFCCARTESIANPOINT((-533.5,-1124.));
#454= IFCCARTESIANPOINT((533.5,-1124.));
#456= IFCCARTESIANPOINT((533.5,1086.));
#458= IFCCARTESIANPOINT((457.5,1086.));
#460= IFCCARTESIANPOINT((457.5,-1048.));
#462= IFCCARTESIANPOINT((-457.5,-1048.));
#464= IFCCARTESIANPOINT((-457.5,1086.));
#466= IFCCARTESIANPOINT((-533.5,1086.));
#468= IFCPOLYLINE((#452,#454,#456,#458,#460,#462,#464,#466,#452));
#470= IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,'Outside door',#468);
#471= IFCCARTESIANPOINT((457.500000000001,200.,1086.));
#473= IFCAXIS2PLACEMENT3D(#471,#15,#11);
#474= IFCEXTRUDEDAREASOLID(#470,#473,#19,24.9999999999945);
#475= IFCCARTESIANPOINT((-1124.,-533.499999999997));
#477= IFCCARTESIANPOINT((1086.,-533.499999999997));
#479= IFCCARTESIANPOINT((1086.,-457.500000000007));
#481= IFCCARTESIANPOINT((-1048.,-457.500000000007));
#483= IFCCARTESIANPOINT((-1048.,457.500000000002));
#485= IFCCARTESIANPOINT((1086.,457.500000000002));
#487= IFCCARTESIANPOINT((1086.,533.500000000003));
#489= IFCCARTESIANPOINT((-1124.,533.500000000003));
#491= IFCPOLYLINE((#475,#477,#479,#481,#483,#485,#487,#489,#475));
#493= IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,'Outside door',#491);
#494= IFCCARTESIANPOINT((457.500000000003,-25.,1086.));
#496= IFCAXIS2PLACEMENT3D(#494,#15,#21);
#497= IFCEXTRUDEDAREASOLID(#493,#496,#19,25.0000000000056);
#498= IFCCARTESIANPOINT((-5.32907051820075E-15,0.));
#500= IFCAXIS2PLACEMENT2D(#498,#23);
#501= IFCRECTANGLEPROFILEDEF(.AREA.,'Outside door',#500,51.,915.);
#502= IFCCARTESIANPOINT((457.5,174.500000000001,0.));
#504= IFCAXIS2PLACEMENT3D(#502,#19,#15);
#505= IFCEXTRUDEDAREASOLID(#501,#504,#19,2134.);
#506= IFCCOLOURRGB($,0.462745098039216,0.274509803921569,0.2);
#507= IFCSURFACESTYLERENDERING(#506,0.,$,$,$,$,IFCNORMALISEDRATIOMEASURE(0.5),IFCSPECULAREXPONENT(128.),.NOTDEFINED.);
#508= IFCSURFACESTYLE('Door - Frame',.BOTH.,(#507));
#510= IFCPRESENTATIONSTYLEASSIGNMENT((#508));
#512= IFCSTYLEDITEM(#474,(#510),$);
#515= IFCSTYLEDITEM(#497,(#510),$);
#518= IFCCOLOURRGB($,0.823529411764706,0.623529411764706,0.372549019607843);
#519= IFCSURFACESTYLERENDERING(#518,0.,$,$,$,$,IFCNORMALISEDRATIOMEASURE(0.5),IFCSPECULAREXPONENT(128.),.NOTDEFINED.);
#520= IFCSURFACESTYLE('Door - Panel',.BOTH.,(#519));
#522= IFCPRESENTATIONSTYLEASSIGNMENT((#520));
#524= IFCSTYLEDITEM(#505,(#522),$);
#527= IFCSHAPEREPRESENTATION(#118,'Body','SweptSolid',(#474,#497,#505));
#529= IFCAXIS2PLACEMENT3D(#6,$,$);
#530= IFCREPRESENTATIONMAP(#529,#527);
#532= IFCDOORLININGPROPERTIES('1F6umJ5H50aeL3A1Es_wUF',#42,'M_Single-Flush:Outside door:346843',$,$,$,$,$,$,$,$,$,$,$,$);
#533= IFCDOORPANELPROPERTIES('1F6umJ5H50aeL3A12s_wUF',#42,'M_Single-Flush:Outside door:346843',$,$,.SWINGING.,$,.NOTDEFINED.,$);
#534= IFCDOORSTYLE('1F6umJ5H50aeL3A0Us_wOq',#42,'M_Single-Flush:Outside door',$,$,(#532,#533,#702,#704,#706,#708,#710,#712,#715,#719,#722,#725,#727,#735),(#530),'49480',.SINGLE_SWING_RIGHT.,.NOTDEFINED.,.F.,.F.);
#539= IFCMATERIAL('Door - Frame');
#540= IFCPRESENTATIONSTYLEASSIGNMENT((#508));
#542= IFCSTYLEDITEM($,(#540),$);
#544= IFCSTYLEDREPRESENTATION(#113,'Style','Material',(#542));
#546= IFCMATERIALDEFINITIONREPRESENTATION($,$,(#544),#539);
#549= IFCMATERIAL('Door - Panel');
#550= IFCPRESENTATIONSTYLEASSIGNMENT((#520));
#552= IFCSTYLEDITEM($,(#550),$);
#554= IFCSTYLEDREPRESENTATION(#113,'Style','Material',(#552));
#556= IFCMATERIALDEFINITIONREPRESENTATION($,$,(#554),#549);
#559= IFCMATERIALLIST((#539,#549));
#561= IFCCARTESIANTRANSFORMATIONOPERATOR3D($,$,#6,1.,$);
#562= IFCMAPPEDITEM(#530,#561);
#564= IFCSHAPEREPRESENTATION(#118,'Body','MappedRepresentation',(#562));
#566= IFCPRODUCTDEFINITIONSHAPE($,$,(#564));
#568= IFCCARTESIANPOINT((764.191388181842,94.4308514747393,0.));
#570= IFCAXIS2PLACEMENT3D(#568,#19,#13);
#938= IFCLOCALPLACEMENT(#915,#937);
#572= IFCDOOR('1F6umJ5H50aeL3A1As_wUF',#42,'M_Single-Flush:Outside door:346843',$,'M_Single-Flush:Outside door',#938,#566,'346843',2134.,915.);
#575= IFCMATERIALLIST((#539,#549));
#577= IFCPROPERTYSINGLEVALUE('FireRating',$,IFCLABEL('--FIRE_CODE--'),$);
#578= IFCPROPERTYSET('1MAvBog6f9YfPSrRA3TNJX',#42,'Pset_ConcreteElementGeneral',$,(#577));
#580= IFCPROPERTYSINGLEVALUE('Reference',$,IFCIDENTIFIER('Outside door'),$);
#581= IFCPROPERTYSINGLEVALUE('FireRating',$,IFCLABEL('--FIRE_CODE--'),$);
#582= IFCPROPERTYSINGLEVALUE('ThermalTransmittance',$,IFCTHERMALTRANSMITTANCEMEASURE(3.7021),$);
#583= IFCPROPERTYSET('1F6umJ5H50aeL38_As_wUF',#42,'Pset_DoorCommon',$,(#362,#580,#581,#582));
#585= IFCPROPERTYSINGLEVALUE('Manufacturer',$,IFCLABEL('--TYPE_COMMENTS_'),$);
#586= IFCPROPERTYSET('2aWAgDA5DBTx6ubccoEHuL',#42,'Pset_ManufacturerTypeInformation',$,(#585));
#588= IFCPROPERTYSINGLEVALUE('Category',$,IFCLABEL('Doors'),$);
#589= IFCPROPERTYSET('37$b9ZV6bEV9w4ajZ6Vuro',#42,'Pset_ProductRequirements',$,(#588));
#591= IFCPROPERTYSET('1VUx5P6tv2FRM5czFXIoYd',#42,'Pset_QuantityTakeOff',$,(#580));
#593= IFCPROPERTYSINGLEVALUE('TypeMark',$,IFCLABEL('20'),$);
#594= IFCPROPERTYSINGLEVALUE('Keynote',$,IFCLABEL('--KEYNOTE--'),$);
#595= IFCPROPERTYSINGLEVALUE('StoreyName',$,IFCTEXT('Level: Level 1'),$);
#596= IFCPROPERTYSINGLEVALUE('TypeDescription',$,IFCTEXT('--DESCRIPTION--'),$);
#597= IFCPROPERTYSINGLEVALUE('StatusConstruction',$,IFCLABEL('New Construction'),$);
#598= IFCPROPERTYSINGLEVALUE('NetArea',$,IFCAREAMEASURE(3.18957899999998),$);
#599= IFCPROPERTYSINGLEVALUE('Height',$,IFCLENGTHMEASURE(2134.),$);
#600= IFCPROPERTYSINGLEVALUE('Width',$,IFCLENGTHMEASURE(915.),$);
#601= IFCPROPERTYSINGLEVALUE('SillHeight',$,IFCLENGTHMEASURE(0.),$);
#602= IFCPROPERTYSINGLEVALUE('Hyperlink',$,IFCTEXT('--URL--'),$);
#603= IFCPROPERTYSET('1CXc3dmFPFfQbCU$bHsAfS',#42,'Custom_Pset','',(#593,#594,#595,#596,#597,#598,#599,#600,#601,#602));
#605= IFCRELDEFINESBYPROPERTIES('14RxrffgjD6QlWHKtlQTAN',#42,$,$,(#572),#578);
#609= IFCRELDEFINESBYPROPERTIES('04ckjvoyL25Q50h8x6sUPv',#42,$,$,(#572),#583);
#612= IFCRELDEFINESBYPROPERTIES('0$6_vvQgz7_eKsnZrkKoIw',#42,$,$,(#572),#586);
#615= IFCRELDEFINESBYPROPERTIES('1UyD_HmPHBougIcmoJRJ7m',#42,$,$,(#572),#589);
#618= IFCRELDEFINESBYPROPERTIES('2lpvQgxsjEfPta9gxkQaM5',#42,$,$,(#572),#591);
#621= IFCRELDEFINESBYPROPERTIES('26uNI57VnEBgae2CZ9gqtr',#42,$,$,(#572),#603);
#624= IFCQUANTITYLENGTH('Height','',$,2134.);
#625= IFCQUANTITYLENGTH('Width','',$,915.);
#626= IFCQUANTITYAREA('Area','area measured in geometry',$,3.18957899999998);
#627= IFCELEMENTQUANTITY('39uqRwTJT9qhACjvMcPpu_',#42,'BaseQuantities',$,$,(#624,#625,#626));
#629= IFCRELDEFINESBYPROPERTIES('1QmkCV1Kz2MfAPznLVFMCy',#42,$,$,(#572),#627);
#632= IFCCLASSIFICATIONREFERENCE('http://www.csiorg.net/uniformat','--ASSEMBLY_CODE--',$,#446);
#633= IFCRELASSOCIATESCLASSIFICATION('2nmxXpeUXAOQtHOkOFmKTR',#42,'Uniformat Classification','',(#572),#632);
#636= IFCPROPERTYSINGLEVALUE('Level',$,IFCLABEL('Level: Level 1'),$);
#637= IFCPROPERTYSINGLEVALUE('Sill Height',$,IFCLENGTHMEASURE(0.),$);
#638= IFCPROPERTYSINGLEVALUE('Area',$,IFCAREAMEASURE(3.18957899999998),$);
#639= IFCPROPERTYSINGLEVALUE('Volume',$,IFCVOLUMEMEASURE(0.119856109999999),$);
#640= IFCPROPERTYSINGLEVALUE('Mark',$,IFCTEXT('1'),$);
#641= IFCPROPERTYSINGLEVALUE('Category',$,IFCLABEL('Doors'),$);
#642= IFCPROPERTYSINGLEVALUE('Family',$,IFCLABEL('M_Single-Flush: Outside door'),$);
#643= IFCPROPERTYSINGLEVALUE('Family and Type',$,IFCLABEL('M_Single-Flush: Outside door'),$);
#644= IFCPROPERTYSINGLEVALUE('Head Height',$,IFCLENGTHMEASURE(2134.),$);
#645= IFCPROPERTYSINGLEVALUE('Host Id',$,IFCLABEL('Basic Wall: Bearing Wall'),$);
#646= IFCPROPERTYSINGLEVALUE('Type',$,IFCLABEL('M_Single-Flush: Outside door'),$);
#647= IFCPROPERTYSINGLEVALUE('Type Id',$,IFCLABEL('M_Single-Flush: Outside door'),$);
#648= IFCPROPERTYSINGLEVALUE('Analytic Construction',$,IFCTEXT('Metal'),$);
#649= IFCPROPERTYSINGLEVALUE('Define Thermal Properties by',$,IFCIDENTIFIER('Schematic Type'),$);
#650= IFCPROPERTYSINGLEVALUE('Heat Transfer Coefficient (U)',$,IFCREAL(3.7021),$);
#651= IFCPROPERTYSINGLEVALUE('Solar Heat Gain Coefficient',$,IFCREAL(0.),$);
#652= IFCPROPERTYSINGLEVALUE('Thermal Resistance (R)',$,IFCREAL(0.270116960643959),$);
#653= IFCPROPERTYSINGLEVALUE('Visual Light Transmittance',$,IFCREAL(0.),$);
#654= IFCPROPERTYSINGLEVALUE('Door Material',$,IFCLABEL('Door - Panel'),$);
#655= IFCPROPERTYSINGLEVALUE('Frame Material',$,IFCLABEL('Door - Frame'),$);
#656= IFCPROPERTYSINGLEVALUE('Function',$,IFCIDENTIFIER('Interior'),$);
#657= IFCPROPERTYSINGLEVALUE('Wall Closure',$,IFCIDENTIFIER('By host'),$);
#658= IFCPROPERTYSINGLEVALUE('Height',$,IFCLENGTHMEASURE(2134.),$);
#659= IFCPROPERTYSINGLEVALUE('Thickness',$,IFCLENGTHMEASURE(51.),$);
#660= IFCPROPERTYSINGLEVALUE('Trim Projection Ext',$,IFCLENGTHMEASURE(25.),$);
#661= IFCPROPERTYSINGLEVALUE('Trim Projection Int',$,IFCLENGTHMEASURE(25.),$);
#662= IFCPROPERTYSINGLEVALUE('Trim Width',$,IFCLENGTHMEASURE(76.),$);
#663= IFCPROPERTYSINGLEVALUE('Width',$,IFCLENGTHMEASURE(915.),$);
#664= IFCPROPERTYSINGLEVALUE('Assembly Code',$,IFCTEXT('--ASSEMBLY_CODE--'),$);
#665= IFCPROPERTYSINGLEVALUE('Code Name',$,IFCTEXT(''),$);
#666= IFCPROPERTYSINGLEVALUE('Description',$,IFCTEXT('--DESCRIPTION--'),$);
#667= IFCPROPERTYSINGLEVALUE('Fire Rating',$,IFCTEXT('--FIRE_CODE--'),$);
#668= IFCPROPERTYSINGLEVALUE('Keynote',$,IFCTEXT('--KEYNOTE--'),$);
#669= IFCPROPERTYSINGLEVALUE('Manufacturer',$,IFCTEXT('--TYPE_COMMENTS_'),$);
#670= IFCPROPERTYSINGLEVALUE('Model',$,IFCTEXT('--MODEL--'),$);
#671= IFCPROPERTYSINGLEVALUE('OmniClass Number',$,IFCTEXT('23.30.10.00'),$);
#672= IFCPROPERTYSINGLEVALUE('OmniClass Title',$,IFCTEXT('Doors'),$);
#673= IFCPROPERTYSINGLEVALUE('Type Mark',$,IFCTEXT('20'),$);
#674= IFCPROPERTYSINGLEVALUE('Type Name',$,IFCTEXT('Outside door'),$);
#675= IFCPROPERTYSINGLEVALUE('URL',$,IFCTEXT('--URL--'),$);
#676= IFCPROPERTYSINGLEVALUE('Family Name',$,IFCTEXT('M_Single-Flush'),$);
#677= IFCPROPERTYSET('1F6umJ5H50aeL3BWQs_wUF',#42,'Constraints',$,(#636,#637));
#679= IFCRELDEFINESBYPROPERTIES('1F6umJ5H50aeL3BmQs_wUF',#42,$,$,(#572),#677);
#682= IFCPROPERTYSET('1F6umJ5H50aeL3BX2s_wUF',#42,'Dimensions',$,(#638,#639));
#684= IFCRELDEFINESBYPROPERTIES('1F6umJ5H50aeL3Bn2s_wUF',#42,$,$,(#572),#682);
#687= IFCPROPERTYSET('1F6umJ5H50aeL3BXEs_wUF',#42,'Identity Data',$,(#640));
#689= IFCRELDEFINESBYPROPERTIES('1F6umJ5H50aeL3BnEs_wUF',#42,$,$,(#572),#687);
#692= IFCPROPERTYSET('2BegeYd3fCOeVyUmGr0qxL',#42,'Other',$,(#641,#642,#643,#644,#645,#646,#647));
#694= IFCRELDEFINESBYPROPERTIES('1QrXJ2z1rFTuQboBVeLF$Z',#42,$,$,(#572),#692);
#697= IFCPROPERTYSET('1F6umJ5H50aeL3BXss_wUF',#42,'Phasing',$,(#276));
#699= IFCRELDEFINESBYPROPERTIES('1F6umJ5H50aeL3Bnss_wUF',#42,$,$,(#572),#697);
#702= IFCPROPERTYSET('3W2Tu2KKr66wtPVQ1PGsDC',#42,'Analytical Properties',$,(#648,#649,#650,#651,#652,#653));
#704= IFCPROPERTYSET('3W2Tu2KKr66wtPVVbPGsDC',#42,'Construction',$,(#656,#657));
#706= IFCPROPERTYSET('3W2Tu2KKr66wtPVVzPGsDC',#42,'Dimensions',$,(#658,#659,#660,#661,#662,#663));
#708= IFCPROPERTYSET('3W2Tu2KKr66wtPVVnPGsDC',#42,'Identity Data',$,(#296,#664,#665,#666,#667,#668,#669,#670,#671,#672,#673,#674,#675));
#710= IFCPROPERTYSET('3W2Tu2KKr66wtPVVjPGsDC',#42,'Materials and Finishes',$,(#654,#655));
#712= IFCPROPERTYSET('0KOXzzKarFERoTS0N7cfbD',#42,'Other',$,(#641,#676));
#714= IFCPROPERTYSINGLEVALUE('FireRating',$,IFCLABEL('--FIRE_CODE--'),$);
#715= IFCPROPERTYSET('0YRN2fpNzDoxoXFEOdBeJw',#42,'Pset_ConcreteElementGeneral',$,(#714));
#717= IFCPROPERTYSINGLEVALUE('FireRating',$,IFCLABEL('--FIRE_CODE--'),$);
#718= IFCPROPERTYSINGLEVALUE('ThermalTransmittance',$,IFCTHERMALTRANSMITTANCEMEASURE(3.7021),$);
#719= IFCPROPERTYSET('3W2Tu2KKr66wtPS0rPGsDC',#42,'Pset_DoorCommon',$,(#362,#580,#717,#718));
#721= IFCPROPERTYSINGLEVALUE('Manufacturer',$,IFCLABEL('--TYPE_COMMENTS_'),$);
#722= IFCPROPERTYSET('0LOQqn1NfDkwoxFtCajotd',#42,'Pset_ManufacturerTypeInformation',$,(#721));
#724= IFCPROPERTYSINGLEVALUE('Category',$,IFCLABEL('Doors'),$);
#725= IFCPROPERTYSET('2b6m9MCNn679Y43LRC330T',#42,'Pset_ProductRequirements',$,(#724));
#727= IFCPROPERTYSET('0F4CuoFTLEvRXd3x$a9K3$',#42,'Pset_QuantityTakeOff',$,(#580));
#729= IFCPROPERTYSINGLEVALUE('TypeMark',$,IFCLABEL('20'),$);
#730= IFCPROPERTYSINGLEVALUE('Keynote',$,IFCLABEL('--KEYNOTE--'),$);
#731= IFCPROPERTYSINGLEVALUE('TypeDescription',$,IFCTEXT('--DESCRIPTION--'),$);
#732= IFCPROPERTYSINGLEVALUE('Height',$,IFCLENGTHMEASURE(2134.),$);
#733= IFCPROPERTYSINGLEVALUE('Width',$,IFCLENGTHMEASURE(915.),$);
#734= IFCPROPERTYSINGLEVALUE('Hyperlink',$,IFCTEXT('--URL--'),$);
#735= IFCPROPERTYSET('3CUt_fMl9Df9OKgw$sNH0T',#42,'Custom_Pset',$,(#729,#730,#731,#732,#733,#734));
#751= IFCPROPERTYSINGLEVALUE('Name',$,IFCLABEL('Level 1'),$);
#752= IFCPROPERTYSET('0$99IJGkP9Q86lu5rnKYUN',#42,'Pset_AirSideSystemInformation',$,(#751));
#754= IFCPROPERTYSINGLEVALUE('AboveGround',$,IFCLOGICAL(.U.),$);
#755= IFCPROPERTYSET('3Zu5Bv0LOHrPC12_o6FoQQ',#42,'Pset_BuildingStoreyCommon',$,(#754));
#757= IFCPROPERTYSINGLEVALUE('Name',$,IFCLABEL('Level 1'),$);
#758= IFCPROPERTYSINGLEVALUE('Category',$,IFCLABEL('Levels'),$);
#759= IFCPROPERTYSET('1E$wH_IvL0u9KdSridkQHO',#42,'Pset_ProductRequirements',$,(#757,#758));
#761= IFCPROPERTYSINGLEVALUE('SpaceName',$,IFCLABEL('Level 1'),$);
#762= IFCPROPERTYSET('081bdaxsT7tvi7VV3hCTqa',#42,'Custom_Pset','',(#761));
#764= IFCRELDEFINESBYPROPERTIES('0Jv9wzDiT2Fx3l2pN5PrZ7',#42,$,$,(#140),#752);
#768= IFCRELDEFINESBYPROPERTIES('1uZQMUSkv6FAgEXy9GtiEh',#42,$,$,(#140),#755);
#771= IFCRELDEFINESBYPROPERTIES('1FuE$sx5j7jhZwoEQu$YIS',#42,$,$,(#140),#759);
#774= IFCRELDEFINESBYPROPERTIES('1ThjSvkAT6B8HzMssSW$IW',#42,$,$,(#140),#762);
#777= IFCPROPERTYSINGLEVALUE('Elevation',$,IFCLENGTHMEASURE(0.),$);
#778= IFCPROPERTYSINGLEVALUE('Computation Height',$,IFCLENGTHMEASURE(0.),$);
#779= IFCPROPERTYSINGLEVALUE('Building Story',$,IFCBOOLEAN(.T.),$);
#780= IFCPROPERTYSINGLEVALUE('Name',$,IFCTEXT('Level 1'),$);
#781= IFCPROPERTYSINGLEVALUE('Category',$,IFCLABEL('Levels'),$);
#782= IFCPROPERTYSINGLEVALUE('Family',$,IFCLABEL('Level: 8mm Head'),$);
#783= IFCPROPERTYSINGLEVALUE('Family and Type',$,IFCLABEL('Level: 8mm Head'),$);
#784= IFCPROPERTYSINGLEVALUE('Type',$,IFCLABEL('Level: 8mm Head'),$);
#785= IFCPROPERTYSINGLEVALUE('Type Id',$,IFCLABEL('Level: 8mm Head'),$);
#786= IFCPROPERTYSINGLEVALUE('Elevation Base',$,IFCIDENTIFIER('Project Base Point'),$);
#787= IFCPROPERTYSINGLEVALUE('Color',$,IFCINTEGER(0),$);
#788= IFCPROPERTYSINGLEVALUE('Line Pattern',$,IFCLABEL('Centre'),$);
#789= IFCPROPERTYSINGLEVALUE('Line Weight',$,IFCIDENTIFIER('1'),$);
#790= IFCPROPERTYSINGLEVALUE('Symbol',$,IFCLABEL('M_Level Head - Circle: M_Level Head - Circle'),$);
#791= IFCPROPERTYSINGLEVALUE('Symbol at End 1 Default',$,IFCBOOLEAN(.F.),$);
#792= IFCPROPERTYSINGLEVALUE('Symbol at End 2 Default',$,IFCBOOLEAN(.T.),$);
#793= IFCPROPERTYSINGLEVALUE('Type Name',$,IFCTEXT('8mm Head'),$);
#794= IFCPROPERTYSINGLEVALUE('Family Name',$,IFCTEXT('Level'),$);
#795= IFCPROPERTYSET('3Zu5Bv0LOHrPC11XI6FoQQ',#42,'Constraints',$,(#777));
#797= IFCRELDEFINESBYPROPERTIES('3Zu5Bv0LOHrPC11nI6FoQQ',#42,$,$,(#140),#795);
#800= IFCPROPERTYSET('3Zu5Bv0LOHrPC11WA6FoQQ',#42,'Dimensions',$,(#778));
#802= IFCRELDEFINESBYPROPERTIES('3Zu5Bv0LOHrPC11mA6FoQQ',#42,$,$,(#140),#800);
#805= IFCPROPERTYSET('3Zu5Bv0LOHrPC11W66FoQQ',#42,'Identity Data',$,(#278,#779,#780));
#807= IFCRELDEFINESBYPROPERTIES('3Zu5Bv0LOHrPC11m66FoQQ',#42,$,$,(#140),#805);
#810= IFCPROPERTYSET('0eCyo1mQf61RRDb8LkFhbB',#42,'Other',$,(#781,#782,#783,#784,#785));
#812= IFCRELDEFINESBYPROPERTIES('3$zaZUyoL6L9DrOV9RtgBX',#42,$,$,(#140),#810);
#815= IFCPROPERTYSET('3Zu5Bv0LOHrPC11XI6FoQS',#42,'Constraints(Type)',$,(#786));
#817= IFCPROPERTYSET('3Zu5Bv0LOHrPC11WM6FoQS',#42,'Graphics(Type)',$,(#787,#788,#789,#790,#791,#792));
#819= IFCPROPERTYSET('3Zu5Bv0LOHrPC11W66FoQS',#42,'Identity Data(Type)',$,(#793));
#821= IFCPROPERTYSET('2qVnE7UtTDKAGidujFAE08',#42,'Other(Type)',$,(#781,#794));
#828= IFCRELAGGREGATES('2usGHf9Nj3g8$vNhPcOa4J',#42,$,$,#121,(#150));
#832= IFCRELAGGREGATES('0YbgX$FVvBg9IJMkBorzcZ',#42,$,$,#150,(#131));
#836= IFCRELAGGREGATES('27PCKGLxT4mxtV9cw6mgBW',#42,$,$,#131,(#140));
#840= IFCPROPERTYSINGLEVALUE('NumberOfStoreys',$,IFCINTEGER(1),$);
#841= IFCPROPERTYSINGLEVALUE('IsLandmarked',$,IFCLOGICAL(.U.),$);
#842= IFCPROPERTYSET('27PCKGLxT4mxtVBOQ6mgBW',#42,'Pset_BuildingCommon',$,(#840,#841));
#844= IFCPROPERTYSINGLEVALUE('Category',$,IFCLABEL('Project Information'),$);
#845= IFCPROPERTYSET('2HlE6XRD5D2u$q88QiyvCI',#42,'Pset_ProductRequirements',$,(#844));
#847= IFCRELDEFINESBYPROPERTIES('1ThDg46v99hhPo_cQYW0rR',#42,$,$,(#131),#842);
#851= IFCRELDEFINESBYPROPERTIES('041QPVCJrABucJbKRNgMWb',#42,$,$,(#131),#845);
#854= IFCPROPERTYSINGLEVALUE('Author',$,IFCTEXT('// AUTHOR //'),$);
#855= IFCPROPERTYSINGLEVALUE('Building Name',$,IFCTEXT('// BUILDING/NAME //'),$);
#856= IFCPROPERTYSINGLEVALUE('Organization Description',$,IFCTEXT('// ORGANIZATION/DESCRIPTION //'),$);
#857= IFCPROPERTYSINGLEVALUE('Organization Name',$,IFCTEXT('// ORGANIZATION/NAME //'),$);
#858= IFCPROPERTYSINGLEVALUE('Client Name',$,IFCTEXT('// CLIENT/NAME //'),$);
#859= IFCPROPERTYSINGLEVALUE('Project Address',$,IFCTEXT('Enter address here'),$);
#860= IFCPROPERTYSINGLEVALUE('Project Issue Date',$,IFCTEXT('// ISSUE DATE //'),$);
#861= IFCPROPERTYSINGLEVALUE('Project Name',$,IFCTEXT('// PROJECT/NAME //'),$);
#862= IFCPROPERTYSINGLEVALUE('Project Number',$,IFCTEXT('// PROJECT/NUMBER //'),$);
#863= IFCPROPERTYSINGLEVALUE('Project Status',$,IFCTEXT('// PROJECT/STATUS //'),$);
#864= IFCPROPERTYSET('0s2Cq7Qr16Ox1rbEEIxz2G',#42,'Identity Data',$,(#854,#855,#856,#857));
#866= IFCRELDEFINESBYPROPERTIES('28SWhRx5b0sf$MJWcMt2nE',#42,$,$,(#131),#864);
#869= IFCPROPERTYSET('1CDFHAzCT93vZFGBuRrsae',#42,'Other',$,(#168,#858,#859,#860,#861,#862,#863));
#871= IFCRELDEFINESBYPROPERTIES('2DcsKHXrrAPwYRZm$ohYq2',#42,$,$,(#131),#869);
#874= IFCRELASSOCIATESMATERIAL('1wE5zd2gDCvQcFXdkvgcaL',#42,$,$,(#219),#260);
#876= IFCRELASSOCIATESMATERIAL('3GYCaV5cTDC9Pr0aWWgagz',#42,$,$,(#261),#257);
#879= IFCRELASSOCIATESMATERIAL('1FhLk1Yhr9qfrZHn1ibg3k',#42,$,$,(#534),#559);
#882= IFCRELASSOCIATESMATERIAL('0fx8ZLmDfAMv9ssKwx6$_9',#42,$,$,(#572),#575);
#884= IFCRELDEFINESBYTYPE('3Nexmy3HT5DQH5On6RkB_B',#42,$,$,(#219),#261);
#887= IFCRELDEFINESBYTYPE('3wpnK4sXnFpBOVHc68PX9l',#42,$,$,(#572),#534);
#890= IFCRELDEFINESBYPROPERTIES('0tF1p_d896seH5amYBxeZq',#42,$,$,(#140),#815);
#893= IFCRELDEFINESBYPROPERTIES('0E5e8bTTXAVwon56y69uPu',#42,$,$,(#140),#817);
#896= IFCRELDEFINESBYPROPERTIES('1BJ83_hCTCVfyD3$5h98Nf',#42,$,$,(#140),#819);
#899= IFCRELDEFINESBYPROPERTIES('2i4fyR0Hz3ChSGqhPoEuwU',#42,$,$,(#140),#821);
#902= IFCCARTESIANPOINT((1067.,457.5));
#904= IFCAXIS2PLACEMENT2D(#902,#27);
#905= IFCRECTANGLEPROFILEDEF(.AREA.,$,#904,915.,2134.);
#906= IFCAXIS2PLACEMENT3D(#6,#17,#19);
#907= IFCEXTRUDEDAREASOLID(#905,#906,#19,200.);
#908= IFCSHAPEREPRESENTATION(#118,'Body','SweptSolid',(#907));
#910= IFCPRODUCTDEFINITIONSHAPE($,$,(#908));
#912= IFCCARTESIANPOINT((2457.5,100.,0.));
#914= IFCAXIS2PLACEMENT3D(#912,$,$);
#915= IFCLOCALPLACEMENT(#188,#914);
#917= IFCOPENINGELEMENT('1F6umJ5H50aeL3A06s_wUF',#42,'M_Single-Flush:Outside door:346843:1',$,'Opening',#915,#910,'346843');
#922= IFCRELVOIDSELEMENT('1F6umJ5H50aeL3A0Qs_wUF',#42,$,$,#219,#917);
#925= IFCQUANTITYLENGTH('Depth',$,$,200.);
#926= IFCQUANTITYLENGTH('Height',$,$,915.);
#927= IFCQUANTITYLENGTH('Width',$,$,2134.);
#928= IFCELEMENTQUANTITY('2bznKwbC9EfhuYS7RbVHuS',#42,'BaseQuantities',$,$,(#925,#926,#927));
#930= IFCRELDEFINESBYPROPERTIES('18rPOfDATBfOF$7p8CMdFK',#42,$,$,(#917),#928);
#934= IFCRELFILLSELEMENT('3trX3C1YDCOBtTtvk1SC8E',#42,$,$,#917,#572);
#941= IFCPRESENTATIONLAYERASSIGNMENT('A-DOOR-____-OTLN',$,(#527,#564),$);
#943= IFCPRESENTATIONLAYERASSIGNMENT('A-WALL-____-OTLN',$,(#194,#212,#908),$);
ENDSEC;
END-ISO-10303-21;
Copy <input type="file" id="myIfcFile">
Copy <input type="file" id="myIfcFile" onchange="myFunction()">
Copy var file = document.getElementById('myIfcFile').files[0];
var reader = new FileReader();
reader.onload = function(e) {
var lines = e.target.result.split(/\r\n|\n/);
// TODO
};
reader.readAsText(file);
Copy <table class="table table-hover" id="ifcTable" width="100%"></table>
Copy var data = [];
Object.values(ifcEntites).forEach((entity) => {
Object.keys(entity.properties).forEach(
(propertySet) => {
Object.keys(
entity.properties[propertySet]
).forEach((property) => {
data = [
...data,
[
entity.instanceName,
entity.attributes.parsed[0],
entity.entityName,
entity.attributes.parsed[2],
propertySet,
property,
entity.properties[propertySet][
property
],
],
];
});
}
);
});
Copy function printPropertySet(entites, myPropertySet) {
for (var entitiy in entites) {
for (var propertySet in entites[entitiy].properties) {
if (propertySet === myPropertySet) {
console.log(entites[entitiy].properties[pset]);
}
}
}
}
Copy {
TypeMark: "_TYPE-MARK_",
Keynote: "_KEYNOTE_",
StoreyName: "Level: Level 1",
TypeDescription: "_DESCRIPTION_",
StatusConstruction: "New Construction",
NetArea: "14.04739",
Height: "4000.",
Width: "200.",
Length: "4000.",
Hyperlink: "_URL_"
}
{
TypeMark: "20",
Keynote: "--KEYNOTE--",
StoreyName: "Level: Level 1",
TypeDescription: "--DESCRIPTION--",
StatusConstruction: "New Construction",
NetArea: "3.18957899999998",
Height: "2134.",
Width: "915.",
SillHeight: "0.",
Hyperlink: "--URL--"
} We create an object for each selected entity using.forEach((entity) =>
circle-check
Our HTML should look something like this:
Copy var selectedEntities = {};
$("#selectedEntitesInput")
.val()
.forEach((entity) => {
selectedEntities = {
...selectedEntities,
[entity.toUpperCase()]: entity,
};
});
Copy <!DOCTYPE html>
<html>
<body>
<h3>Advanced Example</h3>
<!-- Input -->
<input type="file" id="myIfcFile" onchange="myFunction()" />
<!-- Bootstrap, jQuery, DataTables -->
<link
rel="stylesheet"
type="text/css"
href="https://cdn.datatables.net/v/bs4-4.1.1/jq-3.3.1/dt-1.10.22/datatables.min.css"
/>
<script
type="text/javascript"
src="https://cdn.datatables.net/v/bs4-4.1.1/jq-3.3.1/dt-1.10.22/datatables.min.js"
></script>
<!-- BIMWHALE.js -->
<script src="https://cdn.jsdelivr.net/gh/andrewisen/bim-whale/dist/bundle.min.js"></script>
<script>
function myFunction() {
var file = document.getElementById("myIfcFile").files[0];
var reader = new FileReader();
reader.onload = function (e) {
var lines = e.target.result.split(/\r\n|\n/);
// Create new BIMWHALE.js object
var ifcFile = new BIMWHALE.IfcFile(lines, config);
// Parse file and get IFC entiteis
var ifcEntites = ifcFile.parseIfcFile();
console.log(ifcEntites);
};
reader.readAsText(file);
}
</script>
</body>
</html>
Copy <!DOCTYPE html>
<html>
<body>
<h3>Advanced Example</h3>
<!-- Input -->
<select
id="selectedEntitesInput"
name="selectedEntites[]"
multiple="multiple"
style="width: 100%"
required
></select>
<input type="file" id="myIfcFile" onchange="myFunction()" />
<!-- Table -->
<table class="table table-hover" id="ifcTable" width="100%"></table>
<!-- Bootstrap, jQuery, DataTables -->
<link
rel="stylesheet"
type="text/css"
href="https://cdn.datatables.net/v/bs4-4.1.1/jq-3.3.1/dt-1.10.22/datatables.min.css"
/>
<script
type="text/javascript"
src="https://cdn.datatables.net/v/bs4-4.1.1/jq-3.3.1/dt-1.10.22/datatables.min.js"
></script>
<!-- Select2 -->
<link
href="https://cdn.jsdelivr.net/npm/select2@4.0.13/dist/css/select2.min.css"
rel="stylesheet"
/>
<script src="https://cdn.jsdelivr.net/npm/select2@4.0.13/dist/js/select2.min.js"></script>
<!-- BIMWHALE.js -->
<script src="https://cdn.jsdelivr.net/gh/andrewisen/bim-whale/dist/bundle.min.js"></script>
<script>
// Select
$(document).ready(function () {
var data = [
{
text: "Shared Building Elements",
children: [
{
id: "IfcDoor",
text: "IfcDoor",
},
{
id: "IfcWallStandardCase",
text: "IfcWallStandardCase",
},
{
id: "IfcWindow",
text: "IfcWindow",
},
],
},
];
$("#selectedEntitesInput").select2({
data: data,
placeholder: "Select which entities to include",
});
});
// File Input
function myFunction() {
// Get selected entities
let selectedEntities = {};
$("#selectedEntitesInput")
.val()
.forEach((entity) => {
selectedEntities = {
...selectedEntities,
[entity.toUpperCase()]: entity,
};
});
// Build config
var requiredEntities = {
IFCPROPERTYSINGLEVALUE: "IfcPropertySingleValue",
IFCRELDEFINESBYPROPERTIES: "IfcRelDefinesByProperties",
IFCPROPERTYSET: "IfcPropertySet",
};
var selectedPropertySets = [];
var allEntities = {
...requiredEntities,
...selectedEntities,
};
var config = {
requiredEntities,
selectedEntities,
selectedPropertySets,
allEntities,
};
// Read IFC file
var file = document.getElementById("myIfcFile").files[0];
var reader = new FileReader();
reader.onload = function (e) {
var lines = e.target.result.split(/\r\n|\n/);
// Create new BIMWHALE.js object
var ifcFile = new BIMWHALE.IfcFile(lines, config);
// Parse file and get IFC entiteis
var ifcEntites = ifcFile.parseIfcFile();
// Generate table data
var data = [];
Object.values(ifcEntites).forEach((entity) => {
Object.keys(entity.properties).forEach(
(propertySet) => {
Object.keys(
entity.properties[propertySet]
).forEach((property) => {
data = [
...data,
[
entity.instanceName,
entity.attributes.parsed[0],
entity.entityName,
entity.attributes.parsed[2],
propertySet,
property,
entity.properties[propertySet][
property
],
],
];
});
}
);
});
// Genereate DataTable
var ifcTable = $("#ifcTable").DataTable({
data: data,
searching: false,
columns: [
{
title: "Id",
data: 0,
},
{
title: "GUID",
data: 1,
},
{
title: "Entity",
data: 2,
},
{
title: "Name",
data: 3,
},
{
title: "Property Set",
data: 4,
},
{
title: "Property Name",
data: 5,
},
{
title: "Property Value",
data: 6,
},
],
});
};
reader.readAsText(file);
}
</script>
</body>
</html>
Copy <!DOCTYPE html>
<html>
<body>
<h3>Advanced Example</h3>
<!-- Input -->
<select
id="selectedEntitesInput"
name="selectedEntites[]"
multiple="multiple"
style="width: 100%"
required
></select>
<input type="file" id="myIfcFile" onchange="myFunction()" />
<!-- Bootstrap, jQuery, DataTables -->
<link
rel="stylesheet"
type="text/css"
href="https://cdn.datatables.net/v/bs4-4.1.1/jq-3.3.1/dt-1.10.22/datatables.min.css"
/>
<script
type="text/javascript"
src="https://cdn.datatables.net/v/bs4-4.1.1/jq-3.3.1/dt-1.10.22/datatables.min.js"
></script>
<!-- Select2 -->
<link
href="https://cdn.jsdelivr.net/npm/select2@4.0.13/dist/css/select2.min.css"
rel="stylesheet"
/>
<script src="https://cdn.jsdelivr.net/npm/select2@4.0.13/dist/js/select2.min.js"></script>
<!-- BIMWHALE.js -->
<script src="https://cdn.jsdelivr.net/gh/andrewisen/bim-whale/dist/bundle.min.js"></script>
<script>
// Select
$(document).ready(function () {
var data = [
{
text: "Shared Building Elements",
children: [
{
id: "IfcDoor",
text: "IfcDoor",
},
{
id: "IfcWallStandardCase",
text: "IfcWallStandardCase",
},
{
id: "IfcWindow",
text: "IfcWindow",
},
],
},
];
$("#selectedEntitesInput").select2({
data: data,
placeholder: "Select which entities to include",
});
});
// File Input
function myFunction() {
let selectedEntities = {};
$("#selectedEntitesInput")
.val()
.forEach((entity) => {
selectedEntities = {
...selectedEntities,
[entity.toUpperCase()]: entity,
};
});
var requiredEntities = {
IFCPROPERTYSINGLEVALUE: "IfcPropertySingleValue",
IFCRELDEFINESBYPROPERTIES: "IfcRelDefinesByProperties",
IFCPROPERTYSET: "IfcPropertySet",
};
var selectedPropertySets = [];
var allEntities = {
...requiredEntities,
...selectedEntities,
};
var config = {
requiredEntities,
selectedEntities,
selectedPropertySets,
allEntities,
};
var file = document.getElementById("myIfcFile").files[0];
var reader = new FileReader();
reader.onload = function (e) {
var lines = e.target.result.split(/\r\n|\n/);
// Create new BIMWHALE.js object
var ifcFile = new BIMWHALE.IfcFile(lines, config);
// Parse file and get IFC entiteis
var ifcEntites = ifcFile.parseIfcFile();
console.log(ifcEntites);
};
reader.readAsText(file);
}
</script>
</body>
</html>
Final Touches Let's make things a bit prettier. Since we use Boostrap, we will use ther layoutarrow-up-right system. First, we wrap everything inside a container.
Copy <div class="container">
<h3>Advanced Example</h3>
<!-- Input -->
<select
id="selectedEntitesInput"
name="selectedEntites[]"
multiple="multiple"
style="width: 100%"
required
></select>
<input type="file" id="myIfcFile" onchange="myFunction()" />
<!-- Table -->
<table class="table table-hover" id="ifcTable" width="100%"></table>
</div> Then, let's add some spacingarrow-up-right . We'll simply add py-2 to each element and a py-4 to the container.
circle-check
Our website should look like this:
The Final Result You can check out the final result on Codepenarrow-up-right , use the box below or see the full source below.
Full Source:
If you been following this example step by step, you should have something like this:
circle-check
Good luck with your own project :)
Config The config object consist of four required properties:
The config object is passed into BIMWHALE.js 's constructor function as a paramter:
The showed us the easiest way to pass in this object:
Notice that some properties are JavaScript objects as well.
Here's a summary of the properties within the Config object:
Required Entities
These are the required IFC Entities. BIMWHALE.js will not work without these.
They are hardcoded into the logic. You should NOT change these.
Selected Entities
These are the selected IFC Entities. There's no need to get all IFC Entities.
For example, an architect may not be intrested in HVAC components.
This requires that you to have a basic understanding of the IFC schema and its entities.
Here are two major categories:
triangle-exclamation
Notice how the object is structured.
The key must be in uppercase. The value can have any form.
Selected Property Sets
These are the selected Property Sets. Again, there's no need to get all Property Sets.
Please notice that the logic is case senstive. The name must match exactly.
Leave the array empty to include all Property Sets
All entites are simply requiredEntities and selectedEntities combined. The is used to join these objects.
What is IFC? Industry Foundation Classes (IFC) is an international standard for Building Information Model (BIM) data . The standard, , is used to exchanged BIM data among software applications used by the various participants in the AEC industry .
IFC is developed and mainteined by buildingSMART International and is used with ( . According to , the IFC specifies:
Copy <div class="container py-4">
<h3 class="py-2">Advanced Example</h3>
<!-- Input -->
<select
class="py-2"
id="selectedEntitesInput"
name="selectedEntites[]"
multiple="multiple"
style="width: 100%"
required
></select>
<input
class="py-2"
type="file"
id="myIfcFile"
onchange="myFunction()"
/>
<!-- Table -->
<table
class="py-2 table table-hover"
id="ifcTable"
width="100%"
></table>
</div>
Copy <!DOCTYPE html>
<html>
<body>
<div class="container py-4">
<h3 class="py-2">Advanced Example</h3>
<!-- Input -->
<select
class="py-2"
id="selectedEntitesInput"
name="selectedEntites[]"
multiple="multiple"
style="width: 100%"
required
></select>
<input
class="py-2"
type="file"
id="myIfcFile"
onchange="myFunction()"
/>
<!-- Table -->
<table
class="py-2 table table-hover"
id="ifcTable"
width="100%"
></table>
</div>
<!-- Bootstrap, jQuery, DataTables -->
<link
rel="stylesheet"
type="text/css"
href="https://cdn.datatables.net/v/bs4-4.1.1/jq-3.3.1/dt-1.10.22/datatables.min.css"
/>
<script
type="text/javascript"
src="https://cdn.datatables.net/v/bs4-4.1.1/jq-3.3.1/dt-1.10.22/datatables.min.js"
></script>
<!-- Select2 -->
<link
href="https://cdn.jsdelivr.net/npm/select2@4.0.13/dist/css/select2.min.css"
rel="stylesheet"
/>
<script src="https://cdn.jsdelivr.net/npm/select2@4.0.13/dist/js/select2.min.js"></script>
<!-- BIMWHALE.js -->
<script src="https://cdn.jsdelivr.net/gh/andrewisen/bim-whale/dist/bundle.min.js"></script>
<script>
// Select
$(document).ready(function () {
var data = [
{
text: "Shared Building Elements",
children: [
{
id: "IfcDoor",
text: "IfcDoor",
},
{
id: "IfcWallStandardCase",
text: "IfcWallStandardCase",
},
{
id: "IfcWindow",
text: "IfcWindow",
},
],
},
];
$("#selectedEntitesInput").select2({
data: data,
placeholder: "Select which entities to include",
});
});
// File Input
function myFunction() {
// Get selected entities
let selectedEntities = {};
$("#selectedEntitesInput")
.val()
.forEach((entity) => {
selectedEntities = {
...selectedEntities,
[entity.toUpperCase()]: entity,
};
});
// Build config
var requiredEntities = {
IFCPROPERTYSINGLEVALUE: "IfcPropertySingleValue",
IFCRELDEFINESBYPROPERTIES: "IfcRelDefinesByProperties",
IFCPROPERTYSET: "IfcPropertySet",
};
var selectedPropertySets = [];
var allEntities = {
...requiredEntities,
...selectedEntities,
};
var config = {
requiredEntities,
selectedEntities,
selectedPropertySets,
allEntities,
};
// Read IFC file
var file = document.getElementById("myIfcFile").files[0];
var reader = new FileReader();
reader.onload = function (e) {
var lines = e.target.result.split(/\r\n|\n/);
// Create new BIMWHALE.js object
var ifcFile = new BIMWHALE.IfcFile(lines, config);
// Parse file and get IFC entiteis
var ifcEntites = ifcFile.parseIfcFile();
// Generate table data
var data = [];
Object.values(ifcEntites).forEach((entity) => {
Object.keys(entity.properties).forEach(
(propertySet) => {
Object.keys(
entity.properties[propertySet]
).forEach((property) => {
data = [
...data,
[
entity.instanceName,
entity.attributes.parsed[0],
entity.entityName,
entity.attributes.parsed[2],
propertySet,
property,
entity.properties[propertySet][
property
],
],
];
});
}
);
});
// Genereate DataTable
var ifcTable = $("#ifcTable").DataTable({
data: data,
searching: false,
columns: [
{
title: "Id",
data: 0,
},
{
title: "GUID",
data: 1,
},
{
title: "Entity",
data: 2,
},
{
title: "Name",
data: 3,
},
{
title: "Property Set",
data: 4,
},
{
title: "Property Name",
data: 5,
},
{
title: "Property Value",
data: 6,
},
],
});
};
reader.readAsText(file);
}
</script>
</body>
</html>
All entities
( requiredEntities + selectedEntities )
{ [key: string]: string }
{ [key: string]: string }
{ [key: string]: string }
An exchange file format structure
The data schema is defined in:
2. Exchange File Format Structure
The exchange file formats structure is used for exchanging and sharing the data according to the data schema . The exchange file formats structure is defined in:
Let's try to explain IFC in layman's terms.
identities and semantics
name, machine-readable unique identifier, object type or function
characteristics or attributes
material, color, thermal properties, etc.
relationships
locations, connections, ownership, etc.
abstract concepts
performance, costing, etc.
processes
installation, operations, etc.
people
owners, designers, contractors, suppliers, etc.
2. Exchange File Format Structure
Whereas the Exchange File Format Structure allows the data described to be transferred from one computer system to another.
In this example we're going to take a look at a window. Please note that this section will simply introduce the data schema and STEP-file. We will explain how these works in detail later.
IFC2x Edition 3 Technical Corrigendum 1 , or simply IFC2x3arrow-up-right , describes a window like this:
To clarify: This is the data schema for a window class. The window is defined using the EXPRESS data specification language (ISO 10303-11arrow-up-right ).
2. Exchange File Format Structure
IFC is an international standard by buildingSMART International. It has two parts;
The data schema, EXPRESS , specifies: How an object should be represented
The file format, STEP-file , specifies: An actual object
Notice that we need both the data schema and the file format to understand our BIM model.
The data schema is the manual
The file format is the usage of the manual
In object oriented programming words:
The data schema, EXPRESS, is the class
The file format, STEP-file, is the object
triangle-exclamation
Editor's note:
I know that this can hard to understand. Please, take a good look at this article. Read it agian, think and reflect about the content.
Copy new BIMWHALE.file(lines, config);
Copy var config = {
requiredEntities:{
IFCPROPERTYSINGLEVALUE: "IfcPropertySingleValue",
IFCRELDEFINESBYPROPERTIES: "IfcRelDefinesByProperties",
IFCPROPERTYSET: "IfcPropertySet",
},
selectedEntities:{
IFCDOOR: "IfcDoor",
IFCWALLSTANDARDCASE: "IfcWallStandardCase",
},
selectedPropertySets: ["Custom_Pset"],
allEntities:{
...requiredEntities,
...selectedEntities,
},
};
var file = document.getElementById('myFile').files[0];
var reader = new FileReader();
reader.onload = function(e) {
var lines = e.target.result.split(/\r\n|\n/);
var ifcFile = new BIMWHALE.file(lines, config);
var ifcEntites = file.parseIfcFile();
};
reader.readAsText(file);
Copy var requiredEntities = {
IFCPROPERTYSINGLEVALUE: "IfcPropertySingleValue",
IFCRELDEFINESBYPROPERTIES: "IfcRelDefinesByProperties",
IFCPROPERTYSET: "IfcPropertySet",
};
Copy var selectedEntities = {
IFCDOOR: "IfcDoor",
IFCWALLSTANDARDCASE: "IfcWallStandardCase",
};
Copy var selectedPropertySets = ["Custom_Pset"];
Copy var selectedPropertySets = [];
Copy var allEntities = {
...requiredEntities,
...selectedEntities,
};
Copy ENTITY IfcWindow
SUBTYPE OF (IfcBuildingElement);
OverallHeight : OPTIONAL IfcPositiveLengthMeasure;
OverallWidth : OPTIONAL IfcPositiveLengthMeasure;
END_ENTITY;
Copy #13067= IFCWINDOW('2cXV28XOjE6f6irgi0CO$D',#42,'M_Fixed:0915 x 1830mm:353953',$,'M_Fixed:0915 x 1830mm',#35337,#13061,'353953',1830.,914.999999999999);
Copy ENTITY IfcWindow
SUBTYPE OF (IfcBuildingElement);
OverallHeight : OPTIONAL IfcPositiveLengthMeasure;
OverallWidth : OPTIONAL IfcPositiveLengthMeasure;
END_ENTITY;
Copy #13067= IFCWINDOW('2cXV28XOjE6f6irgi0CO$D',#42,'M_Fixed:0915 x 1830mm:353953',$,'M_Fixed:0915 x 1830mm',#35337,#13061,'353953',1830.,914.999999999999); EXPRESS Let's take a look a very basic EXPRESS data model.
We have defined a custom schema called Family . We have a Person class within this schema. The person has one attribute : name. The name is represented as a string.
Let's take a look at our previous example, the window:
We can see that we each "object" (window, wall, door, roof, etc.) is an ENTITY . Again, notice how we use the following format to specify an "object":
Here's a list of some common building elements. These are defined in IFC2x Edition 3 Technical Corrigendum 1 schema, SCHEMA IFC2X3;. Again, notice how each building element ("object") is its own ENTITY .
Let's go back to our window. This is a Window class defined using the EXPRESS data model format.
Take a look at line 5 and 6. We can see that we have two attributes :
Missing Attributes?
Let's continue with our Window example. We saw that the windows has two attrbitues. However, according to the , we're missing some attributes:
We can verify this by looking at the STEP-file . This has clearly more than two attributes:
We have 10 different attributes. Notice that we don't understand what any of these attributes mean.
Let's dive deep into EXPRESS
How does this work? How can we have more than two attributes?
Well, the answer lies within the EXPRESS definition. Take a close look at the 4th line above. We can see that IfcWindow is an subtype of an IfcBuildingElement . Here's the EXPRESS data model forIfcBuildingElement :
Notice how the IfcBuildingElement itself is a subtype of IfcElement (see line 25 above). Let's continue down the rabbit hole...
Again, notice how our IfcElement is a subtype of IfcProduct (see line 13 above). Let's continue...
Our IfcProduct is a subtype of IfcObject (see line 11 above).
Our IfcObject is a subtype of IfcObjectDefinition (see line 10 above). Let's continue...
Our IfcObjectDefinition is a subtype of IfcRoot (see line 5 above). We are almost done...
Finally, we have reached the end!
We call this behaivor inheritance .
Let's flip this "graph". This will make things a bit easier to explain.
We can see that IfcRoot has four different attributes; GlobalId, OwnerHistory, Name, Description. The IfcObjectDefinition will inherit these attributes. This means that the IfcWindow will inherit these attributes.
The IfcWindow will inherit all attributes from its parent entities.
If we use inheritance , we can see what each attribute in the STEP-file actually mean:
Or, we can simply look at the inheritance graph in the :
triangle-exclamation
Editor's note:
I know that this can hard to understand. Please, take a good look at this article. Read it agian, think and reflect about the content.
Sample files The IFC sample files are hosted on GitHubarrow-up-right .
The BIM Whale contains 6 different sample files.
Notice that left clicking will open only the file in a new tab.
Simple Wall The Simple wall sample file can be downloaded from here:
STEP-file Let's take a look at our Window example.
This lines follows this encoding template:
Copy SCHEMA Family;
ENTITY Person
name: STRING;
END_ENTITY;
M_Fixed:0915 x 1830mm:353953
M_Fixed:0915 x 1830mm:353953
M_Fixed:0915 x 1830mm:353953
M_Fixed:0915 x 1830mm:353953
https://standards.buildingsmart.org/IFC/RELEASE/IFC2x3/FINAL/HTML/ifcsharedbldgelements/entities.htm
https://standards.buildingsmart.org/IFC/RELEASE/IFC2x3/FINAL/HTML/ifcsharedbldgelements/lexical/ifcwindow.htm Instance Name
We can express this template in two different ways:
1. Instance Name = 2. Entity name( 3. Attributes)
We have, in this example:
'2cXV28XOjE6f6irgi0CO$D',
#42,'M_Fixed:0915 x 1830mm:353953',
$,
'M_Fixed:0915 x 1830mm',
#35337,
#13061,
'353953',
1830.,
914.999999999999
Here are some basic encoding rules
The instance name must consist of a positive integer. The instance name is only valid locally within the STEP-file .
If the same content is exported again, the instance names may be different.
The instance name is also used to reference other entity instances through attribute values or aggregate members.
Instances are represented by writing the name of the entity in capital letters and then followed by the attribute values in the defined order within parentheses.
Only explicit attributes get mapped
Inverse, Derived and re-declared attributes are not listed since their values can be deduced from the other ones.
Again, this can be visualized as:
# Instance Name = Entity name(Attributes)
#13067 = IFCWINDOW('2cXV28X...)
Mapping of other data types
Enumeration, boolean and logical values are given in capital letters with a leading and trailing do
Integers and real values are used identical to typical programming languages
String values are given in quotes.
For characters with a code greater than 126 a special encoding is used.
The character sets as defined in ISO 8859 and 10646 are supported.
The elements of aggregates (SET, BAG, LIST, ARRAY) are given in parentheses, separated by ", ".
triangle-exclamation
Editor's note:
I know that this can hard to understand. Please, take a good look at this article. Read it agian, think and reflect about the content.
Advanced Project The Advanced project sample file can be downloaded from here:
Many Simple Walls The Many simple walls sample file can be downloaded from here:
Tall Building The Tall building sample file can be downloaded from here:
Basic House The Basic House sample file can be downloaded from here:
Large Building The Large building sample file can be downloaded from here:
Sources
buildingSMART, 2020a . Industry Foundation Classes (IFC). [Online]
Available at:
[Accessed 2020-12-18].
BuildingSMART, 2020b . Industry Foundation Classes (IFC) - An Introduction. [Online]
Available at:
[Accessed 2020-12-18].
ISO, 2020a . ISO 16739-1:2018 . [Online]
Available at:
[Accessed 2020-12-18].
BIMWHALE.js docs Additional developer resources can be found here:
Copy ENTITY IfcWindow
SUBTYPE OF (IfcBuildingElement);
OverallHeight : OPTIONAL IfcPositiveLengthMeasure;
OverallWidth : OPTIONAL IfcPositiveLengthMeasure;
END_ENTITY;
Copy ENTITY { NAME }
// content goes here
END_ENTITY;
Copy SCHEMA IFC2X3;
ENTITY IfcWindow
SUBTYPE OF (IfcBuildingElement);
OverallHeight : OPTIONAL IfcPositiveLengthMeasure;
OverallWidth : OPTIONAL IfcPositiveLengthMeasure;
END_ENTITY;
Copy #13067= IFCWINDOW('2cXV28XOjE6f6irgi0CO$D',#42,'M_Fixed:0915 x 1830mm:353953',$,'M_Fixed:0915 x 1830mm',#35337,#13061,'353953',1830.,914.999999999999);
Copy SCHEMA IFC2X3;
ENTITY IfcWindow
SUBTYPE OF (IfcBuildingElement);
OverallHeight : OPTIONAL IfcPositiveLengthMeasure;
OverallWidth : OPTIONAL IfcPositiveLengthMeasure;
END_ENTITY;
Copy SCHEMA IFC2X3;
ENTITY IfcBuildingElement
ABSTRACT SUPERTYPE OF (ONEOF
(IfcBeam
,IfcBuildingElementComponent
,IfcBuildingElementProxy
,IfcColumn
,IfcCovering
,IfcCurtainWall
,IfcDoor
,IfcFooting
,IfcMember
,IfcPile
,IfcPlate
,IfcRailing
,IfcRamp
,IfcRampFlight
,IfcRoof
,IfcSlab
,IfcStair
,IfcStairFlight
,IfcWall
,IfcWindow))
SUBTYPE OF (IfcElement);
END_ENTITY;
Copy ENTITY IfcElement
ABSTRACT SUPERTYPE OF (ONEOF
(IfcBuildingElement
,IfcDistributionElement
,IfcElectricalElement
,IfcElementAssembly
,IfcElementComponent
,IfcEquipmentElement
,IfcFeatureElement
,IfcFurnishingElement
,IfcTransportElement
,IfcVirtualElement))
SUBTYPE OF (IfcProduct);
Tag : OPTIONAL IfcIdentifier;
INVERSE
HasStructuralMember : SET [0:?] OF IfcRelConnectsStructuralElement FOR RelatingElement;
FillsVoids : SET [0:1] OF IfcRelFillsElement FOR RelatedBuildingElement;
ConnectedTo : SET [0:?] OF IfcRelConnectsElements FOR RelatingElement;
HasCoverings : SET [0:?] OF IfcRelCoversBldgElements FOR RelatingBuildingElement;
HasProjections : SET [0:?] OF IfcRelProjectsElement FOR RelatingElement;
ReferencedInStructures : SET [0:?] OF IfcRelReferencedInSpatialStructure FOR RelatedElements;
HasPorts : SET [0:?] OF IfcRelConnectsPortToElement FOR RelatedElement;
HasOpenings : SET [0:?] OF IfcRelVoidsElement FOR RelatingBuildingElement;
IsConnectionRealization : SET [0:?] OF IfcRelConnectsWithRealizingElements FOR RealizingElements;
ProvidesBoundaries : SET [0:?] OF IfcRelSpaceBoundary FOR RelatedBuildingElement;
ConnectedFrom : SET [0:?] OF IfcRelConnectsElements FOR RelatedElement;
ContainedInStructure : SET [0:1] OF IfcRelContainedInSpatialStructure FOR RelatedElements;
END_ENTITY;
Copy ENTITY IfcProduct
ABSTRACT SUPERTYPE OF (ONEOF
(IfcAnnotation
,IfcElement
,IfcGrid
,IfcPort
,IfcProxy
,IfcSpatialStructureElement
,IfcStructuralActivity
,IfcStructuralItem))
SUBTYPE OF (IfcObject);
ObjectPlacement : OPTIONAL IfcObjectPlacement;
Representation : OPTIONAL IfcProductRepresentation;
INVERSE
ReferencedBy : SET [0:?] OF IfcRelAssignsToProduct FOR RelatingProduct;
WHERE
WR1 : (EXISTS(Representation) AND EXISTS(ObjectPlacement))
OR (EXISTS(Representation) AND
(NOT('IFC2X3.IFCPRODUCTDEFINITIONSHAPE' IN TYPEOF(Representation))))
OR (NOT(EXISTS(Representation)));
END_ENTITY;
Copy ENTITY IfcObject
ABSTRACT SUPERTYPE OF (ONEOF
(IfcActor
,IfcControl
,IfcGroup
,IfcProcess
,IfcProduct
,IfcProject
,IfcResource))
SUBTYPE OF (IfcObjectDefinition);
ObjectType : OPTIONAL IfcLabel;
INVERSE
IsDefinedBy : SET [0:?] OF IfcRelDefines FOR RelatedObjects;
WHERE
WR1 : SIZEOF(QUERY(temp <* IsDefinedBy | 'IFC2X3.IFCRELDEFINESBYTYPE' IN TYPEOF(temp))) <= 1;
END_ENTITY;
Copy ENTITY IfcObjectDefinition
ABSTRACT SUPERTYPE OF (ONEOF
(IfcObject
,IfcTypeObject))
SUBTYPE OF (IfcRoot);
INVERSE
HasAssignments : SET [0:?] OF IfcRelAssigns FOR RelatedObjects;
IsDecomposedBy : SET [0:?] OF IfcRelDecomposes FOR RelatingObject;
Decomposes : SET [0:1] OF IfcRelDecomposes FOR RelatedObjects;
HasAssociations : SET [0:?] OF IfcRelAssociates FOR RelatedObjects;
END_ENTITY;
Copy ENTITY IfcRoot
ABSTRACT SUPERTYPE OF (ONEOF
(IfcObjectDefinition
,IfcPropertyDefinition
,IfcRelationship));
GlobalId : IfcGloballyUniqueId;
OwnerHistory : IfcOwnerHistory;
Name : OPTIONAL IfcLabel;
Description : OPTIONAL IfcText;
UNIQUE
UR1 : GlobalId;
END_ENTITY;
Copy #13067= IFCWINDOW('2cXV28XOjE6f6irgi0CO$D',#42,'M_Fixed:0915 x 1830mm:353953',$,'M_Fixed:0915 x 1830mm',#35337,#13061,'353953',1830.,914.999999999999);
Copy #13067= IFCWINDOW('2cXV28XOjE6f6irgi0CO$D',#42,'M_Fixed:0915 x 1830mm:353953',$,'M_Fixed:0915 x 1830mm',#35337,#13061,'353953',1830.,914.999999999999);
Copy #13067= IFCWINDOW('2cXV28...); The referenced instance may be defined before or after the current instance.
Unset attribute values are given as "$ ".
Multuple values are comma separated
Each entity instance is ended with a semi-colon
ISO, 2020b . ISO 16739-1:2018 . [Online]
Available at:
[Accessed 2020-12-18].
BIMWHALE.js Documentation Print the Result The final thing we need to do is to output the result. With a simple console.log, we get:
Copy {
"#219": {
entityName: "IfcWallStandardCase",
instanceName: "#219",
attributes: {
parsed: [
"1F6umJ5H50aeL3A1As_wTm",
"#42",
"Basic Wall:Bearing Wall:346660",
"$",
"Basic Wall:Bearing Wall",
"#188",
"#215",
"346660"
]
},
properties: {
Custom_Pset: {
TypeMark: "_TYPE-MARK_",
Keynote: "_KEYNOTE_",
StoreyName: "Level: Level 1",
TypeDescription: "_DESCRIPTION_",
StatusConstruction: "New Construction",
NetArea: "14.04739",
Height: "4000.",
Width: "200.",
Length: "4000.",
Hyperlink: "_URL_"
}
}
},
"#572": {
entityName: "IfcDoor",
instanceName: "#572",
attributes: {
parsed: [
"1F6umJ5H50aeL3A1As_wUF",
"#42",
"M_Single-Flush:Outside door:346843",
"$",
"M_Single-Flush:Outside door",
"#938",
"#566",
"346843",
"2134.",
"915."
]
},
properties: {
Custom_Pset: {
TypeMark: "20",
Keynote: "--KEYNOTE--",
StoreyName: "Level: Level 1",
TypeDescription: "--DESCRIPTION--",
StatusConstruction: "New Construction",
NetArea: "3.18957899999998",
Height: "2134.",
Width: "915.",
SillHeight: "0.",
Hyperlink: "--URL--"
}
}
}
} Add Config - part 1 Let's contiue by allowing the user to select options. Since we already use jQuery, we're going to use Select2arrow-up-right as well. Feel free to use any other alternative. We are going to use select2@4.0.13arrow-up-right for this example.
Copy <link href="https://cdn.jsdelivr.net/npm/select2@4.0.13/dist/css/select2.min.css" rel="stylesheet" />
<script src="https://cdn.jsdelivr.net/npm/select2@4.0.13/dist/js/select2.min.js"></script> Let's add a select box above the file input. We will name this selectedEntitesInput.
Let's configure select2. We're going to load our data from an arrayarrow-up-right .
Here's a staring template. Again, a list of IFC building elements can be found herearrow-up-right .
circle-check
Our HTML should look something like this:
Getting Started Let's install our prerequisites. We will use the . DataTable has an excellent documentation if you get stuck. Anyways, go to their download page:
We are going to use Boostrap 4 (not 5).
We'll select both jQuery 3 & Boostrap 4.
Copy <!-- Input -->
<select
id="selectedEntitesInput"
name="selectedEntites[]"
multiple="multiple"
style="width: 100%"
required
></select>
<input type="file" id="myIfcFile" onchange="myFunction()" />
Copy $(document).ready(function () {
// select2
$("#selectedEntitesInput").select2({
data: data,
placeholder: "Select which entities to include",
});
});
Copy var data = [
{
text: "Shared Building Elements",
children: [
{
id: "IfcDoor",
text: "IfcDoor",
},
{
id: "IfcWallStandardCase",
text: "IfcWallStandardCase",
},
{
id: "IfcWindow",
text: "IfcWindow",
},
],
},
];
Copy <!DOCTYPE html>
<html>
<body>
<h3>Advanced Example</h3>
<!-- Input -->
<select
id="selectedEntitesInput"
name="selectedEntites[]"
multiple="multiple"
style="width: 100%"
required
></select>
<input type="file" id="myIfcFile" onchange="myFunction()" />
<!-- Bootstrap, jQuery, DataTables -->
<link
rel="stylesheet"
type="text/css"
href="https://cdn.datatables.net/v/bs4-4.1.1/jq-3.3.1/dt-1.10.22/datatables.min.css"
/>
<script
type="text/javascript"
src="https://cdn.datatables.net/v/bs4-4.1.1/jq-3.3.1/dt-1.10.22/datatables.min.js"
></script>
<!-- Select2 -->
<link
href="https://cdn.jsdelivr.net/npm/select2@4.0.13/dist/css/select2.min.css"
rel="stylesheet"
/>
<script src="https://cdn.jsdelivr.net/npm/select2@4.0.13/dist/js/select2.min.js"></script>
<!-- BIMWHALE.js -->
<script src="https://cdn.jsdelivr.net/gh/andrewisen/bim-whale/dist/bundle.min.js"></script>
<script>
// Select
$(document).ready(function () {
var data = [
{
text: "Shared Building Elements",
children: [
{
id: "IfcDoor",
text: "IfcDoor",
},
{
id: "IfcWallStandardCase",
text: "IfcWallStandardCase",
},
{
id: "IfcWindow",
text: "IfcWindow",
},
],
},
];
$("#selectedEntitesInput").select2({
data: data,
placeholder: "Select which entities to include",
});
});
// File Input
function myFunction() {
var file = document.getElementById("myIfcFile").files[0];
var reader = new FileReader();
reader.onload = function (e) {
var lines = e.target.result.split(/\r\n|\n/);
// Create new BIMWHALE.js object
var ifcFile = new BIMWHALE.IfcFile(lines, config);
// Parse file and get IFC entiteis
var ifcEntites = ifcFile.parseIfcFile();
console.log(ifcEntites);
};
reader.readAsText(file);
}
</script>
</body>
</html>
And we'll use CDN as our donwload method.
Simply copy the two lines and paste into your HTML.
circle-check
Our HTML should look something like this:
1. BIMWHALE.js Goal A, Provide a simple and fast IFC parser , has been realized as BIMWHALE.js . It is a client-side IFC parser built using TypeScript.
The TypeScript code has been compiled into regular JavaScript using Webpackarrow-up-right . That's why it is called BIMWHALE.js . Check out the pages for more information.
Config Required entities
The first thing we are going to configure is the required entities. These three should do fine.
Demo 2 (in Swedish) The second demo is available here:
The website is currently only available in Swedish. You can use in the mean time.
Demo 1 The demo can be found here:
Copy <!DOCTYPE html>
<html>
<body>
<h3>Advanced Example</h3>
<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/v/bs4-4.1.1/jq-3.3.1/dt-1.10.22/datatables.min.css"/>
<script type="text/javascript" src="https://cdn.datatables.net/v/bs4-4.1.1/jq-3.3.1/dt-1.10.22/datatables.min.js"></script
</body>
</html> Notice how the object is structured.
The key must be in uppercase. The value can have any form.
There's no need to get all IfcEntities. Let's specify which entities we want.
circle-exclamation
Our sample file has only a door and a wall .
It would be unnecessary to try to get the roofs, floors, windows, etc.
A list of common Ifc Entites can be found here:
Also, there's no need to get all Property Sets. Let's specify which we want. Leave the array blank to include all Property Sets.
triangle-exclamation
Notice how the object is structured.
This is an array, not an object.
Our final config object is constructed as:
Demo 2# - www.bimvalen.se
Copy var requiredEntities = {
IFCPROPERTYSINGLEVALUE: "IfcPropertySingleValue",
IFCRELDEFINESBYPROPERTIES: "IfcRelDefinesByProperties",
IFCPROPERTYSET: "IfcPropertySet",
};
Copy var selectedEntities = {
IFCDOOR: "IfcDoor",
IFCWALLSTANDARDCASE: "IfcWallStandardCase",
};
Copy var selectedPropertySets = ["Custom_Pset"];
Copy var allEntities = {
...requiredEntities,
...selectedEntities,
};
Copy var config = {
requiredEntities,
selectedEntities,
selectedPropertySets,
allEntities
}; https://codepen.io/andrewisen/pen/MWjPdJr https://codepen.io/andrewisen/pen/oNzqKyL