https://wiki.osarch.org/api.php?action=feedcontributions&user=Moult&feedformat=atomWiki.OSArch - User contributions [en]2024-03-29T04:55:22ZUser contributionsMediaWiki 1.35.0https://wiki.osarch.org/index.php?title=IfcOpenShell&diff=4743IfcOpenShell2022-04-28T02:29:58Z<p>Moult: </p>
<hr />
<div>{{Infobox software<br />
| icon = Ifcopenshell logo.png<br />
| screenshot = IfcOpenShell_screenshot.png<br />
| website = http://www.ifcopenshell.org/<br />
| source = [https://github.com/IfcOpenShell/IfcOpenShell github]<br />
| license = LGPL3.0<br />
| bugs = [https://github.com/IfcOpenShell/IfcOpenShell/issues Report a bug]<br />
| community = [https://sourceforge.net/p/ifcopenshell/discussion/ Forum]<br />
| maturity = [[Software_maturity|Mature]]<br />
| donation = [https://opencollective.com/opensourcebim OpenSourceBIM]<br />
}}<br />
{{Template:IfcOpenShell}}<br />
[[IfcOpenShell|IfcOpenShell]] is an open source (LGPL 3) software library that helps developers work with the [http://www.buildingsmart-tech.org/specifications/ifc-overview industry foundation classes] (IFC) file format. The IFC file format can be used to describe building and construction data. The format is commonly used for [https://en.wikipedia.org/wiki/Building_information_modeling building information modelling] (BIM), for example, mechanical loading analysis, and thermal and energy efficiency studies.<br />
<br />
IfcOpenShell is primarily a collection of C++ libraries, however, as it has [[Python|Python]] bindings, it can be integrated with programs like [[FreeCAD]] and [[Blender]]. It has support for Windows, Mac, and Linux. IfcOpenShell can be used as C++ developer libraries, through Python modules, via a number of Unix-style command line applications, or via graphical interfaces. The core libraries have support for IFC2X3, IFC4, IFC4.3, as well as custom IFC schemas defined by the user. Supported serialisations include IFC-SPF, IFC-JSON, IFC-XML, and IFC-HDF5.<br />
<br />
IfcOpenShell supports geometry processing using the OpenCascade geometry kernel. IFC geometry may be uniformly triangulated regardless of their original definition.<br />
<br />
IfcOpenShell is also unique in its extensive Python API, which includes hundreds of functions for common IFC manipulation operations. This API supports many aspects of IFC not usually supported in other tools, including cascading geometric coordinate changes, subgraph purging, appending elements, and extensive support for 4D and 5D BIM operations like cost formulas, critical path analysis, and calendar-based scheduling propagation. It is also unique in its support for HDF5 caching, voxel analysis for dealing with less than precise BIM geometry, and semantic SVG-based drawing generation.<br />
<br />
=Tools=<br />
<br />
In addition to a developer library, IfcOpenshell can be used through multiple command line tools which can be used independently or together :<br />
==[https://github.com/IfcOpenShell/IfcOpenShell/tree/v0.6.0/src/bcf bcf-python]==<br />
A simple Python implementation of [[BIM_Collaboration_Format_(BCF)]]. The data model is described in data.py. Manipulation of BCF-XML is available via bcfxml.py and manipulation of BCF-API is available via bcfapi.py. See also [[:Category:BIM_Collaboration_Format_(BCF)]]. [[Category:BIM_Collaboration_Format_(BCF)]]<br />
<br />
==[http://ifcopenshell.org/ifcconvert IfcConvert]==<br />
A command line tool to convert IFC to different format including :<br />
{| class="wikitable" <br />
|-<br />
! .obj<br />
! WaveFront OBJ<br />
! (a .mtl file is also created)<br />
|-<br />
| .dae<br />
| Collada<br />
| Digital Assets Exchange<br />
|-<br />
| .glb<br />
| glTF<br />
| Binary glTF v2.0<br />
|-<br />
| .stp<br />
| STEP<br />
| Standard for the Exchange of Product Data<br />
|-<br />
| .igs<br />
| IGES<br />
| Initial Graphics Exchange Specification<br />
|-<br />
| .xml<br />
| XML<br />
| Property definitions and decomposition tree<br />
|-<br />
| .svg<br />
| SVG<br />
| Scalable Vector Graphics (2D floor plan)<br />
|-<br />
| .ifc<br />
| IFC-SPF<br />
| Industry Foundation Classes<br />
|}<br />
You can pass multiple options. Type <code>IfcConvert --help</code> to learn more (considering it is installed on your system).<br />
<br />
==[https://github.com/IfcOpenShell/IfcOpenShell/tree/v0.6.0/src/ifcgeomserver IfcGeomServer]==<br />
A command-line tool which allow to process geometry in a crash safe manner using a child process with dynamic linking.<br />
<br />
==[http://ifcopenshell.org/python IfcOpenShell-python]==<br />
A python API to manipulate IFC. See [[IfcOpenShell code examples]]. Comes with many utility functions for geolocation, data extraction, IFC query filtering, and more.<br />
<br />
==IFC Clash==<br />
IFC Clash detection using the flexible collision library.<br />
<br />
==IFC2CA==<br />
Conversion of IFC files into input files for Code_Aster structural simulation software.<br />
<br />
==IFC COBie==<br />
Conversion of IFC-SPF data into SpreadsheetML format for the COBie MVD. Includes error logging of invalid data and support for open format alternatives like CSV and ODS.<br />
See also: [[BlenderBIM_and_COBie]]<br />
<br />
==IFC CSV==<br />
Import and export support of IFC data to and from CSV files using a custom IFC query language.<br />
See also: [[BlenderBIM_IFCCSV]]<br />
<br />
==IFC Diff==<br />
Compares two IFC files with settings to check geometry or particular data relationships. Produces a parseable diff in JSON.<br />
<br />
==IFC Patch==<br />
Provides a standard interface for users to easily apply predetermined "recipes" to manipulate IFC data without needing to have any technical knowledge. See forum topic for a example how to run it. https://community.osarch.org/discussion/10/ifcpatch-tool-now-available#latest<br />
<br />
==IFC Sverchok==<br />
Provides an extension to the Blender Sverchok add-on for visual programming nodes for IFC within the Blender environment.<br />
<br />
==BIMTester==<br />
Provides a way to specify BIM exchange requirements using natural human language and audit IFC files to check if they comply with the requirements.<br />
<br />
==[http://ifcopenshell.org/ifcblender IfcBlender]==<br />
Replaced by [[BlenderBIM Add-on]].<br />
<br />
==[http://ifcopenshell.org/ifcmax IfcMax]==<br />
This plugin seems to not be developed anymore. It was an Ifc importer for 3ds Max.<br />
<br />
=Softwares powered by ifcopenshell=<br />
==FOSS projects==<br />
* [[BIMxBEM]] : import IfcRelSpaceBoundary, IfcSpace and related building elements geometry and data<br />
* [[BlenderBIM Add-on]] : ifcopenshell-python - import/export, multi-core geometry processing and more (Winner of 2020 buildingSMART Awards in Technology)<br />
* [[FreeCAD]] : ifcopenshell-python - import/export Parametric 3D modeler allowing you to easily modify your design. <br />
* [[ifc-pipeline]] : IfcConvert / ifcopenshell - python<br />
* [https://youshengcode.github.io/IfcToolbox.Doc/#/ IFC Toolbox] No-code IFC editing uses IfcOpenShell for model conversions.<br />
* [https://github.com/opensourceBIM/BIMserver BIMServer] enables you to store and manage the information of a construction (or other building related) project. <br />
* BIMSurfer<br />
* [https://www.openproject.org/ OpenProject] An open source commercial CDE that uses IfcOpenShell for model processing.<br />
* [https://xeokit.io/ xeokit-sdk] An open source 3D graphics SDK from xeolabs for BIM and AEC. Built to view huge models in the browser. Used by industry leaders.<br />
<br />
==Proprietary projects==<br />
* [http://areo.io/ Areo] SMART Facilities Management<br />
* [https://augin.app/en/ Augin.app] Publish and view AEC content in augmented reality in the environment on a 1:1 scale.<br />
* [https://bimdata.io/ BIMData.io] Provides an integrated viewer capable of loading several tens of thousands of objects. <br />
* [https://bimforce.com/en/homepage/ Bimforce] for IFC drawing generation<br />
* [https://www.cove.tools/ Cove.Tool] to integrate into Blender for sustainability analysis<br />
* [https://modulize.io/ Modulize] - Uses IfcOpenShell "quite a lot"<br />
* [https://regola.io/ Regola] - Used for model checking<br />
* [https://rengabim.com/ RengaSoftware] - used in [https://github.com/IfcOpenShell/IfcOpenShell/issues/1028#issuecomment-776085665 various operations] internally<br />
* [https://www.spectar.io/ Spectar] - Used for IFC conversions<br />
* [https://streambim.com/ StreamBIM] (previously known as Rendra.io) (Winner of 2020 buildingSMART Awards in Construction via Project Celsius)<br />
* [https://tridify.com/ Tridify] (Epic Megagrants recipient) Stream large & complex BIMs from the Cloud. A BIM Communication Service for all stakeholders with communication to issue management software.<br />
* [https://www.tridyme.com/ TriDyme] TriDyme helps construction's companies to develop their own cloud-based (online) applications.<br />
<br />
IfcOpenShell is also used in university courses around the world.<br />
<br />
* Fachhochschule Nordwestschweiz FHNW (University of Applied Sciences and Arts Northwestern Switzerland)<br />
* MSc-education of Architecture, Civil Engineering and Construction & Robotics tracks at RWTH Aachen University and TU Eindhoven<br />
* Parametric Design with Visual Programming in BIM by the Online Zigurat Global Institute for Technology<br />
* [https://bimfag.no/ BIMfag] Courses for BIM technicians in Norway<br />
* Tallinn University of Technology<br />
<br />
=Installation=<br />
<br />
IfcOpenShell may be packaged in different Linux repositories, ready to install and use; or it can be packaged together with some programs that use it, for example, [[FreeCAD]].<br />
<br />
In other cases you may get one of the stand-alone, pre-compiled distributions, or you may download and compile the source code yourself.<br />
<br />
To learn more about installing IfcOpenShell, visit the page in the FreeCAD wiki: [https://wiki.freecadweb.org/IfcOpenShell IfcOpenShell].<br />
<br />
= See also =<br />
* Visit the [[:Category:IfcOpenShell|IfcOpenShell Category]] on this website.<br />
<br />
= External Resources =<br />
* Visit the IfcOpenShell Academy: http://academy.ifcopenshell.org/category/ifcopenshell/<br />
* Visit the IfcOpenShell forum: https://sourceforge.net/p/ifcopenshell/discussion/<br />
* learn with Jupyter Notebook coding examples from:<br />
https://github.com/jakob-beetz/IfcOpenShellScriptingTutorial (by Jakob Beetz)<br />
<br />
https://github.com/bimfag/intro-python-bim (by Sigve Martin Pettersen and Hans Martin Eikerol)<br />
<br />
[[Category:IfcOpenShell]]<br />
[[Category:Software]]<br />
[[Category:Industry Foundation Classes (IFC)]]</div>Moulthttps://wiki.osarch.org/index.php?title=IfcOpenShell&diff=4730IfcOpenShell2022-04-22T22:03:12Z<p>Moult: /* Proprietary projects */</p>
<hr />
<div>{{Infobox software<br />
| icon = Ifcopenshell logo.png<br />
| screenshot = IfcOpenShell_screenshot.png<br />
| website = http://www.ifcopenshell.org/<br />
| source = [https://github.com/IfcOpenShell/IfcOpenShell github]<br />
| license = LGPL3.0<br />
| bugs = [https://github.com/IfcOpenShell/IfcOpenShell/issues Report a bug]<br />
| community = [https://sourceforge.net/p/ifcopenshell/discussion/ Forum]<br />
| maturity = [[Software_maturity|Mature]]<br />
| donation = [https://opencollective.com/opensourcebim OpenSourceBIM]<br />
}}<br />
{{Template:IfcOpenShell}}<br />
[[IfcOpenShell|IfcOpenShell]] is an open source (LGPL 3) software library that helps developers work with the [http://www.buildingsmart-tech.org/specifications/ifc-overview industry foundation classes] (IFC) file format. The IFC file format can be used to describe building and construction data. The format is commonly used for [https://en.wikipedia.org/wiki/Building_information_modeling building information modelling] (BIM), for example, mechanical loading analysis, and thermal and energy efficiency studies. IfcOpenShell is primarily a collection of C++ libraries, however, as it has [[Python|Python]] bindings, it can be integrated with programs like [[FreeCAD]] and [[Blender]].<br />
<br />
=Tools=<br />
<br />
IfcOpenshell contains multiple tools which can be used independently or together :<br />
==[https://github.com/IfcOpenShell/IfcOpenShell/tree/v0.6.0/src/bcf bcf-python]==<br />
A simple Python implementation of [[BIM_Collaboration_Format_(BCF)]]. The data model is described in data.py. Manipulation of BCF-XML is available via bcfxml.py and manipulation of BCF-API is available via bcfapi.py. See also [[:Category:BIM_Collaboration_Format_(BCF)]]. [[Category:BIM_Collaboration_Format_(BCF)]]<br />
<br />
==[http://ifcopenshell.org/ifcconvert IfcConvert]==<br />
A command line tool to convert IFC to different format including :<br />
{| class="wikitable" <br />
|-<br />
! .obj<br />
! WaveFront OBJ<br />
! (a .mtl file is also created)<br />
|-<br />
| .dae<br />
| Collada<br />
| Digital Assets Exchange<br />
|-<br />
| .glb<br />
| glTF<br />
| Binary glTF v2.0<br />
|-<br />
| .stp<br />
| STEP<br />
| Standard for the Exchange of Product Data<br />
|-<br />
| .igs<br />
| IGES<br />
| Initial Graphics Exchange Specification<br />
|-<br />
| .xml<br />
| XML<br />
| Property definitions and decomposition tree<br />
|-<br />
| .svg<br />
| SVG<br />
| Scalable Vector Graphics (2D floor plan)<br />
|-<br />
| .ifc<br />
| IFC-SPF<br />
| Industry Foundation Classes<br />
|}<br />
You can pass multiple options. Type <code>IfcConvert --help</code> to learn more (considering it is installed on your system).<br />
<br />
==[https://github.com/IfcOpenShell/IfcOpenShell/tree/v0.6.0/src/ifcgeomserver IfcGeomServer]==<br />
A command-line tool which allow to process geometry in a crash safe manner using a child process with dynamic linking.<br />
<br />
==[http://ifcopenshell.org/python IfcOpenShell-python]==<br />
A python API to manipulate IFC. See [[IfcOpenShell code examples]]. Comes with many utility functions for geolocation, data extraction, IFC query filtering, and more.<br />
<br />
==IFC Clash==<br />
IFC Clash detection using the flexible collision library.<br />
<br />
==IFC2CA==<br />
Conversion of IFC files into input files for Code_Aster structural simulation software.<br />
<br />
==IFC COBie==<br />
Conversion of IFC-SPF data into SpreadsheetML format for the COBie MVD. Includes error logging of invalid data and support for open format alternatives like CSV and ODS.<br />
See also: [[BlenderBIM_and_COBie]]<br />
<br />
==IFC CSV==<br />
Import and export support of IFC data to and from CSV files using a custom IFC query language.<br />
See also: [[BlenderBIM_IFCCSV]]<br />
<br />
==IFC Diff==<br />
Compares two IFC files with settings to check geometry or particular data relationships. Produces a parseable diff in JSON.<br />
<br />
==IFC Patch==<br />
Provides a standard interface for users to easily apply predetermined "recipes" to manipulate IFC data without needing to have any technical knowledge. See forum topic for a example how to run it. https://community.osarch.org/discussion/10/ifcpatch-tool-now-available#latest<br />
<br />
==IFC Sverchok==<br />
Provides an extension to the Blender Sverchok add-on for visual programming nodes for IFC within the Blender environment.<br />
<br />
==BIMTester==<br />
Provides a way to specify BIM exchange requirements using natural human language and audit IFC files to check if they comply with the requirements.<br />
<br />
==[http://ifcopenshell.org/ifcblender IfcBlender]==<br />
Replaced by [[BlenderBIM Add-on]].<br />
<br />
==[http://ifcopenshell.org/ifcmax IfcMax]==<br />
This plugin seems to not be developed anymore. It was an Ifc importer for 3ds Max.<br />
<br />
=Softwares powered by ifcopenshell=<br />
==FOSS projects==<br />
* [[BIMxBEM]] : import IfcRelSpaceBoundary, IfcSpace and related building elements geometry and data<br />
* [[BlenderBIM Add-on]] : ifcopenshell-python - import/export, multi-core geometry processing and more (Winner of 2020 buildingSMART Awards in Technology)<br />
* [[FreeCAD]] : ifcopenshell-python - import/export Parametric 3D modeler allowing you to easily modify your design. <br />
* [[ifc-pipeline]] : IfcConvert / ifcopenshell - python<br />
* [https://youshengcode.github.io/IfcToolbox.Doc/#/ IFC Toolbox] No-code IFC editing uses IfcOpenShell for model conversions.<br />
* [https://github.com/opensourceBIM/BIMserver BIMServer] enables you to store and manage the information of a construction (or other building related) project. <br />
* BIMSurfer<br />
* [https://www.openproject.org/ OpenProject] An open source commercial CDE that uses IfcOpenShell for model processing.<br />
* [https://xeokit.io/ xeokit-sdk] An open source 3D graphics SDK from xeolabs for BIM and AEC. Built to view huge models in the browser. Used by industry leaders.<br />
<br />
==Proprietary projects==<br />
* [http://areo.io/ Areo] SMART Facilities Management<br />
* [https://augin.app/en/ Augin.app] Publish and view AEC content in augmented reality in the environment on a 1:1 scale.<br />
* [https://bimdata.io/ BIMData.io] Provides an integrated viewer capable of loading several tens of thousands of objects. <br />
* [https://bimforce.com/en/homepage/ Bimforce] for IFC drawing generation<br />
* [https://www.cove.tools/ Cove.Tool] to integrate into Blender for sustainability analysis<br />
* [https://modulize.io/ Modulize] - Uses IfcOpenShell "quite a lot"<br />
* [https://regola.io/ Regola] - Used for model checking<br />
* [https://rengabim.com/ RengaSoftware] - used in [https://github.com/IfcOpenShell/IfcOpenShell/issues/1028#issuecomment-776085665 various operations] internally<br />
* [https://www.spectar.io/ Spectar] - Used for IFC conversions<br />
* [https://streambim.com/ StreamBIM] (previously known as Rendra.io) (Winner of 2020 buildingSMART Awards in Construction via Project Celsius)<br />
* [https://tridify.com/ Tridify] (Epic Megagrants recipient) Stream large & complex BIMs from the Cloud. A BIM Communication Service for all stakeholders with communication to issue management software.<br />
* [https://www.tridyme.com/ TriDyme] TriDyme helps construction's companies to develop their own cloud-based (online) applications.<br />
<br />
IfcOpenShell is also used in university courses around the world.<br />
<br />
* Fachhochschule Nordwestschweiz FHNW (University of Applied Sciences and Arts Northwestern Switzerland)<br />
* MSc-education of Architecture, Civil Engineering and Construction & Robotics tracks at RWTH Aachen University and TU Eindhoven<br />
* Parametric Design with Visual Programming in BIM by the Online Zigurat Global Institute for Technology<br />
* [https://bimfag.no/ BIMfag] Courses for BIM technicians in Norway<br />
* Tallinn University of Technology<br />
<br />
=Installation=<br />
<br />
IfcOpenShell may be packaged in different Linux repositories, ready to install and use; or it can be packaged together with some programs that use it, for example, [[FreeCAD]].<br />
<br />
In other cases you may get one of the stand-alone, pre-compiled distributions, or you may download and compile the source code yourself.<br />
<br />
To learn more about installing IfcOpenShell, visit the page in the FreeCAD wiki: [https://wiki.freecadweb.org/IfcOpenShell IfcOpenShell].<br />
<br />
= See also =<br />
* Visit the [[:Category:IfcOpenShell|IfcOpenShell Category]] on this website.<br />
<br />
= External Resources =<br />
* Visit the IfcOpenShell Academy: http://academy.ifcopenshell.org/category/ifcopenshell/<br />
* Visit the IfcOpenShell forum: https://sourceforge.net/p/ifcopenshell/discussion/<br />
* learn with Jupyter Notebook coding examples from:<br />
https://github.com/jakob-beetz/IfcOpenShellScriptingTutorial (by Jakob Beetz)<br />
<br />
https://github.com/bimfag/intro-python-bim (by Sigve Martin Pettersen and Hans Martin Eikerol)<br />
<br />
[[Category:IfcOpenShell]]<br />
[[Category:Software]]<br />
[[Category:Industry Foundation Classes (IFC)]]</div>Moulthttps://wiki.osarch.org/index.php?title=AEC_Open_Data_Standards_Directory&diff=4534AEC Open Data Standards Directory2022-02-08T22:44:35Z<p>Moult: </p>
<hr />
<div>Open data standards allow AEC tools to exchange datasets in a transparent and reliable manner.<br />
<br />
This page is a directory of open file formats and data standards. For a comparison of some popular file formats see [[File format comparison]]<br />
<br />
{|class="wikitable sortable"<br />
! Image<br />
! Name<br />
! Description<br />
! Website<br />
|-<br />
|<br />
| 3D Tiles (b3dm, i3dm, pnts, cmpt)<br />
| TODO<br />
| TODO<br />
|-<br />
|<br />
| Brick<br />
| Brick is an open-source effort to standardize semantic descriptions of the physical, logical and virtual assets in buildings and the relationships between them. Brick consists of an extensible dictionary of terms and concepts in and around buildings, a set of relationships for linking and composing concepts together, and a flexible data model permitting seamless integration of Brick with existing tools and databases.<br />
| [https://brickschema.org/ Brickschema official website]<br />
|-<br />
|<br />
| Building Collaboration Format (BCF)<br />
| "The BIM Collaboration Format (BCF) allows different BIM applications to communicate model-based issues with each other by leveraging IFC models that have been previously shared among project collaborators. BCF was created for facilitating open communications and improving IFC-based processes to more readily identify and exchange model-based issues between BIM software tools, bypassing proprietary formats and workflows."<br />
| [https://www.buildingsmart.org/standards/bsi-standards/bim-collaboration-format-bcf/ BCF at buildingSmart] | [https://en.wikipedia.org/wiki/BIM_Collaboration_Format BCF at Wikipedia] [https://technical.buildingsmart.org/standards/bcf/ BCF at buildingSmart]<br />
|-<br />
|<br />
| Building Topology Ontology<br />
| "Building Topology Ontology (BOT) as a core vocabulary to this approach. It provides a high-level description of the topology of buildings including storeys and spaces, the building elements they contain, and their web-friendly 3D models. We describe how existing applications produce and consume datasets combining BOT with other ontologies that describe product catalogues, sensor observations, or Internet of Things (IoT) devices effectively implementing BIM Maturity Level 3."<br />
| [https://w3c-lbd-cg.github.io/bot/ Draft] [https://www.ogc.org/standards/citygml CityGML OGC official website]<br />
|-<br />
|<br />
| CityGML<br />
| CityGML is an open data model and XML-based format for the storage and exchange of virtual 3D city models. It is an application schema for the Geography Markup Language version 3.1.1 (GML3), the extendible international standard for spatial data exchange issued by the Open Geospatial Consortium (OGC) and the ISO TC211.<br />
| [http://www.citygml.org/ CityGML official website]<br />
[https://www.researchgate.net/publication/342802332_BOT_the_Building_Topology_Ontology_of_the_W3C_Linked_Building_Data_Group research paper]<br />
|-<br />
|<br />
| Digital Buildings Project<br />
| The Digital Buildings project is an open-source, Apache-licensed effort to create a uniform schema and toolset for representing structured information about buildings and building-installed equipment. A version of the Digital Buildings ontology and toolset is currently being used by Google to manage buildings in its portfolio.<br />
| [https://github.com/google/digitalbuildings Github]<br />
|-<br />
|<br />
| Digital Twins Definition Language ( + RealEstateCore)<br />
| The Digital Twins Definition Language (DTDL) is a language for describing models and interfaces for IoT digital twins. Digital twins are models of entities in the physical environment such as shipping containers, rooms, factory floors, or logical entities that participate in IoT solutions. Using DTDL to describe a digital twin's capabilities enables the IoT platform and IoT solutions to leverage the semantics of the entity.<br />
| [https://github.com/Azure/opendigitaltwins-dtdl Github] [https://github.com/Azure/opendigitaltwins-building Building Github]<br />
|-<br />
|<br />
| dotbim<br />
| Introducing an open-source, accessible and simple file format for BIM to empower interoperability and replace complexity. Created by BIM developers for BIM developers.<br />
| [https://github.com/paireks/dotbim Github]<br />
|-<br />
|<br />
| [[Drawing Exchange Format (DXF)]]<br />
| Drawing Exchange Format (DXF) is a file format designed by Autodesk to allow exchange with their AutoCAD software. While they publish specs it is not an open format as they alone control iterations to the format. Autodesk and the Open Design Alliance sell commercial licenses for accessing DXF files. There is generally good support for DXF is libre software.<br />
| [https://en.wikipedia.org/wiki/AutoCAD_DXF DXF at Wikipedia]<br />
[https://www.google.com/search?client=firefox-b-d&q=autodesk+dxf+reference DXF Reference]<br />
|-<br />
|<br />
| Green Building XML (gbXML)<br />
| "It is the language of buildings that allows disparate 3D building information models (BIM) and architectural/engineering analysis software to share information with each other"<br />
| [https://www.gbxml.org/ gbXML official website]<br />
|-<br />
|<br />
| GeoJSON<br />
| GeoJSON is a geospatial data interchange format based on JavaScript Object Notation (JSON). It defines several types of JSON objects and the manner in which they are combined to represent data about geographic features, their properties, and their spatial extents. GeoJSON uses a geographic coordinate reference system, World Geodetic System 1984, and units of decimal degrees.<br />
| [https://geojson.org/ GeoJson official website]<br />
[https://tools.ietf.org/html/rfc7946 RFC7946 official website]<br />
|-<br />
|<br />
| GeoPackage (gpkg)<br />
| GeoPackage is an open, standards-based, platform-independent, portable, self-describing, compact format for transferring geospatial information. The GeoPackage Encoding Standard describes a set of conventions for storing the following within an SQLite database: vector features, tile matrix sets of imagery and raster maps at various scales, attributes (non-spatial data) and extensions.<br />
| [https://www.geopackage.org/ GeoPackage official website]<br />
|-<br />
|<br />
| GL Transmission Format (glTF)<br />
| "[https://godotengine.org/article/we-should-all-use-gltf-20-export-3d-assets-game-engines Why we should all support glTF 2.0 as THE standard asset exchange format for game engines]" on GODOT open source game engine blog.<br />
"glTF™ (GL Transmission Format) is a royalty-free specification for the efficient transmission and loading of 3D scenes and models by applications. glTF minimizes both the size of 3D assets, and the runtime processing needed to unpack and use those assets. glTF defines an extensible, common publishing format for 3D content tools and services that streamlines authoring workflows and enables interoperable use of content across the industry."<br />
| [https://en.wikipedia.org/wiki/GlTF glTF on wikipedia]<br />
[https://www.khronos.org/gltf/ glTF official website]<br />
|-<br />
|<br />
| Hypar Elements<br />
| Elements is a cross-platform library for creating building elements. It's meant to be used by architects, engineers, and other building professionals who want to write code that generates buildings.<br />
| [https://hypar-io.github.io/Elements/index.html Hypar elements specification]<br />
|-<br />
|<br />
| [[Industry Foundation Classes (IFC)|Industry Foundation Classes]] (IFC, ifc, ifcxml, ifczip)<br />
| "IFC is a standardized, digital description of the built asset industry. It is an open, international standard (ISO 16739-1:2018) and promotes vendor-neutral, or agnostic, and usable capabilities across a wide range of hardware devices, software platforms, and interfaces for many different use cases." (from buildingSmart)<br />
| [https://www.buildingsmart.org/standards/bsi-standards/industry-foundation-classes/ IFC at buildingSmart] [https://en.wikipedia.org/wiki/Industry_Foundation_Classes IFC at Wikipedia] <br />
|-<br />
| [[File:Materialsdb_image.png|64px]]<br />
| materialsdb<br />
| "..allows providers to independently manage their own building material database and does not require a central database. The building physics software can access the various decentralised databases via a DLL (Dynamic Link Library). The xml file delivered by the providers contains two sets of data: a list of materials and a catalogue of pre-calculated elements. It contains all the information required by building physics software, i.e. geometry, thermal properties, acoustic properties, life cycle energy and emissions data, etc. The format developed is flexible enough so that it is not necessary for providers to provide the full set of data."<br />
| [http://www.materialsdb.org materialsdb.org]<br />
|-<br />
|<br />
| Open Shading Language (OSL)<br />
| TODO<br />
| TODO<br />
|-<br />
|<br />
| OpenCDE<br />
| "Current industry practice of data exchange between common data environments is inefficient and costly. Commercial reasons aside, [https://www.designingbuildings.co.uk/wiki/Common_data_environment_CDE CDE] Vendors have real technical challenges for developing sustainable integrations."<br />
| [https://technical.buildingsmart.org/idea/vendor-user-alignment-via-opencde-api/ opencde at buildingSmart]<br />
|-<br />
|<br />
| Polygon File Format (PLY)<br />
| TODO<br />
| TODO<br />
|-<br />
|<br />
| Project Haystack<br />
| Project Haystack is an open source initiative to streamline working with data from the Internet of Things. We standardize semantic data models and web services with the goal of making it easier to unlock value from the vast quantity of data being generated by the smart devices that permeate our homes, buildings, factories, and cities. Applications include automation, control, energy, HVAC, lighting, and other environmental systems.<br />
| [https://project-haystack.org/ Official website]<br />
|-<br />
|<br />
| Radiance (hdr, rad, mat, etc)<br />
| TODO<br />
| TODO<br />
|-<br />
|<br />
| Real Estate Core<br />
| RealEstateCore is a common language that will enable control over buildings and development of new services – the facilitator of the promises of a digital transformation. RealEstateCore is a domain ontology preparing buildings to interact with the Smart City.<br />
| [https://www.realestatecore.io/ Official website] - [https://doc.realestatecore.io/3.3/full.html Specification]<br />
|-<br />
| [[File:SAF_logo.png|64px]]<br />
| [[Structural Analysis Format (SAF)]]<br />
| SAF is an initiative from the Nemetschek Group to improve the collaboration between structural engineers by developing an open exchange format for exchanging data between structural analysis software based on the Excel format. It is focusing on a practical, easy to use, format that can be used in daily practise by structural engineers. It is meant as open format and we look forward to you joining this initiative<br />
| [https://saf.guide website]<br />
|-<br />
| [[File:1200px-SVG_logo.svg.png|64px]]<br />
| [[Scalable Vector Graphics (SVG)]]<br />
| SVG is an image format developed by the [https://da.wikipedia.org/wiki/World_Wide_Web_Consortium World Wide Web Consortium (W3C)] for vector graphics. SVG uses an XML format and is easy to generate on the fly and edit in many programs. [[Inkscape]] and [[Krita]] are leading examples of vector graphics editors using the SVG format, but many other programs can export to SVG.<br />
| [https://www.w3.org/TR/SVG2/ website]<br />
|-<br />
|<br />
| Speckle Objects Kit<br />
| Objects Kit is the default Speckle 2.0 Kit. It includes geometry and element base classes as well as conversions routines for the AEC applications that we officially support. Objects uses .NET Standard 2.0 and has been tested on Windows and MacOS.<br />
| [https://speckle.guide/dev/objects.html Speckle Object Kit Docs]<br />
|-<br />
|<br />
| STEP<br />
| ISO 10303 is an International Standard for the computer-interpretable representation of product information and for the exchange of product data. The objective is to provide a neutral mechanism capable of describing products throughout their life cycle. This mechanism is suitable not only for neutral file exchange, but also as a basis for implementing and sharing product databases, and as a basis for archiving.<br />
| [http://www.steptools.com/stds/step/IS_final_p21e3.html Public ISO final draft]<br />
|-<br />
|<br />
| Universal Scene Description (USD)<br />
| TODO<br />
| TODO<br />
|-<br />
|<br />
| Wavefront OBJ (OBJ)<br />
| TODO<br />
| TODO<br />
|}<br />
<br />
[[Category:Drawing_Exchange_Format_(DXF)]]<br />
[[Category:Directories]]<br />
[[Category:File formats]]</div>Moulthttps://wiki.osarch.org/index.php?title=AEC_Open_Data_Standards_Directory&diff=4532AEC Open Data Standards Directory2022-02-07T21:53:45Z<p>Moult: Adding dotbim</p>
<hr />
<div>Open data standards allow AEC tools to exchange datasets in a transparent and reliable manner.<br />
<br />
This page is a directory of open file formats and data standards. For a comparison of some popular file formats see [[File format comparison]]<br />
<br />
{|class="wikitable sortable"<br />
! Image<br />
! Name<br />
! Description<br />
! Website<br />
|-<br />
|<br />
| 3D Tiles (b3dm, i3dm, pnts, cmpt)<br />
| TODO<br />
| TODO<br />
|-<br />
|<br />
| Brick<br />
| Brick is an open-source effort to standardize semantic descriptions of the physical, logical and virtual assets in buildings and the relationships between them. Brick consists of an extensible dictionary of terms and concepts in and around buildings, a set of relationships for linking and composing concepts together, and a flexible data model permitting seamless integration of Brick with existing tools and databases.<br />
| [https://brickschema.org/ Brickschema official website]<br />
|-<br />
|<br />
| Building Collaboration Format (BCF)<br />
| "The BIM Collaboration Format (BCF) allows different BIM applications to communicate model-based issues with each other by leveraging IFC models that have been previously shared among project collaborators. BCF was created for facilitating open communications and improving IFC-based processes to more readily identify and exchange model-based issues between BIM software tools, bypassing proprietary formats and workflows."<br />
| [https://www.buildingsmart.org/standards/bsi-standards/bim-collaboration-format-bcf/ BCF at buildingSmart] | [https://en.wikipedia.org/wiki/BIM_Collaboration_Format BCF at Wikipedia] [https://technical.buildingsmart.org/standards/bcf/ BCF at buildingSmart]<br />
|-<br />
|<br />
| Building Topology Ontology<br />
| "Building Topology Ontology (BOT) as a core vocabulary to this approach. It provides a high-level description of the topology of buildings including storeys and spaces, the building elements they contain, and their web-friendly 3D models. We describe how existing applications produce and consume datasets combining BOT with other ontologies that describe product catalogues, sensor observations, or Internet of Things (IoT) devices effectively implementing BIM Maturity Level 3."<br />
| [https://w3c-lbd-cg.github.io/bot/ Draft] [https://www.ogc.org/standards/citygml CityGML OGC official website]<br />
|-<br />
|<br />
| CityGML<br />
| CityGML is an open data model and XML-based format for the storage and exchange of virtual 3D city models. It is an application schema for the Geography Markup Language version 3.1.1 (GML3), the extendible international standard for spatial data exchange issued by the Open Geospatial Consortium (OGC) and the ISO TC211.<br />
| [http://www.citygml.org/ CityGML official website]<br />
[https://www.researchgate.net/publication/342802332_BOT_the_Building_Topology_Ontology_of_the_W3C_Linked_Building_Data_Group research paper]<br />
|-<br />
|<br />
| Digital Buildings Project<br />
| The Digital Buildings project is an open-source, Apache-licensed effort to create a uniform schema and toolset for representing structured information about buildings and building-installed equipment. A version of the Digital Buildings ontology and toolset is currently being used by Google to manage buildings in its portfolio.<br />
| [https://github.com/google/digitalbuildings Github]<br />
|-<br />
|<br />
| Digital Twins Definition Language ( + RealEstateCore)<br />
| The Digital Twins Definition Language (DTDL) is a language for describing models and interfaces for IoT digital twins. Digital twins are models of entities in the physical environment such as shipping containers, rooms, factory floors, or logical entities that participate in IoT solutions. Using DTDL to describe a digital twin's capabilities enables the IoT platform and IoT solutions to leverage the semantics of the entity.<br />
| [https://github.com/Azure/opendigitaltwins-dtdl Github] [https://github.com/Azure/opendigitaltwins-building Building Github]<br />
|-<br />
|<br />
| dotbim<br />
| Introducing an open-source, accessible and simple file format for BIM to empower interoperability and replace complexity. Created by BIM developers for BIM developers.<br />
| [https://github.com/paireks/dotbim Github]<br />
|-<br />
|<br />
| [[Drawing Exchange Format (DXF)]]<br />
| Drawing Exchange Format (DXF) is a file format designed by Autodesk to allow exchange with their AutoCAD software. While they publish specs it is not an open format as they alone control iterations to the format. Autodesk and the Open Design Alliance sell commercial licenses for accessing DXF files. There is generally good support for DXF is libre software.<br />
| [https://en.wikipedia.org/wiki/AutoCAD_DXF DXF at Wikipedia]<br />
[https://www.google.com/search?client=firefox-b-d&q=autodesk+dxf+reference DXF Reference]<br />
|-<br />
|<br />
| Green Building XML (gbXML)<br />
| "It is the language of buildings that allows disparate 3D building information models (BIM) and architectural/engineering analysis software to share information with each other"<br />
| [https://www.gbxml.org/ gbXML official website]<br />
|-<br />
|<br />
| GeoJSON<br />
| GeoJSON is a geospatial data interchange format based on JavaScript Object Notation (JSON). It defines several types of JSON objects and the manner in which they are combined to represent data about geographic features, their properties, and their spatial extents. GeoJSON uses a geographic coordinate reference system, World Geodetic System 1984, and units of decimal degrees.<br />
| [https://geojson.org/ GeoJson official website]<br />
[https://tools.ietf.org/html/rfc7946 RFC7946 official website]<br />
|-<br />
|<br />
| GeoPackage (gpkg)<br />
| GeoPackage is an open, standards-based, platform-independent, portable, self-describing, compact format for transferring geospatial information. The GeoPackage Encoding Standard describes a set of conventions for storing the following within an SQLite database: vector features, tile matrix sets of imagery and raster maps at various scales, attributes (non-spatial data) and extensions.<br />
| [https://www.geopackage.org/ GeoPackage official website]<br />
|-<br />
|<br />
| GL Transmission Format (glTF)<br />
| "[https://godotengine.org/article/we-should-all-use-gltf-20-export-3d-assets-game-engines Why we should all support glTF 2.0 as THE standard asset exchange format for game engines]" on GODOT open source game engine blog.<br />
"glTF™ (GL Transmission Format) is a royalty-free specification for the efficient transmission and loading of 3D scenes and models by applications. glTF minimizes both the size of 3D assets, and the runtime processing needed to unpack and use those assets. glTF defines an extensible, common publishing format for 3D content tools and services that streamlines authoring workflows and enables interoperable use of content across the industry."<br />
| [https://en.wikipedia.org/wiki/GlTF glTF on wikipedia]<br />
[https://www.khronos.org/gltf/ glTF official website]<br />
|-<br />
|<br />
| Hierarchical Data Format (HDF, HDF4, HDF5)<br />
| TODO<br />
| TODO<br />
|-<br />
|<br />
| [[Industry Foundation Classes (IFC)|Industry Foundation Classes]] (IFC, ifc, ifcxml, ifczip)<br />
| "IFC is a standardized, digital description of the built asset industry. It is an open, international standard (ISO 16739-1:2018) and promotes vendor-neutral, or agnostic, and usable capabilities across a wide range of hardware devices, software platforms, and interfaces for many different use cases." (from buildingSmart)<br />
| [https://www.buildingsmart.org/standards/bsi-standards/industry-foundation-classes/ IFC at buildingSmart] [https://en.wikipedia.org/wiki/Industry_Foundation_Classes IFC at Wikipedia] <br />
|-<br />
| [[File:Materialsdb_image.png|64px]]<br />
| materialsdb<br />
| "..allows providers to independently manage their own building material database and does not require a central database. The building physics software can access the various decentralised databases via a DLL (Dynamic Link Library). The xml file delivered by the providers contains two sets of data: a list of materials and a catalogue of pre-calculated elements. It contains all the information required by building physics software, i.e. geometry, thermal properties, acoustic properties, life cycle energy and emissions data, etc. The format developed is flexible enough so that it is not necessary for providers to provide the full set of data."<br />
| [http://www.materialsdb.org materialsdb.org]<br />
|-<br />
|<br />
| Open Shading Language (OSL)<br />
| TODO<br />
| TODO<br />
|-<br />
|<br />
| OpenCDE<br />
| "Current industry practice of data exchange between common data environments is inefficient and costly. Commercial reasons aside, [https://www.designingbuildings.co.uk/wiki/Common_data_environment_CDE CDE] Vendors have real technical challenges for developing sustainable integrations."<br />
| [https://technical.buildingsmart.org/idea/vendor-user-alignment-via-opencde-api/ opencde at buildingSmart]<br />
|-<br />
|<br />
| Polygon File Format (PLY)<br />
| TODO<br />
| TODO<br />
|-<br />
|<br />
| Project Haystack<br />
| Project Haystack is an open source initiative to streamline working with data from the Internet of Things. We standardize semantic data models and web services with the goal of making it easier to unlock value from the vast quantity of data being generated by the smart devices that permeate our homes, buildings, factories, and cities. Applications include automation, control, energy, HVAC, lighting, and other environmental systems.<br />
| [https://project-haystack.org/ Official website]<br />
|-<br />
|<br />
| Radiance (hdr, rad, mat, etc)<br />
| TODO<br />
| TODO<br />
|-<br />
|<br />
| Real Estate Core<br />
| RealEstateCore is a common language that will enable control over buildings and development of new services – the facilitator of the promises of a digital transformation. RealEstateCore is a domain ontology preparing buildings to interact with the Smart City.<br />
| [https://www.realestatecore.io/ Official website] - [https://doc.realestatecore.io/3.3/full.html Specification]<br />
|-<br />
| [[File:SAF_logo.png|64px]]<br />
| [[Structural Analysis Format (SAF)]]<br />
| SAF is an initiative from the Nemetschek Group to improve the collaboration between structural engineers by developing an open exchange format for exchanging data between structural analysis software based on the Excel format. It is focusing on a practical, easy to use, format that can be used in daily practise by structural engineers. It is meant as open format and we look forward to you joining this initiative<br />
| [https://saf.guide website]<br />
|-<br />
| [[File:1200px-SVG_logo.svg.png|64px]]<br />
| [[Scalable Vector Graphics (SVG)]]<br />
| SVG is an image format developed by the [https://da.wikipedia.org/wiki/World_Wide_Web_Consortium World Wide Web Consortium (W3C)] for vector graphics. SVG uses an XML format and is easy to generate on the fly and edit in many programs. [[Inkscape]] and [[Krita]] are leading examples of vector graphics editors using the SVG format, but many other programs can export to SVG.<br />
| [https://www.w3.org/TR/SVG2/ website]<br />
|-<br />
|<br />
| STEP<br />
| ISO 10303 is an International Standard for the computer-interpretable representation of product information and for the exchange of product data. The objective is to provide a neutral mechanism capable of describing products throughout their life cycle. This mechanism is suitable not only for neutral file exchange, but also as a basis for implementing and sharing product databases, and as a basis for archiving.<br />
| [http://www.steptools.com/stds/step/IS_final_p21e3.html Public ISO final draft]<br />
|-<br />
|<br />
| Universal Scene Description (USD)<br />
| TODO<br />
| TODO<br />
|-<br />
|<br />
| Wavefront OBJ (OBJ)<br />
| TODO<br />
| TODO<br />
|}<br />
<br />
[[Category:Drawing_Exchange_Format_(DXF)]]<br />
[[Category:Directories]]<br />
[[Category:File formats]]</div>Moulthttps://wiki.osarch.org/index.php?title=AEC_Open_Data_directory&diff=4530AEC Open Data directory2022-02-07T04:32:03Z<p>Moult: /* Open Data directories */</p>
<hr />
<div>== Open Data directories ==<br />
<br />
{| class="wikitable sortable"<br />
! <br />
! Name<br />
! Description<br />
! License<br />
|-<br />
| [[File:Edp-logo.png|64px]]<br />
| [https://www.europeandataportal.eu European Data Portal]<br />
| The European Data Portal harvests the metadata of Public Sector Information available on public data portals across European countries. Information regarding the provision of data and the benefits of re-using data is also included.<br />
| License varies<br />
|-<br />
| [[File:Ifcopenshell logo.png|64x64px]]<br />
| [https://github.com/IfcOpenShell/files IfcOpenShell Public Test Files]<br />
| This is a collection of IFC files that are useful for testing IfcOpenShell.<br />
| <br />
|-<br />
| <br />
| [https://www.ifcwiki.org/index.php?title=Examples IfcWiki Example Files]<br />
| This is a collection of IFC files that are useful for testing IFC.<br />
| <br />
|-<br />
| [[File:OpeningDesign.jpg|64px]]<br />
| [https://github.com/OpeningDesign OpeningDesign Projects]<br />
| OpeningDesign is a US-based architectural practice where all projects are conducted out-in-the-open. That is, during the development of any one project, all the content is hosted publicly on either Github or Gitlab and is open source. All team communication is conducted through public Riot.im chat rooms.<br />
| CC-BY-SA 4.0<br />
|-<br />
|<br />
| [https://github.com/buds-lab/building-data-genome-project-2 The building data genome project ]<br />
| "It is an open data set from 507 non-residential buildings that includes hourly whole building electrical meter data for one year. Each of the buildings has meta data such as or area, weather, and primary use type. This data set can be used to benchmark various statistical learning algorithms and other data science techniques. It can also be used simply as a teaching or learning tool to practice dealing with measured performance data from large numbers of non-residential buildings." <br />
| MIT<br />
|-<br />
| [[File:File:BuildingSMART-Logo_64x64.png|64px]]<br />
| [https://github.com/buildingSMART/Sample-Test-Files Sample IFC Test Files]<br />
| Sample files of various formats and schema versions for testing implementations. Small files testing one things at a time.<br />
| [https://creativecommons.org/licenses/by/4.0/ CC-BY-4.0]<br />
|-<br />
| [[File:University_of_Auckland.png|64x64px]]<br />
| [http://openifcmodel.cs.auckland.ac.nz/ Open IFC Model Repository]<br />
| The aim of this repository a the University of Auckland, New Zealand, iss for it to be a location from which a wide variety of well analysed IFC-based data files can be sourced. There are over 100 IFC files.<br />
| ?<br />
|-<br />
|}<br />
<br />
== Material Data directories ==<br />
<br />
{| class="wikitable sortable"<br />
! <br />
! Name<br />
! Description<br />
! License<br />
|-<br />
| logo<br />
| [https://vbn.aau.dk/en/publications/thermal-properties-of-common-building-materials Thermal properties of building materials]<br />
| "The aim of this technical report is to present and give an overview of a dataset collecting the main thermo-physical properties of various common construction and building materials used in the built environment and composing elements of buildings and infrastructures. In addition, suggestions and recommendations are made for the thermo-physical properties of the materials composing the indoor content and furniture elements present in the built environment."<br />
| unclear<br />
|}<br />
<br />
=National Directories=<br />
<br />
{| class="wikitable sortable"<br />
! <br />
! Name<br />
! Description<br />
! License<br />
|-<br />
| -<br />
| [https://www.opendata.dk Open Data DK]<br />
| Open Data DK is an association of danish councils and regions who have cooperated since 2016 to open their data via a shared data platform. It includes a variety of data from council infrastructure to socioeconomic indicators. The aim is to create transparency, support growth and innovation, and make the most of the data already available. Data includes [https://www.opendata.dk/search?q=tags:bymodel%20byer data for some cities] but is mostly in DWG/DXF format. (The site is only in Danish)<br />
| License varies by dataset. Mostly commons style licenses.<br />
|-<br />
| [[File:Pdoc_logo.png]]<br />
| [https://www.pdok.nl/ pdoc]<br />
| pdoc hosts open access geodata for Holland<br />
| License varies<br />
|-<br />
| logo<br />
| [https://nsw.digitaltwin.terria.io/ NSW Digital Twin]<br />
| The Australian state of New South Wales has a " ... Digital Twin Minimum Viable Product (MVP) platform aims to respond to the NSW State Infrastructure Strategy by developing a 4D (3D+time) Foundation Spatial Data Framework. This includes providing presentation capability which allows visualisation and interrogation of 3D and 4D data models. The goal is to help the NSW Government with infrastructure assets planning and management, integration with land use planning, data collaboration, and sharing."<br />
| ?<br />
|-<br />
| logo<br />
| [https://ual.sg/post/2020/06/24/guide-for-open-urban-data-in-singapore/ Open Urban Data from Singapore]<br />
| Urban Analytics Lab (Singapore) curated inventory of data relevant for geospatial and urban analyses.<br />
| ?<br />
|-<br />
| logo<br />
| [https://www.3dbag.nl Netherland]<br />
| 3D viewer and downloads for the whole of the Netherlands in CityJSON or raw data<br />
| [https://www.3dbag.nl/en/download CC-BY 4.0]<br />
|-<br />
|}<br />
<br />
<br />
<br />
[[Category:Directories]]</div>Moulthttps://wiki.osarch.org/index.php?title=AEC_Open_Data_Standards_Directory&diff=4529AEC Open Data Standards Directory2022-02-06T10:50:01Z<p>Moult: Remove stuff like SQLite/JSON/XML which are not open standards - just plaintext serialisations</p>
<hr />
<div>Open data standards allow AEC tools to exchange datasets in a transparent and reliable manner.<br />
<br />
This page is a directory of open file formats and data standards. For a comparison of some popular file formats see [[File format comparison]]<br />
<br />
{|class="wikitable sortable"<br />
! Image<br />
! Name<br />
! Description<br />
! Website<br />
|-<br />
|<br />
| 3D Tiles (b3dm, i3dm, pnts, cmpt)<br />
| TODO<br />
| TODO<br />
|-<br />
|<br />
| Brick<br />
| Brick is an open-source effort to standardize semantic descriptions of the physical, logical and virtual assets in buildings and the relationships between them. Brick consists of an extensible dictionary of terms and concepts in and around buildings, a set of relationships for linking and composing concepts together, and a flexible data model permitting seamless integration of Brick with existing tools and databases.<br />
| [https://brickschema.org/ Brickschema official website]<br />
|-<br />
|<br />
| Building Collaboration Format (BCF)<br />
| "The BIM Collaboration Format (BCF) allows different BIM applications to communicate model-based issues with each other by leveraging IFC models that have been previously shared among project collaborators. BCF was created for facilitating open communications and improving IFC-based processes to more readily identify and exchange model-based issues between BIM software tools, bypassing proprietary formats and workflows."<br />
| [https://www.buildingsmart.org/standards/bsi-standards/bim-collaboration-format-bcf/ BCF at buildingSmart] | [https://en.wikipedia.org/wiki/BIM_Collaboration_Format BCF at Wikipedia] [https://technical.buildingsmart.org/standards/bcf/ BCF at buildingSmart]<br />
|-<br />
|<br />
| Building Topology Ontology<br />
| "Building Topology Ontology (BOT) as a core vocabulary to this approach. It provides a high-level description of the topology of buildings including storeys and spaces, the building elements they contain, and their web-friendly 3D models. We describe how existing applications produce and consume datasets combining BOT with other ontologies that describe product catalogues, sensor observations, or Internet of Things (IoT) devices effectively implementing BIM Maturity Level 3."<br />
| [https://w3c-lbd-cg.github.io/bot/ Draft] [https://www.ogc.org/standards/citygml CityGML OGC official website]<br />
|-<br />
|<br />
| CityGML<br />
| CityGML is an open data model and XML-based format for the storage and exchange of virtual 3D city models. It is an application schema for the Geography Markup Language version 3.1.1 (GML3), the extendible international standard for spatial data exchange issued by the Open Geospatial Consortium (OGC) and the ISO TC211.<br />
| [http://www.citygml.org/ CityGML official website]<br />
[https://www.researchgate.net/publication/342802332_BOT_the_Building_Topology_Ontology_of_the_W3C_Linked_Building_Data_Group research paper]<br />
|-<br />
|<br />
| Digital Buildings Project<br />
| The Digital Buildings project is an open-source, Apache-licensed effort to create a uniform schema and toolset for representing structured information about buildings and building-installed equipment. A version of the Digital Buildings ontology and toolset is currently being used by Google to manage buildings in its portfolio.<br />
| [https://github.com/google/digitalbuildings Github]<br />
|-<br />
|<br />
| Digital Twins Definition Language ( + RealEstateCore)<br />
| The Digital Twins Definition Language (DTDL) is a language for describing models and interfaces for IoT digital twins. Digital twins are models of entities in the physical environment such as shipping containers, rooms, factory floors, or logical entities that participate in IoT solutions. Using DTDL to describe a digital twin's capabilities enables the IoT platform and IoT solutions to leverage the semantics of the entity.<br />
| [https://github.com/Azure/opendigitaltwins-dtdl Github] [https://github.com/Azure/opendigitaltwins-building Building Github]<br />
|-<br />
|<br />
| [[Drawing Exchange Format (DXF)]]<br />
| Drawing Exchange Format (DXF) is a file format designed by Autodesk to allow exchange with their AutoCAD software. While they publish specs it is not an open format as they alone control iterations to the format. Autodesk and the Open Design Alliance sell commercial licenses for accessing DXF files. There is generally good support for DXF is libre software.<br />
| [https://en.wikipedia.org/wiki/AutoCAD_DXF DXF at Wikipedia]<br />
[https://www.google.com/search?client=firefox-b-d&q=autodesk+dxf+reference DXF Reference]<br />
|-<br />
|<br />
| Green Building XML (gbXML)<br />
| "It is the language of buildings that allows disparate 3D building information models (BIM) and architectural/engineering analysis software to share information with each other"<br />
| [https://www.gbxml.org/ gbXML official website]<br />
|-<br />
|<br />
| GeoJSON<br />
| GeoJSON is a geospatial data interchange format based on JavaScript Object Notation (JSON). It defines several types of JSON objects and the manner in which they are combined to represent data about geographic features, their properties, and their spatial extents. GeoJSON uses a geographic coordinate reference system, World Geodetic System 1984, and units of decimal degrees.<br />
| [https://geojson.org/ GeoJson official website]<br />
[https://tools.ietf.org/html/rfc7946 RFC7946 official website]<br />
|-<br />
|<br />
| GeoPackage (gpkg)<br />
| GeoPackage is an open, standards-based, platform-independent, portable, self-describing, compact format for transferring geospatial information. The GeoPackage Encoding Standard describes a set of conventions for storing the following within an SQLite database: vector features, tile matrix sets of imagery and raster maps at various scales, attributes (non-spatial data) and extensions.<br />
| [https://www.geopackage.org/ GeoPackage official website]<br />
|-<br />
|<br />
| GL Transmission Format (glTF)<br />
| "[https://godotengine.org/article/we-should-all-use-gltf-20-export-3d-assets-game-engines Why we should all support glTF 2.0 as THE standard asset exchange format for game engines]" on GODOT open source game engine blog.<br />
"glTF™ (GL Transmission Format) is a royalty-free specification for the efficient transmission and loading of 3D scenes and models by applications. glTF minimizes both the size of 3D assets, and the runtime processing needed to unpack and use those assets. glTF defines an extensible, common publishing format for 3D content tools and services that streamlines authoring workflows and enables interoperable use of content across the industry."<br />
| [https://en.wikipedia.org/wiki/GlTF glTF on wikipedia]<br />
[https://www.khronos.org/gltf/ glTF official website]<br />
|-<br />
|<br />
| Hierarchical Data Format (HDF, HDF4, HDF5)<br />
| TODO<br />
| TODO<br />
|-<br />
|<br />
| [[Industry Foundation Classes (IFC)|Industry Foundation Classes]] (IFC, ifc, ifcxml, ifczip)<br />
| "IFC is a standardized, digital description of the built asset industry. It is an open, international standard (ISO 16739-1:2018) and promotes vendor-neutral, or agnostic, and usable capabilities across a wide range of hardware devices, software platforms, and interfaces for many different use cases." (from buildingSmart)<br />
| [https://www.buildingsmart.org/standards/bsi-standards/industry-foundation-classes/ IFC at buildingSmart] [https://en.wikipedia.org/wiki/Industry_Foundation_Classes IFC at Wikipedia] <br />
|-<br />
| [[File:Materialsdb_image.png|64px]]<br />
| materialsdb<br />
| "..allows providers to independently manage their own building material database and does not require a central database. The building physics software can access the various decentralised databases via a DLL (Dynamic Link Library). The xml file delivered by the providers contains two sets of data: a list of materials and a catalogue of pre-calculated elements. It contains all the information required by building physics software, i.e. geometry, thermal properties, acoustic properties, life cycle energy and emissions data, etc. The format developed is flexible enough so that it is not necessary for providers to provide the full set of data."<br />
| [http://www.materialsdb.org materialsdb.org]<br />
|-<br />
|<br />
| Open Shading Language (OSL)<br />
| TODO<br />
| TODO<br />
|-<br />
|<br />
| OpenCDE<br />
| "Current industry practice of data exchange between common data environments is inefficient and costly. Commercial reasons aside, [https://www.designingbuildings.co.uk/wiki/Common_data_environment_CDE CDE] Vendors have real technical challenges for developing sustainable integrations."<br />
| [https://technical.buildingsmart.org/idea/vendor-user-alignment-via-opencde-api/ opencde at buildingSmart]<br />
|-<br />
|<br />
| Polygon File Format (PLY)<br />
| TODO<br />
| TODO<br />
|-<br />
|<br />
| Project Haystack<br />
| Project Haystack is an open source initiative to streamline working with data from the Internet of Things. We standardize semantic data models and web services with the goal of making it easier to unlock value from the vast quantity of data being generated by the smart devices that permeate our homes, buildings, factories, and cities. Applications include automation, control, energy, HVAC, lighting, and other environmental systems.<br />
| [https://project-haystack.org/ Official website]<br />
|-<br />
|<br />
| Radiance (hdr, rad, mat, etc)<br />
| TODO<br />
| TODO<br />
|-<br />
|<br />
| Real Estate Core<br />
| RealEstateCore is a common language that will enable control over buildings and development of new services – the facilitator of the promises of a digital transformation. RealEstateCore is a domain ontology preparing buildings to interact with the Smart City.<br />
| [https://www.realestatecore.io/ Official website] - [https://doc.realestatecore.io/3.3/full.html Specification]<br />
|-<br />
| [[File:SAF_logo.png|64px]]<br />
| [[Structural Analysis Format (SAF)]]<br />
| SAF is an initiative from the Nemetschek Group to improve the collaboration between structural engineers by developing an open exchange format for exchanging data between structural analysis software based on the Excel format. It is focusing on a practical, easy to use, format that can be used in daily practise by structural engineers. It is meant as open format and we look forward to you joining this initiative<br />
| [https://saf.guide website]<br />
|-<br />
| [[File:1200px-SVG_logo.svg.png|64px]]<br />
| [[Scalable Vector Graphics (SVG)]]<br />
| SVG is an image format developed by the [https://da.wikipedia.org/wiki/World_Wide_Web_Consortium World Wide Web Consortium (W3C)] for vector graphics. SVG uses an XML format and is easy to generate on the fly and edit in many programs. [[Inkscape]] and [[Krita]] are leading examples of vector graphics editors using the SVG format, but many other programs can export to SVG.<br />
| [https://www.w3.org/TR/SVG2/ website]<br />
|-<br />
|<br />
| STEP<br />
| ISO 10303 is an International Standard for the computer-interpretable representation of product information and for the exchange of product data. The objective is to provide a neutral mechanism capable of describing products throughout their life cycle. This mechanism is suitable not only for neutral file exchange, but also as a basis for implementing and sharing product databases, and as a basis for archiving.<br />
| [http://www.steptools.com/stds/step/IS_final_p21e3.html Public ISO final draft]<br />
|-<br />
|<br />
| Universal Scene Description (USD)<br />
| TODO<br />
| TODO<br />
|-<br />
|<br />
| Wavefront OBJ (OBJ)<br />
| TODO<br />
| TODO<br />
|}<br />
<br />
[[Category:Drawing_Exchange_Format_(DXF)]]<br />
[[Category:Directories]]<br />
[[Category:File formats]]</div>Moulthttps://wiki.osarch.org/index.php?title=AEC_Open_Data_Standards_Directory&diff=4528AEC Open Data Standards Directory2022-02-06T10:49:07Z<p>Moult: Remove BIMJson. It is not an open data standard as there is no publicly available standard.</p>
<hr />
<div>Open data standards allow AEC tools to exchange datasets in a transparent and reliable manner.<br />
<br />
This page is a directory of open file formats and data standards. For a comparison of some popular file formats see [[File format comparison]]<br />
<br />
{|class="wikitable sortable"<br />
! Image<br />
! Name<br />
! Description<br />
! Website<br />
|-<br />
|<br />
| 3D Tiles (b3dm, i3dm, pnts, cmpt)<br />
| TODO<br />
| TODO<br />
|-<br />
|<br />
| Brick<br />
| Brick is an open-source effort to standardize semantic descriptions of the physical, logical and virtual assets in buildings and the relationships between them. Brick consists of an extensible dictionary of terms and concepts in and around buildings, a set of relationships for linking and composing concepts together, and a flexible data model permitting seamless integration of Brick with existing tools and databases.<br />
| [https://brickschema.org/|Brickschema official website]<br />
|-<br />
|<br />
| Building Collaboration Format (BCF)<br />
| "The BIM Collaboration Format (BCF) allows different BIM applications to communicate model-based issues with each other by leveraging IFC models that have been previously shared among project collaborators. BCF was created for facilitating open communications and improving IFC-based processes to more readily identify and exchange model-based issues between BIM software tools, bypassing proprietary formats and workflows."<br />
| [https://www.buildingsmart.org/standards/bsi-standards/bim-collaboration-format-bcf/ BCF at buildingSmart] | [https://en.wikipedia.org/wiki/BIM_Collaboration_Format BCF at Wikipedia] [https://technical.buildingsmart.org/standards/bcf/ BCF at buildingSmart]<br />
|-<br />
|<br />
| Building Topology Ontology<br />
| "Building Topology Ontology (BOT) as a core vocabulary to this approach. It provides a high-level description of the topology of buildings including storeys and spaces, the building elements they contain, and their web-friendly 3D models. We describe how existing applications produce and consume datasets combining BOT with other ontologies that describe product catalogues, sensor observations, or Internet of Things (IoT) devices effectively implementing BIM Maturity Level 3."<br />
| [https://w3c-lbd-cg.github.io/bot/ Draft] [https://www.ogc.org/standards/citygml CityGML OGC official website]<br />
|-<br />
|<br />
| CityGML<br />
| CityGML is an open data model and XML-based format for the storage and exchange of virtual 3D city models. It is an application schema for the Geography Markup Language version 3.1.1 (GML3), the extendible international standard for spatial data exchange issued by the Open Geospatial Consortium (OGC) and the ISO TC211.<br />
| [http://www.citygml.org/ CityGML official website]<br />
[https://www.researchgate.net/publication/342802332_BOT_the_Building_Topology_Ontology_of_the_W3C_Linked_Building_Data_Group research paper]<br />
|-<br />
|<br />
| Digital Buildings Project<br />
| The Digital Buildings project is an open-source, Apache-licensed effort to create a uniform schema and toolset for representing structured information about buildings and building-installed equipment. A version of the Digital Buildings ontology and toolset is currently being used by Google to manage buildings in its portfolio.<br />
| [https://github.com/google/digitalbuildings Github]<br />
|-<br />
|<br />
| Digital Twins Definition Language ( + RealEstateCore)<br />
| The Digital Twins Definition Language (DTDL) is a language for describing models and interfaces for IoT digital twins. Digital twins are models of entities in the physical environment such as shipping containers, rooms, factory floors, or logical entities that participate in IoT solutions. Using DTDL to describe a digital twin's capabilities enables the IoT platform and IoT solutions to leverage the semantics of the entity.<br />
| [https://github.com/Azure/opendigitaltwins-dtdl Github] [https://github.com/Azure/opendigitaltwins-building Building Github]<br />
|-<br />
|<br />
| [[Drawing Exchange Format (DXF)]]<br />
| Drawing Exchange Format (DXF) is a file format designed by Autodesk to allow exchange with their AutoCAD software. While they publish specs it is not an open format as they alone control iterations to the format. Autodesk and the Open Design Alliance sell commercial licenses for accessing DXF files. There is generally good support for DXF is libre software.<br />
| [https://en.wikipedia.org/wiki/AutoCAD_DXF DXF at Wikipedia]<br />
[https://www.google.com/search?client=firefox-b-d&q=autodesk+dxf+reference DXF Reference]<br />
|-<br />
|<br />
| Green Building XML (gbXML)<br />
| "It is the language of buildings that allows disparate 3D building information models (BIM) and architectural/engineering analysis software to share information with each other"<br />
| [https://www.gbxml.org/ gbXML official website]<br />
|-<br />
|<br />
| GeoJSON<br />
| GeoJSON is a geospatial data interchange format based on JavaScript Object Notation (JSON). It defines several types of JSON objects and the manner in which they are combined to represent data about geographic features, their properties, and their spatial extents. GeoJSON uses a geographic coordinate reference system, World Geodetic System 1984, and units of decimal degrees.<br />
| [https://geojson.org/ GeoJson official website]<br />
[https://tools.ietf.org/html/rfc7946 RFC7946 official website]<br />
|-<br />
|<br />
| GeoPackage (gpkg)<br />
| GeoPackage is an open, standards-based, platform-independent, portable, self-describing, compact format for transferring geospatial information. The GeoPackage Encoding Standard describes a set of conventions for storing the following within an SQLite database: vector features, tile matrix sets of imagery and raster maps at various scales, attributes (non-spatial data) and extensions.<br />
| [https://www.geopackage.org/ GeoPackage official website]<br />
|-<br />
|<br />
| GL Transmission Format (glTF)<br />
| "[https://godotengine.org/article/we-should-all-use-gltf-20-export-3d-assets-game-engines Why we should all support glTF 2.0 as THE standard asset exchange format for game engines]" on GODOT open source game engine blog.<br />
"glTF™ (GL Transmission Format) is a royalty-free specification for the efficient transmission and loading of 3D scenes and models by applications. glTF minimizes both the size of 3D assets, and the runtime processing needed to unpack and use those assets. glTF defines an extensible, common publishing format for 3D content tools and services that streamlines authoring workflows and enables interoperable use of content across the industry."<br />
| [https://en.wikipedia.org/wiki/GlTF glTF on wikipedia]<br />
[https://www.khronos.org/gltf/ glTF official website]<br />
|-<br />
|<br />
| Hierarchical Data Format (HDF, HDF4, HDF5)<br />
| TODO<br />
| TODO<br />
|-<br />
|<br />
| [[Industry Foundation Classes (IFC)|Industry Foundation Classes]] (IFC, ifc, ifcxml, ifczip)<br />
| "IFC is a standardized, digital description of the built asset industry. It is an open, international standard (ISO 16739-1:2018) and promotes vendor-neutral, or agnostic, and usable capabilities across a wide range of hardware devices, software platforms, and interfaces for many different use cases." (from buildingSmart)<br />
| [https://www.buildingsmart.org/standards/bsi-standards/industry-foundation-classes/ IFC at buildingSmart] [https://en.wikipedia.org/wiki/Industry_Foundation_Classes IFC at Wikipedia] <br />
|-<br />
| [[File:Materialsdb_image.png|64px]]<br />
| materialsdb<br />
| "..allows providers to independently manage their own building material database and does not require a central database. The building physics software can access the various decentralised databases via a DLL (Dynamic Link Library). The xml file delivered by the providers contains two sets of data: a list of materials and a catalogue of pre-calculated elements. It contains all the information required by building physics software, i.e. geometry, thermal properties, acoustic properties, life cycle energy and emissions data, etc. The format developed is flexible enough so that it is not necessary for providers to provide the full set of data."<br />
| [http://www.materialsdb.org materialsdb.org]<br />
|-<br />
|<br />
| Open Shading Language (OSL)<br />
| TODO<br />
| TODO<br />
|-<br />
|<br />
| OpenCDE<br />
| "Current industry practice of data exchange between common data environments is inefficient and costly. Commercial reasons aside, [https://www.designingbuildings.co.uk/wiki/Common_data_environment_CDE CDE] Vendors have real technical challenges for developing sustainable integrations."<br />
| [https://technical.buildingsmart.org/idea/vendor-user-alignment-via-opencde-api/ opencde at buildingSmart]<br />
|-<br />
|<br />
| Polygon File Format (PLY)<br />
| TODO<br />
| TODO<br />
|-<br />
|<br />
| Project Haystack<br />
| Project Haystack is an open source initiative to streamline working with data from the Internet of Things. We standardize semantic data models and web services with the goal of making it easier to unlock value from the vast quantity of data being generated by the smart devices that permeate our homes, buildings, factories, and cities. Applications include automation, control, energy, HVAC, lighting, and other environmental systems.<br />
| [https://project-haystack.org/ Official website]<br />
|-<br />
|<br />
| Radiance (hdr, rad, mat, etc)<br />
| TODO<br />
| TODO<br />
|-<br />
|<br />
| Real Estate Core<br />
| RealEstateCore is a common language that will enable control over buildings and development of new services – the facilitator of the promises of a digital transformation. RealEstateCore is a domain ontology preparing buildings to interact with the Smart City.<br />
| [https://www.realestatecore.io/ Official website] - [https://doc.realestatecore.io/3.3/full.html Specification]<br />
|-<br />
| [[File:SAF_logo.png|64px]]<br />
| [[Structural Analysis Format (SAF)]]<br />
| SAF is an initiative from the Nemetschek Group to improve the collaboration between structural engineers by developing an open exchange format for exchanging data between structural analysis software based on the Excel format. It is focusing on a practical, easy to use, format that can be used in daily practise by structural engineers. It is meant as open format and we look forward to you joining this initiative<br />
| [https://saf.guide website]<br />
|-<br />
| [[File:1200px-SVG_logo.svg.png|64px]]<br />
| [[Scalable Vector Graphics (SVG)]]<br />
| SVG is an image format developed by the [https://da.wikipedia.org/wiki/World_Wide_Web_Consortium World Wide Web Consortium (W3C)] for vector graphics. SVG uses an XML format and is easy to generate on the fly and edit in many programs. [[Inkscape]] and [[Krita]] are leading examples of vector graphics editors using the SVG format, but many other programs can export to SVG.<br />
| [https://www.w3.org/TR/SVG2/ website]<br />
|-<br />
|<br />
| STEP<br />
| ISO 10303 is an International Standard for the computer-interpretable representation of product information and for the exchange of product data. The objective is to provide a neutral mechanism capable of describing products throughout their life cycle. This mechanism is suitable not only for neutral file exchange, but also as a basis for implementing and sharing product databases, and as a basis for archiving.<br />
| [http://www.steptools.com/stds/step/IS_final_p21e3.html Public ISO final draft]<br />
|-<br />
|<br />
| SQLite<br />
| TODO<br />
| TODO<br />
|-<br />
|<br />
| Universal Scene Description (USD)<br />
| TODO<br />
| TODO<br />
|-<br />
|<br />
| Wavefront OBJ (OBJ)<br />
| TODO<br />
| TODO<br />
|}<br />
<br />
[[Category:Drawing_Exchange_Format_(DXF)]]<br />
[[Category:Directories]]<br />
[[Category:File formats]]</div>Moulthttps://wiki.osarch.org/index.php?title=IfcOpenShell&diff=4524IfcOpenShell2022-02-05T09:37:39Z<p>Moult: /* Proprietary projects */</p>
<hr />
<div>{{Infobox software<br />
| icon = Ifcopenshell logo.png<br />
| screenshot = IfcOpenShell_screenshot.png<br />
| website = http://www.ifcopenshell.org/<br />
| source = [https://github.com/IfcOpenShell/IfcOpenShell github]<br />
| license = LGPL3.0<br />
| bugs = [https://github.com/IfcOpenShell/IfcOpenShell/issues Report a bug]<br />
| community = [https://sourceforge.net/p/ifcopenshell/discussion/ Forum]<br />
| maturity = [[Software_maturity|Mature]]<br />
| donation = [https://opencollective.com/opensourcebim OpenSourceBIM]<br />
}}<br />
{{Template:IfcOpenShell}}<br />
[[IfcOpenShell|IfcOpenShell]] is an open source (LGPL 3) software library that helps developers work with the [http://www.buildingsmart-tech.org/specifications/ifc-overview industry foundation classes] (IFC) file format. The IFC file format can be used to describe building and construction data. The format is commonly used for [https://en.wikipedia.org/wiki/Building_information_modeling building information modelling] (BIM), for example, mechanical loading analysis, and thermal and energy efficiency studies. IfcOpenShell is primarily a collection of C++ libraries, however, as it has [[Python|Python]] bindings, it can be integrated with programs like [[FreeCAD]] and [[Blender]].<br />
<br />
=Tools=<br />
<br />
IfcOpenshell contains multiple tools which can be used independently or together :<br />
==[https://github.com/IfcOpenShell/IfcOpenShell/tree/v0.6.0/src/bcf bcf-python]==<br />
A simple Python implementation of [[BIM_Collaboration_Format_(BCF)]]. The data model is described in data.py. Manipulation of BCF-XML is available via bcfxml.py and manipulation of BCF-API is available via bcfapi.py. See also [[:Category:BIM_Collaboration_Format_(BCF)]]. [[Category:BIM_Collaboration_Format_(BCF)]]<br />
<br />
==[http://ifcopenshell.org/ifcconvert IfcConvert]==<br />
A command line tool to convert IFC to different format including :<br />
{| class="wikitable" <br />
|-<br />
! .obj<br />
! WaveFront OBJ<br />
! (a .mtl file is also created)<br />
|-<br />
| .dae<br />
| Collada<br />
| Digital Assets Exchange<br />
|-<br />
| .glb<br />
| glTF<br />
| Binary glTF v2.0<br />
|-<br />
| .stp<br />
| STEP<br />
| Standard for the Exchange of Product Data<br />
|-<br />
| .igs<br />
| IGES<br />
| Initial Graphics Exchange Specification<br />
|-<br />
| .xml<br />
| XML<br />
| Property definitions and decomposition tree<br />
|-<br />
| .svg<br />
| SVG<br />
| Scalable Vector Graphics (2D floor plan)<br />
|-<br />
| .ifc<br />
| IFC-SPF<br />
| Industry Foundation Classes<br />
|}<br />
You can pass multiple options. Type <code>IfcConvert --help</code> to learn more (considering it is installed on your system).<br />
<br />
==[https://github.com/IfcOpenShell/IfcOpenShell/tree/v0.6.0/src/ifcgeomserver IfcGeomServer]==<br />
A command-line tool which allow to process geometry in a crash safe manner using a child process with dynamic linking.<br />
<br />
==[http://ifcopenshell.org/python IfcOpenShell-python]==<br />
A python API to manipulate IFC. See [[IfcOpenShell code examples]]. Comes with many utility functions for geolocation, data extraction, IFC query filtering, and more.<br />
<br />
==IFC Clash==<br />
IFC Clash detection using the flexible collision library.<br />
<br />
==IFC2CA==<br />
Conversion of IFC files into input files for Code_Aster structural simulation software.<br />
<br />
==IFC COBie==<br />
Conversion of IFC-SPF data into SpreadsheetML format for the COBie MVD. Includes error logging of invalid data and support for open format alternatives like CSV and ODS.<br />
See also: [[BlenderBIM_and_COBie]]<br />
<br />
==IFC CSV==<br />
Import and export support of IFC data to and from CSV files using a custom IFC query language.<br />
See also: [[BlenderBIM_IFCCSV]]<br />
<br />
==IFC Diff==<br />
Compares two IFC files with settings to check geometry or particular data relationships. Produces a parseable diff in JSON.<br />
<br />
==IFC Patch==<br />
Provides a standard interface for users to easily apply predetermined "recipes" to manipulate IFC data without needing to have any technical knowledge. See forum topic for a example how to run it. https://community.osarch.org/discussion/10/ifcpatch-tool-now-available#latest<br />
<br />
==IFC Sverchok==<br />
Provides an extension to the Blender Sverchok add-on for visual programming nodes for IFC within the Blender environment.<br />
<br />
==BIMTester==<br />
Provides a way to specify BIM exchange requirements using natural human language and audit IFC files to check if they comply with the requirements.<br />
<br />
==[http://ifcopenshell.org/ifcblender IfcBlender]==<br />
Replaced by [[BlenderBIM Add-on]].<br />
<br />
==[http://ifcopenshell.org/ifcmax IfcMax]==<br />
This plugin seems to not be developed anymore. It was an Ifc importer for 3ds Max.<br />
<br />
=Softwares powered by ifcopenshell=<br />
==FOSS projects==<br />
* [[BIMxBEM]] : import IfcRelSpaceBoundary, IfcSpace and related building elements geometry and data<br />
* [[BlenderBIM Add-on]] : ifcopenshell-python - import/export, multi-core geometry processing and more (Winner of 2020 buildingSMART Awards in Technology)<br />
* [[FreeCAD]] : ifcopenshell-python - import/export Parametric 3D modeler allowing you to easily modify your design. <br />
* [[ifc-pipeline]] : IfcConvert / ifcopenshell - python<br />
* [https://youshengcode.github.io/IfcToolbox.Doc/#/ IFC Toolbox] No-code IFC editing uses IfcOpenShell for model conversions.<br />
* [https://github.com/opensourceBIM/BIMserver BIMServer] enables you to store and manage the information of a construction (or other building related) project. <br />
* BIMSurfer<br />
* [https://www.openproject.org/ OpenProject] An open source commercial CDE that uses IfcOpenShell for model processing.<br />
* [https://xeokit.io/ xeokit-sdk] An open source 3D graphics SDK from xeolabs for BIM and AEC. Built to view huge models in the browser. Used by industry leaders.<br />
<br />
==Proprietary projects==<br />
* [http://areo.io/ Areo] SMART Facilities Management<br />
* [https://augin.app/en/ Augin.app] Publish and view AEC content in augmented reality in the environment on a 1:1 scale.<br />
* [https://bimdata.io/ BIMData.io] Provides an integrated viewer capable of loading several tens of thousands of objects. <br />
* [https://bimforce.com/en/homepage/ Bimforce] for IFC drawing generation<br />
* [https://www.cove.tools/ Cove.Tool] to integrate into Blender for sustainability analysis<br />
* [https://modulize.io/ Modulize] - Uses IfcOpenShell "quite a lot"<br />
* [https://regola.io/ Regola] - Used for model checking<br />
* [https://rengabim.com/ RengaSoftware] - used in [https://github.com/IfcOpenShell/IfcOpenShell/issues/1028#issuecomment-776085665 various operations] internally<br />
* [https://www.spectar.io/ Spectar] - Used for IFC conversions<br />
* [https://streambim.com/ StreamBIM] (previously known as Rendra.io) (Winner of 2020 buildingSMART Awards in Construction via Project Celsius)<br />
* [https://tridify.com/ Tridify] (Epic Megagrants recipient) Stream large & complex BIMs from the Cloud. A BIM Communication Service for all stakeholders with communication to issue management software.<br />
* [https://www.tridyme.com/ TriDyme] TriDyme helps construction's companies to develop their own cloud-based (online) applications.<br />
<br />
IfcOpenShell is also used in university courses around the world.<br />
<br />
* Fachhochschule Nordwestschweiz FHNW (University of Applied Sciences and Arts Northwestern Switzerland)<br />
* MSc-education of Architecture, Civil Engineering and Construction & Robotics tracks at RWTH Aachen University and TU Eindhoven<br />
* Parametric Design with Visual Programming in BIM by the Online Zigurat Global Institute for Technology<br />
* [https://bimfag.no/ BIMfag] Courses for BIM technicians in Norway<br />
<br />
=Installation=<br />
<br />
IfcOpenShell may be packaged in different Linux repositories, ready to install and use; or it can be packaged together with some programs that use it, for example, [[FreeCAD]].<br />
<br />
In other cases you may get one of the stand-alone, pre-compiled distributions, or you may download and compile the source code yourself.<br />
<br />
To learn more about installing IfcOpenShell, visit the page in the FreeCAD wiki: [https://wiki.freecadweb.org/IfcOpenShell IfcOpenShell].<br />
<br />
= See also =<br />
* Visit the [[:Category:IfcOpenShell|IfcOpenShell Category]] on this website.<br />
<br />
= External Resources =<br />
* Visit the IfcOpenShell Academy: http://academy.ifcopenshell.org/category/ifcopenshell/<br />
* Visit the IfcOpenShell forum: https://sourceforge.net/p/ifcopenshell/discussion/<br />
* learn with Jupyter Notebook coding examples from:<br />
https://github.com/jakob-beetz/IfcOpenShellScriptingTutorial (by Jakob Beetz)<br />
<br />
https://github.com/bimfag/intro-python-bim (by Sigve Martin Pettersen and Hans Martin Eikerol)<br />
<br />
[[Category:IfcOpenShell]]<br />
[[Category:Software]]<br />
[[Category:Industry Foundation Classes (IFC)]]</div>Moulthttps://wiki.osarch.org/index.php?title=IfcOpenShell&diff=4523IfcOpenShell2022-02-05T09:34:46Z<p>Moult: /* Softwares powered by ifcopenshell */</p>
<hr />
<div>{{Infobox software<br />
| icon = Ifcopenshell logo.png<br />
| screenshot = IfcOpenShell_screenshot.png<br />
| website = http://www.ifcopenshell.org/<br />
| source = [https://github.com/IfcOpenShell/IfcOpenShell github]<br />
| license = LGPL3.0<br />
| bugs = [https://github.com/IfcOpenShell/IfcOpenShell/issues Report a bug]<br />
| community = [https://sourceforge.net/p/ifcopenshell/discussion/ Forum]<br />
| maturity = [[Software_maturity|Mature]]<br />
| donation = [https://opencollective.com/opensourcebim OpenSourceBIM]<br />
}}<br />
{{Template:IfcOpenShell}}<br />
[[IfcOpenShell|IfcOpenShell]] is an open source (LGPL 3) software library that helps developers work with the [http://www.buildingsmart-tech.org/specifications/ifc-overview industry foundation classes] (IFC) file format. The IFC file format can be used to describe building and construction data. The format is commonly used for [https://en.wikipedia.org/wiki/Building_information_modeling building information modelling] (BIM), for example, mechanical loading analysis, and thermal and energy efficiency studies. IfcOpenShell is primarily a collection of C++ libraries, however, as it has [[Python|Python]] bindings, it can be integrated with programs like [[FreeCAD]] and [[Blender]].<br />
<br />
=Tools=<br />
<br />
IfcOpenshell contains multiple tools which can be used independently or together :<br />
==[https://github.com/IfcOpenShell/IfcOpenShell/tree/v0.6.0/src/bcf bcf-python]==<br />
A simple Python implementation of [[BIM_Collaboration_Format_(BCF)]]. The data model is described in data.py. Manipulation of BCF-XML is available via bcfxml.py and manipulation of BCF-API is available via bcfapi.py. See also [[:Category:BIM_Collaboration_Format_(BCF)]]. [[Category:BIM_Collaboration_Format_(BCF)]]<br />
<br />
==[http://ifcopenshell.org/ifcconvert IfcConvert]==<br />
A command line tool to convert IFC to different format including :<br />
{| class="wikitable" <br />
|-<br />
! .obj<br />
! WaveFront OBJ<br />
! (a .mtl file is also created)<br />
|-<br />
| .dae<br />
| Collada<br />
| Digital Assets Exchange<br />
|-<br />
| .glb<br />
| glTF<br />
| Binary glTF v2.0<br />
|-<br />
| .stp<br />
| STEP<br />
| Standard for the Exchange of Product Data<br />
|-<br />
| .igs<br />
| IGES<br />
| Initial Graphics Exchange Specification<br />
|-<br />
| .xml<br />
| XML<br />
| Property definitions and decomposition tree<br />
|-<br />
| .svg<br />
| SVG<br />
| Scalable Vector Graphics (2D floor plan)<br />
|-<br />
| .ifc<br />
| IFC-SPF<br />
| Industry Foundation Classes<br />
|}<br />
You can pass multiple options. Type <code>IfcConvert --help</code> to learn more (considering it is installed on your system).<br />
<br />
==[https://github.com/IfcOpenShell/IfcOpenShell/tree/v0.6.0/src/ifcgeomserver IfcGeomServer]==<br />
A command-line tool which allow to process geometry in a crash safe manner using a child process with dynamic linking.<br />
<br />
==[http://ifcopenshell.org/python IfcOpenShell-python]==<br />
A python API to manipulate IFC. See [[IfcOpenShell code examples]]. Comes with many utility functions for geolocation, data extraction, IFC query filtering, and more.<br />
<br />
==IFC Clash==<br />
IFC Clash detection using the flexible collision library.<br />
<br />
==IFC2CA==<br />
Conversion of IFC files into input files for Code_Aster structural simulation software.<br />
<br />
==IFC COBie==<br />
Conversion of IFC-SPF data into SpreadsheetML format for the COBie MVD. Includes error logging of invalid data and support for open format alternatives like CSV and ODS.<br />
See also: [[BlenderBIM_and_COBie]]<br />
<br />
==IFC CSV==<br />
Import and export support of IFC data to and from CSV files using a custom IFC query language.<br />
See also: [[BlenderBIM_IFCCSV]]<br />
<br />
==IFC Diff==<br />
Compares two IFC files with settings to check geometry or particular data relationships. Produces a parseable diff in JSON.<br />
<br />
==IFC Patch==<br />
Provides a standard interface for users to easily apply predetermined "recipes" to manipulate IFC data without needing to have any technical knowledge. See forum topic for a example how to run it. https://community.osarch.org/discussion/10/ifcpatch-tool-now-available#latest<br />
<br />
==IFC Sverchok==<br />
Provides an extension to the Blender Sverchok add-on for visual programming nodes for IFC within the Blender environment.<br />
<br />
==BIMTester==<br />
Provides a way to specify BIM exchange requirements using natural human language and audit IFC files to check if they comply with the requirements.<br />
<br />
==[http://ifcopenshell.org/ifcblender IfcBlender]==<br />
Replaced by [[BlenderBIM Add-on]].<br />
<br />
==[http://ifcopenshell.org/ifcmax IfcMax]==<br />
This plugin seems to not be developed anymore. It was an Ifc importer for 3ds Max.<br />
<br />
=Softwares powered by ifcopenshell=<br />
==FOSS projects==<br />
* [[BIMxBEM]] : import IfcRelSpaceBoundary, IfcSpace and related building elements geometry and data<br />
* [[BlenderBIM Add-on]] : ifcopenshell-python - import/export, multi-core geometry processing and more (Winner of 2020 buildingSMART Awards in Technology)<br />
* [[FreeCAD]] : ifcopenshell-python - import/export Parametric 3D modeler allowing you to easily modify your design. <br />
* [[ifc-pipeline]] : IfcConvert / ifcopenshell - python<br />
* [https://youshengcode.github.io/IfcToolbox.Doc/#/ IFC Toolbox] No-code IFC editing uses IfcOpenShell for model conversions.<br />
* [https://github.com/opensourceBIM/BIMserver BIMServer] enables you to store and manage the information of a construction (or other building related) project. <br />
* BIMSurfer<br />
* [https://www.openproject.org/ OpenProject] An open source commercial CDE that uses IfcOpenShell for model processing.<br />
* [https://xeokit.io/ xeokit-sdk] An open source 3D graphics SDK from xeolabs for BIM and AEC. Built to view huge models in the browser. Used by industry leaders.<br />
<br />
==Proprietary projects==<br />
* [http://areo.io/ Areo] SMART Facilities Management<br />
* [https://augin.app/en/ Augin.app] Publish and view AEC content in augmented reality in the environment on a 1:1 scale.<br />
* [https://bimdata.io/ BIMData.io] Provides an integrated viewer capable of loading several tens of thousands of objects. <br />
* [https://bimforce.com/en/homepage/ Bimforce] for IFC drawing generation<br />
* [https://www.cove.tools/ Cove.Tool] to integrate into Blender for sustainability analysis<br />
* [https://modulize.io/ Modulize] - Uses IfcOpenShell "quite a lot"<br />
* [https://regola.io/ Regola] - Used for model checking<br />
* [https://rengabim.com/ RengaSoftware] - used in [https://github.com/IfcOpenShell/IfcOpenShell/issues/1028#issuecomment-776085665 various operations] internally<br />
* [https://www.spectar.io/ Spectar] - Used for IFC conversions<br />
* [https://streambim.com/ StreamBIM] (previously known as Rendra.io) (Winner of 2020 buildingSMART Awards in Construction via Project Celsius)<br />
* [https://tridify.com/ Tridify] (Epic Megagrants recipient) Stream large & complex BIMs from the Cloud. A BIM Communication Service for all stakeholders with communication to issue management software.<br />
* [https://www.tridyme.com/ TriDyme] TriDyme helps construction's companies to develop their own cloud-based (online) applications.<br />
<br />
IfcOpenShell is also used in university courses around the world.<br />
<br />
* Fachhochschule Nordwestschweiz FHNW (University of Applied Sciences and Arts Northwestern Switzerland)<br />
* MSc-education of Architecture, Civil Engineering and Construction & Robotics tracks at RWTH Aachen University and TU Eindhoven<br />
* Parametric Design with Visual Programming in BIM by the Online Zigurat Global Institute for Technology<br />
<br />
=Installation=<br />
<br />
IfcOpenShell may be packaged in different Linux repositories, ready to install and use; or it can be packaged together with some programs that use it, for example, [[FreeCAD]].<br />
<br />
In other cases you may get one of the stand-alone, pre-compiled distributions, or you may download and compile the source code yourself.<br />
<br />
To learn more about installing IfcOpenShell, visit the page in the FreeCAD wiki: [https://wiki.freecadweb.org/IfcOpenShell IfcOpenShell].<br />
<br />
= See also =<br />
* Visit the [[:Category:IfcOpenShell|IfcOpenShell Category]] on this website.<br />
<br />
= External Resources =<br />
* Visit the IfcOpenShell Academy: http://academy.ifcopenshell.org/category/ifcopenshell/<br />
* Visit the IfcOpenShell forum: https://sourceforge.net/p/ifcopenshell/discussion/<br />
* learn with Jupyter Notebook coding examples from:<br />
https://github.com/jakob-beetz/IfcOpenShellScriptingTutorial (by Jakob Beetz)<br />
<br />
https://github.com/bimfag/intro-python-bim (by Sigve Martin Pettersen and Hans Martin Eikerol)<br />
<br />
[[Category:IfcOpenShell]]<br />
[[Category:Software]]<br />
[[Category:Industry Foundation Classes (IFC)]]</div>Moulthttps://wiki.osarch.org/index.php?title=IfcOpenShell&diff=4522IfcOpenShell2022-02-05T09:29:42Z<p>Moult: /* Softwares powered by ifcopenshell */</p>
<hr />
<div>{{Infobox software<br />
| icon = Ifcopenshell logo.png<br />
| screenshot = IfcOpenShell_screenshot.png<br />
| website = http://www.ifcopenshell.org/<br />
| source = [https://github.com/IfcOpenShell/IfcOpenShell github]<br />
| license = LGPL3.0<br />
| bugs = [https://github.com/IfcOpenShell/IfcOpenShell/issues Report a bug]<br />
| community = [https://sourceforge.net/p/ifcopenshell/discussion/ Forum]<br />
| maturity = [[Software_maturity|Mature]]<br />
| donation = [https://opencollective.com/opensourcebim OpenSourceBIM]<br />
}}<br />
{{Template:IfcOpenShell}}<br />
[[IfcOpenShell|IfcOpenShell]] is an open source (LGPL 3) software library that helps developers work with the [http://www.buildingsmart-tech.org/specifications/ifc-overview industry foundation classes] (IFC) file format. The IFC file format can be used to describe building and construction data. The format is commonly used for [https://en.wikipedia.org/wiki/Building_information_modeling building information modelling] (BIM), for example, mechanical loading analysis, and thermal and energy efficiency studies. IfcOpenShell is primarily a collection of C++ libraries, however, as it has [[Python|Python]] bindings, it can be integrated with programs like [[FreeCAD]] and [[Blender]].<br />
<br />
=Tools=<br />
<br />
IfcOpenshell contains multiple tools which can be used independently or together :<br />
==[https://github.com/IfcOpenShell/IfcOpenShell/tree/v0.6.0/src/bcf bcf-python]==<br />
A simple Python implementation of [[BIM_Collaboration_Format_(BCF)]]. The data model is described in data.py. Manipulation of BCF-XML is available via bcfxml.py and manipulation of BCF-API is available via bcfapi.py. See also [[:Category:BIM_Collaboration_Format_(BCF)]]. [[Category:BIM_Collaboration_Format_(BCF)]]<br />
<br />
==[http://ifcopenshell.org/ifcconvert IfcConvert]==<br />
A command line tool to convert IFC to different format including :<br />
{| class="wikitable" <br />
|-<br />
! .obj<br />
! WaveFront OBJ<br />
! (a .mtl file is also created)<br />
|-<br />
| .dae<br />
| Collada<br />
| Digital Assets Exchange<br />
|-<br />
| .glb<br />
| glTF<br />
| Binary glTF v2.0<br />
|-<br />
| .stp<br />
| STEP<br />
| Standard for the Exchange of Product Data<br />
|-<br />
| .igs<br />
| IGES<br />
| Initial Graphics Exchange Specification<br />
|-<br />
| .xml<br />
| XML<br />
| Property definitions and decomposition tree<br />
|-<br />
| .svg<br />
| SVG<br />
| Scalable Vector Graphics (2D floor plan)<br />
|-<br />
| .ifc<br />
| IFC-SPF<br />
| Industry Foundation Classes<br />
|}<br />
You can pass multiple options. Type <code>IfcConvert --help</code> to learn more (considering it is installed on your system).<br />
<br />
==[https://github.com/IfcOpenShell/IfcOpenShell/tree/v0.6.0/src/ifcgeomserver IfcGeomServer]==<br />
A command-line tool which allow to process geometry in a crash safe manner using a child process with dynamic linking.<br />
<br />
==[http://ifcopenshell.org/python IfcOpenShell-python]==<br />
A python API to manipulate IFC. See [[IfcOpenShell code examples]]. Comes with many utility functions for geolocation, data extraction, IFC query filtering, and more.<br />
<br />
==IFC Clash==<br />
IFC Clash detection using the flexible collision library.<br />
<br />
==IFC2CA==<br />
Conversion of IFC files into input files for Code_Aster structural simulation software.<br />
<br />
==IFC COBie==<br />
Conversion of IFC-SPF data into SpreadsheetML format for the COBie MVD. Includes error logging of invalid data and support for open format alternatives like CSV and ODS.<br />
See also: [[BlenderBIM_and_COBie]]<br />
<br />
==IFC CSV==<br />
Import and export support of IFC data to and from CSV files using a custom IFC query language.<br />
See also: [[BlenderBIM_IFCCSV]]<br />
<br />
==IFC Diff==<br />
Compares two IFC files with settings to check geometry or particular data relationships. Produces a parseable diff in JSON.<br />
<br />
==IFC Patch==<br />
Provides a standard interface for users to easily apply predetermined "recipes" to manipulate IFC data without needing to have any technical knowledge. See forum topic for a example how to run it. https://community.osarch.org/discussion/10/ifcpatch-tool-now-available#latest<br />
<br />
==IFC Sverchok==<br />
Provides an extension to the Blender Sverchok add-on for visual programming nodes for IFC within the Blender environment.<br />
<br />
==BIMTester==<br />
Provides a way to specify BIM exchange requirements using natural human language and audit IFC files to check if they comply with the requirements.<br />
<br />
==[http://ifcopenshell.org/ifcblender IfcBlender]==<br />
Replaced by [[BlenderBIM Add-on]].<br />
<br />
==[http://ifcopenshell.org/ifcmax IfcMax]==<br />
This plugin seems to not be developed anymore. It was an Ifc importer for 3ds Max.<br />
<br />
=Softwares powered by ifcopenshell=<br />
==FOSS projects==<br />
* [[BIMxBEM]] : import IfcRelSpaceBoundary, IfcSpace and related building elements geometry and data<br />
* [[BlenderBIM Add-on]] : ifcopenshell-python - import/export, multi-core geometry processing and more (Winner of 2020 buildingSMART Awards in Technology)<br />
* [[FreeCAD]] : ifcopenshell-python - import/export Parametric 3D modeler allowing you to easily modify your design. <br />
* [[ifc-pipeline]] : IfcConvert / ifcopenshell - python<br />
* [https://youshengcode.github.io/IfcToolbox.Doc/#/ IFC Toolbox] No-code IFC editing uses IfcOpenShell for model conversions.<br />
* [https://github.com/opensourceBIM/BIMserver BIMServer] enables you to store and manage the information of a construction (or other building related) project. <br />
* BIMSurfer<br />
* [https://www.openproject.org/ OpenProject] An open source commercial CDE that uses IfcOpenShell for model processing.<br />
* [https://xeokit.io/ xeokit-sdk] An open source 3D graphics SDK from xeolabs for BIM and AEC. Built to view huge models in the browser. Used by industry leaders.<br />
<br />
==Proprietary projects==<br />
* [http://areo.io/ Areo] SMART Facilities Management<br />
* [https://augin.app/en/ Augin.app] Publish and view AEC content in augmented reality in the environment on a 1:1 scale.<br />
* [https://bimdata.io/ BIMData.io] Provides an integrated viewer capable of loading several tens of thousands of objects. <br />
* [https://bimforce.com/en/homepage/ Bimforce] for IFC drawing generation<br />
* [https://www.cove.tools/ Cove.Tool] to integrate into Blender for sustainability analysis<br />
* [https://modulize.io/ Modulize] - Uses IfcOpenShell "quite a lot"<br />
* [https://rengabim.com/ RengaSoftware] - used in [https://github.com/IfcOpenShell/IfcOpenShell/issues/1028#issuecomment-776085665 various operations] internally<br />
* [https://www.spectar.io/ Spectar] - Used for IFC conversions<br />
* [https://streambim.com/ StreamBIM] (previously known as Rendra.io) (Winner of 2020 buildingSMART Awards in Construction via Project Celsius)<br />
* [https://tridify.com/ Tridify] (Epic Megagrants recipient) Stream large & complex BIMs from the Cloud. A BIM Communication Service for all stakeholders with communication to issue management software.<br />
* [https://www.tridyme.com/ TriDyme] TriDyme helps construction's companies to develop their own cloud-based (online) applications.<br />
<br />
IfcOpenShell is also used in university courses around the world.<br />
<br />
* Fachhochschule Nordwestschweiz FHNW (University of Applied Sciences and Arts Northwestern Switzerland)<br />
* MSc-education of Architecture, Civil Engineering and Construction & Robotics tracks at RWTH Aachen University and TU Eindhoven<br />
* Parametric Design with Visual Programming in BIM by the Online Zigurat Global Institute for Technology<br />
<br />
=Installation=<br />
<br />
IfcOpenShell may be packaged in different Linux repositories, ready to install and use; or it can be packaged together with some programs that use it, for example, [[FreeCAD]].<br />
<br />
In other cases you may get one of the stand-alone, pre-compiled distributions, or you may download and compile the source code yourself.<br />
<br />
To learn more about installing IfcOpenShell, visit the page in the FreeCAD wiki: [https://wiki.freecadweb.org/IfcOpenShell IfcOpenShell].<br />
<br />
= See also =<br />
* Visit the [[:Category:IfcOpenShell|IfcOpenShell Category]] on this website.<br />
<br />
= External Resources =<br />
* Visit the IfcOpenShell Academy: http://academy.ifcopenshell.org/category/ifcopenshell/<br />
* Visit the IfcOpenShell forum: https://sourceforge.net/p/ifcopenshell/discussion/<br />
* learn with Jupyter Notebook coding examples from:<br />
https://github.com/jakob-beetz/IfcOpenShellScriptingTutorial (by Jakob Beetz)<br />
<br />
https://github.com/bimfag/intro-python-bim (by Sigve Martin Pettersen and Hans Martin Eikerol)<br />
<br />
[[Category:IfcOpenShell]]<br />
[[Category:Software]]<br />
[[Category:Industry Foundation Classes (IFC)]]</div>Moulthttps://wiki.osarch.org/index.php?title=IfcOpenShell&diff=4521IfcOpenShell2022-02-05T09:28:32Z<p>Moult: /* Softwares powered by ifcopenshell */</p>
<hr />
<div>{{Infobox software<br />
| icon = Ifcopenshell logo.png<br />
| screenshot = IfcOpenShell_screenshot.png<br />
| website = http://www.ifcopenshell.org/<br />
| source = [https://github.com/IfcOpenShell/IfcOpenShell github]<br />
| license = LGPL3.0<br />
| bugs = [https://github.com/IfcOpenShell/IfcOpenShell/issues Report a bug]<br />
| community = [https://sourceforge.net/p/ifcopenshell/discussion/ Forum]<br />
| maturity = [[Software_maturity|Mature]]<br />
| donation = [https://opencollective.com/opensourcebim OpenSourceBIM]<br />
}}<br />
{{Template:IfcOpenShell}}<br />
[[IfcOpenShell|IfcOpenShell]] is an open source (LGPL 3) software library that helps developers work with the [http://www.buildingsmart-tech.org/specifications/ifc-overview industry foundation classes] (IFC) file format. The IFC file format can be used to describe building and construction data. The format is commonly used for [https://en.wikipedia.org/wiki/Building_information_modeling building information modelling] (BIM), for example, mechanical loading analysis, and thermal and energy efficiency studies. IfcOpenShell is primarily a collection of C++ libraries, however, as it has [[Python|Python]] bindings, it can be integrated with programs like [[FreeCAD]] and [[Blender]].<br />
<br />
=Tools=<br />
<br />
IfcOpenshell contains multiple tools which can be used independently or together :<br />
==[https://github.com/IfcOpenShell/IfcOpenShell/tree/v0.6.0/src/bcf bcf-python]==<br />
A simple Python implementation of [[BIM_Collaboration_Format_(BCF)]]. The data model is described in data.py. Manipulation of BCF-XML is available via bcfxml.py and manipulation of BCF-API is available via bcfapi.py. See also [[:Category:BIM_Collaboration_Format_(BCF)]]. [[Category:BIM_Collaboration_Format_(BCF)]]<br />
<br />
==[http://ifcopenshell.org/ifcconvert IfcConvert]==<br />
A command line tool to convert IFC to different format including :<br />
{| class="wikitable" <br />
|-<br />
! .obj<br />
! WaveFront OBJ<br />
! (a .mtl file is also created)<br />
|-<br />
| .dae<br />
| Collada<br />
| Digital Assets Exchange<br />
|-<br />
| .glb<br />
| glTF<br />
| Binary glTF v2.0<br />
|-<br />
| .stp<br />
| STEP<br />
| Standard for the Exchange of Product Data<br />
|-<br />
| .igs<br />
| IGES<br />
| Initial Graphics Exchange Specification<br />
|-<br />
| .xml<br />
| XML<br />
| Property definitions and decomposition tree<br />
|-<br />
| .svg<br />
| SVG<br />
| Scalable Vector Graphics (2D floor plan)<br />
|-<br />
| .ifc<br />
| IFC-SPF<br />
| Industry Foundation Classes<br />
|}<br />
You can pass multiple options. Type <code>IfcConvert --help</code> to learn more (considering it is installed on your system).<br />
<br />
==[https://github.com/IfcOpenShell/IfcOpenShell/tree/v0.6.0/src/ifcgeomserver IfcGeomServer]==<br />
A command-line tool which allow to process geometry in a crash safe manner using a child process with dynamic linking.<br />
<br />
==[http://ifcopenshell.org/python IfcOpenShell-python]==<br />
A python API to manipulate IFC. See [[IfcOpenShell code examples]]. Comes with many utility functions for geolocation, data extraction, IFC query filtering, and more.<br />
<br />
==IFC Clash==<br />
IFC Clash detection using the flexible collision library.<br />
<br />
==IFC2CA==<br />
Conversion of IFC files into input files for Code_Aster structural simulation software.<br />
<br />
==IFC COBie==<br />
Conversion of IFC-SPF data into SpreadsheetML format for the COBie MVD. Includes error logging of invalid data and support for open format alternatives like CSV and ODS.<br />
See also: [[BlenderBIM_and_COBie]]<br />
<br />
==IFC CSV==<br />
Import and export support of IFC data to and from CSV files using a custom IFC query language.<br />
See also: [[BlenderBIM_IFCCSV]]<br />
<br />
==IFC Diff==<br />
Compares two IFC files with settings to check geometry or particular data relationships. Produces a parseable diff in JSON.<br />
<br />
==IFC Patch==<br />
Provides a standard interface for users to easily apply predetermined "recipes" to manipulate IFC data without needing to have any technical knowledge. See forum topic for a example how to run it. https://community.osarch.org/discussion/10/ifcpatch-tool-now-available#latest<br />
<br />
==IFC Sverchok==<br />
Provides an extension to the Blender Sverchok add-on for visual programming nodes for IFC within the Blender environment.<br />
<br />
==BIMTester==<br />
Provides a way to specify BIM exchange requirements using natural human language and audit IFC files to check if they comply with the requirements.<br />
<br />
==[http://ifcopenshell.org/ifcblender IfcBlender]==<br />
Replaced by [[BlenderBIM Add-on]].<br />
<br />
==[http://ifcopenshell.org/ifcmax IfcMax]==<br />
This plugin seems to not be developed anymore. It was an Ifc importer for 3ds Max.<br />
<br />
=Softwares powered by ifcopenshell=<br />
==FOSS projects==<br />
* [[BIMxBEM]] : import IfcRelSpaceBoundary, IfcSpace and related building elements geometry and data<br />
* [[BlenderBIM Add-on]] : ifcopenshell-python - import/export, multi-core geometry processing and more (Winner of 2020 buildingSMART Awards in Technology)<br />
* [[FreeCAD]] : ifcopenshell-python - import/export Parametric 3D modeler allowing you to easily modify your design. <br />
* [[ifc-pipeline]] : IfcConvert / ifcopenshell - python<br />
* [https://youshengcode.github.io/IfcToolbox.Doc/#/ IFC Toolbox] No-code IFC editing uses IfcOpenShell for model conversions.<br />
* [https://github.com/opensourceBIM/BIMserver BIMServer] enables you to store and manage the information of a construction (or other building related) project. <br />
* BIMSurfer<br />
* [https://www.openproject.org/ OpenProject] An open source commercial CDE that uses IfcOpenShell for model processing.<br />
* [https://xeokit.io/ xeokit-sdk] An open source 3D graphics SDK from xeolabs for BIM and AEC. Built to view huge models in the browser. Used by industry leaders.<br />
<br />
==Proprietary projects==<br />
* [http://areo.io/ Areo] SMART Facilities Management<br />
* [https://augin.app/en/ Augin.app] Publish and view AEC content in augmented reality in the environment on a 1:1 scale.<br />
* [https://bimdata.io/ BIMData.io] Provides an integrated viewer capable of loading several tens of thousands of objects. <br />
* [https://bimforce.com/en/homepage/ Bimforce] for IFC drawing generation<br />
* [https://www.cove.tools/ Cove.Tool] to integrate into Blender for sustainability analysis<br />
* [https://modulize.io/ Modulize] - Uses IfcOpenShell "quite a lot"<br />
* [https://rengabim.com/ RengaSoftware] - used in [https://github.com/IfcOpenShell/IfcOpenShell/issues/1028#issuecomment-776085665 various operations] internally<br />
* [https://www.spectar.io/ Spectar] - Used for IFC conversions<br />
* [https://streambim.com/ StreamBIM] (previously known as Rendra.io) (Winner of 2020 buildingSMART Awards in Construction via Project Celsius)<br />
* [https://tridify.com/ Tridify] (Epic Megagrants recipient) Stream large & complex BIMs from the Cloud. A BIM Communication Service for all stakeholders with communication to issue management software.<br />
* [https://www.tridyme.com/ TriDyme] TriDyme helps construction's companies to develop their own cloud-based (online) applications.<br />
<br />
IfcOpenShell is also used in university courses around the world.<br />
<br />
* Fachhochschule Nordwestschweiz FHNW (University of Applied Sciences and Arts Northwestern Switzerland)<br />
* MSc-education of Architecture, Civil Engineering and Construction & Robotics tracks at RWTH Aachen University and TU Eindhoven<br />
<br />
=Installation=<br />
<br />
IfcOpenShell may be packaged in different Linux repositories, ready to install and use; or it can be packaged together with some programs that use it, for example, [[FreeCAD]].<br />
<br />
In other cases you may get one of the stand-alone, pre-compiled distributions, or you may download and compile the source code yourself.<br />
<br />
To learn more about installing IfcOpenShell, visit the page in the FreeCAD wiki: [https://wiki.freecadweb.org/IfcOpenShell IfcOpenShell].<br />
<br />
= See also =<br />
* Visit the [[:Category:IfcOpenShell|IfcOpenShell Category]] on this website.<br />
<br />
= External Resources =<br />
* Visit the IfcOpenShell Academy: http://academy.ifcopenshell.org/category/ifcopenshell/<br />
* Visit the IfcOpenShell forum: https://sourceforge.net/p/ifcopenshell/discussion/<br />
* learn with Jupyter Notebook coding examples from:<br />
https://github.com/jakob-beetz/IfcOpenShellScriptingTutorial (by Jakob Beetz)<br />
<br />
https://github.com/bimfag/intro-python-bim (by Sigve Martin Pettersen and Hans Martin Eikerol)<br />
<br />
[[Category:IfcOpenShell]]<br />
[[Category:Software]]<br />
[[Category:Industry Foundation Classes (IFC)]]</div>Moulthttps://wiki.osarch.org/index.php?title=IfcOpenShell_code_examples&diff=4520IfcOpenShell code examples2022-02-03T23:04:08Z<p>Moult: /* Geometry processing */ describe create shape</p>
<hr />
<div>{{Template:Start coding}}<br />
{{Template:IfcOpenShell}}<br />
Before getting started, you may be interested in [[Using the Python console with BlenderBIM Add-on]], to quickly install all the software and development environment you need for writing and running code, without any administrator privileges required. You may also find it useful watching [https://www.youtube.com/watch?v=WZPNaAM9ZuQ this video] which is complementary.<br />
<br />
=Crash course=<br />
<br />
To load a file, you'll need to import IfcOpenShell and store the IFC file in a variable. We'll use the variable <code>ifc</code>. The <code>ifc</code> will be then used throughout.<br />
<br />
<syntaxhighlight lang="python"><br />
import ifcopenshell<br />
ifc = ifcopenshell.open('/path/to/your/file.ifc')<br />
</syntaxhighlight><br />
<br />
Let's see what IFC schema we are using:<br />
<br />
<syntaxhighlight lang="python"><br />
print(ifc.schema) # May return IFC2X3 or IFC4<br />
</syntaxhighlight><br />
<br />
Let's get the first piece of data in our IFC file:<br />
<br />
<syntaxhighlight lang="python"><br />
print(ifc.by_id(1))<br />
</syntaxhighlight><br />
<br />
But getting data from beginning to end isn't too meaningful to humans. What if we knew a <code>GlobalId</code> value instead?<br />
<br />
<syntaxhighlight lang="python"><br />
print(ifc.by_guid('0EI0MSHbX9gg8Fxwar7lL8'))<br />
</syntaxhighlight><br />
<br />
If we're not looking specifically for a single element, perhaps let's see how many walls are in our file, and count them:<br />
<br />
<syntaxhighlight lang="python"><br />
walls = ifc.by_type('IfcWall')<br />
print(len(walls))<br />
</syntaxhighlight><br />
<br />
Once we have an element, we can see what IFC class it is:<br />
<br />
<syntaxhighlight lang="python"><br />
wall = ifc.by_type('IfcWall')[0]<br />
print(wall.is_a()) # Returns 'IfcWall'<br />
</syntaxhighlight><br />
<br />
You can also test if it is a certain class, as well as check for parent classes too:<br />
<br />
<syntaxhighlight lang="python"><br />
print(wall.is_a('IfcWall')) # Returns True<br />
print(wall.is_a('IfcElement')) # Returns True<br />
print(wall.is_a('IfcWindow')) # Returns False<br />
</syntaxhighlight><br />
<br />
Let's quickly check the STEP ID of our element:<br />
<br />
<syntaxhighlight lang="python"><br />
print(wall.id())<br />
</syntaxhighlight><br />
<br />
Let's get some attributes of an element. IFC attributes have a particular order. We can access it just like a list, so let's get the first and third attribute:<br />
<br />
<syntaxhighlight lang="python"><br />
print(wall[0]) # The first attribute is the GlobalId<br />
print(wall[2]) # The third attribute is the Name<br />
</syntaxhighlight><br />
<br />
Knowing the order of attributes is boring and technical. We can access them by name too:<br />
<br />
<syntaxhighlight lang="python"><br />
print(wall.GlobalId)<br />
print(wall.Name)<br />
</syntaxhighlight><br />
<br />
Getting attributes one by one is tedious. Let's grab them all:<br />
<br />
<syntaxhighlight lang="python"><br />
print(wall.get_info()) # Gives us a dictionary of attributes, such as {'id': 8, 'type': 'IfcWall', 'GlobalId': '2_qMTAIHrEYu0vYcqK8cBX', ... }<br />
</syntaxhighlight><br />
<br />
Let's see all the properties and quantities associated with this wall:<br />
<br />
<syntaxhighlight lang="python"><br />
import ifcopenshell.util<br />
import ifcopenshell.util.element<br />
print(ifcopenshell.util.element.get_psets(wall))<br />
</syntaxhighlight><br />
<br />
Some attributes are special, called "inverse attributes". They happen when another element is referencing our element. They can reference it for many reasons, like to define a relationship, such as if they create a void in our wall, join our wall, or define a quantity take-off value for our wall, among others. Just treat them like regular attributes:<br />
<br />
<syntaxhighlight lang="python"><br />
print(wall.IsDefinedBy)<br />
</syntaxhighlight><br />
<br />
Perhaps we want to see all elements which are referencing our wall?<br />
<br />
<syntaxhighlight lang="python"><br />
print(ifc.get_inverse(wall))<br />
</syntaxhighlight><br />
<br />
Let's do the opposite, let's see all the elements which our wall references instead:<br />
<br />
<syntaxhighlight lang="python"><br />
print(ifc.traverse(wall))<br />
print(ifc.traverse(wall, max_levels=1)) # Or, let's just go down one level deep<br />
</syntaxhighlight><br />
<br />
If you want to modify data, just assign it to the relevant attribute:<br />
<br />
<syntaxhighlight lang="python"><br />
wall.Name = 'My new wall name'<br />
</syntaxhighlight><br />
<br />
You can also generate new <code>GlobalId</code>s:<br />
<br />
<syntaxhighlight lang="python"><br />
wall.GlobalId = ifcopenshell.guid.new()<br />
</syntaxhighlight><br />
<br />
After modifying some IFC data, you can save it to a new IFC-SPF file:<br />
<br />
<syntaxhighlight lang="python"><br />
ifc.write('/path/to/a/new.ifc')<br />
</syntaxhighlight><br />
<br />
You can generate a new IFC from scratch too, instead of reading an existing one:<br />
<br />
<syntaxhighlight lang="python"><br />
ifc = ifcopenshell.file()<br />
# Or if you want a particular schema:<br />
ifc = ifcopenshell.file(schema='IFC4')<br />
</syntaxhighlight><br />
<br />
You can create new IFC elements, and add it either to an existing or newly created IFC file object:<br />
<br />
<syntaxhighlight lang="python"><br />
new_wall = ifc.createIfcWall() # Will return #1=IfcWall($,$,$,$,$,$,$,$,$) - notice all of the attributes are blank!<br />
print(ifc.by_type('IfcWall')) # Will return a list with our wall in it: [#1=IfcWall($,$,$,$,$,$,$,$,$)]<br />
</syntaxhighlight><br />
<br />
Alternatively, you can also use this way to create new elements:<br />
<br />
<syntaxhighlight lang="python"><br />
ifc.create_entity('IfcWall')<br />
</syntaxhighlight><br />
<br />
Specifying more arguments lets you fill in attributes while creating the element instead of assigning them separately. You specify them in the order of the attributes.<br />
<br />
<syntaxhighlight lang="python"><br />
ifc.create_entity('IfcWall', ifcopenshell.guid.new()) # Gives us #1=IfcWall('0EI0MSHbX9gg8Fxwar7lL8',$,$,$,$,$,$,$,$)<br />
</syntaxhighlight><br />
<br />
Again, knowing the order of attributes is difficult, so you can use keyword arguments instead:<br />
<br />
<syntaxhighlight lang="python"><br />
ifc.create_entity('IfcWall', GlobalId=ifcopenshell.guid.new(), Name='Wall Name') # Gives us #1=IfcWall('0EI0MSHbX9gg8Fxwar7lL8',$,'Wall Name',$,$,$,$,$,$)<br />
</syntaxhighlight><br />
<br />
Sometimes, it's easier to expand a dictionary:<br />
<br />
<syntaxhighlight lang="python"><br />
data = {<br />
'GlobalId': ifcopenshell.guid.new(),<br />
'Name': 'Wall Name'<br />
}<br />
ifc.create_entity('IfcWall', **data)<br />
</syntaxhighlight><br />
<br />
Some attributes of an element aren't just text, they may be a reference to another element. Easy:<br />
<br />
<syntaxhighlight lang="python"><br />
wall = ifc.createIfcWall()<br />
wall.OwnerHistory = ifc.createIfcOwnerHistory()<br />
</syntaxhighlight><br />
<br />
What if we already have an element from one IFC file and want to add it to another?<br />
<br />
<syntaxhighlight lang="python"><br />
wall = ifc.by_type('IfcWall')[0]<br />
new_ifc = ifcopenshell.file()<br />
new_ifc.add(wall)<br />
</syntaxhighlight><br />
<br />
Fed up with an object? Let's delete it:<br />
<br />
<syntaxhighlight lang="python"><br />
ifc.remove(wall)<br />
</syntaxhighlight><br />
<br />
=Geometry processing=<br />
<br />
The usage of IfcOpenShell for geometry processing is currently considered to be moderate to advanced. There are two approaches to processing geometry. One approach is to traverse the <code>Representation</code> attribute of the IFC element, and parse it yourself. This requires an in-depth understanding of IFC geometric representations, as well as its many caveats with units and transformations, but can be very simple to extract specific types of geometry. The second approach is to use IfcOpenShell's shape processing features, which will convert almost all IFC representations into a triangulated mesh. Regardless of the source format, once it is in a mesh representation, you may use standard mesh geometry processing algorithms to analyse the geometry. This makes it easier to write generic code for any representation, but may be harder to extract certain geometric features.<br />
<br />
The simplest way to get started is to use the <code>create_shape</code> function to convert an element into vertices, edges, and faces.<br />
<br />
<syntaxhighlight lang="python"><br />
import ifcopenshell<br />
import ifcopenshell.geom<br />
<br />
ifc_file = ifcopenshell.open('/path/to/your/file.ifc')<br />
<br />
element = ifc_file.by_type('IfcWall')[0]<br />
<br />
settings = ifcopenshell.geom.settings()<br />
shape = ifcopenshell.geom.create_shape(settings, element)<br />
faces = shape.geometry.faces # Indices of vertices per triangle face e.g. [f1v1, f1v2, f1v3, f2v1, f2v2, f2v3, ...]<br />
verts = shape.geometry.verts # X Y Z of vertices in flattened list e.g. [v1x, v1y, v1z, v2x, v2y, v2z, ...]<br />
materials = shape.geometry.materials # Material names and colour style information that are relevant to this shape<br />
material_ids = shape.geometry.material_ids # Indices of material applied per triangle face e.g. [f1m, f2m, ...]<br />
<br />
# Since the lists are flattened, you may prefer to group them per face like so depending on your geometry kernel<br />
grouped_verts = [[verts[i], verts[i + 1], verts[i + 2]] for i in range(0, len(verts), 3)]<br />
grouped_faces = [[faces[i], faces[i + 1], faces[i + 2]] for i in range(0, len(faces), 3)]<br />
</syntaxhighlight><br />
<br />
Once you have a list of vertices, edges, and faces, you can perform any standard mesh algorithm to do more geometric analysis. There are a series of settings you can apply when creating a shape. These are documented [https://github.com/IfcOpenShell/IfcOpenShell/blob/v0.7.0/docs/geom/settings.md here].<br />
<br />
All shapes are given an ID to uniquely identify it. These IDs following a [https://github.com/IfcOpenShell/IfcOpenShell/issues/866 naming scheme].<br />
<br />
If you have a lot of geometry to process, it is advised to use the geometry iterator. This will process shapes using more than one CPU and is significantly faster.<br />
<br />
<syntaxhighlight lang="python"><br />
import multiprocessing<br />
import ifcopenshell<br />
import ifcopenshell.geom<br />
<br />
try:<br />
ifc_file = ifcopenshell.open('/path/to/your/file.ifc')<br />
except:<br />
print(ifcopenshell.get_log())<br />
else:<br />
settings = ifcopenshell.geom.settings()<br />
iterator = ifcopenshell.geom.iterator(settings, ifc_file, multiprocessing.cpu_count())<br />
if iterator.initialize():<br />
while iterator.next():<br />
shape = iterator.get()<br />
element = ifc_file.by_guid(shape.guid)<br />
faces = shape.geometry.faces # Indices of vertices per triangle face e.g. [f1v1, f1v2, f1v3, f2v1, f2v2, f2v3, ...]<br />
verts = shape.geometry.verts # X Y Z of vertices in flattened list e.g. [v1x, v1y, v1z, v2x, v2y, v2z, ...]<br />
materials = shape.geometry.materials # Material names and colour style information that are relevant to this shape<br />
material_ids = shape.geometry.material_ids # Indices of material applied per triangle face e.g. [f1m, f2m, ...]<br />
<br />
# Since the lists are flattened, you may prefer to group them per face like so depending on your geometry kernel<br />
grouped_verts = [[verts[i], verts[i + 1], verts[i + 2]] for i in range(0, len(verts), 3)]<br />
grouped_faces = [[faces[i], faces[i + 1], faces[i + 2]] for i in range(0, len(faces), 3)]<br />
</syntaxhighlight><br />
<br />
=IFC Query Syntax=<br />
<br />
Sometimes, you'd like to query an IFC file for a series of elements. It is possible to write this out manually, by means of functions like <code>by_type()</code> and <code>if</code> statements, and <code>for</code> loops. However, a shorthand query syntax has been invented that makes this process much easier. This is made available in the <code>ifcopenshell.util.selector</code> module.<br />
<br />
In this simple example below, we use the <code>#</code> and <code>.</code> prefix to our query tells it that we want to search by IFC <code>GlobalId</code> and class type respectively. Whitespace is optional in queries, but is used in these examples for readability.<br />
<br />
<syntaxhighlight lang="python"><br />
import ifcopenshell.util<br />
from ifcopenshell.util.selector import Selector<br />
<br />
ifc = ifcopenshell.open('/path/to/your/file.ifc')<br />
selector = Selector()<br />
element = selector.parse(ifc, '#2MLFd4X2f0jRq28Dvww1Vm') # Equivalent to ifc.by_guid('2MLFd4X2f0jRq28Dvww1Vm')<br />
walls = selector.parse(ifc, '.IfcWall') # This is equivalent to ifc.by_type('IfcWall')<br />
</syntaxhighlight><br />
<br />
It is also possible to search by any attribute:<br />
<br />
<syntaxhighlight lang="python"><br />
# This is equivalent to searching by GlobalId<br />
elements = selector.parse(ifc, '.IfcSlab[GlobalId = "2MLFd4X2f0jRq28Dvww1Vm"]')<br />
<br />
# This finds all slabs with "Precast" (case-sensitive) in the Name<br />
elements = selector.parse(ifc, '.IfcSlab[Name *= "Precast"]')<br />
<br />
# This finds all slabs which have a quantified net volume greater than 10 units<br />
elements = selector.parse(ifc, '.IfcSlab[Qto_SlabBaseQuantities.NetVolume > "10"]')<br />
<br />
# This finds all walls which have a particular fire rating property<br />
elements = selector.parse(ifc, '.IfcWall[Pset_WallCommon.FireRating = "2HR"]')<br />
</syntaxhighlight><br />
<br />
You can also search by spatial containment using the <code>@</code> symbol, for example:<br />
<br />
<syntaxhighlight lang="python"><br />
# If 0ehnsYoIDA7wC8yu69IDjv is the GlobalId of an IfcBuildingStorey, this gets all of the elements in that storey.<br />
elements = selector.parse(ifc, '@ #0ehnsYoIDA7wC8yu69IDjv')<br />
</syntaxhighlight><br />
<br />
Or by type using the <code>*</code> symbol:<br />
<br />
<syntaxhighlight lang="python"><br />
# If 1uVUwUxTX9Jg1NHVw5KZhI is the GlobalId of an IfcTypeElement, this gets all of the elements of that type.<br />
elements = selector.parse(ifc, '* #1uVUwUxTX9Jg1NHVw5KZhI')<br />
</syntaxhighlight><br />
<br />
You can use <code>AND</code> and <code>OR</code> statements, using the <code>&</code> and <code>|</code> symbols respectively:<br />
<br />
<syntaxhighlight lang="python"><br />
# This gets all the 2HR fire rated walls in a particular building storey:<br />
elements = selector.parse(ifc, '@ #0ehnsYoIDA7wC8yu69IDjv & .IfcWall[Pset_WallCommon.FireRating = "2HR"]')<br />
<br />
# This is equivalent to walls = ifc.by_type('IfcWall') + ifc.by_type('IfcSlab'), i.e. all walls and slabs<br />
elements = selector.parse(ifc, '.IfcWall | .IfcSlab')<br />
</syntaxhighlight><br />
<br />
You can also use parenthesis to group queries and combine them:<br />
<br />
<syntaxhighlight lang="python"><br />
# This gets all walls and slabs in a particular building storey<br />
elements = selector.parse(ifc, '@ #0ehnsYoIDA7wC8yu69IDjv & ( .IfcWall | .IfcSlab )')<br />
</syntaxhighlight><br />
<br />
<syntaxhighlight lang="python"><br />
# This gets all walls and slabs in a particular space (if IfcRelSpaceBoundary exist)<br />
elements = selector.parse(ifc, '@@ .IfcSpace & ( .IfcWall | .IfcSlab )')<br />
</syntaxhighlight><br />
<br />
<br />
=Exploring IFC schema=<br />
Get Schema :<br />
<syntaxhighlight lang="python"><br />
import ifcopenshell<br />
schema = ifcopenshell.ifcopenshell_wrapper.schema_by_name("IFC4")<br />
</syntaxhighlight><br />
<br />
Explore class attributes :<br />
<syntaxhighlight lang="python"><br />
>>> ifc_pipe = schema.declaration_by_name("IfcPipeSegment")<br />
>>> ifc_pipe.all_attributes()<br />
(<attribute GlobalId: <type IfcGloballyUniqueId: <string>>>,<br />
<attribute OwnerHistory?: <entity IfcOwnerHistory>>,<br />
<attribute Name?: <type IfcLabel: <string>>>,<br />
<attribute Description?: <type IfcText: <string>>>,<br />
<attribute ObjectType?: <type IfcLabel: <string>>>,<br />
<attribute ObjectPlacement?: <entity IfcObjectPlacement>>,<br />
<attribute Representation?: <entity IfcProductRepresentation>>,<br />
<attribute Tag?: <type IfcIdentifier: <string>>>,<br />
<attribute PredefinedType?: <enumeration IfcPipeSegmentTypeEnum: (CULVERT, FLEXIBLESEGMENT, GUTTER, NOTDEFINED, RIGIDSEGMENT, SPOOL, USERDEFINED)>>)<br />
<br />
>>> ifc_pipe.attribute_count()<br />
9<br />
<br />
>>> ifc_pipe.attribute_by_index(0)<br />
<attribute GlobalId: <type IfcGloballyUniqueId: <string>>><br />
<br />
>>> ifc_pipe.attribute_index("Description")<br />
3<br />
<br />
>>> predefined_type = ifc_pipe.attribute_by_index(8)<br />
>>> predefined_type.name()<br />
'PredefinedType'<br />
<br />
>>> predefined_type.optional()<br />
True<br />
<br />
>>> predefined_type.type_of_attribute()<br />
<enumeration IfcPipeSegmentTypeEnum: (CULVERT, FLEXIBLESEGMENT, GUTTER, NOTDEFINED, RIGIDSEGMENT, SPOOL, USERDEFINED)><br />
<br />
# from name you can then recursively explore how create an entity as described above<br />
>>> predefined_type.type_of_attribute().declared_type().name()<br />
'IfcPipeSegmentTypeEnum'<br />
</syntaxhighlight><br />
<br />
Get supertype :<br />
<syntaxhighlight lang="python"><br />
>>> ifc_pipe.supertype()<br />
<entity IfcFlowSegment><br />
</syntaxhighlight><br />
<br />
Get subtypes :<br />
<syntaxhighlight lang="python"><br />
>>> super_type = ifc_pipe.supertype()<br />
>>> super_type.subtypes()<br />
(<entity IfcCableCarrierSegment>,<br />
<entity IfcCableSegment>,<br />
<entity IfcDuctSegment>,<br />
<entity IfcPipeSegment>)<br />
</syntaxhighlight><br />
<br />
=Property and quantity sets (Pset and Qto)=<br />
First import util for psets and qtos and initialise main class with schema name:<br />
<syntaxhighlight lang="python"> <br />
>>> import ifcopenshell.util.pset<br />
>>> from ifcopenshell import util<br />
>>> pset_qto = util.pset.PsetQto("IFC4")<br />
</syntaxhighlight><br />
<br />
Get all applicable psets/qtos names for a certain class :<br />
<syntaxhighlight lang="python"> <br />
>>> pset_qto.get_applicable_names("IfcMaterial")<br />
['Pset_MaterialCombustion',<br />
'Pset_MaterialCommon',<br />
'Pset_MaterialConcrete',<br />
'Pset_MaterialEnergy',<br />
'Pset_MaterialFuel',<br />
'Pset_MaterialHygroscopic',<br />
'Pset_MaterialMechanical',<br />
'Pset_MaterialOptical',<br />
'Pset_MaterialSteel',<br />
'Pset_MaterialThermal',<br />
'Pset_MaterialWater',<br />
'Pset_MaterialWood',<br />
'Pset_MaterialWoodBasedBeam',<br />
'Pset_MaterialWoodBasedPanel']<br />
</syntaxhighlight><br />
<br />
You can also get a list of all applicable pset/qto templates to get more information:<br />
<syntaxhighlight lang="python"> <br />
>>> pset_qto.get_applicable("IfcMaterial")[0]<br />
#22772=IfcPropertySetTemplate('3Eppg0qUmHuO00025QrE$V',$,'Pset_MaterialCommon','A set of general material properties.',.PSET_TYPEDRIVENOVERRIDE.,'IfcMaterial',(#22775,#22778,#22781))<br />
</syntaxhighlight><br />
<br />
You can also retrieve a standard Pset by name:<br />
<syntaxhighlight lang="python"> <br />
>>> pset_template = pset_qto.get_by_name("Pset_MaterialCommon")<br />
>>> pset_template<br />
#22772=IfcPropertySetTemplate('3Eppg0qUmHuO00025QrE$V',$,'Pset_MaterialCommon','A set of general material,'IfcMaterial',(#22775,#22778,#22781))<br />
>>> pset_template.get_info()<br />
{'id': 22772,<br />
'type': 'IfcPropertySetTemplate',<br />
'GlobalId': '3Eppg0qUmHuO00025QrE$V',<br />
'OwnerHistory': None,<br />
'Name': 'Pset_MaterialCommon',<br />
'Description': 'A set of general material properties.',<br />
'TemplateType': 'PSET_TYPEDRIVENOVERRIDE',<br />
'ApplicableEntity': 'IfcMaterial',<br />
'HasPropertyTemplates': (#22775=IfcSimplePropertyTemplate('3IOi60qUmHuO00025QrE$V',$,'MolecularWeight','Molecular weight of material (typically gas).',.P_SINGLEVALUE.,'IfcMolecularWeightMeasure','',$,$,$,$,.READWRITE.),<br />
#22778=IfcSimplePropertyTemplate('3OMAA0qUmHuO00025QrE$V',$,'Porosity','The void fraction of the total volume occupied by material (Vbr - Vnet)/Vbr.',.P_SINGLEVALUE.,'IfcNormalisedRatioMeasure','',$,$,$,$,.READWRITE.),<br />
#22781=IfcSimplePropertyTemplate('3TjUq0qUmHuO00025QrE$V',$,'MassDensity','Material mass density.',.P_SINGLEVALUE.,'IfcMassDensityMeasure','',$,$,$,$,.READWRITE.))}<br />
</syntaxhighlight><br />
<br />
=File validation=<br />
Ifcopenshell allows you to validate a file against its corresponding schema.<br />
==From command line==<br />
<syntaxhighlight lang="python"><br />
python -m ifcopenshell.validate some_file.ifc<br />
</syntaxhighlight><br />
==Inside a script==<br />
It looks similar to command line way but you need to provide a logger (standard logger or json_logger as below).<br />
<syntaxhighlight lang="python"><br />
import ifcopenshell<br />
import ifcopenshell.validate<br />
<br />
ifc_file = ifcopenshell.open("some_file.ifc")<br />
json_logger = ifcopenshell.validate.json_logger()<br />
ifcopenshell.validate.validate(ifc_file, json_logger)<br />
json_logger.statements<br />
</syntaxhighlight><br />
=Date and time in IFC=<br />
Date and time conversion can be error prone. Fortunately IFC has chosen wide used definitions so standard python [https://docs.python.org/3/library/datetime.html datetime] and [https://docs.python.org/3/library/time.html time] modules have tools to handle most of them.<br />
==IfcTimeStamp==<br />
[https://standards.buildingsmart.org/IFC/RELEASE/IFC4/ADD2_TC1/HTML/link/ifctimestamp.htm IfcTimeStamp] is the elapsed number of seconds since 1 January 1970, 00:00:00 UTC. See [https://en.wikipedia.org/wiki/Unix_time wikipedia] for more detailed explanations. It is typically used to record when you create or modify an IFC object. Warning while python output a float, IFC expect an integer.<br />
<syntaxhighlight lang="python"><br />
import time<br />
# To store current time<br />
>>>int(time.time())<br />
1610829915<br />
# To convert it to datetime (UTC+1 in this example)<br />
>>> import datetime<br />
>>> datetime.date.fromtimestamp(0)<br />
datetime.date(1970, 1, 1, 1, 0)<br />
>>> datetime.date.fromtimestamp(1610829915)<br />
datetime.date(2021, 1, 16, 21, 45, 15)<br />
</syntaxhighlight><br />
<br />
==IfcDateTime==<br />
[https://standards.buildingsmart.org/IFC/RELEASE/IFC4/ADD2_TC1/HTML/link/ifcdatetime.htm IfcDateTime] is stored in ISO 8601 format : YYYY-MM-DDThh:mm:ss<br />
Convert back and forth :<br />
<syntaxhighlight lang="python"><br />
from datetime import datetime<br />
>>> dt = datetime.fromisoformat("2021-01-16T21:45:15")<br />
>>> dt<br />
datetime.datetime(2021, 1, 16, 21, 45, 15)<br />
>>> dt.isoformat()<br />
'2021-01-16T21:45:15'<br />
</syntaxhighlight><br />
==IfcDate==<br />
[https://standards.buildingsmart.org/IFC/RELEASE/IFC4/ADD2_TC1/HTML/link/ifcdate.htm IfcDate] is similar to IfcDateTime but without the time part : YYYY-MM-DD<br />
You can use <code>datetime.date</code> instead of <code>datetime.datetime</code> the same way.<br />
==IfcTime==<br />
[https://standards.buildingsmart.org/IFC/RELEASE/IFC4/ADD2_TC1/HTML/link/ifctime.htm IfcTime] is similar to IfcDateTime but without the date part : hh:mm:ss<br />
You can use <code>datetime.time</code> instead of <code>datetime.datetime</code> the same way.<br />
==IfcDuration==<br />
[https://standards.buildingsmart.org/IFC/RELEASE/IFC4/ADD2_TC1/HTML/link/ifcduration.htm IfcDuration] is used to store a time interval (eg. time to perform a task) in ISO 8601 format. There is apparently no ready to use standard python module to handle it. It can be handled using regular expressions. For format given as example in IFC documentation :<br />
<syntaxhighlight lang="python"><br />
>>> import re<br />
>>> re.match("P(\d+)Y(\d+)M(\d+)DT(\d+)H(\d+)M(\d+)S", "P2Y10M15DT10H30M20S").groups()<br />
('2', '10', '15', '10', '30', '20')<br />
</syntaxhighlight><br />
<br />
To handle all available formatting options defined in [https://en.wikipedia.org/wiki/ISO_8601#Durations ISO 8601] a more complex regular expression is required like following.<br />
[https://pythex.org/?regex=P(%3F%3A(%3FP%3Cyear%3E%5Cd%2B%3F%5B%2C%5C.%5D%3F%5Cd*)%5BY-%5D)%3F(%3F%3A(%3FP%3Cmonth%3E%5Cd%2B%3F%5B%2C%5C.%5D%3F%5Cd*)%5BM-%5D)%3F(%3F%3A(%3FP%3Cweek%3E%5Cd%2B%3F%5B%2C%5C.%5D%3F%5Cd*)W)%3F(%3F%3A(%3FP%3Cday%3E%5Cd%2B%3F%5B%2C%5C.%5D%3F%5Cd*)D%3F)%3F(%3F%3AT(%3F%3A(%3FP%3Chour%3E%5Cd%2B%3F%5B%2C%5C.%5D%3F%5Cd*)%5BH%3A%5D)%3F(%3F%3A(%3FP%3Cminute%3E%5Cd%2B%3F%5B%2C%5C.%5D%3F%5Cd*)%5BM%3A%5D)%3F(%3F%3A(%3FP%3Csecond%3E%5Cd%2B%3F%5B%2C%5C.%5D%3F%5Cd*)S%3F)%3F)%3F&test_string=P3Y6M4DT12H30M5S%0AP1M%0APT1M%0AP1DT12H%0AP0%2C5Y%0AP0.5Y%0APT36H%0AP1DT12H%0AP0003-06-04T12%3A30%3A05%0AP05Y%0AP0..5Y%0AP0%2C.5Y&ignorecase=0&multiline=0&dotall=0&verbose=0 You can test it on pythex].<br />
<br />
<code>P(?:(?P<year>\d+?[,\.]?\d*)[Y-])?(?:(?P<month>\d+?[,\.]?\d*)[M-])?(?:(?P<week>\d+?[,\.]?\d*)W)?(?:(?P<day>\d+?[,\.]?\d*)D?)?(?:T(?:(?P<hour>\d+?[,\.]?\d*)[H:])?(?:(?P<minute>\d+?[,\.]?\d*)[M:])?(?:(?P<second>\d+?[,\.]?\d*)S?)?)?</code><br />
<br />
==IfcCalendarDate==<br />
{{warning|Deprecated: IFC2X3 only}}<br />
Similar to <code>IfcDate</code> but in a different format. It has 3 attribute for day, month and year.<br />
<syntaxhighlight lang="python"><br />
>>> from datetime import date<br />
>>> import ifcopenshell<br />
>>> ifc = ifcopenshell.file(schema="IFC2X3")<br />
>>> ifc_date = ifc.createIfcCalendarDate(16, 1, 2021)<br />
>>> py_date = date(ifc_date.YearComponent, ifc_date.MonthComponent, ifc_date.DayComponent)<br />
>>> py_date<br />
datetime.date(2021, 1, 16)<br />
>>> ifc.createIfcCalendarDate(py_date.day, py_date.month, py_date.year)<br />
#4=IfcCalendarDate(16,1,2021)<br />
</syntaxhighlight><br />
<br />
=Samples from web=<br />
{| class="wikitable"<br />
!Subject<br />
!Language<br />
!Version<br />
!Additional infos<br />
|-<br />
| [https://academy.ifcopenshell.org/posts/ifcopenshell-optimizer-tutorial/ Optimize IFC files]<br />
| python<br />
| 0.6.0-0d93633<br />
|-<br />
| [https://academy.ifcopenshell.org/posts/calculate-differences-of-ifc-files-with-hashing/ Calculate Differences of IFC files with Hashing]<br />
| python<br />
| 0.6.0-0d93633<br />
|-<br />
|[https://pythoncvc.net/?p=851 Understanding placements in IFC using IfcOpenShell and FreeCAD]<br />
| python<br />
| 0.6.0a1<br />
| FreeCAD 0.18 git<br />
|-<br />
| [https://thinkmoult.com/using-ifcopenshell-parse-ifc-files-python.html Using IfcOpenShell to parse IFC files with Python]<br />
| python<br />
|-<br />
| [https://pythoncvc.net/?p=839 Read geometry as Boundary Representation in FreeCAD]<br />
| python<br />
| 0.6.0a1<br />
| FreeCAD 0.18 git<br />
|-<br />
| [https://pythoncvc.net/?p=822 Read IFC geometry as triangle meshes in FreeCAD]<br />
| python<br />
| 0.6.0a1<br />
| FreeCAD 0.18 git<br />
|-<br />
| [https://academy.ifcopenshell.org/posts/using-ifcopenshell-and-c%2B%2B-to-generate-alignments-through-the-ifc-4x1-schema/ Using IfcOpenShell and C++ to generate Alignments through the IFC 4×1 schema]<br />
| python/C++<br />
|-<br />
| [https://academy.ifcopenshell.org/posts/creating-a-simple-wall-with-property-set-and-quantity-information/ Creating a simple wall with property set and quantity information]<br />
| python<br />
|-<br />
| [https://academy.ifcopenshell.org/posts/using-ifcopenshell-and-pythonocc-to-generate-cross-sections-directly-from-an-ifc-file/ Using IfcOpenshell and pythonOCC to generate cross sections directly from an IFC file]<br />
| python<br />
| <= 0.6 ?<br />
| pythonOCC 0.16.0 ?<br />
|-<br />
|[https://academy.ifcopenshell.org/posts/using-the-parsing-functionality-of-ifcopenshell-interactively/ Using the parsing functionality of IfcOpenShell interactively]<br />
| python<br />
|-<br />
|[https://academy.ifcopenshell.org/posts/using-ifcopenshell-and-pythonocc-to-construct-new-geometry/ Using IfcOpenShell and pythonOCC to construct new geometry]<br />
| python<br />
| <= 0.6<br />
| pythonOCC 0.16.0<br />
|-<br />
| [https://github.com/IfcOpenShell/IfcOpenShell/tree/v0.6.0/src/examples Various ifc creation examples (little house, geometry etc…)]<br />
| C++<br />
|}<br />
<br />
[[Category:IfcOpenShell]]</div>Moulthttps://wiki.osarch.org/index.php?title=Home_of_OSArch&diff=4342Home of OSArch2021-11-18T23:47:36Z<p>Moult: /* Use Open Standards */</p>
<hr />
<div>__NOTOC__<br />
<br />
<div class="blurb" style="padding: 30px; border-radius: 10px; border: 1px solid #d2d2d2; border-bottom: 3px solid #d2d2d2;"><br />
<br />
<p style="float: right; margin: 0px;">[[File:Logo OSArch 128p.png]]</p><br />
<br />
<p style="font-size: 2rem; width: 80%; margin: 0px;"><br />
We help create the built environment with '''free software''', increased '''transparency''', and a more '''ethical''' approach. <br />
</p><br />
<br />
<p style="margin-bottom: 0px;">On this wiki, we collect and share everything we know about the free technology in our industry. Every page on this website was written by people just like you.</p><br />
<br />
</div><br />
<br />
<div class="row><br />
<br />
<div class="four columns"><br />
== Get Involved ==<br />
<br />
[[File:Get-involved.svg|class=homepage-icon|frameless|center]]<br />
<br />
Interested in OSArch initiatives, and why OSArch is so important to the design, construction, operation, and recycling of the built environment? See [[Open-Source Architecture Community|an introduction to what OSArch is all about]]. We are a strong and growing community.<br />
<br />
* Post questions in our [https://community.osarch.org/ Community Forum]<br />
* Meet us at our online [[Monthly Meetup]]<br />
* [[Donation_Directory|Donate]] to sustain some of the project we support<br />
* See and add yourself to our list of [[OSArch Supporters|OSArch supporter]]<br />
* See [[AECO Workflow Examples|past projects]] using free software and see [[Featured images]]<br />
* See more ways to [[How to contribute to OSArch|contribute to OSArch]]<br />
<br />
Right now, we're looking in particular for volunteers to help with these things. If you're up for it, post on the forums and let us know!<br />
<br />
* We need people to [[Outreach|help get the word out]] and manage the OSArch accounts on [https://twitter.com/OSArchOrg Twitter], [https://www.linkedin.com/in/osarch-org-121505200/ LinkedIn], [https://fosstodon.org/web/accounts/331798 Mastodon account] & [https://www.youtube.com/channel/UCoP6n8DdDajAM8YYDdFpQMQ Youtube].<br />
* We need people to help [[OSArch Curriculum|design a curriculum]] to teach about AEC tools and OpenBIM concepts.<br />
* We need help with important unfinished wiki pages. Anybody can edit!<br />
* And help with developement is of course the most important part so [[Create your first Blender add-on]] or [[Start coding for Blender]] today!<br />
</div><br />
<br />
<div class="four columns"><br />
<br />
== Explore Free Software ==<br />
<br />
[[File:Official gnu.svg|class=homepage-icon|frameless|center]]<br />
<br />
Did you know there's a growing list of over 100 free tools to help you do your job? Unlike proprietary software, [[free software]] will never make your digital work incompatible, obsolete, or force you into subscriptions. [[AEC Free Software directory|See the AECO Free Software Directory]].<br />
<br />
Begin your journey:<br />
<br />
* [[Getting started with 2D CAD drafting|Switch to QCAD and LibreCAD for 2D CAD drafting instead of depending on AutoCAD]]<br />
* [[:Category:BlenderBIM Add-on|Learn OpenBIM authoring with the BlenderBIM Add-on]]<br />
* [[:Category:FreeCAD|Learn solid 3D modeling and BIM model creation with FreeCAD]]<br />
* [[Code_Aster|Learn structural analysis with_Code Aster]]<br />
* [[Learn about environmental analysis]]<br />
<br />
Join us [https://community.osarch.org/discussions on the forum] so we can start these pages together:<br />
* [[Getting started with 2D visualisation|Learn 2D architectural visualisation with Krita and The GIMP instead of Photoshop]]<br />
* [[Getting started with 3D modeling|Learn freeform 3D modeling and visualisation with Blender]]<br />
* [[Learn lighting simulation with Radiance]]<br />
* [[Learn geospatial analysis with QGIS]]<br />
* [[Manage a project with OpenProject]]<br />
* [[Get started with OpenStreetMaps|Get started with OpenStreetMaps for open GIS data]]<br />
<br />
Do you want to dig deep in to AEC tech?<br />
<br />
* [[Sverchok|Learn visual node-based parametric design with Sverchok]]<br />
* [[:Category:IfcOpenShell|Learn OpenBIM & IFC programming using IfcOpenShell]]<br />
</div><br />
<br />
<div class="four columns"><br />
<br />
== Use Open Standards ==<br />
<br />
[[File:Open-standards.svg|class=homepage-icon|frameless|center]]<br />
<br />
Open technology and standards helps our digital tools interoperate and protect you against data expiry. See what's available at the [[AEC Open Data Standards Directory|Open Data Standards Directory]].<br />
<br />
* Learn about [[OpenBIM]]<br />
* Get sample files of [[AEC Open Data directory|Open Data]]<br />
* Learn about relevant [[Standards organizations]]<br />
* Read [[AEC academic paper directory|Academic Papers]] and [[AEC articles|external articles]]<br />
<br />
Learn about [[Industry Foundation Class (IFC)]] data concepts:<br />
<br />
* [[Industry Foundation Class (IFC)|An introduction to IFC]]<br />
* [[IFC classes|What is an IFC class]]<br />
* [[IFC concepts|How are concepts described in IFC]]<br />
* [[IFC projects and contexts|How is an IFC project defined]]<br />
* [[IFC attributes and properties|How does IFC store attributes and properties]]<br />
* [[IFC spatial tree|How spaces are broken down in IFC]]<br />
* [[IFC materials|How materials are stored in IFC]]<br />
* [[IFC geolocation|How georeferencing data is stored in IFC]]<br />
* [[IFC aggregates|How to group sub objects in IFC]]<br />
* [[IFC classifications|How IFC integrates with classification systems]]<br />
<br />
Delivering OpenBIM for facility management?<br />
<br />
* [[Construction Operations Building Information Exchange (COBie)|Learn about how COBie works]]<br />
* [[COBie definition of a maintainable asset|Read the COBie definition of a maintainable asset]]<br />
* [[Brick Schema|An introduction to Brickschema]]<br />
<br />
Learn how to specify data requirements with [[Model View Definitions (MVD)|MVDs]] and [[Using MicroMVDs for exchange requirements|MicroMVDs]] ([[:Category:Model_View_Definitions_(MVD)|all articles]]).<br />
<br />
Stuck with proprietary software? Learn best practices and workarounds to produce industry standards compliant data.<br />
<br />
* [[Revit setup|How to set up Revit for OpenBIM]]<br />
* [[Revit and IFC classes|How to export correct IFC classes from Revit]]<br />
* [[Revit and IFC Geometry|How to optimise IFC geometry output from Revit]]<br />
* [[Revit classifications|How to export classification data from Revit]]<br />
* [[Revit geolocation|How to geolocate models from Revit]]<br />
* [[Revit project metadata|How to define an OpenBIM project in Revit]]<br />
* [[Revit spatial hierarchy|How to organise IFC spaces in Revit]]<br />
* [[Revit type products|How to define IFC construction types in Revit]]<br />
* [[List of known invalid IFC practices|List of known invalid IFC practices]]<br />
</div><br />
<br />
</div><br />
<br />
To see a complete list of articles, check out the [[:Category:Directories|directories]] and [[:Category:Categories|categories]].<br />
<br />
{| class="wikitable gallery"<br />
| [[File:BlenderBIMAddonv0.0.200829.png|Steel structure (BlenderBIM Add-on)]]<br />
| [[File:OpenSourceHouse_Studiolada.png|The Open Source House (FreeCAD)]]<br />
| [[File:Wikilab_drawing.jpg|Documentation from the wikilab model (FreeCAD)]]<br />
| [[File:Code_aster_verification_mechanisms-loads.jpg|Verification Results (Code_Aster)]]<br />
| [[File:Quinta_Monroy.png|Quinta Monroy apartments (FreeCAD)]]<br />
|}<br />
<br />
{| class="wikitable<br />
|-<br />
| [[File:Heckert_gnu.transp.small.png|GNU Free Software|64px]]<br />
| "Open-source software (OSS) is a type of computer software in which source code is released under a license in which the copyright holder grants users the rights to use, study, change, and distribute the software to anyone and for any purpose." [https://en.wikipedia.org/wiki/Open-source_software -Wikipedia]<br />
| [[File:Osi_keyhole_300X300_90ppi_0.png|Open Source Initiative|64px]]<br />
|}</div>Moulthttps://wiki.osarch.org/index.php?title=Open-Source_Architecture_Community&diff=4175Open-Source Architecture Community2021-10-13T11:31:35Z<p>Moult: /* Identity */</p>
<hr />
<div>{| class="wikitable<br />
|-<br />
| [[File:Logo OSArch 128p.png]]<br />
| The [[Open-Source Architecture Community]] brings together like-minded users and developers who share a common goal: that the built environment can be designed, constructed, operated, and recycled with '''[https://en.wikipedia.org/wiki/Free_software free/libre software]''' and '''[https://en.wikipedia.org/wiki/Open_source open-source software]''' with increased '''transparency''', and a more '''ethical''' approach.<br />
| [[File:Osi_keyhole_300X300_90ppi_0.png|Open Source Initiative|64px]] <br />
| [[File:Heckert_gnu.transp.small.png|GNU Free Software|64px]]<br />
|}<br />
<br />
== The reason OSArch exists ==<br />
<br />
<div style="float: right; margin: 30px;"><youtube>https://www.youtube.com/watch?v=DK4zmfkp_pw</youtube></div><br />
<br />
The architecture, engineering, construction, and building operations industry has a large, systemic problem with its ability to collaborate digitally. The digital ecosystem largely consists of isolated digital silos, where each tool does not integrate well with other tools by design. Behind these tools are a small selection of monopoly software vendors with predatory business practices, forcing [https://www.gnu.org/proprietary/proprietary-incompatibility.html proprietary incompatibility], [https://www.gnu.org/proprietary/proprietary-obsolescence.html proprietary obsolescence], and [https://www.gnu.org/proprietary/proprietary-subscriptions.html proprietary subscriptions] onto users. There is also a lack of training material and knowledge sharing around digital standards. These problems enforce a culture onto the industry that our ability to manipulate the data about our built environment relies on what vendors who provide off-the-shelf software allow us to do. Resources are wasted on building workarounds and an ecosystem on top of this proprietary foundation, instead of focusing on what matters: working together to make a better built environment.<br />
<br />
The OSArch community aims to solve this problem, by providing support for a community and ecosystem of software that respects the digital freedom of the industry and its users. This digital freedom allows collaboration to occur, and is increasingly important as the industry and next generation of digitally savvy professionals leave academia to join us in our journey to improve the built environment. In particular, we help support four types of digital freedom, which are known as the [https://www.gnu.org/philosophy/free-sw.html.en four essential freedoms]. When the OSArch community talks about free software, we are not referring to price (which is a common misconception), we are talking about software that provides these four freedoms, of which price is not a factor. The freedoms are:<br />
<br />
# The freedom to use software as you wish for any purposes, whether it be educational, commercial, R&D, in any context with no time limit, no arbitrary vendor restrictions, or any other rules governing your usage.<br />
# The freedom to study how the software works, and change it so it can do what you want. We want to promote digital learning and the freedom to customise software for your workflows, your data, your environment, with no restrictions.<br />
# The freedom to redistribute copies so you can help others. We need our tools to be shared to work together on the built environment. Sharing tools with others helps upskill and improve the abilities of the entire industry.<br />
# The freedom to distribute copies of your modified versions to others. By doing this you can give the whole community a chance to benefit from your changes.<br />
<br />
A precondition to provide these four freedoms is to ensure that we are able to do all the work we need to do in the AEC industry using open source software. Satisfying this precondition means the license of the software must be an [https://www.gnu.org/licenses/license-list.html FSF-approved license] or an [https://opensource.org/licenses/category OSI-approved license]. Access to, and the freedom to change this code empowers and puts the users (that's you!) in control over the data in the built environment, instead of vendors.<br />
<br />
== How OSArch supports the AEC industry ==<br />
<br />
We provide support in five ways:<br />
<br />
# We help provide marketing and awareness for free software in the AEC industry. We develop consistent branding, and a network of grassroots sharing on free software initiatives.<br />
# We provide online community groups to ask questions and discuss with others in the community about free software in AEC across multiple disciplines and tools, unrestricted to a single software, through a variety of channels. These include live chat, online forums, email contact, and virtual meetups.<br />
# We provide, collect, and organise knowledge sharing material about free software in AEC. This includes written documentation, academic articles, video tutorials, training material, and this wiki that you are reading right now.<br />
# We build free software. Some members of OSArch are developers who write code and create tools in response to industry needs.<br />
# We make connections between developers and users, to support developers and users. We explore ways for developers to help one another by integrating software, or ways for users to experiment with new technologies that aren't yet widely available in the commercial market, or bring attention to where resources are needed.<br />
<br />
All this support is provided by volunteers who are also industry professionals, just like you. See [[how to contribute to OSArch]] and get involved!<br />
<br />
=Our Mission and Values=<br />
<br />
With a diverse community, there are discussions ([https://community.osarch.org/discussion/168/vision-for-osarch/ Vision for OSArch], [https://community.osarch.org/discussion/59/osarch-mission-statement/p1 OSArch Mission Statement]) on the [https://community.osarch.org OSArch Community Forum] about expanding and clarifying our mission and values. However, there are some missions and values which resonate, which we share here.<br />
<br />
We are a platform to showcase, share, test and develop FOSS tools and workflows for the built environment.<br />
<br />
==Bringing people together==<br />
<br />
We're creating a place where everyone involved in a buildings conception and life can meet, inspire and collaborate to develop empowering digital tools.<br />
<br />
We support people in creating their own tools and services, for an industry without compromise their private data.<br />
<br />
We love technology. Our primary focus is tools for real people to use in real life workflows - from basic conceptual design tools for non-professionals to high tech digital models for design analysis and documentation.<br />
<br />
==Open development==<br />
<br />
We reject proprietary file formats and processes. We support open collaboration between all software platforms including interfacing with proprietary platforms to liberate users data.<br />
<br />
We support tools and processes designed to put the users the projects first. We respect the creators ownership of their data and privacy. We advocate open formats for project longevity and transparency.<br />
<br />
Our vision is for cooperation between software systems each of which contribute with what they do best unhindered by commercial barriers. Central to that vision is open file formats and open source / libre software moving data between software platforms without loss of fidelity.<br />
<br />
==Knowledge==<br />
<br />
We share our knowledge about opening up the AEC space to more democratic tools and processes.<br />
<br />
We contribute to documenting relevant software & processes.<br />
<br />
We support people making the best choices with the best information and tools that respect their rights and freedoms.<br />
<br />
<br />
==Identity==<br />
<br />
The final round of our community logo design process was closed on 2nd April 2021.<br />
[[File:Logo 2.0.png|frame|center|Official OSArch logo]]<br />
<gallery><br />
File:Logo OSArch 128p.png|frame|center|Red curve on transparent background, 128px<br />
File:Logo_OSArch_128p_whitebg.png|frame|center|Red curve on white background, 128px<br />
File:Logo_OSArch_512p_whitebg.png|frame|center|Red curve on white background, 512px<br />
File:Logo OSArch 64p.png|frame|center|Red circle with transparent curve, 64px <br />
File:OSArch logo.svg|frame|center|Inkscape SVG with all versions<br />
File:Favicon.ico.ico|frame|center|Favicon: Red circle with transparent curve and background<br />
File:Favicon-red-curve-transparent-bg-multires.ico|frame|center|Favicon: Red curve on transparent background<br />
File:Favicon-red-curve-white-bg-multires.ico|frame|center|Favicon: Red curve on white background<br />
</gallery></div>Moulthttps://wiki.osarch.org/index.php?title=File:Logo_2.0.png&diff=4174File:Logo 2.0.png2021-10-13T11:31:01Z<p>Moult: </p>
<hr />
<div></div>Moulthttps://wiki.osarch.org/index.php?title=File:Logo_OSArch_128p.png&diff=4173File:Logo OSArch 128p.png2021-10-13T11:28:13Z<p>Moult: Moult uploaded a new version of File:Logo OSArch 128p.png</p>
<hr />
<div>128p version of the OSArch logo</div>Moulthttps://wiki.osarch.org/index.php?title=File:Logo_OSArch_128p_whitebg.png&diff=4172File:Logo OSArch 128p whitebg.png2021-10-13T11:27:57Z<p>Moult: Moult uploaded a new version of File:Logo OSArch 128p whitebg.png</p>
<hr />
<div>== Summary ==<br />
on white background</div>Moulthttps://wiki.osarch.org/index.php?title=File:Logo_OSArch_512p_whitebg.png&diff=4171File:Logo OSArch 512p whitebg.png2021-10-13T11:27:32Z<p>Moult: Moult uploaded a new version of File:Logo OSArch 512p whitebg.png</p>
<hr />
<div></div>Moulthttps://wiki.osarch.org/index.php?title=MicroMVDs_for_exchange_requirements/Construction_sequencing_MicroMVD&diff=4167MicroMVDs for exchange requirements/Construction sequencing MicroMVD2021-10-11T22:23:21Z<p>Moult: </p>
<hr />
<div>The following [[Using MicroMVDs for exchange requirements|MicroMVD]] vocabulary can be used for construction sequencing data.<br />
<br />
<pre><br />
Feature: Construction sequencing<br />
<br />
In order to analyse construction sequencing schedules<br />
For construction sequencers and site managers<br />
Specific model metadata and structure is required<br />
<br />
Scenario: All piles are identifiable and contain data<br />
* All piles must be assigned to a concrete or steel material<br />
* All piles must have their type assigned with one of the following values:<br />
| Value |<br />
| BORED |<br />
| DRIVEN |<br />
<br />
Scenario: All multistorey elements are divided per storey<br />
* All walls are limited to the height of their current storey.<br />
* All columns are limited to the height of their current storey.<br />
</pre><br />
<br />
You can fill out the variables using the guide below.<br />
<br />
{| class="wikitable"<br />
! Variable<br />
! Example<br />
! Description<br />
|-<br />
| <code>{guid}</code><br />
| 28q3AgmxP5cepIweO5Of$o<br />
| This is a 22 character GlobalId for a particular IFC element.<br />
|}</div>Moulthttps://wiki.osarch.org/index.php?title=MicroMVDs_for_exchange_requirements/Levels_MicroMVD&diff=4166MicroMVDs for exchange requirements/Levels MicroMVD2021-10-11T22:20:14Z<p>Moult: </p>
<hr />
<div>The following [[Using MicroMVDs for exchange requirements|MicroMVD]] vocabulary can be used to ensure IFC data includes grids.<br />
<br />
<pre><br />
Feature: Levels<br />
<br />
In order to locate objects<br />
For all model coordinators, costers, schedulers, and recipients of the final built environment<br />
Levels must be present<br />
<br />
Scenario: Ensure that levels are present<br />
* The building with name "{name}" contains storeys<br />
* A datum storey must not exist<br />
* All building "{name}" storeys specify an elevation for the SSL<br />
* All building "{name}" storeys specify an elevation for the FFL<br />
* All building "{name}" storeys specify an elevation or Z position.<br />
</pre><br />
<br />
You can fill out the variables using the guide below.<br />
<br />
{| class="wikitable"<br />
! Variable<br />
! Example<br />
! Description<br />
|-<br />
| <code>{name}</code><br />
| 123FOO<br />
| The name of the building<br />
|}</div>Moulthttps://wiki.osarch.org/index.php?title=AEC_Open_Data_directory&diff=4164AEC Open Data directory2021-10-07T03:01:33Z<p>Moult: /* Open Data directories */</p>
<hr />
<div>== Open Data directories ==<br />
<br />
{| class="wikitable sortable"<br />
! <br />
! Name<br />
! Description<br />
! License<br />
|-<br />
| [[File:Edp-logo.png|64px]]<br />
| [https://www.europeandataportal.eu European Data Portal]<br />
| The European Data Portal harvests the metadata of Public Sector Information available on public data portals across European countries. Information regarding the provision of data and the benefits of re-using data is also included.<br />
| License varies<br />
|-<br />
| [[File:Duraark.png|64px]]<br />
| [http://duraark.eu/data-repository/#ifc Durable Architectural Knowledge]<br />
| (site down november 2020 [[User:Duncan|Duncan]] ([[User talk:Duncan|talk]]) 18:51, 30 November 2020 (UTC)) <br />
This site contains IFC Models and Point Clouds ([[E57]]), RDF Metadata, Data schemes developed within DURAARK, Application Programming Interfaces (APIs) – Services developed by DURAARK to access and handle architectural data<br />
| CC0 1.0<br />
|-<br />
| <br />
| [https://github.com/IfcOpenShell/files IfcOpenShell Public Test Files]<br />
| This is a collection of IFC files that are useful for testing IfcOpenShell.<br />
| <br />
|-<br />
|<br />
| [https://github.com/OpeningDesign OpeningDesign Projects]<br />
| OpeningDesign is a US-based architectural practice where all projects are conducted out-in-the-open. That is, during the development of any one project, all the content is hosted publicly on either Github or Gitlab and is open source. All team communication is conducted through public Riot.im chat rooms.<br />
| CC-BY-SA 4.0<br />
|-<br />
|<br />
| [https://github.com/buds-lab/the-building-data-genome-project The building data genome project ]<br />
| "It is an open data set from 507 non-residential buildings that includes hourly whole building electrical meter data for one year. Each of the buildings has meta data such as or area, weather, and primary use type. This data set can be used to benchmark various statistical learning algorithms and other data science techniques. It can also be used simply as a teaching or learning tool to practice dealing with measured performance data from large numbers of non-residential buildings." <br />
| MIT<br />
|-<br />
|<br />
| [https://github.com/buildingSMART/Sample-Test-Files Sample IFC Test Files]<br />
| Sample files of various formats and schema versions for testing implementations. Small files testing one things at a time.<br />
| [https://creativecommons.org/licenses/by/4.0/ CC-BY-4.0]<br />
|-<br />
|<br />
| [http://openifcmodel.cs.auckland.ac.nz/ Open IFC Model Repository]<br />
| The aim of this repository a the University of Auckland, New Zealand, iss for it to be a location from which a wide variety of well analysed IFC-based data files can be sourced. There are over 100 IFC files.<br />
| ?<br />
|-<br />
|}<br />
<br />
=National Directories=<br />
<br />
{| class="wikitable sortable"<br />
! <br />
! Name<br />
! Description<br />
! License<br />
|-<br />
| -<br />
| [https://www.opendata.dk Open Data DK]<br />
| Open Data DK is an association of danish councils and regions who have cooperated since 2016 to open their data via a shared data platform. It includes a variety of data from council infrastructure to socioeconomic indicators. The aim is to create transparency, support growth and innovation, and make the most of the data already available. Data includes [https://www.opendata.dk/search?q=tags:bymodel%20byer data for some cities] but is mostly in DWG/DXF format. (The site is only in Danish)<br />
| License varies by dataset. Mostly commons style licenses.<br />
|-<br />
| [[File:Pdoc_logo.png]]<br />
| [https://www.pdok.nl/ pdoc]<br />
| pdoc hosts open access geodata for Holland<br />
| License varies<br />
|-<br />
| logo<br />
| [https://nsw.digitaltwin.terria.io/ NSW Digital Twin]<br />
| The Australian state of New South Wales has a " ... Digital Twin Minimum Viable Product (MVP) platform aims to respond to the NSW State Infrastructure Strategy by developing a 4D (3D+time) Foundation Spatial Data Framework. This includes providing presentation capability which allows visualisation and interrogation of 3D and 4D data models. The goal is to help the NSW Government with infrastructure assets planning and management, integration with land use planning, data collaboration, and sharing."<br />
| ?<br />
|-<br />
| logo<br />
| [https://ual.sg/post/2020/06/24/guide-for-open-urban-data-in-singapore/ Open Urban Data from Singapore]<br />
| Urban Analytics Lab (Singapore) curated inventory of data relevant for geospatial and urban analyses.<br />
| ?<br />
|-<br />
| logo<br />
| [https://www.3dbag.nl Netherland]<br />
| 3D viewer and downloads for the whole of the Netherlands in CityJSON or raw data<br />
| [https://www.3dbag.nl/en/download CC-BY 4.0]<br />
|-<br />
|}<br />
<br />
<br />
<br />
[[Category:Directories]]</div>Moulthttps://wiki.osarch.org/index.php?title=IfcOpenShell_code_examples&diff=4116IfcOpenShell code examples2021-09-04T23:28:27Z<p>Moult: /* Geometry processing */</p>
<hr />
<div>{{Template:Start coding}}<br />
{{Template:IfcOpenShell}}<br />
Before getting started, you may be interested in [[Using the Python console with BlenderBIM Add-on]], to quickly install all the software and development environment you need for writing and running code, without any administrator privileges required. You may also find it useful watching [https://www.youtube.com/watch?v=WZPNaAM9ZuQ this video] which is complementary.<br />
<br />
=Crash course=<br />
<br />
To load a file, you'll need to import IfcOpenShell and store the IFC file in a variable. We'll use the variable <code>ifc</code>. The <code>ifc</code> will be then used throughout.<br />
<br />
<syntaxhighlight lang="python"><br />
import ifcopenshell<br />
ifc = ifcopenshell.open('/path/to/your/file.ifc')<br />
</syntaxhighlight><br />
<br />
Let's see what IFC schema we are using:<br />
<br />
<syntaxhighlight lang="python"><br />
print(ifc.schema) # May return IFC2X3 or IFC4<br />
</syntaxhighlight><br />
<br />
Let's get the first piece of data in our IFC file:<br />
<br />
<syntaxhighlight lang="python"><br />
print(ifc.by_id(1))<br />
</syntaxhighlight><br />
<br />
But getting data from beginning to end isn't too meaningful to humans. What if we knew a <code>GlobalId</code> value instead?<br />
<br />
<syntaxhighlight lang="python"><br />
print(ifc.by_guid('0EI0MSHbX9gg8Fxwar7lL8'))<br />
</syntaxhighlight><br />
<br />
If we're not looking specifically for a single element, perhaps let's see how many walls are in our file, and count them:<br />
<br />
<syntaxhighlight lang="python"><br />
walls = ifc.by_type('IfcWall')<br />
print(len(walls))<br />
</syntaxhighlight><br />
<br />
Once we have an element, we can see what IFC class it is:<br />
<br />
<syntaxhighlight lang="python"><br />
wall = ifc.by_type('IfcWall')[0]<br />
print(wall.is_a()) # Returns 'IfcWall'<br />
</syntaxhighlight><br />
<br />
You can also test if it is a certain class, as well as check for parent classes too:<br />
<br />
<syntaxhighlight lang="python"><br />
print(wall.is_a('IfcWall')) # Returns True<br />
print(wall.is_a('IfcElement')) # Returns True<br />
print(wall.is_a('IfcWindow')) # Returns False<br />
</syntaxhighlight><br />
<br />
Let's quickly check the STEP ID of our element:<br />
<br />
<syntaxhighlight lang="python"><br />
print(wall.id())<br />
</syntaxhighlight><br />
<br />
Let's get some attributes of an element. IFC attributes have a particular order. We can access it just like a list, so let's get the first and third attribute:<br />
<br />
<syntaxhighlight lang="python"><br />
print(wall[0]) # The first attribute is the GlobalId<br />
print(wall[2]) # The third attribute is the Name<br />
</syntaxhighlight><br />
<br />
Knowing the order of attributes is boring and technical. We can access them by name too:<br />
<br />
<syntaxhighlight lang="python"><br />
print(wall.GlobalId)<br />
print(wall.Name)<br />
</syntaxhighlight><br />
<br />
Getting attributes one by one is tedious. Let's grab them all:<br />
<br />
<syntaxhighlight lang="python"><br />
print(wall.get_info()) # Gives us a dictionary of attributes, such as {'id': 8, 'type': 'IfcWall', 'GlobalId': '2_qMTAIHrEYu0vYcqK8cBX', ... }<br />
</syntaxhighlight><br />
<br />
Let's see all the properties and quantities associated with this wall:<br />
<br />
<syntaxhighlight lang="python"><br />
import ifcopenshell.util<br />
import ifcopenshell.util.element<br />
print(ifcopenshell.util.element.get_psets(wall))<br />
</syntaxhighlight><br />
<br />
Some attributes are special, called "inverse attributes". They happen when another element is referencing our element. They can reference it for many reasons, like to define a relationship, such as if they create a void in our wall, join our wall, or define a quantity take-off value for our wall, among others. Just treat them like regular attributes:<br />
<br />
<syntaxhighlight lang="python"><br />
print(wall.IsDefinedBy)<br />
</syntaxhighlight><br />
<br />
Perhaps we want to see all elements which are referencing our wall?<br />
<br />
<syntaxhighlight lang="python"><br />
print(ifc.get_inverse(wall))<br />
</syntaxhighlight><br />
<br />
Let's do the opposite, let's see all the elements which our wall references instead:<br />
<br />
<syntaxhighlight lang="python"><br />
print(ifc.traverse(wall))<br />
print(ifc.traverse(wall, max_levels=1)) # Or, let's just go down one level deep<br />
</syntaxhighlight><br />
<br />
If you want to modify data, just assign it to the relevant attribute:<br />
<br />
<syntaxhighlight lang="python"><br />
wall.Name = 'My new wall name'<br />
</syntaxhighlight><br />
<br />
You can also generate new <code>GlobalId</code>s:<br />
<br />
<syntaxhighlight lang="python"><br />
wall.GlobalId = ifcopenshell.guid.new()<br />
</syntaxhighlight><br />
<br />
After modifying some IFC data, you can save it to a new IFC-SPF file:<br />
<br />
<syntaxhighlight lang="python"><br />
ifc.write('/path/to/a/new.ifc')<br />
</syntaxhighlight><br />
<br />
You can generate a new IFC from scratch too, instead of reading an existing one:<br />
<br />
<syntaxhighlight lang="python"><br />
ifc = ifcopenshell.file()<br />
# Or if you want a particular schema:<br />
ifc = ifcopenshell.file(schema='IFC4')<br />
</syntaxhighlight><br />
<br />
You can create new IFC elements, and add it either to an existing or newly created IFC file object:<br />
<br />
<syntaxhighlight lang="python"><br />
new_wall = ifc.createIfcWall() # Will return #1=IfcWall($,$,$,$,$,$,$,$,$) - notice all of the attributes are blank!<br />
print(ifc.by_type('IfcWall')) # Will return a list with our wall in it: [#1=IfcWall($,$,$,$,$,$,$,$,$)]<br />
</syntaxhighlight><br />
<br />
Alternatively, you can also use this way to create new elements:<br />
<br />
<syntaxhighlight lang="python"><br />
ifc.create_entity('IfcWall')<br />
</syntaxhighlight><br />
<br />
Specifying more arguments lets you fill in attributes while creating the element instead of assigning them separately. You specify them in the order of the attributes.<br />
<br />
<syntaxhighlight lang="python"><br />
ifc.create_entity('IfcWall', ifcopenshell.guid.new()) # Gives us #1=IfcWall('0EI0MSHbX9gg8Fxwar7lL8',$,$,$,$,$,$,$,$)<br />
</syntaxhighlight><br />
<br />
Again, knowing the order of attributes is difficult, so you can use keyword arguments instead:<br />
<br />
<syntaxhighlight lang="python"><br />
ifc.create_entity('IfcWall', GlobalId=ifcopenshell.guid.new(), Name='Wall Name') # Gives us #1=IfcWall('0EI0MSHbX9gg8Fxwar7lL8',$,'Wall Name',$,$,$,$,$,$)<br />
</syntaxhighlight><br />
<br />
Sometimes, it's easier to expand a dictionary:<br />
<br />
<syntaxhighlight lang="python"><br />
data = {<br />
'GlobalId': ifcopenshell.guid.new(),<br />
'Name': 'Wall Name'<br />
}<br />
ifc.create_entity('IfcWall', **data)<br />
</syntaxhighlight><br />
<br />
Some attributes of an element aren't just text, they may be a reference to another element. Easy:<br />
<br />
<syntaxhighlight lang="python"><br />
wall = ifc.createIfcWall()<br />
wall.OwnerHistory = ifc.createIfcOwnerHistory()<br />
</syntaxhighlight><br />
<br />
What if we already have an element from one IFC file and want to add it to another?<br />
<br />
<syntaxhighlight lang="python"><br />
wall = ifc.by_type('IfcWall')[0]<br />
new_ifc = ifcopenshell.file()<br />
new_ifc.add(wall)<br />
</syntaxhighlight><br />
<br />
Fed up with an object? Let's delete it:<br />
<br />
<syntaxhighlight lang="python"><br />
ifc.remove(wall)<br />
</syntaxhighlight><br />
<br />
=Geometry processing=<br />
<br />
The usage of IfcOpenShell for geometry processing is currently considered to be moderate to advanced. There are two approaches to processing geometry. One approach is to traverse the <code>Representation</code> attribute of the IFC element, and parse it yourself. This requires an in-depth understanding of IFC geometric representations, as well as its many caveats with units and transformations, but can be very simple to extract specific types of geometry. The second approach is to use IfcOpenShell's shape processing features, which will convert almost all IFC representations into a triangulated mesh. Regardless of the source format, once it is in a mesh representation, you may use standard mesh geometry processing algorithms to analyse the geometry. This makes it easier to write generic code for any representation, but may be harder to extract certain geometric features.<br />
<br />
Note: this article is a work in progress.<br />
<br />
TODO: talk about [https://github.com/IfcOpenShell/IfcOpenShell/issues/866 naming in ids].<br />
<br />
<syntaxhighlight lang="python"><br />
import multiprocessing<br />
import ifcopenshell<br />
import ifcopenshell.geom<br />
<br />
try:<br />
ifc_file = ifcopenshell.open('/path/to/your/file.ifc')<br />
except:<br />
print(ifcopenshell.get_log())<br />
else:<br />
settings = ifcopenshell.geom.settings()<br />
iterator = ifcopenshell.geom.iterator(settings, ifc_file, multiprocessing.cpu_count())<br />
if iterator.initialize():<br />
while iterator.next():<br />
shape = iterator.get()<br />
element = ifc_file.by_guid(shape.guid)<br />
faces = shape.geometry.faces # Indices of vertices per triangle face e.g. [f1v1, f1v2, f1v3, f2v1, f2v2, f2v3, ...]<br />
verts = shape.geometry.verts # X Y Z of vertices in flattened list e.g. [v1x, v1y, v1z, v2x, v2y, v2z, ...]<br />
materials = shape.geometry.materials # Material names and colour style information that are relevant to this shape<br />
material_ids = shape.geometry.material_ids # Indices of material applied per triangle face e.g. [f1m, f2m, ...]<br />
<br />
# Since the lists are flattened, you may prefer to group them per face like so depending on your geometry kernel<br />
grouped_verts = [[verts[i], verts[i + 1], verts[i + 2]] for i in range(0, len(verts), 3)]<br />
grouped_faces = [[faces[i], faces[i + 1], faces[i + 2]] for i in range(0, len(faces), 3)]<br />
</syntaxhighlight><br />
<br />
=IFC Query Syntax=<br />
<br />
Sometimes, you'd like to query an IFC file for a series of elements. It is possible to write this out manually, by means of functions like <code>by_type()</code> and <code>if</code> statements, and <code>for</code> loops. However, a shorthand query syntax has been invented that makes this process much easier. This is made available in the <code>ifcopenshell.util.selector</code> module.<br />
<br />
In this simple example below, we use the <code>#</code> and <code>.</code> prefix to our query tells it that we want to search by IFC <code>GlobalId</code> and class type respectively. Whitespace is optional in queries, but is used in these examples for readability.<br />
<br />
<syntaxhighlight lang="python"><br />
import ifcopenshell.util<br />
from ifcopenshell.util.selector import Selector<br />
<br />
ifc = ifcopenshell.open('/path/to/your/file.ifc')<br />
selector = Selector()<br />
element = selector.parse(ifc, '#2MLFd4X2f0jRq28Dvww1Vm') # Equivalent to ifc.by_guid('2MLFd4X2f0jRq28Dvww1Vm')<br />
walls = selector.parse(ifc, '.IfcWall') # This is equivalent to ifc.by_type('IfcWall')<br />
</syntaxhighlight><br />
<br />
It is also possible to search by any attribute:<br />
<br />
<syntaxhighlight lang="python"><br />
# This is equivalent to searching by GlobalId<br />
elements = selector.parse(ifc, '.IfcSlab[GlobalId = "2MLFd4X2f0jRq28Dvww1Vm"]')<br />
<br />
# This finds all slabs with "Precast" (case-sensitive) in the Name<br />
elements = selector.parse(ifc, '.IfcSlab[Name *= "Precast"]')<br />
<br />
# This finds all slabs which have a quantified net volume greater than 10 units<br />
elements = selector.parse(ifc, '.IfcSlab[Qto_SlabBaseQuantities.NetVolume > "10"]')<br />
<br />
# This finds all walls which have a particular fire rating property<br />
elements = selector.parse(ifc, '.IfcWall[Pset_WallCommon.FireRating = "2HR"]')<br />
</syntaxhighlight><br />
<br />
You can also search by spatial containment using the <code>@</code> symbol, for example:<br />
<br />
<syntaxhighlight lang="python"><br />
# If 0ehnsYoIDA7wC8yu69IDjv is the GlobalId of an IfcBuildingStorey, this gets all of the elements in that storey.<br />
elements = selector.parse(ifc, '@ #0ehnsYoIDA7wC8yu69IDjv')<br />
</syntaxhighlight><br />
<br />
Or by type using the <code>*</code> symbol:<br />
<br />
<syntaxhighlight lang="python"><br />
# If 1uVUwUxTX9Jg1NHVw5KZhI is the GlobalId of an IfcTypeElement, this gets all of the elements of that type.<br />
elements = selector.parse(ifc, '* #1uVUwUxTX9Jg1NHVw5KZhI')<br />
</syntaxhighlight><br />
<br />
You can use <code>AND</code> and <code>OR</code> statements, using the <code>&</code> and <code>|</code> symbols respectively:<br />
<br />
<syntaxhighlight lang="python"><br />
# This gets all the 2HR fire rated walls in a particular building storey:<br />
elements = selector.parse(ifc, '@ #0ehnsYoIDA7wC8yu69IDjv & .IfcWall[Pset_WallCommon.FireRating = "2HR"]')<br />
<br />
# This is equivalent to walls = ifc.by_type('IfcWall') + ifc.by_type('IfcSlab'), i.e. all walls and slabs<br />
elements = selector.parse(ifc, '.IfcWall | .IfcSlab')<br />
</syntaxhighlight><br />
<br />
You can also use parenthesis to group queries and combine them:<br />
<br />
<syntaxhighlight lang="python"><br />
# This gets all walls and slabs in a particular building storey<br />
elements = selector.parse(ifc, '@ #0ehnsYoIDA7wC8yu69IDjv & ( .IfcWall | .IfcSlab )')<br />
</syntaxhighlight><br />
<br />
<syntaxhighlight lang="python"><br />
# This gets all walls and slabs in a particular space (if IfcRelSpaceBoundary exist)<br />
elements = selector.parse(ifc, '@@ .IfcSpace & ( .IfcWall | .IfcSlab )')<br />
</syntaxhighlight><br />
<br />
<br />
=Exploring IFC schema=<br />
Get Schema :<br />
<syntaxhighlight lang="python"><br />
import ifcopenshell<br />
schema = ifcopenshell.ifcopenshell_wrapper.schema_by_name("IFC4")<br />
</syntaxhighlight><br />
<br />
Explore class attributes :<br />
<syntaxhighlight lang="python"><br />
>>> ifc_pipe = schema.declaration_by_name("IfcPipeSegment")<br />
>>> ifc_pipe.all_attributes()<br />
(<attribute GlobalId: <type IfcGloballyUniqueId: <string>>>,<br />
<attribute OwnerHistory?: <entity IfcOwnerHistory>>,<br />
<attribute Name?: <type IfcLabel: <string>>>,<br />
<attribute Description?: <type IfcText: <string>>>,<br />
<attribute ObjectType?: <type IfcLabel: <string>>>,<br />
<attribute ObjectPlacement?: <entity IfcObjectPlacement>>,<br />
<attribute Representation?: <entity IfcProductRepresentation>>,<br />
<attribute Tag?: <type IfcIdentifier: <string>>>,<br />
<attribute PredefinedType?: <enumeration IfcPipeSegmentTypeEnum: (CULVERT, FLEXIBLESEGMENT, GUTTER, NOTDEFINED, RIGIDSEGMENT, SPOOL, USERDEFINED)>>)<br />
<br />
>>> ifc_pipe.attribute_count()<br />
9<br />
<br />
>>> ifc_pipe.attribute_by_index(0)<br />
<attribute GlobalId: <type IfcGloballyUniqueId: <string>>><br />
<br />
>>> ifc_pipe.attribute_index("Description")<br />
3<br />
<br />
>>> predefined_type = ifc_pipe.attribute_by_index(8)<br />
>>> predefined_type.name()<br />
'PredefinedType'<br />
<br />
>>> predefined_type.optional()<br />
True<br />
<br />
>>> predefined_type.type_of_attribute()<br />
<enumeration IfcPipeSegmentTypeEnum: (CULVERT, FLEXIBLESEGMENT, GUTTER, NOTDEFINED, RIGIDSEGMENT, SPOOL, USERDEFINED)><br />
<br />
# from name you can then recursively explore how create an entity as described above<br />
>>> predefined_type.type_of_attribute().declared_type().name()<br />
'IfcPipeSegmentTypeEnum'<br />
</syntaxhighlight><br />
<br />
Get supertype :<br />
<syntaxhighlight lang="python"><br />
>>> ifc_pipe.supertype()<br />
<entity IfcFlowSegment><br />
</syntaxhighlight><br />
<br />
Get subtypes :<br />
<syntaxhighlight lang="python"><br />
>>> super_type = ifc_pipe.supertype()<br />
>>> super_type.subtypes()<br />
(<entity IfcCableCarrierSegment>,<br />
<entity IfcCableSegment>,<br />
<entity IfcDuctSegment>,<br />
<entity IfcPipeSegment>)<br />
</syntaxhighlight><br />
<br />
=Property and quantity sets (Pset and Qto)=<br />
First import util for psets and qtos and initialise main class with schema name:<br />
<syntaxhighlight lang="python"> <br />
>>> import ifcopenshell.util.pset<br />
>>> from ifcopenshell import util<br />
>>> pset_qto = util.pset.PsetQto("IFC4")<br />
</syntaxhighlight><br />
<br />
Get all applicable psets/qtos names for a certain class :<br />
<syntaxhighlight lang="python"> <br />
>>> pset_qto.get_applicable_names("IfcMaterial")<br />
['Pset_MaterialCombustion',<br />
'Pset_MaterialCommon',<br />
'Pset_MaterialConcrete',<br />
'Pset_MaterialEnergy',<br />
'Pset_MaterialFuel',<br />
'Pset_MaterialHygroscopic',<br />
'Pset_MaterialMechanical',<br />
'Pset_MaterialOptical',<br />
'Pset_MaterialSteel',<br />
'Pset_MaterialThermal',<br />
'Pset_MaterialWater',<br />
'Pset_MaterialWood',<br />
'Pset_MaterialWoodBasedBeam',<br />
'Pset_MaterialWoodBasedPanel']<br />
</syntaxhighlight><br />
<br />
You can also get a list of all applicable pset/qto templates to get more information:<br />
<syntaxhighlight lang="python"> <br />
>>> pset_qto.get_applicable("IfcMaterial")[0]<br />
#22772=IfcPropertySetTemplate('3Eppg0qUmHuO00025QrE$V',$,'Pset_MaterialCommon','A set of general material properties.',.PSET_TYPEDRIVENOVERRIDE.,'IfcMaterial',(#22775,#22778,#22781))<br />
</syntaxhighlight><br />
<br />
You can also retrieve a standard Pset by name:<br />
<syntaxhighlight lang="python"> <br />
>>> pset_template = pset_qto.get_by_name("Pset_MaterialCommon")<br />
>>> pset_template<br />
#22772=IfcPropertySetTemplate('3Eppg0qUmHuO00025QrE$V',$,'Pset_MaterialCommon','A set of general material,'IfcMaterial',(#22775,#22778,#22781))<br />
>>> pset_template.get_info()<br />
{'id': 22772,<br />
'type': 'IfcPropertySetTemplate',<br />
'GlobalId': '3Eppg0qUmHuO00025QrE$V',<br />
'OwnerHistory': None,<br />
'Name': 'Pset_MaterialCommon',<br />
'Description': 'A set of general material properties.',<br />
'TemplateType': 'PSET_TYPEDRIVENOVERRIDE',<br />
'ApplicableEntity': 'IfcMaterial',<br />
'HasPropertyTemplates': (#22775=IfcSimplePropertyTemplate('3IOi60qUmHuO00025QrE$V',$,'MolecularWeight','Molecular weight of material (typically gas).',.P_SINGLEVALUE.,'IfcMolecularWeightMeasure','',$,$,$,$,.READWRITE.),<br />
#22778=IfcSimplePropertyTemplate('3OMAA0qUmHuO00025QrE$V',$,'Porosity','The void fraction of the total volume occupied by material (Vbr - Vnet)/Vbr.',.P_SINGLEVALUE.,'IfcNormalisedRatioMeasure','',$,$,$,$,.READWRITE.),<br />
#22781=IfcSimplePropertyTemplate('3TjUq0qUmHuO00025QrE$V',$,'MassDensity','Material mass density.',.P_SINGLEVALUE.,'IfcMassDensityMeasure','',$,$,$,$,.READWRITE.))}<br />
</syntaxhighlight><br />
<br />
=Date and time in IFC=<br />
Date and time conversion can be error prone. Fortunately IFC has chosen wide used definitions so standard python [https://docs.python.org/3/library/datetime.html datetime] and [https://docs.python.org/3/library/time.html time] modules have tools to handle most of them.<br />
==IfcTimeStamp==<br />
[https://standards.buildingsmart.org/IFC/RELEASE/IFC4/ADD2_TC1/HTML/link/ifctimestamp.htm IfcTimeStamp] is the elapsed number of seconds since 1 January 1970, 00:00:00 UTC. See [https://en.wikipedia.org/wiki/Unix_time wikipedia] for more detailed explanations. It is typically used to record when you create or modify an IFC object. Warning while python output a float, IFC expect an integer.<br />
<syntaxhighlight lang="python"><br />
import time<br />
# To store current time<br />
>>>int(time.time())<br />
1610829915<br />
# To convert it to datetime (UTC+1 in this example)<br />
>>> import datetime<br />
>>> datetime.fromtimestamp(0)<br />
datetime.datetime(1970, 1, 1, 1, 0)<br />
>>> datetime.fromtimestamp(1610829915)<br />
datetime.datetime(2021, 1, 16, 21, 45, 15)<br />
</syntaxhighlight><br />
==IfcDateTime==<br />
[https://standards.buildingsmart.org/IFC/RELEASE/IFC4/ADD2_TC1/HTML/link/ifcdatetime.htm IfcDateTime] is stored in ISO 8601 format : YYYY-MM-DDThh:mm:ss<br />
Convert back and forth :<br />
<syntaxhighlight lang="python"><br />
from datetime import datetime<br />
>>> dt = datetime.fromisoformat("2021-01-16T21:45:15")<br />
>>> dt<br />
datetime.datetime(2021, 1, 16, 21, 45, 15)<br />
>>> dt.isoformat()<br />
'2021-01-16T21:45:15'<br />
</syntaxhighlight><br />
==IfcDate==<br />
[https://standards.buildingsmart.org/IFC/RELEASE/IFC4/ADD2_TC1/HTML/link/ifcdate.htm IfcDate] is similar to IfcDateTime but without the time part : YYYY-MM-DD<br />
You can use <code>datetime.date</code> instead of <code>datetime.datetime</code> the same way.<br />
==IfcTime==<br />
[https://standards.buildingsmart.org/IFC/RELEASE/IFC4/ADD2_TC1/HTML/link/ifctime.htm IfcTime] is similar to IfcDateTime but without the date part : hh:mm:ss<br />
You can use <code>datetime.time</code> instead of <code>datetime.datetime</code> the same way.<br />
==IfcDuration==<br />
[https://standards.buildingsmart.org/IFC/RELEASE/IFC4/ADD2_TC1/HTML/link/ifcduration.htm IfcDuration] is used to store a time interval (eg. time to perform a task) in ISO 8601 format. There is apparently no ready to use standard python module to handle it. It can be handled using regular expressions. For format given as example in IFC documentation :<br />
<syntaxhighlight lang="python"><br />
>>> import re<br />
>>> re.match("P(\d+)Y(\d+)M(\d+)DT(\d+)H(\d+)M(\d+)S", "P2Y10M15DT10H30M20S").groups()<br />
('2', '10', '15', '10', '30', '20')<br />
</syntaxhighlight><br />
<br />
To handle all available formatting options defined in [https://en.wikipedia.org/wiki/ISO_8601#Durations ISO 8601] a more complex regular expression is required like following.<br />
[https://pythex.org/?regex=P(%3F%3A(%3FP%3Cyear%3E%5Cd%2B%3F%5B%2C%5C.%5D%3F%5Cd*)%5BY-%5D)%3F(%3F%3A(%3FP%3Cmonth%3E%5Cd%2B%3F%5B%2C%5C.%5D%3F%5Cd*)%5BM-%5D)%3F(%3F%3A(%3FP%3Cweek%3E%5Cd%2B%3F%5B%2C%5C.%5D%3F%5Cd*)W)%3F(%3F%3A(%3FP%3Cday%3E%5Cd%2B%3F%5B%2C%5C.%5D%3F%5Cd*)D%3F)%3F(%3F%3AT(%3F%3A(%3FP%3Chour%3E%5Cd%2B%3F%5B%2C%5C.%5D%3F%5Cd*)%5BH%3A%5D)%3F(%3F%3A(%3FP%3Cminute%3E%5Cd%2B%3F%5B%2C%5C.%5D%3F%5Cd*)%5BM%3A%5D)%3F(%3F%3A(%3FP%3Csecond%3E%5Cd%2B%3F%5B%2C%5C.%5D%3F%5Cd*)S%3F)%3F)%3F&test_string=P3Y6M4DT12H30M5S%0AP1M%0APT1M%0AP1DT12H%0AP0%2C5Y%0AP0.5Y%0APT36H%0AP1DT12H%0AP0003-06-04T12%3A30%3A05%0AP05Y%0AP0..5Y%0AP0%2C.5Y&ignorecase=0&multiline=0&dotall=0&verbose=0 You can test it on pythex].<br />
<br />
<code>P(?:(?P<year>\d+?[,\.]?\d*)[Y-])?(?:(?P<month>\d+?[,\.]?\d*)[M-])?(?:(?P<week>\d+?[,\.]?\d*)W)?(?:(?P<day>\d+?[,\.]?\d*)D?)?(?:T(?:(?P<hour>\d+?[,\.]?\d*)[H:])?(?:(?P<minute>\d+?[,\.]?\d*)[M:])?(?:(?P<second>\d+?[,\.]?\d*)S?)?)?</code><br />
<br />
==IfcCalendarDate==<br />
{{warning|Deprecated: IFC2X3 only}}<br />
Similar to <code>IfcDate</code> but in a different format. It has 3 attribute for day, month and year.<br />
<syntaxhighlight lang="python"><br />
>>> from datetime import date<br />
>>> import ifcopenshell<br />
>>> ifc = ifcopenshell.file(schema="IFC2X3")<br />
>>> ifc_date = ifc.createIfcCalendarDate(16, 1, 2021)<br />
>>> py_date = date(ifc_date.YearComponent, ifc_date.MonthComponent, ifc_date.DayComponent)<br />
>>> py_date<br />
datetime.date(2021, 1, 16)<br />
>>> ifc.createIfcCalendarDate(py_date.day, py_date.month, py_date.year)<br />
#4=IfcCalendarDate(16,1,2021)<br />
</syntaxhighlight><br />
<br />
=Samples from web=<br />
{| class="wikitable"<br />
!Subject<br />
!Language<br />
!Version<br />
!Additional infos<br />
|-<br />
| [https://academy.ifcopenshell.org/posts/ifcopenshell-optimizer-tutorial/ Optimize IFC files]<br />
| python<br />
| 0.6.0-0d93633<br />
|-<br />
| [https://academy.ifcopenshell.org/posts/calculate-differences-of-ifc-files-with-hashing/ Calculate Differences of IFC files with Hashing]<br />
| python<br />
| 0.6.0-0d93633<br />
|-<br />
|[https://pythoncvc.net/?p=851 Understanding placements in IFC using IfcOpenShell and FreeCAD]<br />
| python<br />
| 0.6.0a1<br />
| FreeCAD 0.18 git<br />
|-<br />
| [https://thinkmoult.com/using-ifcopenshell-parse-ifc-files-python.html Using IfcOpenShell to parse IFC files with Python]<br />
| python<br />
|-<br />
| [https://pythoncvc.net/?p=839 Read geometry as Boundary Representation in FreeCAD]<br />
| python<br />
| 0.6.0a1<br />
| FreeCAD 0.18 git<br />
|-<br />
| [https://pythoncvc.net/?p=822 Read IFC geometry as triangle meshes in FreeCAD]<br />
| python<br />
| 0.6.0a1<br />
| FreeCAD 0.18 git<br />
|-<br />
| [https://academy.ifcopenshell.org/posts/using-ifcopenshell-and-c%2B%2B-to-generate-alignments-through-the-ifc-4x1-schema/ Using IfcOpenShell and C++ to generate Alignments through the IFC 4×1 schema]<br />
| python/C++<br />
|-<br />
| [https://academy.ifcopenshell.org/posts/creating-a-simple-wall-with-property-set-and-quantity-information/ Creating a simple wall with property set and quantity information]<br />
| python<br />
|-<br />
| [https://academy.ifcopenshell.org/posts/using-ifcopenshell-and-pythonocc-to-generate-cross-sections-directly-from-an-ifc-file/ Using IfcOpenshell and pythonOCC to generate cross sections directly from an IFC file]<br />
| python<br />
| <= 0.6 ?<br />
| pythonOCC 0.16.0 ?<br />
|-<br />
|[https://academy.ifcopenshell.org/posts/using-the-parsing-functionality-of-ifcopenshell-interactively/ Using the parsing functionality of IfcOpenShell interactively]<br />
| python<br />
|-<br />
|[https://academy.ifcopenshell.org/posts/using-ifcopenshell-and-pythonocc-to-construct-new-geometry/ Using IfcOpenShell and pythonOCC to construct new geometry]<br />
| python<br />
| <= 0.6<br />
| pythonOCC 0.16.0<br />
|-<br />
| [https://github.com/IfcOpenShell/IfcOpenShell/tree/v0.6.0/src/examples Various ifc creation examples (little house, geometry etc…)]<br />
| C++<br />
|}<br />
<br />
[[Category:IfcOpenShell]]</div>Moulthttps://wiki.osarch.org/index.php?title=IfcOpenShell_code_examples&diff=4115IfcOpenShell code examples2021-09-04T23:25:52Z<p>Moult: /* Geometry processing */</p>
<hr />
<div>{{Template:Start coding}}<br />
{{Template:IfcOpenShell}}<br />
Before getting started, you may be interested in [[Using the Python console with BlenderBIM Add-on]], to quickly install all the software and development environment you need for writing and running code, without any administrator privileges required. You may also find it useful watching [https://www.youtube.com/watch?v=WZPNaAM9ZuQ this video] which is complementary.<br />
<br />
=Crash course=<br />
<br />
To load a file, you'll need to import IfcOpenShell and store the IFC file in a variable. We'll use the variable <code>ifc</code>. The <code>ifc</code> will be then used throughout.<br />
<br />
<syntaxhighlight lang="python"><br />
import ifcopenshell<br />
ifc = ifcopenshell.open('/path/to/your/file.ifc')<br />
</syntaxhighlight><br />
<br />
Let's see what IFC schema we are using:<br />
<br />
<syntaxhighlight lang="python"><br />
print(ifc.schema) # May return IFC2X3 or IFC4<br />
</syntaxhighlight><br />
<br />
Let's get the first piece of data in our IFC file:<br />
<br />
<syntaxhighlight lang="python"><br />
print(ifc.by_id(1))<br />
</syntaxhighlight><br />
<br />
But getting data from beginning to end isn't too meaningful to humans. What if we knew a <code>GlobalId</code> value instead?<br />
<br />
<syntaxhighlight lang="python"><br />
print(ifc.by_guid('0EI0MSHbX9gg8Fxwar7lL8'))<br />
</syntaxhighlight><br />
<br />
If we're not looking specifically for a single element, perhaps let's see how many walls are in our file, and count them:<br />
<br />
<syntaxhighlight lang="python"><br />
walls = ifc.by_type('IfcWall')<br />
print(len(walls))<br />
</syntaxhighlight><br />
<br />
Once we have an element, we can see what IFC class it is:<br />
<br />
<syntaxhighlight lang="python"><br />
wall = ifc.by_type('IfcWall')[0]<br />
print(wall.is_a()) # Returns 'IfcWall'<br />
</syntaxhighlight><br />
<br />
You can also test if it is a certain class, as well as check for parent classes too:<br />
<br />
<syntaxhighlight lang="python"><br />
print(wall.is_a('IfcWall')) # Returns True<br />
print(wall.is_a('IfcElement')) # Returns True<br />
print(wall.is_a('IfcWindow')) # Returns False<br />
</syntaxhighlight><br />
<br />
Let's quickly check the STEP ID of our element:<br />
<br />
<syntaxhighlight lang="python"><br />
print(wall.id())<br />
</syntaxhighlight><br />
<br />
Let's get some attributes of an element. IFC attributes have a particular order. We can access it just like a list, so let's get the first and third attribute:<br />
<br />
<syntaxhighlight lang="python"><br />
print(wall[0]) # The first attribute is the GlobalId<br />
print(wall[2]) # The third attribute is the Name<br />
</syntaxhighlight><br />
<br />
Knowing the order of attributes is boring and technical. We can access them by name too:<br />
<br />
<syntaxhighlight lang="python"><br />
print(wall.GlobalId)<br />
print(wall.Name)<br />
</syntaxhighlight><br />
<br />
Getting attributes one by one is tedious. Let's grab them all:<br />
<br />
<syntaxhighlight lang="python"><br />
print(wall.get_info()) # Gives us a dictionary of attributes, such as {'id': 8, 'type': 'IfcWall', 'GlobalId': '2_qMTAIHrEYu0vYcqK8cBX', ... }<br />
</syntaxhighlight><br />
<br />
Let's see all the properties and quantities associated with this wall:<br />
<br />
<syntaxhighlight lang="python"><br />
import ifcopenshell.util<br />
import ifcopenshell.util.element<br />
print(ifcopenshell.util.element.get_psets(wall))<br />
</syntaxhighlight><br />
<br />
Some attributes are special, called "inverse attributes". They happen when another element is referencing our element. They can reference it for many reasons, like to define a relationship, such as if they create a void in our wall, join our wall, or define a quantity take-off value for our wall, among others. Just treat them like regular attributes:<br />
<br />
<syntaxhighlight lang="python"><br />
print(wall.IsDefinedBy)<br />
</syntaxhighlight><br />
<br />
Perhaps we want to see all elements which are referencing our wall?<br />
<br />
<syntaxhighlight lang="python"><br />
print(ifc.get_inverse(wall))<br />
</syntaxhighlight><br />
<br />
Let's do the opposite, let's see all the elements which our wall references instead:<br />
<br />
<syntaxhighlight lang="python"><br />
print(ifc.traverse(wall))<br />
print(ifc.traverse(wall, max_levels=1)) # Or, let's just go down one level deep<br />
</syntaxhighlight><br />
<br />
If you want to modify data, just assign it to the relevant attribute:<br />
<br />
<syntaxhighlight lang="python"><br />
wall.Name = 'My new wall name'<br />
</syntaxhighlight><br />
<br />
You can also generate new <code>GlobalId</code>s:<br />
<br />
<syntaxhighlight lang="python"><br />
wall.GlobalId = ifcopenshell.guid.new()<br />
</syntaxhighlight><br />
<br />
After modifying some IFC data, you can save it to a new IFC-SPF file:<br />
<br />
<syntaxhighlight lang="python"><br />
ifc.write('/path/to/a/new.ifc')<br />
</syntaxhighlight><br />
<br />
You can generate a new IFC from scratch too, instead of reading an existing one:<br />
<br />
<syntaxhighlight lang="python"><br />
ifc = ifcopenshell.file()<br />
# Or if you want a particular schema:<br />
ifc = ifcopenshell.file(schema='IFC4')<br />
</syntaxhighlight><br />
<br />
You can create new IFC elements, and add it either to an existing or newly created IFC file object:<br />
<br />
<syntaxhighlight lang="python"><br />
new_wall = ifc.createIfcWall() # Will return #1=IfcWall($,$,$,$,$,$,$,$,$) - notice all of the attributes are blank!<br />
print(ifc.by_type('IfcWall')) # Will return a list with our wall in it: [#1=IfcWall($,$,$,$,$,$,$,$,$)]<br />
</syntaxhighlight><br />
<br />
Alternatively, you can also use this way to create new elements:<br />
<br />
<syntaxhighlight lang="python"><br />
ifc.create_entity('IfcWall')<br />
</syntaxhighlight><br />
<br />
Specifying more arguments lets you fill in attributes while creating the element instead of assigning them separately. You specify them in the order of the attributes.<br />
<br />
<syntaxhighlight lang="python"><br />
ifc.create_entity('IfcWall', ifcopenshell.guid.new()) # Gives us #1=IfcWall('0EI0MSHbX9gg8Fxwar7lL8',$,$,$,$,$,$,$,$)<br />
</syntaxhighlight><br />
<br />
Again, knowing the order of attributes is difficult, so you can use keyword arguments instead:<br />
<br />
<syntaxhighlight lang="python"><br />
ifc.create_entity('IfcWall', GlobalId=ifcopenshell.guid.new(), Name='Wall Name') # Gives us #1=IfcWall('0EI0MSHbX9gg8Fxwar7lL8',$,'Wall Name',$,$,$,$,$,$)<br />
</syntaxhighlight><br />
<br />
Sometimes, it's easier to expand a dictionary:<br />
<br />
<syntaxhighlight lang="python"><br />
data = {<br />
'GlobalId': ifcopenshell.guid.new(),<br />
'Name': 'Wall Name'<br />
}<br />
ifc.create_entity('IfcWall', **data)<br />
</syntaxhighlight><br />
<br />
Some attributes of an element aren't just text, they may be a reference to another element. Easy:<br />
<br />
<syntaxhighlight lang="python"><br />
wall = ifc.createIfcWall()<br />
wall.OwnerHistory = ifc.createIfcOwnerHistory()<br />
</syntaxhighlight><br />
<br />
What if we already have an element from one IFC file and want to add it to another?<br />
<br />
<syntaxhighlight lang="python"><br />
wall = ifc.by_type('IfcWall')[0]<br />
new_ifc = ifcopenshell.file()<br />
new_ifc.add(wall)<br />
</syntaxhighlight><br />
<br />
Fed up with an object? Let's delete it:<br />
<br />
<syntaxhighlight lang="python"><br />
ifc.remove(wall)<br />
</syntaxhighlight><br />
<br />
=Geometry processing=<br />
<br />
The usage of IfcOpenShell for geometry processing is currently considered to be moderate to advanced. There are two approaches to processing geometry. One approach is to traverse the <code>Representation</code> attribute of the IFC element, and parse it yourself. This requires an in-depth understanding of IFC geometric representations, as well as its many caveats with units and transformations, but can be very simple to extract specific types of geometry. The second approach is to use IfcOpenShell's shape processing features, which will convert almost all IFC representations into a triangulated mesh. Regardless of the source format, once it is in a mesh representation, you may use standard mesh geometry processing algorithms to analyse the geometry. This makes it easier to write generic code for any representation, but may be harder to extract certain geometric features.<br />
<br />
Note: this article is a work in progress.<br />
<br />
TODO: talk about [https://github.com/IfcOpenShell/IfcOpenShell/issues/866 naming in ids].<br />
<br />
<syntaxhighlight lang="python"><br />
import multiprocessing<br />
import ifcopenshell<br />
import ifcopenshell.geom<br />
<br />
try:<br />
ifc_file = ifcopenshell.open('/path/to/your/file.ifc')<br />
except:<br />
print(ifcopenshell.get_log())<br />
else:<br />
settings = ifcopenshell.geom.settings()<br />
iterator = ifcopenshell.geom.iterator(settings, ifc_file, multiprocessing.cpu_count())<br />
if iterator.initialize():<br />
while iterator.next():<br />
shape = iterator.get()<br />
element = ifc_file.by_guid(shape.guid)<br />
faces = shape.geometry.faces # Indices of vertices per triangle face e.g. [f1v1, f1v2, f1v3, f2v1, f2v2, f2v3, ...]<br />
verts = shape.geometry.verts # X Y Z of vertices in flattened list e.g. [v1x, v1y, v1z, v2x, v2y, v2z, ...]<br />
materials = shape.geometry.materials # Material names and colour style information that are relevant to this shape<br />
material_ids = shape.geometry.material_ids # Indices of material applied per triangle face e.g. [f1m, f2m, ...]<br />
</syntaxhighlight><br />
<br />
=IFC Query Syntax=<br />
<br />
Sometimes, you'd like to query an IFC file for a series of elements. It is possible to write this out manually, by means of functions like <code>by_type()</code> and <code>if</code> statements, and <code>for</code> loops. However, a shorthand query syntax has been invented that makes this process much easier. This is made available in the <code>ifcopenshell.util.selector</code> module.<br />
<br />
In this simple example below, we use the <code>#</code> and <code>.</code> prefix to our query tells it that we want to search by IFC <code>GlobalId</code> and class type respectively. Whitespace is optional in queries, but is used in these examples for readability.<br />
<br />
<syntaxhighlight lang="python"><br />
import ifcopenshell.util<br />
from ifcopenshell.util.selector import Selector<br />
<br />
ifc = ifcopenshell.open('/path/to/your/file.ifc')<br />
selector = Selector()<br />
element = selector.parse(ifc, '#2MLFd4X2f0jRq28Dvww1Vm') # Equivalent to ifc.by_guid('2MLFd4X2f0jRq28Dvww1Vm')<br />
walls = selector.parse(ifc, '.IfcWall') # This is equivalent to ifc.by_type('IfcWall')<br />
</syntaxhighlight><br />
<br />
It is also possible to search by any attribute:<br />
<br />
<syntaxhighlight lang="python"><br />
# This is equivalent to searching by GlobalId<br />
elements = selector.parse(ifc, '.IfcSlab[GlobalId = "2MLFd4X2f0jRq28Dvww1Vm"]')<br />
<br />
# This finds all slabs with "Precast" (case-sensitive) in the Name<br />
elements = selector.parse(ifc, '.IfcSlab[Name *= "Precast"]')<br />
<br />
# This finds all slabs which have a quantified net volume greater than 10 units<br />
elements = selector.parse(ifc, '.IfcSlab[Qto_SlabBaseQuantities.NetVolume > "10"]')<br />
<br />
# This finds all walls which have a particular fire rating property<br />
elements = selector.parse(ifc, '.IfcWall[Pset_WallCommon.FireRating = "2HR"]')<br />
</syntaxhighlight><br />
<br />
You can also search by spatial containment using the <code>@</code> symbol, for example:<br />
<br />
<syntaxhighlight lang="python"><br />
# If 0ehnsYoIDA7wC8yu69IDjv is the GlobalId of an IfcBuildingStorey, this gets all of the elements in that storey.<br />
elements = selector.parse(ifc, '@ #0ehnsYoIDA7wC8yu69IDjv')<br />
</syntaxhighlight><br />
<br />
Or by type using the <code>*</code> symbol:<br />
<br />
<syntaxhighlight lang="python"><br />
# If 1uVUwUxTX9Jg1NHVw5KZhI is the GlobalId of an IfcTypeElement, this gets all of the elements of that type.<br />
elements = selector.parse(ifc, '* #1uVUwUxTX9Jg1NHVw5KZhI')<br />
</syntaxhighlight><br />
<br />
You can use <code>AND</code> and <code>OR</code> statements, using the <code>&</code> and <code>|</code> symbols respectively:<br />
<br />
<syntaxhighlight lang="python"><br />
# This gets all the 2HR fire rated walls in a particular building storey:<br />
elements = selector.parse(ifc, '@ #0ehnsYoIDA7wC8yu69IDjv & .IfcWall[Pset_WallCommon.FireRating = "2HR"]')<br />
<br />
# This is equivalent to walls = ifc.by_type('IfcWall') + ifc.by_type('IfcSlab'), i.e. all walls and slabs<br />
elements = selector.parse(ifc, '.IfcWall | .IfcSlab')<br />
</syntaxhighlight><br />
<br />
You can also use parenthesis to group queries and combine them:<br />
<br />
<syntaxhighlight lang="python"><br />
# This gets all walls and slabs in a particular building storey<br />
elements = selector.parse(ifc, '@ #0ehnsYoIDA7wC8yu69IDjv & ( .IfcWall | .IfcSlab )')<br />
</syntaxhighlight><br />
<br />
<syntaxhighlight lang="python"><br />
# This gets all walls and slabs in a particular space (if IfcRelSpaceBoundary exist)<br />
elements = selector.parse(ifc, '@@ .IfcSpace & ( .IfcWall | .IfcSlab )')<br />
</syntaxhighlight><br />
<br />
<br />
=Exploring IFC schema=<br />
Get Schema :<br />
<syntaxhighlight lang="python"><br />
import ifcopenshell<br />
schema = ifcopenshell.ifcopenshell_wrapper.schema_by_name("IFC4")<br />
</syntaxhighlight><br />
<br />
Explore class attributes :<br />
<syntaxhighlight lang="python"><br />
>>> ifc_pipe = schema.declaration_by_name("IfcPipeSegment")<br />
>>> ifc_pipe.all_attributes()<br />
(<attribute GlobalId: <type IfcGloballyUniqueId: <string>>>,<br />
<attribute OwnerHistory?: <entity IfcOwnerHistory>>,<br />
<attribute Name?: <type IfcLabel: <string>>>,<br />
<attribute Description?: <type IfcText: <string>>>,<br />
<attribute ObjectType?: <type IfcLabel: <string>>>,<br />
<attribute ObjectPlacement?: <entity IfcObjectPlacement>>,<br />
<attribute Representation?: <entity IfcProductRepresentation>>,<br />
<attribute Tag?: <type IfcIdentifier: <string>>>,<br />
<attribute PredefinedType?: <enumeration IfcPipeSegmentTypeEnum: (CULVERT, FLEXIBLESEGMENT, GUTTER, NOTDEFINED, RIGIDSEGMENT, SPOOL, USERDEFINED)>>)<br />
<br />
>>> ifc_pipe.attribute_count()<br />
9<br />
<br />
>>> ifc_pipe.attribute_by_index(0)<br />
<attribute GlobalId: <type IfcGloballyUniqueId: <string>>><br />
<br />
>>> ifc_pipe.attribute_index("Description")<br />
3<br />
<br />
>>> predefined_type = ifc_pipe.attribute_by_index(8)<br />
>>> predefined_type.name()<br />
'PredefinedType'<br />
<br />
>>> predefined_type.optional()<br />
True<br />
<br />
>>> predefined_type.type_of_attribute()<br />
<enumeration IfcPipeSegmentTypeEnum: (CULVERT, FLEXIBLESEGMENT, GUTTER, NOTDEFINED, RIGIDSEGMENT, SPOOL, USERDEFINED)><br />
<br />
# from name you can then recursively explore how create an entity as described above<br />
>>> predefined_type.type_of_attribute().declared_type().name()<br />
'IfcPipeSegmentTypeEnum'<br />
</syntaxhighlight><br />
<br />
Get supertype :<br />
<syntaxhighlight lang="python"><br />
>>> ifc_pipe.supertype()<br />
<entity IfcFlowSegment><br />
</syntaxhighlight><br />
<br />
Get subtypes :<br />
<syntaxhighlight lang="python"><br />
>>> super_type = ifc_pipe.supertype()<br />
>>> super_type.subtypes()<br />
(<entity IfcCableCarrierSegment>,<br />
<entity IfcCableSegment>,<br />
<entity IfcDuctSegment>,<br />
<entity IfcPipeSegment>)<br />
</syntaxhighlight><br />
<br />
=Property and quantity sets (Pset and Qto)=<br />
First import util for psets and qtos and initialise main class with schema name:<br />
<syntaxhighlight lang="python"> <br />
>>> import ifcopenshell.util.pset<br />
>>> from ifcopenshell import util<br />
>>> pset_qto = util.pset.PsetQto("IFC4")<br />
</syntaxhighlight><br />
<br />
Get all applicable psets/qtos names for a certain class :<br />
<syntaxhighlight lang="python"> <br />
>>> pset_qto.get_applicable_names("IfcMaterial")<br />
['Pset_MaterialCombustion',<br />
'Pset_MaterialCommon',<br />
'Pset_MaterialConcrete',<br />
'Pset_MaterialEnergy',<br />
'Pset_MaterialFuel',<br />
'Pset_MaterialHygroscopic',<br />
'Pset_MaterialMechanical',<br />
'Pset_MaterialOptical',<br />
'Pset_MaterialSteel',<br />
'Pset_MaterialThermal',<br />
'Pset_MaterialWater',<br />
'Pset_MaterialWood',<br />
'Pset_MaterialWoodBasedBeam',<br />
'Pset_MaterialWoodBasedPanel']<br />
</syntaxhighlight><br />
<br />
You can also get a list of all applicable pset/qto templates to get more information:<br />
<syntaxhighlight lang="python"> <br />
>>> pset_qto.get_applicable("IfcMaterial")[0]<br />
#22772=IfcPropertySetTemplate('3Eppg0qUmHuO00025QrE$V',$,'Pset_MaterialCommon','A set of general material properties.',.PSET_TYPEDRIVENOVERRIDE.,'IfcMaterial',(#22775,#22778,#22781))<br />
</syntaxhighlight><br />
<br />
You can also retrieve a standard Pset by name:<br />
<syntaxhighlight lang="python"> <br />
>>> pset_template = pset_qto.get_by_name("Pset_MaterialCommon")<br />
>>> pset_template<br />
#22772=IfcPropertySetTemplate('3Eppg0qUmHuO00025QrE$V',$,'Pset_MaterialCommon','A set of general material,'IfcMaterial',(#22775,#22778,#22781))<br />
>>> pset_template.get_info()<br />
{'id': 22772,<br />
'type': 'IfcPropertySetTemplate',<br />
'GlobalId': '3Eppg0qUmHuO00025QrE$V',<br />
'OwnerHistory': None,<br />
'Name': 'Pset_MaterialCommon',<br />
'Description': 'A set of general material properties.',<br />
'TemplateType': 'PSET_TYPEDRIVENOVERRIDE',<br />
'ApplicableEntity': 'IfcMaterial',<br />
'HasPropertyTemplates': (#22775=IfcSimplePropertyTemplate('3IOi60qUmHuO00025QrE$V',$,'MolecularWeight','Molecular weight of material (typically gas).',.P_SINGLEVALUE.,'IfcMolecularWeightMeasure','',$,$,$,$,.READWRITE.),<br />
#22778=IfcSimplePropertyTemplate('3OMAA0qUmHuO00025QrE$V',$,'Porosity','The void fraction of the total volume occupied by material (Vbr - Vnet)/Vbr.',.P_SINGLEVALUE.,'IfcNormalisedRatioMeasure','',$,$,$,$,.READWRITE.),<br />
#22781=IfcSimplePropertyTemplate('3TjUq0qUmHuO00025QrE$V',$,'MassDensity','Material mass density.',.P_SINGLEVALUE.,'IfcMassDensityMeasure','',$,$,$,$,.READWRITE.))}<br />
</syntaxhighlight><br />
<br />
=Date and time in IFC=<br />
Date and time conversion can be error prone. Fortunately IFC has chosen wide used definitions so standard python [https://docs.python.org/3/library/datetime.html datetime] and [https://docs.python.org/3/library/time.html time] modules have tools to handle most of them.<br />
==IfcTimeStamp==<br />
[https://standards.buildingsmart.org/IFC/RELEASE/IFC4/ADD2_TC1/HTML/link/ifctimestamp.htm IfcTimeStamp] is the elapsed number of seconds since 1 January 1970, 00:00:00 UTC. See [https://en.wikipedia.org/wiki/Unix_time wikipedia] for more detailed explanations. It is typically used to record when you create or modify an IFC object. Warning while python output a float, IFC expect an integer.<br />
<syntaxhighlight lang="python"><br />
import time<br />
# To store current time<br />
>>>int(time.time())<br />
1610829915<br />
# To convert it to datetime (UTC+1 in this example)<br />
>>> import datetime<br />
>>> datetime.fromtimestamp(0)<br />
datetime.datetime(1970, 1, 1, 1, 0)<br />
>>> datetime.fromtimestamp(1610829915)<br />
datetime.datetime(2021, 1, 16, 21, 45, 15)<br />
</syntaxhighlight><br />
==IfcDateTime==<br />
[https://standards.buildingsmart.org/IFC/RELEASE/IFC4/ADD2_TC1/HTML/link/ifcdatetime.htm IfcDateTime] is stored in ISO 8601 format : YYYY-MM-DDThh:mm:ss<br />
Convert back and forth :<br />
<syntaxhighlight lang="python"><br />
from datetime import datetime<br />
>>> dt = datetime.fromisoformat("2021-01-16T21:45:15")<br />
>>> dt<br />
datetime.datetime(2021, 1, 16, 21, 45, 15)<br />
>>> dt.isoformat()<br />
'2021-01-16T21:45:15'<br />
</syntaxhighlight><br />
==IfcDate==<br />
[https://standards.buildingsmart.org/IFC/RELEASE/IFC4/ADD2_TC1/HTML/link/ifcdate.htm IfcDate] is similar to IfcDateTime but without the time part : YYYY-MM-DD<br />
You can use <code>datetime.date</code> instead of <code>datetime.datetime</code> the same way.<br />
==IfcTime==<br />
[https://standards.buildingsmart.org/IFC/RELEASE/IFC4/ADD2_TC1/HTML/link/ifctime.htm IfcTime] is similar to IfcDateTime but without the date part : hh:mm:ss<br />
You can use <code>datetime.time</code> instead of <code>datetime.datetime</code> the same way.<br />
==IfcDuration==<br />
[https://standards.buildingsmart.org/IFC/RELEASE/IFC4/ADD2_TC1/HTML/link/ifcduration.htm IfcDuration] is used to store a time interval (eg. time to perform a task) in ISO 8601 format. There is apparently no ready to use standard python module to handle it. It can be handled using regular expressions. For format given as example in IFC documentation :<br />
<syntaxhighlight lang="python"><br />
>>> import re<br />
>>> re.match("P(\d+)Y(\d+)M(\d+)DT(\d+)H(\d+)M(\d+)S", "P2Y10M15DT10H30M20S").groups()<br />
('2', '10', '15', '10', '30', '20')<br />
</syntaxhighlight><br />
<br />
To handle all available formatting options defined in [https://en.wikipedia.org/wiki/ISO_8601#Durations ISO 8601] a more complex regular expression is required like following.<br />
[https://pythex.org/?regex=P(%3F%3A(%3FP%3Cyear%3E%5Cd%2B%3F%5B%2C%5C.%5D%3F%5Cd*)%5BY-%5D)%3F(%3F%3A(%3FP%3Cmonth%3E%5Cd%2B%3F%5B%2C%5C.%5D%3F%5Cd*)%5BM-%5D)%3F(%3F%3A(%3FP%3Cweek%3E%5Cd%2B%3F%5B%2C%5C.%5D%3F%5Cd*)W)%3F(%3F%3A(%3FP%3Cday%3E%5Cd%2B%3F%5B%2C%5C.%5D%3F%5Cd*)D%3F)%3F(%3F%3AT(%3F%3A(%3FP%3Chour%3E%5Cd%2B%3F%5B%2C%5C.%5D%3F%5Cd*)%5BH%3A%5D)%3F(%3F%3A(%3FP%3Cminute%3E%5Cd%2B%3F%5B%2C%5C.%5D%3F%5Cd*)%5BM%3A%5D)%3F(%3F%3A(%3FP%3Csecond%3E%5Cd%2B%3F%5B%2C%5C.%5D%3F%5Cd*)S%3F)%3F)%3F&test_string=P3Y6M4DT12H30M5S%0AP1M%0APT1M%0AP1DT12H%0AP0%2C5Y%0AP0.5Y%0APT36H%0AP1DT12H%0AP0003-06-04T12%3A30%3A05%0AP05Y%0AP0..5Y%0AP0%2C.5Y&ignorecase=0&multiline=0&dotall=0&verbose=0 You can test it on pythex].<br />
<br />
<code>P(?:(?P<year>\d+?[,\.]?\d*)[Y-])?(?:(?P<month>\d+?[,\.]?\d*)[M-])?(?:(?P<week>\d+?[,\.]?\d*)W)?(?:(?P<day>\d+?[,\.]?\d*)D?)?(?:T(?:(?P<hour>\d+?[,\.]?\d*)[H:])?(?:(?P<minute>\d+?[,\.]?\d*)[M:])?(?:(?P<second>\d+?[,\.]?\d*)S?)?)?</code><br />
<br />
==IfcCalendarDate==<br />
{{warning|Deprecated: IFC2X3 only}}<br />
Similar to <code>IfcDate</code> but in a different format. It has 3 attribute for day, month and year.<br />
<syntaxhighlight lang="python"><br />
>>> from datetime import date<br />
>>> import ifcopenshell<br />
>>> ifc = ifcopenshell.file(schema="IFC2X3")<br />
>>> ifc_date = ifc.createIfcCalendarDate(16, 1, 2021)<br />
>>> py_date = date(ifc_date.YearComponent, ifc_date.MonthComponent, ifc_date.DayComponent)<br />
>>> py_date<br />
datetime.date(2021, 1, 16)<br />
>>> ifc.createIfcCalendarDate(py_date.day, py_date.month, py_date.year)<br />
#4=IfcCalendarDate(16,1,2021)<br />
</syntaxhighlight><br />
<br />
=Samples from web=<br />
{| class="wikitable"<br />
!Subject<br />
!Language<br />
!Version<br />
!Additional infos<br />
|-<br />
| [https://academy.ifcopenshell.org/posts/ifcopenshell-optimizer-tutorial/ Optimize IFC files]<br />
| python<br />
| 0.6.0-0d93633<br />
|-<br />
| [https://academy.ifcopenshell.org/posts/calculate-differences-of-ifc-files-with-hashing/ Calculate Differences of IFC files with Hashing]<br />
| python<br />
| 0.6.0-0d93633<br />
|-<br />
|[https://pythoncvc.net/?p=851 Understanding placements in IFC using IfcOpenShell and FreeCAD]<br />
| python<br />
| 0.6.0a1<br />
| FreeCAD 0.18 git<br />
|-<br />
| [https://thinkmoult.com/using-ifcopenshell-parse-ifc-files-python.html Using IfcOpenShell to parse IFC files with Python]<br />
| python<br />
|-<br />
| [https://pythoncvc.net/?p=839 Read geometry as Boundary Representation in FreeCAD]<br />
| python<br />
| 0.6.0a1<br />
| FreeCAD 0.18 git<br />
|-<br />
| [https://pythoncvc.net/?p=822 Read IFC geometry as triangle meshes in FreeCAD]<br />
| python<br />
| 0.6.0a1<br />
| FreeCAD 0.18 git<br />
|-<br />
| [https://academy.ifcopenshell.org/posts/using-ifcopenshell-and-c%2B%2B-to-generate-alignments-through-the-ifc-4x1-schema/ Using IfcOpenShell and C++ to generate Alignments through the IFC 4×1 schema]<br />
| python/C++<br />
|-<br />
| [https://academy.ifcopenshell.org/posts/creating-a-simple-wall-with-property-set-and-quantity-information/ Creating a simple wall with property set and quantity information]<br />
| python<br />
|-<br />
| [https://academy.ifcopenshell.org/posts/using-ifcopenshell-and-pythonocc-to-generate-cross-sections-directly-from-an-ifc-file/ Using IfcOpenshell and pythonOCC to generate cross sections directly from an IFC file]<br />
| python<br />
| <= 0.6 ?<br />
| pythonOCC 0.16.0 ?<br />
|-<br />
|[https://academy.ifcopenshell.org/posts/using-the-parsing-functionality-of-ifcopenshell-interactively/ Using the parsing functionality of IfcOpenShell interactively]<br />
| python<br />
|-<br />
|[https://academy.ifcopenshell.org/posts/using-ifcopenshell-and-pythonocc-to-construct-new-geometry/ Using IfcOpenShell and pythonOCC to construct new geometry]<br />
| python<br />
| <= 0.6<br />
| pythonOCC 0.16.0<br />
|-<br />
| [https://github.com/IfcOpenShell/IfcOpenShell/tree/v0.6.0/src/examples Various ifc creation examples (little house, geometry etc…)]<br />
| C++<br />
|}<br />
<br />
[[Category:IfcOpenShell]]</div>Moulthttps://wiki.osarch.org/index.php?title=Revit_setup_for_OpenBIM/Revit_and_IFC_Geometry&diff=4097Revit setup for OpenBIM/Revit and IFC Geometry2021-08-11T22:26:33Z<p>Moult: </p>
<hr />
<div>When Revit exports geometry to IFC, it may process it in a way that may lead to loss of information or inefficient data storage. Optimising geometry is highly advised to maintain quick workflows between OpenBIM and Revit.<br />
<br />
=Optimising geometry in Revit=<br />
<br />
==Detecting complex geometry==<br />
<br />
Within Revit, the currently exported Element ID will be shown in the status bar on the bottom left during the export process. Watching this at export time and making a note of any Element IDs that take a particularly long time to export will help identify those with geometric issues that Revit is struggling with.<br />
<br />
As an alternative, the [[Geometric detail MicroMVD]] may be used to audit the geometry. It checks by auditing the number of polygons physically present in the IFC definition of the geometry. This type of check is very fast, as it does not require the geometry to be computed.<br />
<br />
Sometimes, it is also necessary to check the resultant polygon count, not just the IFC definition. This is useful if there are many parametric definitions that are computationally expensive to display. The [[BlenderBIM Add-on]] contains a "Select all high polygon meshes" operator, allowing you to select and visually inspect complex geometry. The IFC CSV tool may then be used to export these objects into a spreadsheet format.<br />
<br />
==Using IFC4==<br />
<br />
IFC4 contains much more efficient ways of storing both mesh and non mesh geometry. Whenever possible, it is advised to export IFC files in the IFC4 format. This can result in significant filesize reductions. As an example, an IFC produced from Revit of a single object resulted in a filesize of 16,098kB. The same object re-exported to IFC4 using the [[BlenderBIM Add-on]] reduced the object to 4,487kb with no loss in geometric detail.<br />
<br />
This filesize reduction occurs due to two improvements in the IFC4 data format. The first is the new tesselated shape supports, which allow a much more efficient description of meshes compared to the IFC2X3 faceted BREPs. The second is due to the improved support in Revit of exporting parametric geometry in IFC.<br />
<br />
==Mitigating the Revit type duplication bug==<br />
<br />
Revit has a bug which invisibly duplicates types unknown to the end user. For example, given a table that is symmetrical, if you mirror it in Revit, it will still show as one type in Revit. However, under the hood, Revit will invisibly create a new type that you cannot see through the Revit interface. When exported to IFC, Revit will generate two types, with two geometries: one of the original and one of the mirrored table. This doubles the size of your type.<br />
<br />
Multiplying the size of a type is especially problematic when the type has fillets (see next section) and is already 10-30 times the size of a properly modelled mesh. Mirroring along one axis will double your type filesize. Mirroring along two axes will quadruple your filesize. If it's a door or window, placement on a hosted element with different thicknesses will also duplicate the time again, leading to a single door's geometry filesize being multiplied easily to 8 or more times, depending on how many different walls you put it in.<br />
<br />
There is no known fix for this at the moment due to the complexity of this bug and the risk in patching vertex coordinates. More reading [https://github.com/Autodesk/revit-ifc/issues/326 here].<br />
<br />
==Reducing curves in profiles that are swept, revolved, or blended==<br />
<br />
If possible, if you have a profile which has any curves in it (including filleted corners), it is advised to only create an <code>Extrusion</code>. If other forms are created, such as a <code>Blend</code>, <code>Revolve</code>, <code>Sweep</code>, or a <code>Swept Blend</code>, Revit is not able to efficiently translate this geometry into IFC due to limitations in the Revit software.<br />
<br />
This may result in shapes that look relatively simple in Revit, but lead to slow model coordination, slow file exports, large filesizes, and increased bandwidth usage in CDEs.<br />
<br />
[[File:Revit-fillet-sweep.PNG|200px|thumb|right|A swept profile with a single fillet]]<br />
<br />
As an example, consider the following swept profile. The profile has a single filleted corner. Without the filleted corner, the exported filesize is 10kb. With the filleted corner, the resulting IFC2X3 filesize increases to 270kb. This is an increase of 27 times the filesize.<br />
<br />
[[File:Revit-door-geometry.png|200px|thumb|right|An innocent looking door]]<br />
<br />
This is especially relevant to the architectural discipline. A common example can be seen in door and window frames, hardware, and furniture. For example, the following door object. The door contains a frame which is a profile swept along a path. The profile contains multiple fillets.<br />
<br />
[[File:Revit-door-geometry-zoom.png|200px|thumb|right|A door with over 8,000 vertices]]<br />
<br />
The [[BlenderBIM Add-on]] lets you inspect the details of how Revit generates shapes. In mesh edit mode, it is revealed that this door contains more than 8,000 vertices. Zooming into the door frame reveals the strange meshing artifacts that Revit has generated. You will notice that the artifacts do not occur in simple extrusions, such as in the door leaf.<br />
<br />
It is not currently possible to modify the number of facets created in a curve. If it is necessary to do this, it is advised to switch to another software application.<br />
<br />
==Remodeling in other software==<br />
<br />
[[File:Revit-object-blender-remodel.png|200px|thumb|right|An object remodeled in Blender]]<br />
<br />
In some scenarios, when it is not acceptable to reduce the geometric fidelity in Revit, it is necessary to switch to alternative software to generate IFCs, which either have improved mesh support, or improved ability to store parametric information in the IFC format.<br />
<br />
In one example, a single object originally exported into a 16,098kB IFC file from Revit was remodeled in Blender, with a resulting IFC filesize when re-exported from the BlenderBIM Add-on of 455kb.<br />
<br />
[[Category:Autodesk Revit]]</div>Moulthttps://wiki.osarch.org/index.php?title=IFC_-_Industry_Foundation_Classes/IFC_concepts/IFC_cost_concepts&diff=4096IFC - Industry Foundation Classes/IFC concepts/IFC cost concepts2021-08-10T05:10:04Z<p>Moult: /* The value of a cost item may be calculated from a formula */</p>
<hr />
<div>The primary classes related to this concept are:<br />
<br />
* IfcCostSchedule<br />
* IfcCostItem<br />
* IfcCostValue<br />
<br />
== A cost schedule can exist ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelDeclares -> IfcProject [ label="RelatingContext" ];<br />
IfcRelDeclares -> IfcCostSchedule [ label="RelatedDefinitions" ];<br />
IfcRelDeclares [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule.png]]<br />
<br />
A cost schedule is a collection of cost items, used for a specified purpose. Typical purposes are cost plans and tenders.<br />
<br />
Note: there is no explicit documentation which explains how a cost schedule is related back to the project or context. Therefore, in the absence of documentation, we are assuming that we declare it to the project as shown. However, this is only an assumption. There are explicit arguments against this assumption, such as that a cost schedule must be tied back to a project order. However, this evidence is not considered strong enough as it is never mentioned in the cost schedule documentation page itself.<br />
<br />
Source: IfcProjectOrder<br />
<br />
== A cost schedule can be part of a project order ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAggregates -> IfcProjectOrder [ label="RelatingObject" ];<br />
IfcRelAggregates -> IfcCostSchedule [ label="RelatedObjects" ];<br />
IfcRelAggregates [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-projectorder.png]]<br />
<br />
Project orders, such as work orders, change orders, or in particular purchase orders, may include a cost schedule. For example, a cost schedule may be used to provide an estimate of costs for a work order.<br />
<br />
Source: IfcCostSchedule, IfcProjectOrder<br />
<br />
== A cost schedule may have approval requests ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAssociatesApproval -> IfcApproval [ label="RelatingApproval" ];<br />
IfcRelAssociatesApproval -> IfcCostSchedule [ label="RelatedObjects" ];<br />
IfcRelAssociatesApproval [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule-approval.png]]<br />
<br />
A cost schedule may have an approval associated with it, to determine whether it is approved or not.<br />
<br />
Source: IfcCostSchedule<br />
<br />
== A cost schedule may have a series of approvals ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAssociatesApproval -> IfcCostSchedule [ label="RelatedObjects" ];<br />
IfcRelAssociatesApproval -> IfcApproval [ label="RelatingApproval" ];<br />
IfcRelAssociatesApproval [color="pink"]<br />
IfcApprovalRelationship [color="pink"]<br />
IfcApprovalRelationship -> IfcApproval [label="RelatingApproval"]<br />
IfcApprovalRelationship -> approval2 [label="RelatedApprovals"]<br />
approval2 [label="IfcApproval"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule-approval-rel.png]]<br />
<br />
An approval that relates to a cost schedule may itself be broken down into sub approvals. This implies that the sub approvals (RelatedApprovals) must first be approved before the parent approval (RelatingApproval) may be approved.<br />
<br />
Source: IfcCostSchedule<br />
<br />
== A cost schedule may have actors associated with it ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAssignsToActor -> IfcCostSchedule [ label="RelatedObjects" ];<br />
IfcRelAssignsToActor -> IfcActor [ label="RelatingActor" ];<br />
IfcRelAssignsToActor [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule-actor.png]]<br />
<br />
A cost schedule may describe the people who authored it, who are stakeholders, recipients, or clients.<br />
<br />
Source: IfcCostSchedule<br />
<br />
== A cost schedule may contain cost items ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAssignsToControl -> IfcCostSchedule [ label="RelatingControl" ];<br />
IfcRelAssignsToControl -> IfcCostItem [ label="RelatedObjects" ];<br />
IfcRelAssignsToControl [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule-costitem.png]]<br />
<br />
Cost schedules can contain a single summary cost item. An IfcCostItem describes a cost or financial value together with descriptive information that describes its context in a form that enables it to be used within a cost schedule. An IfcCostItem can be used to represent the cost of goods and services, the execution of works by a process, lifecycle cost and more. This summary cost item may then be broken down further into more cost items, but only one summary cost item is allowed.<br />
<br />
Source: IfcCostSchedule<br />
<br />
== A cost item may be assigned a classification reference ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color=lightblue ];<br />
edge [ fontsize=10 ];<br />
IfcRelAssociatesClassification [color=pink]<br />
IfcRelAssociatesClassification -> IfcCostItem [ label="RelatedObjects" ];<br />
IfcRelAssociatesClassification -> IfcClassificationReference [ label="RelatingClassification" ];<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costitem-classification.png]]<br />
<br />
Cost items may relate to an external classification system, where a variety of identification codes are used extensively to identify the meaning of the cost. Examples include project phase codes, CSI codes, takeoff sequence numbers, and cost accounts.<br />
<br />
Source: IfcCostItem<br />
<br />
== A cost item may nest cost items ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color=lightblue ];<br />
edge [ fontsize=10 ];<br />
<br />
IfcRelNests [color=pink]<br />
IfcRelNests -> IfcCostItem [label="RelatingObject"]<br />
IfcRelNests -> subitem [label="RelatedObjects"]<br />
subitem [label="IfcCostItem"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costitem-nest.png]]<br />
<br />
A cost item may have cost items nested within it, typically forming the hierarchy or breakdown of a cost schedule.<br />
<br />
Source: IfcCostItem<br />
<br />
== A cost item may include arbitrary quantities ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcCostItem -> IfcQuantityVolume [ label="CostQuantities[0]" ];<br />
IfcCostItem -> IfcQuantityVolume2 [ label="CostQuantities[1]" ];<br />
IfcQuantityVolume2 [label="IfcQuantityVolume"]<br />
IfcQuantityVolume -> 3 [label="VolumeValue"]<br />
IfcQuantityVolume2 -> 2 [label="VolumeValue"]<br />
3 [shape=ellipse]<br />
2 [shape=ellipse]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costitem-costquantity.png]]<br />
<br />
A cost item may specify arbitrary quantities. These quantities are not linked to model elements. If multiple quantities are included for a single cost item, each individual quantity is a component which may be summed together to derive the total quantity. For example, this cost item has two components: one with volume of 3m2, another of 2m2. The total quantity is 3 + 2 = 5. All quantities must match the same measurement type (e.g. volume, area, count, etc).<br />
<br />
Source: IfcCostItem<br />
<br />
== A cost item may have a total monetary cost value ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcCostItem -> IfcCostValue [ label="CostValues" ];<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costitem-costvalue.png]]<br />
<br />
If a cost item has no cost quantities, this cost value represents the total cost of the cost item.<br />
<br />
Source: IfcCostItem<br />
<br />
== A cost item may have a total cost derived from a unit value and quantities ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcCostItem -> IfcQuantityVolume [ label="CostQuantities" ];<br />
IfcCostItem -> IfcCostValue [ label="CostValues" ];<br />
IfcQuantityVolume -> 3 [label="VolumeValue"]<br />
IfcCostValue -> 2 [label="AppliedValue"]<br />
3 [shape=ellipse]<br />
2 [shape=ellipse]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costitem-costvalue-unit.png]]<br />
<br />
If a cost item has quantities, the cost value represents a unit cost of the cost item, which is "2" in this case. The total cost of the cost item is derived by multiplying the cost quantities and the unit cost, which is 3 x 2 = 6 in this example.<br />
<br />
Source: IfcCostItem<br />
<br />
== The value of a cost item may be broken down into categories ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcCostItem -> IfcCostValue [ label="CostValues[0]" ];<br />
IfcCostItem -> IfcCostValue2 [ label="CostValues[1]" ];<br />
IfcCostValue2 [label="IfcCostValue"]<br />
IfcCostValue -> 3 [label="AppliedValue"]<br />
IfcCostValue2 -> 2 [label="AppliedValue"]<br />
IfcCostValue -> Delivery [label="Category"]<br />
IfcCostValue2 -> Labour [label="Category"]<br />
3 [shape=ellipse]<br />
2 [shape=ellipse]<br />
Delivery [shape=ellipse]<br />
Labour [shape=ellipse]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costitem-costvalue-category.png]]<br />
<br />
Cost values may be categorised to understand the cost breakdown. Example categories are delivery, labour, installation, overhead, material, storage, transportation, and more.<br />
<br />
Source: IfcCostItem, IfcCostValue<br />
<br />
== The value of a cost item may be calculated from the sum of its nested cost items ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelNests -> summary [label="RelatingObject"]<br />
IfcRelNests -> IfcCostItem [label="RelatedObjects[0]"]<br />
IfcRelNests [color="pink"]<br />
<br />
summary->costvalue [label="CostValues"]<br />
costvalue->sum [label="Category"]<br />
costvalue -> 32 [label="AppliedValue"]<br />
costvalue [ label="IfcCostValue"]<br />
summary[label="IfcCostItem"]<br />
sum [label="*", shape=ellipse]<br />
32 [shape=ellipse]<br />
<br />
IfcCostItem -> IfcCostValue [ label="CostValues[0]" ];<br />
IfcCostItem -> IfcCostValue2 [ label="CostValues[1]" ];<br />
IfcCostValue2 [label="IfcCostValue"]<br />
IfcCostValue -> 3 [label="AppliedValue"]<br />
IfcCostValue2 -> 2 [label="AppliedValue"]<br />
IfcCostValue -> Delivery [label="Category"]<br />
IfcCostValue2 -> Labour [label="Category"]<br />
3 [shape=ellipse]<br />
2 [shape=ellipse]<br />
Delivery [shape=ellipse]<br />
Labour [shape=ellipse]<br />
IfcCostItem -> IfcQuantityArea [label="CostQuantities"]<br />
IfcQuantityArea -> 5 [label=AreaValue]<br />
5 [shape=ellipse]<br />
<br />
IfcRelNests -> secondcostitem [label="RelatedObjects[1]"]<br />
secondcostitem -> secondcostvalue [label="CostValues"]<br />
secondcostvalue -> 7<br />
7 [shape=ellipse]<br />
secondcostvalue [label="IfcCostValue"]<br />
secondcostitem [label="IfcCostItem"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costitem-costvalue-category-sum.png]]<br />
<br />
When the cost value has a special category of "*", this means that its value is calculated from the sum of the costs of all nested cost items.<br />
<br />
In this example, the parent cost item has a two nested child cost items. The first nested item has a total unit cost of 3 + 2 = 5, and a total quantity of 5. This gives a total cost of the nested child of 5 x 5 = 25. The second nested item has a total cost of 7. Therefore, the sum of all nested cost items is 25 + 7 = 32.<br />
<br />
Source: IfcCostItem<br />
<br />
== The value of a cost item may be calculated from the sum of its nested cost items, filtered by a category ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelNests -> summary [label="RelatingObject"]<br />
IfcRelNests -> IfcCostItem [label="RelatedObjects[0]"]<br />
IfcRelNests [color="pink"]<br />
<br />
summary->costvalue [label="CostValues"]<br />
costvalue->sum [label="Category"]<br />
costvalue -> 15 [label="AppliedValue"]<br />
costvalue [ label="IfcCostValue"]<br />
summary[label="IfcCostItem"]<br />
sum [label="Delivery", shape=ellipse]<br />
15 [shape=ellipse]<br />
<br />
IfcCostItem -> IfcCostValue [ label="CostValues[0]" ];<br />
IfcCostItem -> IfcCostValue2 [ label="CostValues[1]" ];<br />
IfcCostValue2 [label="IfcCostValue"]<br />
IfcCostValue -> 3 [label="AppliedValue"]<br />
IfcCostValue2 -> 2 [label="AppliedValue"]<br />
IfcCostValue -> Delivery [label="Category"]<br />
IfcCostValue2 -> Labour [label="Category"]<br />
3 [shape=ellipse]<br />
2 [shape=ellipse]<br />
Delivery [shape=ellipse]<br />
Labour [shape=ellipse]<br />
IfcCostItem -> IfcQuantityArea [label="CostQuantities"]<br />
IfcQuantityArea -> 5 [label=AreaValue]<br />
5 [shape=ellipse]<br />
<br />
IfcRelNests -> secondcostitem [label="RelatedObjects[1]"]<br />
secondcostitem -> secondcostvalue [label="CostValues"]<br />
secondcostvalue -> 7<br />
7 [shape=ellipse]<br />
secondcostvalue [label="IfcCostValue"]<br />
secondcostitem [label="IfcCostItem"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costitem-costvalue-category-filter.png]]<br />
<br />
This is very similar to the concept of using the special "*" category to sum the total cost of all nested cost items. However, the difference in that this time, we do not sum the total costs, we only sum the costs that relate to the category specified in the category attribute.<br />
<br />
In this example, the first nested cost item has a unit Delivery cost of 3, and a quantity of 5. We don't count the unit Labour cost because it does not match our filter of "Delivery". This gives a total cost of 3 x 5 = 15. The second nested cost item also does not have any cost values belonging to a "Delivery" category. Therefore the final sum of all nested cost items that meet the "Delivery" filter is 15.<br />
<br />
This means that if you have a "Category" filled out for a cost value, its value will always be derived if you have nested cost items. If you do not have any cost items, then you are free to fill in a value.<br />
<br />
Source: IfcCostItem<br />
<br />
== A cost value may be calculated from a formula ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcCostValue -> one [label="Components[0]"]<br />
IfcCostValue -> two [label="Components[1]"]<br />
IfcCostValue -> MULTIPLY [label="ArithmeticOperator"]<br />
one -> 2 [label=AppliedValue]<br />
two -> 3 [label=AppliedValue]<br />
one [label="IfcCostValue"]<br />
two [label="IfcCostValue"]<br />
2 [shape=ellipse]<br />
3 [shape=ellipse]<br />
MULTIPLY [shape=ellipse]<br />
IfcCostValue -> 6 [label="AppliedValue"]<br />
6 [shape=ellipse]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costitem-costvalue-components.png]]<br />
<br />
A cost value may be calculated from a formula, like "3 x 2". The operands of this formula ("3" and "2") are known as components. The operator of the formula ("x") is known as t he arithmetic operator. This may be nested, or use summing or category filters to create complex formulas to derive the cost value.<br />
<br />
Source: IfcCostItem</div>Moulthttps://wiki.osarch.org/index.php?title=IFC_-_Industry_Foundation_Classes/IFC_concepts/IFC_cost_concepts&diff=4095IFC - Industry Foundation Classes/IFC concepts/IFC cost concepts2021-08-10T05:09:13Z<p>Moult: </p>
<hr />
<div>The primary classes related to this concept are:<br />
<br />
* IfcCostSchedule<br />
* IfcCostItem<br />
* IfcCostValue<br />
<br />
== A cost schedule can exist ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelDeclares -> IfcProject [ label="RelatingContext" ];<br />
IfcRelDeclares -> IfcCostSchedule [ label="RelatedDefinitions" ];<br />
IfcRelDeclares [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule.png]]<br />
<br />
A cost schedule is a collection of cost items, used for a specified purpose. Typical purposes are cost plans and tenders.<br />
<br />
Note: there is no explicit documentation which explains how a cost schedule is related back to the project or context. Therefore, in the absence of documentation, we are assuming that we declare it to the project as shown. However, this is only an assumption. There are explicit arguments against this assumption, such as that a cost schedule must be tied back to a project order. However, this evidence is not considered strong enough as it is never mentioned in the cost schedule documentation page itself.<br />
<br />
Source: IfcProjectOrder<br />
<br />
== A cost schedule can be part of a project order ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAggregates -> IfcProjectOrder [ label="RelatingObject" ];<br />
IfcRelAggregates -> IfcCostSchedule [ label="RelatedObjects" ];<br />
IfcRelAggregates [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-projectorder.png]]<br />
<br />
Project orders, such as work orders, change orders, or in particular purchase orders, may include a cost schedule. For example, a cost schedule may be used to provide an estimate of costs for a work order.<br />
<br />
Source: IfcCostSchedule, IfcProjectOrder<br />
<br />
== A cost schedule may have approval requests ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAssociatesApproval -> IfcApproval [ label="RelatingApproval" ];<br />
IfcRelAssociatesApproval -> IfcCostSchedule [ label="RelatedObjects" ];<br />
IfcRelAssociatesApproval [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule-approval.png]]<br />
<br />
A cost schedule may have an approval associated with it, to determine whether it is approved or not.<br />
<br />
Source: IfcCostSchedule<br />
<br />
== A cost schedule may have a series of approvals ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAssociatesApproval -> IfcCostSchedule [ label="RelatedObjects" ];<br />
IfcRelAssociatesApproval -> IfcApproval [ label="RelatingApproval" ];<br />
IfcRelAssociatesApproval [color="pink"]<br />
IfcApprovalRelationship [color="pink"]<br />
IfcApprovalRelationship -> IfcApproval [label="RelatingApproval"]<br />
IfcApprovalRelationship -> approval2 [label="RelatedApprovals"]<br />
approval2 [label="IfcApproval"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule-approval-rel.png]]<br />
<br />
An approval that relates to a cost schedule may itself be broken down into sub approvals. This implies that the sub approvals (RelatedApprovals) must first be approved before the parent approval (RelatingApproval) may be approved.<br />
<br />
Source: IfcCostSchedule<br />
<br />
== A cost schedule may have actors associated with it ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAssignsToActor -> IfcCostSchedule [ label="RelatedObjects" ];<br />
IfcRelAssignsToActor -> IfcActor [ label="RelatingActor" ];<br />
IfcRelAssignsToActor [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule-actor.png]]<br />
<br />
A cost schedule may describe the people who authored it, who are stakeholders, recipients, or clients.<br />
<br />
Source: IfcCostSchedule<br />
<br />
== A cost schedule may contain cost items ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAssignsToControl -> IfcCostSchedule [ label="RelatingControl" ];<br />
IfcRelAssignsToControl -> IfcCostItem [ label="RelatedObjects" ];<br />
IfcRelAssignsToControl [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule-costitem.png]]<br />
<br />
Cost schedules can contain a single summary cost item. An IfcCostItem describes a cost or financial value together with descriptive information that describes its context in a form that enables it to be used within a cost schedule. An IfcCostItem can be used to represent the cost of goods and services, the execution of works by a process, lifecycle cost and more. This summary cost item may then be broken down further into more cost items, but only one summary cost item is allowed.<br />
<br />
Source: IfcCostSchedule<br />
<br />
== A cost item may be assigned a classification reference ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color=lightblue ];<br />
edge [ fontsize=10 ];<br />
IfcRelAssociatesClassification [color=pink]<br />
IfcRelAssociatesClassification -> IfcCostItem [ label="RelatedObjects" ];<br />
IfcRelAssociatesClassification -> IfcClassificationReference [ label="RelatingClassification" ];<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costitem-classification.png]]<br />
<br />
Cost items may relate to an external classification system, where a variety of identification codes are used extensively to identify the meaning of the cost. Examples include project phase codes, CSI codes, takeoff sequence numbers, and cost accounts.<br />
<br />
Source: IfcCostItem<br />
<br />
== A cost item may nest cost items ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color=lightblue ];<br />
edge [ fontsize=10 ];<br />
<br />
IfcRelNests [color=pink]<br />
IfcRelNests -> IfcCostItem [label="RelatingObject"]<br />
IfcRelNests -> subitem [label="RelatedObjects"]<br />
subitem [label="IfcCostItem"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costitem-nest.png]]<br />
<br />
A cost item may have cost items nested within it, typically forming the hierarchy or breakdown of a cost schedule.<br />
<br />
Source: IfcCostItem<br />
<br />
== A cost item may include arbitrary quantities ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcCostItem -> IfcQuantityVolume [ label="CostQuantities[0]" ];<br />
IfcCostItem -> IfcQuantityVolume2 [ label="CostQuantities[1]" ];<br />
IfcQuantityVolume2 [label="IfcQuantityVolume"]<br />
IfcQuantityVolume -> 3 [label="VolumeValue"]<br />
IfcQuantityVolume2 -> 2 [label="VolumeValue"]<br />
3 [shape=ellipse]<br />
2 [shape=ellipse]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costitem-costquantity.png]]<br />
<br />
A cost item may specify arbitrary quantities. These quantities are not linked to model elements. If multiple quantities are included for a single cost item, each individual quantity is a component which may be summed together to derive the total quantity. For example, this cost item has two components: one with volume of 3m2, another of 2m2. The total quantity is 3 + 2 = 5. All quantities must match the same measurement type (e.g. volume, area, count, etc).<br />
<br />
Source: IfcCostItem<br />
<br />
== A cost item may have a total monetary cost value ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcCostItem -> IfcCostValue [ label="CostValues" ];<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costitem-costvalue.png]]<br />
<br />
If a cost item has no cost quantities, this cost value represents the total cost of the cost item.<br />
<br />
Source: IfcCostItem<br />
<br />
== A cost item may have a total cost derived from a unit value and quantities ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcCostItem -> IfcQuantityVolume [ label="CostQuantities" ];<br />
IfcCostItem -> IfcCostValue [ label="CostValues" ];<br />
IfcQuantityVolume -> 3 [label="VolumeValue"]<br />
IfcCostValue -> 2 [label="AppliedValue"]<br />
3 [shape=ellipse]<br />
2 [shape=ellipse]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costitem-costvalue-unit.png]]<br />
<br />
If a cost item has quantities, the cost value represents a unit cost of the cost item, which is "2" in this case. The total cost of the cost item is derived by multiplying the cost quantities and the unit cost, which is 3 x 2 = 6 in this example.<br />
<br />
Source: IfcCostItem<br />
<br />
== The value of a cost item may be broken down into categories ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcCostItem -> IfcCostValue [ label="CostValues[0]" ];<br />
IfcCostItem -> IfcCostValue2 [ label="CostValues[1]" ];<br />
IfcCostValue2 [label="IfcCostValue"]<br />
IfcCostValue -> 3 [label="AppliedValue"]<br />
IfcCostValue2 -> 2 [label="AppliedValue"]<br />
IfcCostValue -> Delivery [label="Category"]<br />
IfcCostValue2 -> Labour [label="Category"]<br />
3 [shape=ellipse]<br />
2 [shape=ellipse]<br />
Delivery [shape=ellipse]<br />
Labour [shape=ellipse]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costitem-costvalue-category.png]]<br />
<br />
Cost values may be categorised to understand the cost breakdown. Example categories are delivery, labour, installation, overhead, material, storage, transportation, and more.<br />
<br />
Source: IfcCostItem, IfcCostValue<br />
<br />
== The value of a cost item may be calculated from the sum of its nested cost items ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelNests -> summary [label="RelatingObject"]<br />
IfcRelNests -> IfcCostItem [label="RelatedObjects[0]"]<br />
IfcRelNests [color="pink"]<br />
<br />
summary->costvalue [label="CostValues"]<br />
costvalue->sum [label="Category"]<br />
costvalue -> 32 [label="AppliedValue"]<br />
costvalue [ label="IfcCostValue"]<br />
summary[label="IfcCostItem"]<br />
sum [label="*", shape=ellipse]<br />
32 [shape=ellipse]<br />
<br />
IfcCostItem -> IfcCostValue [ label="CostValues[0]" ];<br />
IfcCostItem -> IfcCostValue2 [ label="CostValues[1]" ];<br />
IfcCostValue2 [label="IfcCostValue"]<br />
IfcCostValue -> 3 [label="AppliedValue"]<br />
IfcCostValue2 -> 2 [label="AppliedValue"]<br />
IfcCostValue -> Delivery [label="Category"]<br />
IfcCostValue2 -> Labour [label="Category"]<br />
3 [shape=ellipse]<br />
2 [shape=ellipse]<br />
Delivery [shape=ellipse]<br />
Labour [shape=ellipse]<br />
IfcCostItem -> IfcQuantityArea [label="CostQuantities"]<br />
IfcQuantityArea -> 5 [label=AreaValue]<br />
5 [shape=ellipse]<br />
<br />
IfcRelNests -> secondcostitem [label="RelatedObjects[1]"]<br />
secondcostitem -> secondcostvalue [label="CostValues"]<br />
secondcostvalue -> 7<br />
7 [shape=ellipse]<br />
secondcostvalue [label="IfcCostValue"]<br />
secondcostitem [label="IfcCostItem"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costitem-costvalue-category-sum.png]]<br />
<br />
When the cost value has a special category of "*", this means that its value is calculated from the sum of the costs of all nested cost items.<br />
<br />
In this example, the parent cost item has a two nested child cost items. The first nested item has a total unit cost of 3 + 2 = 5, and a total quantity of 5. This gives a total cost of the nested child of 5 x 5 = 25. The second nested item has a total cost of 7. Therefore, the sum of all nested cost items is 25 + 7 = 32.<br />
<br />
Source: IfcCostItem<br />
<br />
== The value of a cost item may be calculated from the sum of its nested cost items, filtered by a category ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelNests -> summary [label="RelatingObject"]<br />
IfcRelNests -> IfcCostItem [label="RelatedObjects[0]"]<br />
IfcRelNests [color="pink"]<br />
<br />
summary->costvalue [label="CostValues"]<br />
costvalue->sum [label="Category"]<br />
costvalue -> 15 [label="AppliedValue"]<br />
costvalue [ label="IfcCostValue"]<br />
summary[label="IfcCostItem"]<br />
sum [label="Delivery", shape=ellipse]<br />
15 [shape=ellipse]<br />
<br />
IfcCostItem -> IfcCostValue [ label="CostValues[0]" ];<br />
IfcCostItem -> IfcCostValue2 [ label="CostValues[1]" ];<br />
IfcCostValue2 [label="IfcCostValue"]<br />
IfcCostValue -> 3 [label="AppliedValue"]<br />
IfcCostValue2 -> 2 [label="AppliedValue"]<br />
IfcCostValue -> Delivery [label="Category"]<br />
IfcCostValue2 -> Labour [label="Category"]<br />
3 [shape=ellipse]<br />
2 [shape=ellipse]<br />
Delivery [shape=ellipse]<br />
Labour [shape=ellipse]<br />
IfcCostItem -> IfcQuantityArea [label="CostQuantities"]<br />
IfcQuantityArea -> 5 [label=AreaValue]<br />
5 [shape=ellipse]<br />
<br />
IfcRelNests -> secondcostitem [label="RelatedObjects[1]"]<br />
secondcostitem -> secondcostvalue [label="CostValues"]<br />
secondcostvalue -> 7<br />
7 [shape=ellipse]<br />
secondcostvalue [label="IfcCostValue"]<br />
secondcostitem [label="IfcCostItem"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costitem-costvalue-category-filter.png]]<br />
<br />
This is very similar to the concept of using the special "*" category to sum the total cost of all nested cost items. However, the difference in that this time, we do not sum the total costs, we only sum the costs that relate to the category specified in the category attribute.<br />
<br />
In this example, the first nested cost item has a unit Delivery cost of 3, and a quantity of 5. We don't count the unit Labour cost because it does not match our filter of "Delivery". This gives a total cost of 3 x 5 = 15. The second nested cost item also does not have any cost values belonging to a "Delivery" category. Therefore the final sum of all nested cost items that meet the "Delivery" filter is 15.<br />
<br />
This means that if you have a "Category" filled out for a cost value, its value will always be derived if you have nested cost items. If you do not have any cost items, then you are free to fill in a value.<br />
<br />
Source: IfcCostItem<br />
<br />
== The value of a cost item may be calculated from a formula ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcCostValue -> one [label="Components[0]"]<br />
IfcCostValue -> two [label="Components[1]"]<br />
IfcCostValue -> MULTIPLY [label="ArithmeticOperator"]<br />
one -> 2 [label=AppliedValue]<br />
two -> 3 [label=AppliedValue]<br />
one [label="IfcCostValue"]<br />
two [label="IfcCostValue"]<br />
2 [shape=ellipse]<br />
3 [shape=ellipse]<br />
MULTIPLY [shape=ellipse]<br />
IfcCostValue -> 6 [label="AppliedValue"]<br />
6 [shape=ellipse]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costitem-costvalue-components.png]]<br />
<br />
A cost value may be calculated from a formula, like "3 x 2". The operands of this formula ("3" and "2") are known as components. The operator of the formula ("x") is known as t he arithmetic operator. This may be nested, or use summing or category filters to create complex formulas to derive the cost value.<br />
<br />
Source: IfcCostItem</div>Moulthttps://wiki.osarch.org/index.php?title=File:Ifc-concept-cost-costitem-costvalue-components.png&diff=4094File:Ifc-concept-cost-costitem-costvalue-components.png2021-08-10T05:06:59Z<p>Moult: </p>
<hr />
<div>Ifc-concept-cost-costitem-costvalue-components</div>Moulthttps://wiki.osarch.org/index.php?title=IFC_-_Industry_Foundation_Classes/IFC_concepts/IFC_cost_concepts&diff=4093IFC - Industry Foundation Classes/IFC concepts/IFC cost concepts2021-08-10T04:49:43Z<p>Moult: /* The value of a cost item may be calculated from the sum of its nested cost items, filtered by a category */</p>
<hr />
<div>The primary classes related to this concept are:<br />
<br />
* IfcCostSchedule<br />
* IfcCostItem<br />
* IfcCostValue<br />
<br />
== A cost schedule can exist ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelDeclares -> IfcProject [ label="RelatingContext" ];<br />
IfcRelDeclares -> IfcCostSchedule [ label="RelatedDefinitions" ];<br />
IfcRelDeclares [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule.png]]<br />
<br />
A cost schedule is a collection of cost items, used for a specified purpose. Typical purposes are cost plans and tenders.<br />
<br />
Note: there is no explicit documentation which explains how a cost schedule is related back to the project or context. Therefore, in the absence of documentation, we are assuming that we declare it to the project as shown. However, this is only an assumption. There are explicit arguments against this assumption, such as that a cost schedule must be tied back to a project order. However, this evidence is not considered strong enough as it is never mentioned in the cost schedule documentation page itself.<br />
<br />
Source: IfcProjectOrder<br />
<br />
== A cost schedule can be part of a project order ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAggregates -> IfcProjectOrder [ label="RelatingObject" ];<br />
IfcRelAggregates -> IfcCostSchedule [ label="RelatedObjects" ];<br />
IfcRelAggregates [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-projectorder.png]]<br />
<br />
Project orders, such as work orders, change orders, or in particular purchase orders, may include a cost schedule. For example, a cost schedule may be used to provide an estimate of costs for a work order.<br />
<br />
Source: IfcCostSchedule, IfcProjectOrder<br />
<br />
== A cost schedule may have approval requests ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAssociatesApproval -> IfcApproval [ label="RelatingApproval" ];<br />
IfcRelAssociatesApproval -> IfcCostSchedule [ label="RelatedObjects" ];<br />
IfcRelAssociatesApproval [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule-approval.png]]<br />
<br />
A cost schedule may have an approval associated with it, to determine whether it is approved or not.<br />
<br />
Source: IfcCostSchedule<br />
<br />
== A cost schedule may have a series of approvals ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAssociatesApproval -> IfcCostSchedule [ label="RelatedObjects" ];<br />
IfcRelAssociatesApproval -> IfcApproval [ label="RelatingApproval" ];<br />
IfcRelAssociatesApproval [color="pink"]<br />
IfcApprovalRelationship [color="pink"]<br />
IfcApprovalRelationship -> IfcApproval [label="RelatingApproval"]<br />
IfcApprovalRelationship -> approval2 [label="RelatedApprovals"]<br />
approval2 [label="IfcApproval"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule-approval-rel.png]]<br />
<br />
An approval that relates to a cost schedule may itself be broken down into sub approvals. This implies that the sub approvals (RelatedApprovals) must first be approved before the parent approval (RelatingApproval) may be approved.<br />
<br />
Source: IfcCostSchedule<br />
<br />
== A cost schedule may have actors associated with it ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAssignsToActor -> IfcCostSchedule [ label="RelatedObjects" ];<br />
IfcRelAssignsToActor -> IfcActor [ label="RelatingActor" ];<br />
IfcRelAssignsToActor [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule-actor.png]]<br />
<br />
A cost schedule may describe the people who authored it, who are stakeholders, recipients, or clients.<br />
<br />
Source: IfcCostSchedule<br />
<br />
== A cost schedule may contain cost items ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAssignsToControl -> IfcCostSchedule [ label="RelatingControl" ];<br />
IfcRelAssignsToControl -> IfcCostItem [ label="RelatedObjects" ];<br />
IfcRelAssignsToControl [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule-costitem.png]]<br />
<br />
Cost schedules can contain a single summary cost item. An IfcCostItem describes a cost or financial value together with descriptive information that describes its context in a form that enables it to be used within a cost schedule. An IfcCostItem can be used to represent the cost of goods and services, the execution of works by a process, lifecycle cost and more. This summary cost item may then be broken down further into more cost items, but only one summary cost item is allowed.<br />
<br />
Source: IfcCostSchedule<br />
<br />
== A cost item may be assigned a classification reference ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color=lightblue ];<br />
edge [ fontsize=10 ];<br />
IfcRelAssociatesClassification [color=pink]<br />
IfcRelAssociatesClassification -> IfcCostItem [ label="RelatedObjects" ];<br />
IfcRelAssociatesClassification -> IfcClassificationReference [ label="RelatingClassification" ];<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costitem-classification.png]]<br />
<br />
Cost items may relate to an external classification system, where a variety of identification codes are used extensively to identify the meaning of the cost. Examples include project phase codes, CSI codes, takeoff sequence numbers, and cost accounts.<br />
<br />
Source: IfcCostItem<br />
<br />
== A cost item may nest cost items ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color=lightblue ];<br />
edge [ fontsize=10 ];<br />
<br />
IfcRelNests [color=pink]<br />
IfcRelNests -> IfcCostItem [label="RelatingObject"]<br />
IfcRelNests -> subitem [label="RelatedObjects"]<br />
subitem [label="IfcCostItem"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costitem-nest.png]]<br />
<br />
A cost item may have cost items nested within it, typically forming the hierarchy or breakdown of a cost schedule.<br />
<br />
Source: IfcCostItem<br />
<br />
== A cost item may include arbitrary quantities ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcCostItem -> IfcQuantityVolume [ label="CostQuantities[0]" ];<br />
IfcCostItem -> IfcQuantityVolume2 [ label="CostQuantities[1]" ];<br />
IfcQuantityVolume2 [label="IfcQuantityVolume"]<br />
IfcQuantityVolume -> 3 [label="VolumeValue"]<br />
IfcQuantityVolume2 -> 2 [label="VolumeValue"]<br />
3 [shape=ellipse]<br />
2 [shape=ellipse]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costitem-costquantity.png]]<br />
<br />
A cost item may specify arbitrary quantities. These quantities are not linked to model elements. If multiple quantities are included for a single cost item, each individual quantity is a component which may be summed together to derive the total quantity. For example, this cost item has two components: one with volume of 3m2, another of 2m2. The total quantity is 3 + 2 = 5. All quantities must match the same measurement type (e.g. volume, area, count, etc).<br />
<br />
Source: IfcCostItem<br />
<br />
== A cost item may have a total monetary cost value ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcCostItem -> IfcCostValue [ label="CostValues" ];<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costitem-costvalue.png]]<br />
<br />
If a cost item has no cost quantities, this cost value represents the total cost of the cost item.<br />
<br />
Source: IfcCostItem<br />
<br />
== A cost item may have a total cost derived from a unit value and quantities ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcCostItem -> IfcQuantityVolume [ label="CostQuantities" ];<br />
IfcCostItem -> IfcCostValue [ label="CostValues" ];<br />
IfcQuantityVolume -> 3 [label="VolumeValue"]<br />
IfcCostValue -> 2 [label="AppliedValue"]<br />
3 [shape=ellipse]<br />
2 [shape=ellipse]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costitem-costvalue-unit.png]]<br />
<br />
If a cost item has quantities, the cost value represents a unit cost of the cost item, which is "2" in this case. The total cost of the cost item is derived by multiplying the cost quantities and the unit cost, which is 3 x 2 = 6 in this example.<br />
<br />
Source: IfcCostItem<br />
<br />
== The value of a cost item may be broken down into categories ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcCostItem -> IfcCostValue [ label="CostValues[0]" ];<br />
IfcCostItem -> IfcCostValue2 [ label="CostValues[1]" ];<br />
IfcCostValue2 [label="IfcCostValue"]<br />
IfcCostValue -> 3 [label="AppliedValue"]<br />
IfcCostValue2 -> 2 [label="AppliedValue"]<br />
IfcCostValue -> Delivery [label="Category"]<br />
IfcCostValue2 -> Labour [label="Category"]<br />
3 [shape=ellipse]<br />
2 [shape=ellipse]<br />
Delivery [shape=ellipse]<br />
Labour [shape=ellipse]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costitem-costvalue-category.png]]<br />
<br />
Cost values may be categorised to understand the cost breakdown. Example categories are delivery, labour, installation, overhead, material, storage, transportation, and more.<br />
<br />
Source: IfcCostItem, IfcCostValue<br />
<br />
== The value of a cost item may be calculated from the sum of its nested cost items ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelNests -> summary [label="RelatingObject"]<br />
IfcRelNests -> IfcCostItem [label="RelatedObjects[0]"]<br />
IfcRelNests [color="pink"]<br />
<br />
summary->costvalue [label="CostValues"]<br />
costvalue->sum [label="Category"]<br />
costvalue -> 32 [label="AppliedValue"]<br />
costvalue [ label="IfcCostValue"]<br />
summary[label="IfcCostItem"]<br />
sum [label="*", shape=ellipse]<br />
32 [shape=ellipse]<br />
<br />
IfcCostItem -> IfcCostValue [ label="CostValues[0]" ];<br />
IfcCostItem -> IfcCostValue2 [ label="CostValues[1]" ];<br />
IfcCostValue2 [label="IfcCostValue"]<br />
IfcCostValue -> 3 [label="AppliedValue"]<br />
IfcCostValue2 -> 2 [label="AppliedValue"]<br />
IfcCostValue -> Delivery [label="Category"]<br />
IfcCostValue2 -> Labour [label="Category"]<br />
3 [shape=ellipse]<br />
2 [shape=ellipse]<br />
Delivery [shape=ellipse]<br />
Labour [shape=ellipse]<br />
IfcCostItem -> IfcQuantityArea [label="CostQuantities"]<br />
IfcQuantityArea -> 5 [label=AreaValue]<br />
5 [shape=ellipse]<br />
<br />
IfcRelNests -> secondcostitem [label="RelatedObjects[1]"]<br />
secondcostitem -> secondcostvalue [label="CostValues"]<br />
secondcostvalue -> 7<br />
7 [shape=ellipse]<br />
secondcostvalue [label="IfcCostValue"]<br />
secondcostitem [label="IfcCostItem"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costitem-costvalue-category-sum.png]]<br />
<br />
When the cost value has a special category of "*", this means that its value is calculated from the sum of the costs of all nested cost items.<br />
<br />
In this example, the parent cost item has a two nested child cost items. The first nested item has a total unit cost of 3 + 2 = 5, and a total quantity of 5. This gives a total cost of the nested child of 5 x 5 = 25. The second nested item has a total cost of 7. Therefore, the sum of all nested cost items is 25 + 7 = 32.<br />
<br />
Source: IfcCostItem<br />
<br />
== The value of a cost item may be calculated from the sum of its nested cost items, filtered by a category ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelNests -> summary [label="RelatingObject"]<br />
IfcRelNests -> IfcCostItem [label="RelatedObjects[0]"]<br />
IfcRelNests [color="pink"]<br />
<br />
summary->costvalue [label="CostValues"]<br />
costvalue->sum [label="Category"]<br />
costvalue -> 15 [label="AppliedValue"]<br />
costvalue [ label="IfcCostValue"]<br />
summary[label="IfcCostItem"]<br />
sum [label="Delivery", shape=ellipse]<br />
15 [shape=ellipse]<br />
<br />
IfcCostItem -> IfcCostValue [ label="CostValues[0]" ];<br />
IfcCostItem -> IfcCostValue2 [ label="CostValues[1]" ];<br />
IfcCostValue2 [label="IfcCostValue"]<br />
IfcCostValue -> 3 [label="AppliedValue"]<br />
IfcCostValue2 -> 2 [label="AppliedValue"]<br />
IfcCostValue -> Delivery [label="Category"]<br />
IfcCostValue2 -> Labour [label="Category"]<br />
3 [shape=ellipse]<br />
2 [shape=ellipse]<br />
Delivery [shape=ellipse]<br />
Labour [shape=ellipse]<br />
IfcCostItem -> IfcQuantityArea [label="CostQuantities"]<br />
IfcQuantityArea -> 5 [label=AreaValue]<br />
5 [shape=ellipse]<br />
<br />
IfcRelNests -> secondcostitem [label="RelatedObjects[1]"]<br />
secondcostitem -> secondcostvalue [label="CostValues"]<br />
secondcostvalue -> 7<br />
7 [shape=ellipse]<br />
secondcostvalue [label="IfcCostValue"]<br />
secondcostitem [label="IfcCostItem"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costitem-costvalue-category-filter.png]]<br />
<br />
This is very similar to the concept of using the special "*" category to sum the total cost of all nested cost items. However, the difference in that this time, we do not sum the total costs, we only sum the costs that relate to the category specified in the category attribute.<br />
<br />
In this example, the first nested cost item has a unit Delivery cost of 3, and a quantity of 5. We don't count the unit Labour cost because it does not match our filter of "Delivery". This gives a total cost of 3 x 5 = 15. The second nested cost item also does not have any cost values belonging to a "Delivery" category. Therefore the final sum of all nested cost items that meet the "Delivery" filter is 15.<br />
<br />
This means that if you have a "Category" filled out for a cost value, its value will always be derived if you have nested cost items. If you do not have any cost items, then you are free to fill in a value.<br />
<br />
Source: IfcCostItem</div>Moulthttps://wiki.osarch.org/index.php?title=IFC_-_Industry_Foundation_Classes/IFC_concepts/IFC_cost_concepts&diff=4092IFC - Industry Foundation Classes/IFC concepts/IFC cost concepts2021-08-10T04:48:43Z<p>Moult: </p>
<hr />
<div>The primary classes related to this concept are:<br />
<br />
* IfcCostSchedule<br />
* IfcCostItem<br />
* IfcCostValue<br />
<br />
== A cost schedule can exist ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelDeclares -> IfcProject [ label="RelatingContext" ];<br />
IfcRelDeclares -> IfcCostSchedule [ label="RelatedDefinitions" ];<br />
IfcRelDeclares [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule.png]]<br />
<br />
A cost schedule is a collection of cost items, used for a specified purpose. Typical purposes are cost plans and tenders.<br />
<br />
Note: there is no explicit documentation which explains how a cost schedule is related back to the project or context. Therefore, in the absence of documentation, we are assuming that we declare it to the project as shown. However, this is only an assumption. There are explicit arguments against this assumption, such as that a cost schedule must be tied back to a project order. However, this evidence is not considered strong enough as it is never mentioned in the cost schedule documentation page itself.<br />
<br />
Source: IfcProjectOrder<br />
<br />
== A cost schedule can be part of a project order ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAggregates -> IfcProjectOrder [ label="RelatingObject" ];<br />
IfcRelAggregates -> IfcCostSchedule [ label="RelatedObjects" ];<br />
IfcRelAggregates [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-projectorder.png]]<br />
<br />
Project orders, such as work orders, change orders, or in particular purchase orders, may include a cost schedule. For example, a cost schedule may be used to provide an estimate of costs for a work order.<br />
<br />
Source: IfcCostSchedule, IfcProjectOrder<br />
<br />
== A cost schedule may have approval requests ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAssociatesApproval -> IfcApproval [ label="RelatingApproval" ];<br />
IfcRelAssociatesApproval -> IfcCostSchedule [ label="RelatedObjects" ];<br />
IfcRelAssociatesApproval [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule-approval.png]]<br />
<br />
A cost schedule may have an approval associated with it, to determine whether it is approved or not.<br />
<br />
Source: IfcCostSchedule<br />
<br />
== A cost schedule may have a series of approvals ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAssociatesApproval -> IfcCostSchedule [ label="RelatedObjects" ];<br />
IfcRelAssociatesApproval -> IfcApproval [ label="RelatingApproval" ];<br />
IfcRelAssociatesApproval [color="pink"]<br />
IfcApprovalRelationship [color="pink"]<br />
IfcApprovalRelationship -> IfcApproval [label="RelatingApproval"]<br />
IfcApprovalRelationship -> approval2 [label="RelatedApprovals"]<br />
approval2 [label="IfcApproval"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule-approval-rel.png]]<br />
<br />
An approval that relates to a cost schedule may itself be broken down into sub approvals. This implies that the sub approvals (RelatedApprovals) must first be approved before the parent approval (RelatingApproval) may be approved.<br />
<br />
Source: IfcCostSchedule<br />
<br />
== A cost schedule may have actors associated with it ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAssignsToActor -> IfcCostSchedule [ label="RelatedObjects" ];<br />
IfcRelAssignsToActor -> IfcActor [ label="RelatingActor" ];<br />
IfcRelAssignsToActor [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule-actor.png]]<br />
<br />
A cost schedule may describe the people who authored it, who are stakeholders, recipients, or clients.<br />
<br />
Source: IfcCostSchedule<br />
<br />
== A cost schedule may contain cost items ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAssignsToControl -> IfcCostSchedule [ label="RelatingControl" ];<br />
IfcRelAssignsToControl -> IfcCostItem [ label="RelatedObjects" ];<br />
IfcRelAssignsToControl [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule-costitem.png]]<br />
<br />
Cost schedules can contain a single summary cost item. An IfcCostItem describes a cost or financial value together with descriptive information that describes its context in a form that enables it to be used within a cost schedule. An IfcCostItem can be used to represent the cost of goods and services, the execution of works by a process, lifecycle cost and more. This summary cost item may then be broken down further into more cost items, but only one summary cost item is allowed.<br />
<br />
Source: IfcCostSchedule<br />
<br />
== A cost item may be assigned a classification reference ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color=lightblue ];<br />
edge [ fontsize=10 ];<br />
IfcRelAssociatesClassification [color=pink]<br />
IfcRelAssociatesClassification -> IfcCostItem [ label="RelatedObjects" ];<br />
IfcRelAssociatesClassification -> IfcClassificationReference [ label="RelatingClassification" ];<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costitem-classification.png]]<br />
<br />
Cost items may relate to an external classification system, where a variety of identification codes are used extensively to identify the meaning of the cost. Examples include project phase codes, CSI codes, takeoff sequence numbers, and cost accounts.<br />
<br />
Source: IfcCostItem<br />
<br />
== A cost item may nest cost items ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color=lightblue ];<br />
edge [ fontsize=10 ];<br />
<br />
IfcRelNests [color=pink]<br />
IfcRelNests -> IfcCostItem [label="RelatingObject"]<br />
IfcRelNests -> subitem [label="RelatedObjects"]<br />
subitem [label="IfcCostItem"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costitem-nest.png]]<br />
<br />
A cost item may have cost items nested within it, typically forming the hierarchy or breakdown of a cost schedule.<br />
<br />
Source: IfcCostItem<br />
<br />
== A cost item may include arbitrary quantities ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcCostItem -> IfcQuantityVolume [ label="CostQuantities[0]" ];<br />
IfcCostItem -> IfcQuantityVolume2 [ label="CostQuantities[1]" ];<br />
IfcQuantityVolume2 [label="IfcQuantityVolume"]<br />
IfcQuantityVolume -> 3 [label="VolumeValue"]<br />
IfcQuantityVolume2 -> 2 [label="VolumeValue"]<br />
3 [shape=ellipse]<br />
2 [shape=ellipse]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costitem-costquantity.png]]<br />
<br />
A cost item may specify arbitrary quantities. These quantities are not linked to model elements. If multiple quantities are included for a single cost item, each individual quantity is a component which may be summed together to derive the total quantity. For example, this cost item has two components: one with volume of 3m2, another of 2m2. The total quantity is 3 + 2 = 5. All quantities must match the same measurement type (e.g. volume, area, count, etc).<br />
<br />
Source: IfcCostItem<br />
<br />
== A cost item may have a total monetary cost value ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcCostItem -> IfcCostValue [ label="CostValues" ];<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costitem-costvalue.png]]<br />
<br />
If a cost item has no cost quantities, this cost value represents the total cost of the cost item.<br />
<br />
Source: IfcCostItem<br />
<br />
== A cost item may have a total cost derived from a unit value and quantities ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcCostItem -> IfcQuantityVolume [ label="CostQuantities" ];<br />
IfcCostItem -> IfcCostValue [ label="CostValues" ];<br />
IfcQuantityVolume -> 3 [label="VolumeValue"]<br />
IfcCostValue -> 2 [label="AppliedValue"]<br />
3 [shape=ellipse]<br />
2 [shape=ellipse]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costitem-costvalue-unit.png]]<br />
<br />
If a cost item has quantities, the cost value represents a unit cost of the cost item, which is "2" in this case. The total cost of the cost item is derived by multiplying the cost quantities and the unit cost, which is 3 x 2 = 6 in this example.<br />
<br />
Source: IfcCostItem<br />
<br />
== The value of a cost item may be broken down into categories ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcCostItem -> IfcCostValue [ label="CostValues[0]" ];<br />
IfcCostItem -> IfcCostValue2 [ label="CostValues[1]" ];<br />
IfcCostValue2 [label="IfcCostValue"]<br />
IfcCostValue -> 3 [label="AppliedValue"]<br />
IfcCostValue2 -> 2 [label="AppliedValue"]<br />
IfcCostValue -> Delivery [label="Category"]<br />
IfcCostValue2 -> Labour [label="Category"]<br />
3 [shape=ellipse]<br />
2 [shape=ellipse]<br />
Delivery [shape=ellipse]<br />
Labour [shape=ellipse]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costitem-costvalue-category.png]]<br />
<br />
Cost values may be categorised to understand the cost breakdown. Example categories are delivery, labour, installation, overhead, material, storage, transportation, and more.<br />
<br />
Source: IfcCostItem, IfcCostValue<br />
<br />
== The value of a cost item may be calculated from the sum of its nested cost items ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelNests -> summary [label="RelatingObject"]<br />
IfcRelNests -> IfcCostItem [label="RelatedObjects[0]"]<br />
IfcRelNests [color="pink"]<br />
<br />
summary->costvalue [label="CostValues"]<br />
costvalue->sum [label="Category"]<br />
costvalue -> 32 [label="AppliedValue"]<br />
costvalue [ label="IfcCostValue"]<br />
summary[label="IfcCostItem"]<br />
sum [label="*", shape=ellipse]<br />
32 [shape=ellipse]<br />
<br />
IfcCostItem -> IfcCostValue [ label="CostValues[0]" ];<br />
IfcCostItem -> IfcCostValue2 [ label="CostValues[1]" ];<br />
IfcCostValue2 [label="IfcCostValue"]<br />
IfcCostValue -> 3 [label="AppliedValue"]<br />
IfcCostValue2 -> 2 [label="AppliedValue"]<br />
IfcCostValue -> Delivery [label="Category"]<br />
IfcCostValue2 -> Labour [label="Category"]<br />
3 [shape=ellipse]<br />
2 [shape=ellipse]<br />
Delivery [shape=ellipse]<br />
Labour [shape=ellipse]<br />
IfcCostItem -> IfcQuantityArea [label="CostQuantities"]<br />
IfcQuantityArea -> 5 [label=AreaValue]<br />
5 [shape=ellipse]<br />
<br />
IfcRelNests -> secondcostitem [label="RelatedObjects[1]"]<br />
secondcostitem -> secondcostvalue [label="CostValues"]<br />
secondcostvalue -> 7<br />
7 [shape=ellipse]<br />
secondcostvalue [label="IfcCostValue"]<br />
secondcostitem [label="IfcCostItem"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costitem-costvalue-category-sum.png]]<br />
<br />
When the cost value has a special category of "*", this means that its value is calculated from the sum of the costs of all nested cost items.<br />
<br />
In this example, the parent cost item has a two nested child cost items. The first nested item has a total unit cost of 3 + 2 = 5, and a total quantity of 5. This gives a total cost of the nested child of 5 x 5 = 25. The second nested item has a total cost of 7. Therefore, the sum of all nested cost items is 25 + 7 = 32.<br />
<br />
Source: IfcCostItem<br />
<br />
== The value of a cost item may be calculated from the sum of its nested cost items, filtered by a category ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelNests -> summary [label="RelatingObject"]<br />
IfcRelNests -> IfcCostItem [label="RelatedObjects[0]"]<br />
IfcRelNests [color="pink"]<br />
<br />
summary->costvalue [label="CostValues"]<br />
costvalue->sum [label="Category"]<br />
costvalue -> 15 [label="AppliedValue"]<br />
costvalue [ label="IfcCostValue"]<br />
summary[label="IfcCostItem"]<br />
sum [label="Delivery", shape=ellipse]<br />
15 [shape=ellipse]<br />
<br />
IfcCostItem -> IfcCostValue [ label="CostValues[0]" ];<br />
IfcCostItem -> IfcCostValue2 [ label="CostValues[1]" ];<br />
IfcCostValue2 [label="IfcCostValue"]<br />
IfcCostValue -> 3 [label="AppliedValue"]<br />
IfcCostValue2 -> 2 [label="AppliedValue"]<br />
IfcCostValue -> Delivery [label="Category"]<br />
IfcCostValue2 -> Labour [label="Category"]<br />
3 [shape=ellipse]<br />
2 [shape=ellipse]<br />
Delivery [shape=ellipse]<br />
Labour [shape=ellipse]<br />
IfcCostItem -> IfcQuantityArea [label="CostQuantities"]<br />
IfcQuantityArea -> 5 [label=AreaValue]<br />
5 [shape=ellipse]<br />
<br />
IfcRelNests -> secondcostitem [label="RelatedObjects[1]"]<br />
secondcostitem -> secondcostvalue [label="CostValues"]<br />
secondcostvalue -> 7<br />
7 [shape=ellipse]<br />
secondcostvalue [label="IfcCostValue"]<br />
secondcostitem [label="IfcCostItem"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costitem-costvalue-category-filter.png]]<br />
<br />
This is very similar to the concept of using the special "*" category to sum the total cost of all nested cost items. However, the difference in that this time, we do not sum the total costs, we only sum the costs that relate to the category specified in the category attribute.<br />
<br />
In this example, the first nested cost item has a unit Delivery cost of 3, and a quantity of 5. We don't count the unit Labour cost because it does not match our filter of "Delivery". This gives a total cost of 3 x 5 = 15. The second nested cost item also does not have any cost values belonging to a "Delivery" category. Therefore the final sum of all nested cost items that meet the "Delivery" filter is 15.<br />
<br />
Source: IfcCostItem</div>Moulthttps://wiki.osarch.org/index.php?title=File:Ifc-concept-cost-costitem-costvalue-category-filter.png&diff=4091File:Ifc-concept-cost-costitem-costvalue-category-filter.png2021-08-10T04:45:59Z<p>Moult: </p>
<hr />
<div>Ifc-concept-cost-costitem-costvalue-category-filter</div>Moulthttps://wiki.osarch.org/index.php?title=File:Ifc-concept-cost-costitem-costvalue-category-sum.png&diff=4090File:Ifc-concept-cost-costitem-costvalue-category-sum.png2021-08-10T04:42:11Z<p>Moult: Moult uploaded a new version of File:Ifc-concept-cost-costitem-costvalue-category-sum.png</p>
<hr />
<div>Ifc-concept-cost-costitem-costvalue-category-sum</div>Moulthttps://wiki.osarch.org/index.php?title=IFC_-_Industry_Foundation_Classes/IFC_concepts/IFC_cost_concepts&diff=4089IFC - Industry Foundation Classes/IFC concepts/IFC cost concepts2021-08-10T04:41:52Z<p>Moult: </p>
<hr />
<div>The primary classes related to this concept are:<br />
<br />
* IfcCostSchedule<br />
* IfcCostItem<br />
* IfcCostValue<br />
<br />
== A cost schedule can exist ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelDeclares -> IfcProject [ label="RelatingContext" ];<br />
IfcRelDeclares -> IfcCostSchedule [ label="RelatedDefinitions" ];<br />
IfcRelDeclares [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule.png]]<br />
<br />
A cost schedule is a collection of cost items, used for a specified purpose. Typical purposes are cost plans and tenders.<br />
<br />
Note: there is no explicit documentation which explains how a cost schedule is related back to the project or context. Therefore, in the absence of documentation, we are assuming that we declare it to the project as shown. However, this is only an assumption. There are explicit arguments against this assumption, such as that a cost schedule must be tied back to a project order. However, this evidence is not considered strong enough as it is never mentioned in the cost schedule documentation page itself.<br />
<br />
Source: IfcProjectOrder<br />
<br />
== A cost schedule can be part of a project order ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAggregates -> IfcProjectOrder [ label="RelatingObject" ];<br />
IfcRelAggregates -> IfcCostSchedule [ label="RelatedObjects" ];<br />
IfcRelAggregates [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-projectorder.png]]<br />
<br />
Project orders, such as work orders, change orders, or in particular purchase orders, may include a cost schedule. For example, a cost schedule may be used to provide an estimate of costs for a work order.<br />
<br />
Source: IfcCostSchedule, IfcProjectOrder<br />
<br />
== A cost schedule may have approval requests ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAssociatesApproval -> IfcApproval [ label="RelatingApproval" ];<br />
IfcRelAssociatesApproval -> IfcCostSchedule [ label="RelatedObjects" ];<br />
IfcRelAssociatesApproval [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule-approval.png]]<br />
<br />
A cost schedule may have an approval associated with it, to determine whether it is approved or not.<br />
<br />
Source: IfcCostSchedule<br />
<br />
== A cost schedule may have a series of approvals ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAssociatesApproval -> IfcCostSchedule [ label="RelatedObjects" ];<br />
IfcRelAssociatesApproval -> IfcApproval [ label="RelatingApproval" ];<br />
IfcRelAssociatesApproval [color="pink"]<br />
IfcApprovalRelationship [color="pink"]<br />
IfcApprovalRelationship -> IfcApproval [label="RelatingApproval"]<br />
IfcApprovalRelationship -> approval2 [label="RelatedApprovals"]<br />
approval2 [label="IfcApproval"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule-approval-rel.png]]<br />
<br />
An approval that relates to a cost schedule may itself be broken down into sub approvals. This implies that the sub approvals (RelatedApprovals) must first be approved before the parent approval (RelatingApproval) may be approved.<br />
<br />
Source: IfcCostSchedule<br />
<br />
== A cost schedule may have actors associated with it ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAssignsToActor -> IfcCostSchedule [ label="RelatedObjects" ];<br />
IfcRelAssignsToActor -> IfcActor [ label="RelatingActor" ];<br />
IfcRelAssignsToActor [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule-actor.png]]<br />
<br />
A cost schedule may describe the people who authored it, who are stakeholders, recipients, or clients.<br />
<br />
Source: IfcCostSchedule<br />
<br />
== A cost schedule may contain cost items ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAssignsToControl -> IfcCostSchedule [ label="RelatingControl" ];<br />
IfcRelAssignsToControl -> IfcCostItem [ label="RelatedObjects" ];<br />
IfcRelAssignsToControl [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule-costitem.png]]<br />
<br />
Cost schedules can contain a single summary cost item. An IfcCostItem describes a cost or financial value together with descriptive information that describes its context in a form that enables it to be used within a cost schedule. An IfcCostItem can be used to represent the cost of goods and services, the execution of works by a process, lifecycle cost and more. This summary cost item may then be broken down further into more cost items, but only one summary cost item is allowed.<br />
<br />
Source: IfcCostSchedule<br />
<br />
== A cost item may be assigned a classification reference ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color=lightblue ];<br />
edge [ fontsize=10 ];<br />
IfcRelAssociatesClassification [color=pink]<br />
IfcRelAssociatesClassification -> IfcCostItem [ label="RelatedObjects" ];<br />
IfcRelAssociatesClassification -> IfcClassificationReference [ label="RelatingClassification" ];<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costitem-classification.png]]<br />
<br />
Cost items may relate to an external classification system, where a variety of identification codes are used extensively to identify the meaning of the cost. Examples include project phase codes, CSI codes, takeoff sequence numbers, and cost accounts.<br />
<br />
Source: IfcCostItem<br />
<br />
== A cost item may nest cost items ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color=lightblue ];<br />
edge [ fontsize=10 ];<br />
<br />
IfcRelNests [color=pink]<br />
IfcRelNests -> IfcCostItem [label="RelatingObject"]<br />
IfcRelNests -> subitem [label="RelatedObjects"]<br />
subitem [label="IfcCostItem"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costitem-nest.png]]<br />
<br />
A cost item may have cost items nested within it, typically forming the hierarchy or breakdown of a cost schedule.<br />
<br />
Source: IfcCostItem<br />
<br />
== A cost item may include arbitrary quantities ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcCostItem -> IfcQuantityVolume [ label="CostQuantities[0]" ];<br />
IfcCostItem -> IfcQuantityVolume2 [ label="CostQuantities[1]" ];<br />
IfcQuantityVolume2 [label="IfcQuantityVolume"]<br />
IfcQuantityVolume -> 3 [label="VolumeValue"]<br />
IfcQuantityVolume2 -> 2 [label="VolumeValue"]<br />
3 [shape=ellipse]<br />
2 [shape=ellipse]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costitem-costquantity.png]]<br />
<br />
A cost item may specify arbitrary quantities. These quantities are not linked to model elements. If multiple quantities are included for a single cost item, each individual quantity is a component which may be summed together to derive the total quantity. For example, this cost item has two components: one with volume of 3m2, another of 2m2. The total quantity is 3 + 2 = 5. All quantities must match the same measurement type (e.g. volume, area, count, etc).<br />
<br />
Source: IfcCostItem<br />
<br />
== A cost item may have a total monetary cost value ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcCostItem -> IfcCostValue [ label="CostValues" ];<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costitem-costvalue.png]]<br />
<br />
If a cost item has no cost quantities, this cost value represents the total cost of the cost item.<br />
<br />
Source: IfcCostItem<br />
<br />
== A cost item may have a total cost derived from a unit value and quantities ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcCostItem -> IfcQuantityVolume [ label="CostQuantities" ];<br />
IfcCostItem -> IfcCostValue [ label="CostValues" ];<br />
IfcQuantityVolume -> 3 [label="VolumeValue"]<br />
IfcCostValue -> 2 [label="AppliedValue"]<br />
3 [shape=ellipse]<br />
2 [shape=ellipse]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costitem-costvalue-unit.png]]<br />
<br />
If a cost item has quantities, the cost value represents a unit cost of the cost item, which is "2" in this case. The total cost of the cost item is derived by multiplying the cost quantities and the unit cost, which is 3 x 2 = 6 in this example.<br />
<br />
Source: IfcCostItem<br />
<br />
== The value of a cost item may be broken down into categories ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcCostItem -> IfcCostValue [ label="CostValues[0]" ];<br />
IfcCostItem -> IfcCostValue2 [ label="CostValues[1]" ];<br />
IfcCostValue2 [label="IfcCostValue"]<br />
IfcCostValue -> 3 [label="AppliedValue"]<br />
IfcCostValue2 -> 2 [label="AppliedValue"]<br />
IfcCostValue -> Delivery [label="Category"]<br />
IfcCostValue2 -> Labour [label="Category"]<br />
3 [shape=ellipse]<br />
2 [shape=ellipse]<br />
Delivery [shape=ellipse]<br />
Labour [shape=ellipse]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costitem-costvalue-category.png]]<br />
<br />
Cost values may be categorised to understand the cost breakdown. Example categories are delivery, labour, installation, overhead, material, storage, transportation, and more.<br />
<br />
Source: IfcCostItem, IfcCostValue<br />
<br />
== The value of a cost item may be calculated from the sum of its nested cost items ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelNests -> summary [label="RelatingObject"]<br />
IfcRelNests -> IfcCostItem [label="RelatedObjects[0]"]<br />
IfcRelNests [color="pink"]<br />
<br />
summary->costvalue [label="CostValues"]<br />
costvalue->sum [label="Category"]<br />
costvalue -> 32 [label="AppliedValue"]<br />
costvalue [ label="IfcCostValue"]<br />
summary[label="IfcCostItem"]<br />
sum [label="*", shape=ellipse]<br />
32 [shape=ellipse]<br />
<br />
IfcCostItem -> IfcCostValue [ label="CostValues[0]" ];<br />
IfcCostItem -> IfcCostValue2 [ label="CostValues[1]" ];<br />
IfcCostValue2 [label="IfcCostValue"]<br />
IfcCostValue -> 3 [label="AppliedValue"]<br />
IfcCostValue2 -> 2 [label="AppliedValue"]<br />
IfcCostValue -> Delivery [label="Category"]<br />
IfcCostValue2 -> Labour [label="Category"]<br />
3 [shape=ellipse]<br />
2 [shape=ellipse]<br />
Delivery [shape=ellipse]<br />
Labour [shape=ellipse]<br />
IfcCostItem -> IfcQuantityArea [label="CostQuantities"]<br />
IfcQuantityArea -> 5 [label=AreaValue]<br />
5 [shape=ellipse]<br />
<br />
IfcRelNests -> secondcostitem [label="RelatedObjects[1]"]<br />
secondcostitem -> secondcostvalue [label="CostValues"]<br />
secondcostvalue -> 7<br />
7 [shape=ellipse]<br />
secondcostvalue [label="IfcCostValue"]<br />
secondcostitem [label="IfcCostItem"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costitem-costvalue-category-sum.png]]<br />
<br />
When the cost value has a special category of "*", this means that its value is calculated from the sum of the costs of all nested cost items.<br />
<br />
In this example, the parent cost item has a two nested child cost items. The first nested item has a total unit cost of 3 + 2 = 5, and a total quantity of 5. This gives a total cost of the nested child of 5 x 5 = 25. The second nested item has a total cost of 7. Therefore, the sum of all nested cost items is 25 + 7 = 32.<br />
<br />
Source: IfcCostItem</div>Moulthttps://wiki.osarch.org/index.php?title=File:Ifc-concept-cost-costitem-costvalue-category-sum.png&diff=4088File:Ifc-concept-cost-costitem-costvalue-category-sum.png2021-08-10T04:33:32Z<p>Moult: </p>
<hr />
<div>Ifc-concept-cost-costitem-costvalue-category-sum</div>Moulthttps://wiki.osarch.org/index.php?title=IFC_-_Industry_Foundation_Classes/IFC_concepts/IFC_cost_concepts&diff=4087IFC - Industry Foundation Classes/IFC concepts/IFC cost concepts2021-08-10T04:17:46Z<p>Moult: </p>
<hr />
<div>The primary classes related to this concept are:<br />
<br />
* IfcCostSchedule<br />
* IfcCostItem<br />
* IfcCostValue<br />
<br />
== A cost schedule can exist ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelDeclares -> IfcProject [ label="RelatingContext" ];<br />
IfcRelDeclares -> IfcCostSchedule [ label="RelatedDefinitions" ];<br />
IfcRelDeclares [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule.png]]<br />
<br />
A cost schedule is a collection of cost items, used for a specified purpose. Typical purposes are cost plans and tenders.<br />
<br />
Note: there is no explicit documentation which explains how a cost schedule is related back to the project or context. Therefore, in the absence of documentation, we are assuming that we declare it to the project as shown. However, this is only an assumption. There are explicit arguments against this assumption, such as that a cost schedule must be tied back to a project order. However, this evidence is not considered strong enough as it is never mentioned in the cost schedule documentation page itself.<br />
<br />
Source: IfcProjectOrder<br />
<br />
== A cost schedule can be part of a project order ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAggregates -> IfcProjectOrder [ label="RelatingObject" ];<br />
IfcRelAggregates -> IfcCostSchedule [ label="RelatedObjects" ];<br />
IfcRelAggregates [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-projectorder.png]]<br />
<br />
Project orders, such as work orders, change orders, or in particular purchase orders, may include a cost schedule. For example, a cost schedule may be used to provide an estimate of costs for a work order.<br />
<br />
Source: IfcCostSchedule, IfcProjectOrder<br />
<br />
== A cost schedule may have approval requests ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAssociatesApproval -> IfcApproval [ label="RelatingApproval" ];<br />
IfcRelAssociatesApproval -> IfcCostSchedule [ label="RelatedObjects" ];<br />
IfcRelAssociatesApproval [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule-approval.png]]<br />
<br />
A cost schedule may have an approval associated with it, to determine whether it is approved or not.<br />
<br />
Source: IfcCostSchedule<br />
<br />
== A cost schedule may have a series of approvals ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAssociatesApproval -> IfcCostSchedule [ label="RelatedObjects" ];<br />
IfcRelAssociatesApproval -> IfcApproval [ label="RelatingApproval" ];<br />
IfcRelAssociatesApproval [color="pink"]<br />
IfcApprovalRelationship [color="pink"]<br />
IfcApprovalRelationship -> IfcApproval [label="RelatingApproval"]<br />
IfcApprovalRelationship -> approval2 [label="RelatedApprovals"]<br />
approval2 [label="IfcApproval"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule-approval-rel.png]]<br />
<br />
An approval that relates to a cost schedule may itself be broken down into sub approvals. This implies that the sub approvals (RelatedApprovals) must first be approved before the parent approval (RelatingApproval) may be approved.<br />
<br />
Source: IfcCostSchedule<br />
<br />
== A cost schedule may have actors associated with it ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAssignsToActor -> IfcCostSchedule [ label="RelatedObjects" ];<br />
IfcRelAssignsToActor -> IfcActor [ label="RelatingActor" ];<br />
IfcRelAssignsToActor [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule-actor.png]]<br />
<br />
A cost schedule may describe the people who authored it, who are stakeholders, recipients, or clients.<br />
<br />
Source: IfcCostSchedule<br />
<br />
== A cost schedule may contain cost items ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAssignsToControl -> IfcCostSchedule [ label="RelatingControl" ];<br />
IfcRelAssignsToControl -> IfcCostItem [ label="RelatedObjects" ];<br />
IfcRelAssignsToControl [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule-costitem.png]]<br />
<br />
Cost schedules can contain a single summary cost item. An IfcCostItem describes a cost or financial value together with descriptive information that describes its context in a form that enables it to be used within a cost schedule. An IfcCostItem can be used to represent the cost of goods and services, the execution of works by a process, lifecycle cost and more. This summary cost item may then be broken down further into more cost items, but only one summary cost item is allowed.<br />
<br />
Source: IfcCostSchedule<br />
<br />
== A cost item may be assigned a classification reference ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color=lightblue ];<br />
edge [ fontsize=10 ];<br />
IfcRelAssociatesClassification [color=pink]<br />
IfcRelAssociatesClassification -> IfcCostItem [ label="RelatedObjects" ];<br />
IfcRelAssociatesClassification -> IfcClassificationReference [ label="RelatingClassification" ];<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costitem-classification.png]]<br />
<br />
Cost items may relate to an external classification system, where a variety of identification codes are used extensively to identify the meaning of the cost. Examples include project phase codes, CSI codes, takeoff sequence numbers, and cost accounts.<br />
<br />
Source: IfcCostItem<br />
<br />
== A cost item may nest cost items ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color=lightblue ];<br />
edge [ fontsize=10 ];<br />
<br />
IfcRelNests [color=pink]<br />
IfcRelNests -> IfcCostItem [label="RelatingObject"]<br />
IfcRelNests -> subitem [label="RelatedObjects"]<br />
subitem [label="IfcCostItem"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costitem-nest.png]]<br />
<br />
A cost item may have cost items nested within it, typically forming the hierarchy or breakdown of a cost schedule.<br />
<br />
Source: IfcCostItem<br />
<br />
== A cost item may include arbitrary quantities ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcCostItem -> IfcQuantityVolume [ label="CostQuantities[0]" ];<br />
IfcCostItem -> IfcQuantityVolume2 [ label="CostQuantities[1]" ];<br />
IfcQuantityVolume2 [label="IfcQuantityVolume"]<br />
IfcQuantityVolume -> 3 [label="VolumeValue"]<br />
IfcQuantityVolume2 -> 2 [label="VolumeValue"]<br />
3 [shape=ellipse]<br />
2 [shape=ellipse]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costitem-costquantity.png]]<br />
<br />
A cost item may specify arbitrary quantities. These quantities are not linked to model elements. If multiple quantities are included for a single cost item, each individual quantity is a component which may be summed together to derive the total quantity. For example, this cost item has two components: one with volume of 3m2, another of 2m2. The total quantity is 3 + 2 = 5. All quantities must match the same measurement type (e.g. volume, area, count, etc).<br />
<br />
Source: IfcCostItem<br />
<br />
== A cost item may have a total monetary cost value ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcCostItem -> IfcCostValue [ label="CostValues" ];<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costitem-costvalue.png]]<br />
<br />
If a cost item has no cost quantities, this cost value represents the total cost of the cost item.<br />
<br />
Source: IfcCostItem<br />
<br />
== A cost item may have a total cost derived from a unit value and quantities ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcCostItem -> IfcQuantityVolume [ label="CostQuantities" ];<br />
IfcCostItem -> IfcCostValue [ label="CostValues" ];<br />
IfcQuantityVolume -> 3 [label="VolumeValue"]<br />
IfcCostValue -> 2 [label="AppliedValue"]<br />
3 [shape=ellipse]<br />
2 [shape=ellipse]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costitem-costvalue-unit.png]]<br />
<br />
If a cost item has quantities, the cost value represents a unit cost of the cost item, which is "2" in this case. The total cost of the cost item is derived by multiplying the cost quantities and the unit cost, which is 3 x 2 = 6 in this example.<br />
<br />
Source: IfcCostItem<br />
<br />
== The value of a cost item may be broken down into categories ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcCostItem -> IfcCostValue [ label="CostValues[0]" ];<br />
IfcCostItem -> IfcCostValue2 [ label="CostValues[1]" ];<br />
IfcCostValue2 [label="IfcCostValue"]<br />
IfcCostValue -> 3 [label="AppliedValue"]<br />
IfcCostValue2 -> 2 [label="AppliedValue"]<br />
IfcCostValue -> Delivery [label="Category"]<br />
IfcCostValue2 -> Labour [label="Category"]<br />
3 [shape=ellipse]<br />
2 [shape=ellipse]<br />
Delivery [shape=ellipse]<br />
Labour [shape=ellipse]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costitem-costvalue-category.png]]<br />
<br />
Cost values may be categorised to understand the cost breakdown. Example categories are delivery, labour, installation, overhead, material, storage, transportation, and more.<br />
<br />
Source: IfcCostItem, IfcCostValue</div>Moulthttps://wiki.osarch.org/index.php?title=File:Ifc-concept-cost-costitem-costvalue-category.png&diff=4086File:Ifc-concept-cost-costitem-costvalue-category.png2021-08-10T04:17:42Z<p>Moult: </p>
<hr />
<div>Ifc-concept-cost-costitem-costvalue-category</div>Moulthttps://wiki.osarch.org/index.php?title=IFC_-_Industry_Foundation_Classes/IFC_concepts/IFC_cost_concepts&diff=4085IFC - Industry Foundation Classes/IFC concepts/IFC cost concepts2021-08-10T04:12:33Z<p>Moult: /* A cost schedule may contain cost items */</p>
<hr />
<div>The primary classes related to this concept are:<br />
<br />
* IfcCostSchedule<br />
* IfcCostItem<br />
<br />
== A cost schedule can exist ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelDeclares -> IfcProject [ label="RelatingContext" ];<br />
IfcRelDeclares -> IfcCostSchedule [ label="RelatedDefinitions" ];<br />
IfcRelDeclares [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule.png]]<br />
<br />
A cost schedule is a collection of cost items, used for a specified purpose. Typical purposes are cost plans and tenders.<br />
<br />
Note: there is no explicit documentation which explains how a cost schedule is related back to the project or context. Therefore, in the absence of documentation, we are assuming that we declare it to the project as shown. However, this is only an assumption. There are explicit arguments against this assumption, such as that a cost schedule must be tied back to a project order. However, this evidence is not considered strong enough as it is never mentioned in the cost schedule documentation page itself.<br />
<br />
Source: IfcProjectOrder<br />
<br />
== A cost schedule can be part of a project order ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAggregates -> IfcProjectOrder [ label="RelatingObject" ];<br />
IfcRelAggregates -> IfcCostSchedule [ label="RelatedObjects" ];<br />
IfcRelAggregates [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-projectorder.png]]<br />
<br />
Project orders, such as work orders, change orders, or in particular purchase orders, may include a cost schedule. For example, a cost schedule may be used to provide an estimate of costs for a work order.<br />
<br />
Source: IfcCostSchedule, IfcProjectOrder<br />
<br />
== A cost schedule may have approval requests ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAssociatesApproval -> IfcApproval [ label="RelatingApproval" ];<br />
IfcRelAssociatesApproval -> IfcCostSchedule [ label="RelatedObjects" ];<br />
IfcRelAssociatesApproval [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule-approval.png]]<br />
<br />
A cost schedule may have an approval associated with it, to determine whether it is approved or not.<br />
<br />
Source: IfcCostSchedule<br />
<br />
== A cost schedule may have a series of approvals ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAssociatesApproval -> IfcCostSchedule [ label="RelatedObjects" ];<br />
IfcRelAssociatesApproval -> IfcApproval [ label="RelatingApproval" ];<br />
IfcRelAssociatesApproval [color="pink"]<br />
IfcApprovalRelationship [color="pink"]<br />
IfcApprovalRelationship -> IfcApproval [label="RelatingApproval"]<br />
IfcApprovalRelationship -> approval2 [label="RelatedApprovals"]<br />
approval2 [label="IfcApproval"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule-approval-rel.png]]<br />
<br />
An approval that relates to a cost schedule may itself be broken down into sub approvals. This implies that the sub approvals (RelatedApprovals) must first be approved before the parent approval (RelatingApproval) may be approved.<br />
<br />
Source: IfcCostSchedule<br />
<br />
== A cost schedule may have actors associated with it ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAssignsToActor -> IfcCostSchedule [ label="RelatedObjects" ];<br />
IfcRelAssignsToActor -> IfcActor [ label="RelatingActor" ];<br />
IfcRelAssignsToActor [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule-actor.png]]<br />
<br />
A cost schedule may describe the people who authored it, who are stakeholders, recipients, or clients.<br />
<br />
Source: IfcCostSchedule<br />
<br />
== A cost schedule may contain cost items ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAssignsToControl -> IfcCostSchedule [ label="RelatingControl" ];<br />
IfcRelAssignsToControl -> IfcCostItem [ label="RelatedObjects" ];<br />
IfcRelAssignsToControl [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule-costitem.png]]<br />
<br />
Cost schedules can contain a single summary cost item. An IfcCostItem describes a cost or financial value together with descriptive information that describes its context in a form that enables it to be used within a cost schedule. An IfcCostItem can be used to represent the cost of goods and services, the execution of works by a process, lifecycle cost and more. This summary cost item may then be broken down further into more cost items, but only one summary cost item is allowed.<br />
<br />
Source: IfcCostSchedule<br />
<br />
== A cost item may be assigned a classification reference ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color=lightblue ];<br />
edge [ fontsize=10 ];<br />
IfcRelAssociatesClassification [color=pink]<br />
IfcRelAssociatesClassification -> IfcCostItem [ label="RelatedObjects" ];<br />
IfcRelAssociatesClassification -> IfcClassificationReference [ label="RelatingClassification" ];<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costitem-classification.png]]<br />
<br />
Cost items may relate to an external classification system, where a variety of identification codes are used extensively to identify the meaning of the cost. Examples include project phase codes, CSI codes, takeoff sequence numbers, and cost accounts.<br />
<br />
Source: IfcCostItem<br />
<br />
== A cost item may nest cost items ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color=lightblue ];<br />
edge [ fontsize=10 ];<br />
<br />
IfcRelNests [color=pink]<br />
IfcRelNests -> IfcCostItem [label="RelatingObject"]<br />
IfcRelNests -> subitem [label="RelatedObjects"]<br />
subitem [label="IfcCostItem"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costitem-nest.png]]<br />
<br />
A cost item may have cost items nested within it, typically forming the hierarchy or breakdown of a cost schedule.<br />
<br />
Source: IfcCostItem<br />
<br />
== A cost item may include arbitrary quantities ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcCostItem -> IfcQuantityVolume [ label="CostQuantities[0]" ];<br />
IfcCostItem -> IfcQuantityVolume2 [ label="CostQuantities[1]" ];<br />
IfcQuantityVolume2 [label="IfcQuantityVolume"]<br />
IfcQuantityVolume -> 3 [label="VolumeValue"]<br />
IfcQuantityVolume2 -> 2 [label="VolumeValue"]<br />
3 [shape=ellipse]<br />
2 [shape=ellipse]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costitem-costquantity.png]]<br />
<br />
A cost item may specify arbitrary quantities. These quantities are not linked to model elements. If multiple quantities are included for a single cost item, each individual quantity is a component which may be summed together to derive the total quantity. For example, this cost item has two components: one with volume of 3m2, another of 2m2. The total quantity is 3 + 2 = 5. All quantities must match the same measurement type (e.g. volume, area, count, etc).<br />
<br />
Source: IfcCostItem<br />
<br />
== A cost item may have a total monetary cost value ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcCostItem -> IfcCostValue [ label="CostValues" ];<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costitem-costvalue.png]]<br />
<br />
If a cost item has no cost quantities, this cost value represents the total cost of the cost item.<br />
<br />
Source: IfcCostItem<br />
<br />
== A cost item may have a total cost derived from a unit value and quantities ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcCostItem -> IfcQuantityVolume [ label="CostQuantities" ];<br />
IfcCostItem -> IfcCostValue [ label="CostValues" ];<br />
IfcQuantityVolume -> 3 [label="VolumeValue"]<br />
IfcCostValue -> 2 [label="AppliedValue"]<br />
3 [shape=ellipse]<br />
2 [shape=ellipse]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costitem-costvalue-unit.png]]<br />
<br />
If a cost item has quantities, the cost value represents a unit cost of the cost item, which is "2" in this case. The total cost of the cost item is derived by multiplying the cost quantities and the unit cost, which is 3 x 2 = 6 in this example.<br />
<br />
Source: IfcCostItem</div>Moulthttps://wiki.osarch.org/index.php?title=AEC_Free_Software_directory&diff=4084AEC Free Software directory2021-08-09T05:59:46Z<p>Moult: /* Environmental analysis */</p>
<hr />
<div>== Introduction ==<br />
<br />
This page lists software published under a [https://en.wikipedia.org/wiki/Free_software Free/libre] or [https://en.wikipedia.org/wiki/Open_source Open Source] (FLOSS) software license. It lists many types of packages for many purposes and is surely not comprehensive as the reach of FLOSS is extensive and always growing. If you know of anything we're missing please let us know by just adding it wherever you think it makes sense.<br />
<br />
We are not the only group trying to promote free/libre software for AEC. Here are some other software lists: [https://help.ubuntu.com/community/UbuntuEngineering Ubuntu software list for engineering] (needs an update), [https://www.caelinux.com/CMS3/ CAELinux] is a distribution, forum and software list.<br />
<br />
== General Purpose ==<br />
<br />
If you're not familiar with Free & Open Source software useful for general use you can read our page on [[Open source software beginners]]<br />
<br />
== Schematic design ==<br />
<br />
Schematic design is defined as loose sketching, idea development, prototyping, and feasibility studies, without delving into the detailed geometrical or data attributes of a design.<br />
<br />
{| class="mw-collapsible wikitable sortable"<br />
! Logo<br />
! Name<br />
! Description<br />
! Link to license<br />
|-<br />
| [[File:icon_blender_icon_64x64.png]]<br />
| [[Blender]]<br />
| Blender is the free and open source 3D creation suite. It supports the entirety of the 3D pipeline—modeling, rigging, animation, simulation, rendering, compositing and motion tracking, video editing and 2D animation pipeline.<br />
| [https://www.blender.org/about/license/ GPLv3-only]<br />
|-<br />
| [[File:Firstdraft_logo.png|64px]]<br />
| [http://dev.first-draft.xyz/ First Draft]<br />
| A real time, web-based whiteboarding and markup tool.<br />
| [https://gitlab.com/MeldCE/first-draft/-/blob/master/LICENSE GPLv3-only]<br />
|-<br />
| [[File:Excalidraw_logo.png|64px]]<br />
| [[Excalidraw]]<br />
| A real time, web-based whiteboarding and markup tool.<br />
| [https://github.com/excalidraw/excalidraw/blob/master/LICENSE MIT]<br />
|-<br />
| [[File:icon_FreeCAD.png]]<br />
| [[FreeCAD]]<br />
| [[FreeCAD]] is an open-source parametric 3D modeler made primarily to design real-life objects of any size. Parametric modeling allows you to easily modify your design by going back into your model history and changing its parameters<br />
| [https://github.com/FreeCAD/FreeCAD/blob/master/LICENSE LGPLv2-only]<br />
|-<br />
| <br />
| [https://github.com/brunopostle/homemaker-addon Homemaker add-on]<br />
| The Homemaker is a [[:Category:Blender_Add-on|Blender Add-on]] that tries to automate the tedious work of designing buildings. Just indicate with simple geometry where you want walls, floors and roofs, and the software figures-out what building elements are needed to create that building. The result is an industry-standard IFC (BIM) model, suitable for taking the project towards construction.<br />
| GPLv3<br />
|-<br />
| [[File:icon_krita_icon.png]]<br />
| [[Krita]]<br />
| Krita is a professional free and open source painting program. It is made by artists that want to see affordable art tools for everyone. It specialises in concept art, texture and matte painters, illustrations and comics.<br />
| [https://invent.kde.org/graphics/krita/-/blob/master/COPYING GPLv3-only]<br />
|-<br />
| [[File:Icon_SweetHome3D_64x64.png]]<br />
| [[Sweet Home 3d]]<br />
| Sweet Home 3D is a free interior design application that helps you draw the plan of your house, arrange furniture on it and visit the results in 3D.<br />
| [https://sourceforge.net/p/sweethome3d/code/HEAD/tree/trunk/SweetHome3D/LICENSE.TXT GPLv2-or-later]<br />
|}<br />
<br />
== GIS ==<br />
<br />
Geographic Information Systems are used to interrogate GIS-level data, overlay multiple data sets, and integrate with BIM data.<br />
<br />
{| class="mw-collapsible wikitable sortable"<br />
! Icon<br />
! Name<br />
! Description<br />
! License<br />
|-<br />
| <br />
| [[BlenderGIS add-on|BlenderGIS]]<br />
| [[:Category:Blender_Add-on|Blender Add-on]]. Make the bridge between Blender and geographic data<br />
| [[GPL-3.0]]<br />
|-<br />
|<br />
| [https://github.com/SpaceGroupUCL/depthmapX depthmapX]<br />
| depthmapX is an open-source and multi-platform spatial analysis software for spatial networks of different scales, from buildings and small urban areas to whole cities or states. At each scale, the aim of the software is to produce a map of spatial elements and connect them via relationship (for example, intervisibility, intersection or adjacency) and then perform a graph analysis of the resulting network. The objective of the analysis is to derive variables which may have social or experiential significance.<br />
| [[GPL-3.0]]<br />
|-<br />
| [[File:Grassgis_logo_colorlogo_text_whitebg_64.png]]<br />
| [[GRASS GIS]]<br />
| Geographic Resources Analysis Support System (GRASS) from the U.S. Army Corps of Engineers' Construction Engineering Research Laboratory (USA/CERL)<br />
| [[GPL-2.0]]<br />
|-<br />
| [[File:Icon_JOSM_64x64.png]]<br />
| [https://josm.openstreetmap.de/ JOSM]<br />
| JOSM is an extensible editor for OpenStreetMap (OSM) for Java 8+. It supports loading GPX tracks, background imagery, and OSM data from local sources as well as from online sources and allows to edit the OSM data (nodes, ways, and relations) and their metadata tags. <br />
| [[GPL-2.0]]<br />
|-<br />
| [[File:Icon mago3D 64x64.png]]<br />
| [http://www.mago3d.com/eng/ mago3D]<br />
| mago3D seamlessly integrates AEC (Architecture, Engineering, Construction) and 3D GIS in web browser using Cesium.<br />
| [[Apache-2.0]]<br />
|-<br />
| <br />
| [https://www.openorienteering.org/ Open Orienteering]<br />
| OpenOrienteering is a project developing a collection of tools which help with the creation of orienteering maps and the organization of orienteering events. <br />
| [[GPL-3.0]]<br />
|-<br />
| [[File:Icon_openstreetmap_64x64.png]]<br />
| [https://openstreetmap.org OpenStreetMap]<br />
| OpenStreetMaps is a community built map of the world, powering map data about roads, trails, cafés, railway stations, and much more, on thousands of web sites, mobile apps, and hardware devices.<br />
| [[ODbL]]<br />
|-<br />
| [[File:Icon_qgis_64x64.jpeg]]<br />
| [https://www.qgis.org/en/site/ QGIS]<br />
| A Free and Open Source Geographic Information System to create, edit, visualise, analyse and publish geospatial information.<br />
| [[GPL-2.0]]<br />
|-<br />
| [[File:Icon_qfield-logo.svg]]<br />
| [https://qfield.org QField]<br />
| An android app that syncs your QGIS projects to a mobile device and allows for in the field GIS data viewing and entry. <br />
| [[GPL-2.0]]<br />
|-<br />
| [[File:Icon saga.png]]<br />
| [http://www.saga-gis.org/en/index.html SAGA]<br />
| GIS System for Automated Geoscientific Analyses designed for the easy and effective implementation of spatial algorithms.<br />
| [[GPL]]<br />
|-<br />
|<br />
| [https://github.com/EL-BID/Building-Detection Raster Vision Building Detection]<br />
| Code for running a Raster Vision experiment to train a model to detect buildings from satellite imagery in three cities in Latin America. Part of the Open Urban Planning Toolbox developed by the Inter-American Development Bank.<br />
| CC-IGO 3.0 BY-NC-ND<br />
|-<br />
|<br />
| [https://github.com/EL-BID/Modelo-de-prediccion-de-crecimiento-urbano- Urban Growth Prediction Model]<br />
| Code to run a model that predicts urban growth using a spatially-explicit stochastic land change modelling framework to produce projections of urban growth in a designated urban area and its surroundings. Part of the Open Urban Planning Toolbox developed by the Inter-American Development Bank.<br />
| CC-IGO 3.0 BY-NC-ND<br />
|-<br />
|<br />
| [https://github.com/EL-BID/idb-osm-extraction-tool OpenStreetMap Extraction Tool]<br />
| Friendly front-end for querying OSM features around Guyana from the Overpass API and extracting them as a Shapefile. Part of the Open Urban Planning Toolbox developed by the Inter-American Development Bank.<br />
| CC-IGO 3.0 BY-NC-ND<br />
|-<br />
|<br />
| [https://github.com/hotosm/OpenMapKitServer OpenMapKit Server]<br />
| OpenMapKit Server is the lightweight NodeJS server component of OpenMapKit that handles the collection and aggregation of OpenStreetMap and OpenDataKit data. Part of the Open Urban Planning Toolbox developed by the Inter-American Development Bank.<br />
| CC-IGO 3.0 BY-NC-ND<br />
|-<br />
|<br />
| [https://github.com/EL-BID/Housing_Deficit Housing Deficit Estimation]<br />
| Understanding housing deficit is crucial in creating housing policy. The code contained in this repo will apply a decisive methodology to determine levels of quantitative, qualitative, and total housing deficit based on census data, using census data as an example. Part of the Open Urban Planning Toolbox developed by the Inter-American Development Bank.<br />
| CC-IGO 3.0 BY-NC-ND<br />
|-<br />
|<br />
| [https://github.com/EL-BID/GPE Georeferenced Program Evaluation]<br />
| The GPE (Georeferenced Program Evaluation) R package includes functions that will allow the user to study various aspects of consumer or beneficiary behavior. Part of the Open Urban Planning Toolbox developed by the Inter-American Development Bank.<br />
| CC-IGO 3.0 BY-NC-ND<br />
|-<br />
|<br />
| [https://jblindsay.github.io/ghrg/WhiteboxTools/index.html WhiteboxTools]<br />
| WhiteboxTools can be used to perform common geographical information systems (GIS) analysis operations<br />
| [[MIT]]<br />
|-<br />
|<br />
| [https://github.com/EL-BID/urbanpy UrbanPy]<br />
| UrbanPy is an open source project to automate data extraction, measurement, and visualization of urban accessibility metrics. Part of the Open Urban Planning Toolbox developed by the Inter-American Development Bank.<br />
| CC-IGO 3.0 BY-NC-ND<br />
|}<br />
<br />
== Visualisation and Documentation ==<br />
<br />
Open source tools useful for all graphical work involved in the process of architecture design. 3D render generation, image manipulation, page layout, etc. For a list of relevant pages including documentation and tutorials see [[:Category:Visualization and Documentation]]. For an overview of resources (software, textures, models, HDRI, etc.) read our article on [[FLOSS Visualisation and Documentation|Visualisation and Documentation]].<br />
<br />
{| class="mw-collapsible wikitable sortable"<br />
! Icon<br />
! Name<br />
! Description<br />
! License<br />
|-<br />
| [[File:Appleseed logo.png|64px]]<br />
| [https://appleseedhq.net/ Appleseed]<br />
| Appleseed is an open source, physically-based global illumination rendering engine primarily designed for animation and visual effects. It provides individuals and small studios with a complete, reliable, fully open rendering package built with modern technologies.<br />
| [[MIT]]<br />
|-<br />
| [[File:Icon blender icon 64x64.png]]<br />
| [[Blender]]<br />
| Blender is the free and open source 3D creation suite. It supports the entirety of the 3D pipeline—modeling, rigging, animation, simulation, rendering, compositing and motion tracking, video editing and 2D animation pipeline.<br />
| [[GPL-2.0]]<br />
|-<br />
| <br />
| [https://www.blend4web.com/en/ Blend4Web(CE)]<br />
| Blend4Web (Community Edition) is a free and open source framework for creating and displaying interactive 3D computer graphics in web browsers.<br />
| [[GPL-3.0 ]]<br />
|-<br />
|<br />
| [[Blender2Godot]]<br />
| [[:Category:Blender_Add-on|Blender add-on]]. A free tool developed for quickly testing and deploying virtual / interactive visualizations, by linking Blender to the Godot Engine. Blender2Godot is a Blender3D addon that exports a Blender 3D scene to a Godot Engine project. This addon is in alpha state and thus still has a lot of bugs.<br />
| [[GPL]]<br />
|-<br />
|<br />
| [https://gist.github.com/yorikvanhavre/680156f59e2b42df8f5f5391cae2660b FCStd Import]<br />
| FCStd Import is a Blender3D addon that imports FreeCAD files to a Blender project. This addon is in alpha state, developed by Yorik Van Havre and runs under Blender 2.80.<br />
| [[unknown]]<br />
|-<br />
| [[File:Icon_gimp_64x64.png]]<br />
| [https://www.gimp.org/ GIMP]<br />
| GIMP is a cross-platform image editor available for GNU/Linux, OS X, Windows and more operating systems. GIMP provides the tools needed for high quality image manipulation. From retouching to restoring to creative composites, the only limit is your imagination. <br />
| [[GPL-3.0]]<br />
|-<br />
| [[file:Icon hugin-shadow 64x64.png]]<br />
| [http://hugin.sourceforge.net/ Hugin]<br />
| An easy to use cross-platform panoramic imaging toolchain based on Panorama Tools. With Hugin you can assemble a mosaic of photographs into a complete immersive panorama, stitch any series of overlapping pictures and much more. <br />
| [[GPL-2.0]]<br />
|-<br />
| [[File:Icon_inkscape_64x64.png]]<br />
| [[Inkscape]]<br />
| Inkscape is a professional vector graphics editor for Linux, Windows and macOS. Whether you are an illustrator, designer, web designer or just someone who needs to create some vector imagery, Inkscape is for you!<br />
| [[GPL-2.0]]<br />
|-<br />
| [[File:Icon krita icon.png]]<br />
| [[Krita]]<br />
| Krita is a professional free and open source painting program. It is made by artists that want to see affordable art tools for everyone. It specialises in concept art, texture and matte painters, illustrations and comics.<br />
| [[GPL-3.0]]<br />
|-<br />
| [[File:Icon Luxrender logo 64px.png]]<br />
| [https://luxcorerender.org/ LuxRender]<br />
| LuxCoreRender is a physically based and unbiased rendering engine. Based on state of the art algorithms, LuxCoreRender simulates the flow of light according to physical equations, thus producing realistic images of photographic quality.<br />
| [[Apache-2.0]]<br />
|-<br />
|<br />
| [http://www.mitsuba-renderer.org/ Mitsuba]<br />
| Mitsuba 2 is a research-oriented retargetable rendering system, written in portable C++17 on top of the Enoki library. It is developed by the Realistic Graphics Lab at EPFL.<br />
| [[GPL-3.0]]<br />
|-<br />
| [[File:Icon scribus 64.png]]<br />
| [[Scribus]]<br />
| Scribus is a page layout and desktop publishing program. Scribus supports professional publishing features, such as CMYK colors, spot colors, ICC color management and versatile PDF creation. Scribus has many unexpected touches, such as powerful vector drawing tools, support for a huge number of file types via import/export filters, emulation of color blindness or the rendering of markup languages like LaTeX or Lilypond inside Scribus. The Scribus file format is XML-based and open.<br />
| [[LGPL-2.1]]<br />
|-<br />
|}<br />
<br />
===Game engines===<br />
<br />
Graphics game engines have been used in diverse areas of visualisation: simulators, educational software, interactive art, scientific visualisation and architecture.<br />
<br />
{| class="mw-collapsible wikitable sortable"<br />
! Icon<br />
! Name<br />
! Description<br />
! License<br />
|-<br />
|<br />
| [https://armory3d.org/ Armory 3D]<br />
| Armory is an open-source 3D engine focused on portability, minimal footprint and performance. The renderer is fully scriptable with deferred and forward paths supported out of the box.<br />
| [[Zlib License]]<br />
|-<br />
|<br />
| [https://godotengine.org/ GODOT]<br />
| Godot is a 2D and 3D, cross-platform, free and open-source game engine released under the MIT license.<br />
| [[MIT License]]<br />
|-<br />
|<br />
| [https://www.ogre3d.org/ OGRE]<br />
| Since 2001, OGRE has grown to become one of the most popular open-source graphics rendering engines, and has been used in a large number of production projects, in such diverse areas as games, simulators, educational software, interactive art, scientific visualisation, and others.<br />
| [[MIT License]]<br />
|-<br />
|<br />
| [https://www.panda3d.org/ Panda3D]<br />
| Panda3D is an open-source, completely free-to-use engine for realtime 3D games, visualizations, simulations, experiments.<br />
| [[BSD License]]<br />
|-<br />
|<br />
| [https://upbge.org/ UPBGE]<br />
| UPBGE is an open-source 3D game engine forked from old Blender Game Engine, deployed with Blender itself.<br />
| [[GPL-2.0]]<br />
|-<br />
|}<br />
<br />
===Virtual reality / augmented reality===<br />
<br />
{| class="mw-collapsible wikitable sortable"<br />
! Icon<br />
! Name<br />
! Description<br />
! License<br />
|-<br />
|<br />
| [https://aframe.io/ A-Frame]<br />
| A-Frame is a web framework for building 3D/AR/VR experiences.<br />
| [[MIT License]]<br />
|-<br />
|<br />
| [http://apertusvr.org/ ApertusVR]<br />
| ApertusVR is an embeddable, open-source (MIT), framework-independent, platform-independent, network-topology-independent, distributed, augmented reality/virtual reality/mixed reality engine.<br />
| [[MIT License]]<br />
|-<br />
|<br />
| [http://www.artoolkitx.org/ ARToolKit]<br />
| ARToolKit is an open-source computer tracking library for creation of strong augmented reality applications that overlay virtual imagery on the real world.<br />
| [[LGPL-3.0]]<br />
|-<br />
|<br />
| [http://opensimulator.org/wiki/Main_Page OpenSimulator]<br />
| OpenSimulator is an open source multi-platform, multi-user 3D application server. It can be used to create a virtual environment (or world) which can be accessed through a variety of clients, on multiple protocols.<br />
| [[BSD License]]<br />
|-<br />
|<br />
| [https://www.openspace3d.com/ OpenSpace3D]<br />
| OpenSpace3D is a free and open-source platform, designed to create virtual and augmented-reality applications or games. If you are a 3D artist, a designer, a lab researcher, or just someone with a lot of passion and curiosity, you do not need software development skills to use the platform.<br />
| [[LGPL-3.0]]<br />
|-<br />
|}<br />
<br />
== Geometry scanning and processing ==<br />
<br />
Geometry scanning and processing relates to the task of laser scanning, as-built verification, point cloud manipulation, photogrammetry, and mesh reconstruction.<br />
<br />
{| class="mw-collapsible wikitable sortable"<br />
! <br />
! Name<br />
! Description<br />
! License<br />
|-<br />
| <br />
| [https://blender-addon-photogrammetry-importer.readthedocs.io/en/latest/index.html Blender-Photogrammetry-Importer]<br />
| Blender addon to import reconstruction results of several libraries.<br />
| [[MIT license]]<br />
|-<br />
| [[File:Icon_cloudcompare.jpg|CloudCompare|64x64px]]<br />
| [[CloudCompare]]<br />
| CloudCompare is a 3D point cloud (and triangular mesh) processing software. It was originally designed to perform comparison between two 3D points clouds (such as the ones obtained with a laser scanner) or between a point cloud and a triangular mesh. It relies on an octree structure that is highly optimized for this particular use-case. It was also meant to deal with huge point clouds.<br />
| [[GPL-2.0]]<br />
|-<br />
|<br />
| [https://demuc.de/colmap/ COLMAP]<br />
| COLMAP is a general-purpose, end-to-end image-based 3D reconstruction pipeline (i.e., Structure-from-Motion (SfM) and Multi-View Stereo (MVS)) with a graphical and command-line interface. It offers a wide range of features for reconstruction of ordered and unordered image collections.<br />
| [[BSD]]<br />
|-<br />
| [[File:GeoEasy_icon.jpg|GeoEasy|64px]]<br />
| [http://www.digikom.hu/english/geo_easy_e.html GeoEasy] <br />
| Land survey import and processing software GeoEasy can import files from various Total stations, perform transformations and surveying calculations, create TINs from points and breaklines, do volume differences between TINs, etc.<br />
| [[GPL-2.0]]<br />
|-<br />
| [[File:MeshlabjsLogo.png|Meshlab|64x64px]]<br />
| [http://www.meshlab.net/ MeshLab]<br />
| MeshLab is the open source system for processing and editing 3D triangular meshes. It provides a set of tools for editing, cleaning, healing, inspecting, rendering, texturing and converting meshes. It offers features for processing raw data produced by 3D digitization tools/devices and for preparing models for 3D printing.<br />
| [[GPL-3.0]]<br />
|-<br />
| [[File:Odm-logo.svg|OpenDroneMap|64x64px]]<br />
| [https://www.opendronemap.org/ Open Drone Map]<br />
| Generate maps, point clouds, DEMs and 3D models from aerial images.<br />
| [[AGPL-3.0]]<br />
|-<br />
| [[File:Point_cloud_visualizer.png|Point Cloud Visualizer|64x64px]]<br />
| [[Point Cloud Visualizer]]<br />
| [[:Category:Blender_Add-on|Blender add-on]]. Display, edit, filter, render, convert, generate and export colored point cloud PLY files in Blender. (Free version 0.9.3 [https://github.com/uhlik/bpy#point-cloud-visualizer-for-blender-280 for B3D 2.8])<br />
| [[GPL-2.0]]<br />
|-<br />
| [[File:Regard3d_zopfli.png|64px]]<br />
| [http://www.regard3d.org Regard3D]<br />
| A free and open source structure-from-motion program. It converts photos of an object, taken from different angles, into a 3D model of this object.<br />
| [https://sourceforge.net/projects/regard3d/ MIT]<br />
|-<br />
| <br />
| [[gradslam]]<br />
| For usage in instant reality capture, gradslam is an open-source framework providing differentiable building blocks for simultaneous localization and mapping (SLAM) systems. We enable the usage of dense SLAM subsystems from the comfort of PyTorch.<br />
| [[MIT license]]<br />
|-<br />
| [[File:Torch_logo.png|64x64px]]<br />
| [https://github.com/nicolas-chaulet/torch-points3d Torch Points3D]<br />
| "Torch Points3D, was developed to become the torchvision of point cloud data: a flexible and extensible framework for researchers and engineers alike working on point cloud-based machine vision." [https://github.com/nicolas-chaulet/torch-points3d Source Code]<br />
| [https://github.com/nicolas-chaulet/torch-points3d/blob/master/LICENSE.md BSD]<br />
|-<br />
| [[File:Total_Open_Station.png|Total Open Station|64x64px]]<br />
| [https://tops.iosa.it/ Total Open Station]<br />
| Total Open Station (TOPS) downloads land survey data from total stations on your computer, from almost any operating system. Data you download can be archived as is, and exported to exchange formats (CSV, [[DXF]], GeoJSON, ...) for use in CAD or GIS software.<br />
| [[GPL-3.0]]<br />
|-<br />
|}<br />
<br />
== CAD / BIM Design Development ==<br />
<br />
{| class="mw-collapsible wikitable sortable"<br />
! Icon<br />
! Name<br />
! Description<br />
! License<br />
|-<br />
| [[File:Icon_ArchiPack_64.png]]<br />
| [[Archipack]]<br />
| [[:Category:Blender_Add-on|Blender add-on]]. Quickly model parametric architectural objects in Blender, with a real-time, on-screen editing interface, designed for speed.<br />
| [[GPL-3.0]]<br />
|-<br />
| [[File:BHoM_icon.png]]<br />
| [[BHoM]]<br />
| "The Buildings and Habitats object Model. A collaborative computational development project and collective experiment. By sharing and co-creating code we can better shape our environment and our future. We want technology to be open and accessible for all. And we think that by working together we can solve harder more impactful problems for the world."<br />
| [[LGPL-3.0]]<br />
|-<br />
| [[File:BlenderBIM_Addon_logo.png|64x64px]]<br />
| [[BlenderBIM Add-on]]<br />
| [[:Category:Blender_Add-on|Blender add-on]]. An add-on for beautiful, detailed, and data-rich [[OpenBIM]] with [[Blender]]. Create data-rich [[Industry_Foundation_Class|IFC]]4 data to future-proof your BIM data and integrate with the rest of the [[OpenBIM]] ecosystem. <br />
| [[LGPL-2.0]]<br />
|-<br />
| [[File:Icon_CADTransform_64.png]]<br />
| Blender Add-on: [[CAD Transform]]<br />
| [[:Category:Blender_Add-on|Blender add-on]]. CAD like transform operations for blender 2.8+<br />
| [[GPL-3.0]]<br />
| <br />
|-<br />
| [[File:Compas_icon_white.png|64px]]<br />
| [https://compas.dev/ COMPAS]<br />
| "A computational framework for collaboration and research in Architecture, Engineering, Fabrication, and Construction" <br />
| [[MIT]]<br />
|-<br />
| [[File:DynFreeCAD icon.svg]]<br />
| [[DynFreeCAD]]<br />
| [[Dynamo]] nodes for the FreeCAD API <br />
| [[MIT]]<br />
|-<br />
|<br />
| [https://creativedesigner3d.com/ Home Builder Asset Library]<br />
| A PyClone Blender asset library designed to help with architectural and interior design<br />
| [[GPL-3.0]]<br />
|-<br />
| [[File:Icon BRL-CAD 64.png]]<br />
| [https://brlcad.org/ BRL-CAD]<br />
| BRL-CAD is a powerful open source cross-platform solid modeling system that includes interactive geometry editing, high-performance ray-tracing for rendering and geometric analysis, a system performance analysis benchmark suite, geometry libraries for application developers, and more than 30 years of active development.<br />
| [[BSD]] / [[LGPL]]<br />
|-<br />
| [[File:Icon FreeCAD.png]]<br />
| [[FreeCAD]]<br />
| FreeCAD is an open-source, extensible, parametric 2D and 3D modeler primarily designed for mechanical engineering but which can be used in many different fields like machining, routing, 3D printing, finite element analysis, and of course, architecture and construction. Parametric modeling allows you to modify your design by going back into your model history and changing its parameters<br />
|-<br />
|<br />
| [https://hypar-io.github.io/Elements/Elements/WhatIsElements.html Hypar Elements]<br />
| Hypar Elements is a cross-platform library for creating building elements. It's meant to be used by architects, engineers, and other building professionals who want to write code that generates buildings.<br />
| [[MIT]]<br />
|-<br />
| [[File:Icon_LibreCAD_icon.png]]<br />
| [[LibreCAD]]<br />
| LibreCAD is a free Open Source 2D CAD application for Windows, Apple and Linux. Support and documentation are free from our large, dedicated community of users, contributors and developers.<br />
| [[GPL-2.0]]<br />
|-<br />
|<br />
| [http://lx-viewer.sourceforge.net/ LX-Viewer]<br />
| LX-Viewer (Linux Drawing Viewer) is a program that will allow you to open, view, print DXF files. The most important feature is that LX-Viewer allows you to manipulate your DXF data on the Linux platform. You may zoom and pan the drawing as you would in AutoCAD. Files can be saved to BMP, SVG and PNG formats. It runs on Linux and Windows platforms.<br />
| [[GPL-2.0]]<br />
|-<br />
|<br />
| Blender Add-on: [[MeasureIt-ARCH]]<br />
| [[:Category:Blender_Add-on|Blender add-on]]. An expansion of Antonio Vazquez's MeasureIt add-on to add features to create Architectural Drawings and 3D measurements in Blender 2.8.<br />
| [[GPL-3.0]]<br />
|-<br />
|<br />
| [https://prism-app.io/ Prism]<br />
| Prism is an open source app which accelerates the design process for precision manufactured housing (PMH) for London. It is free and easy to use and combines the Mayor of London’s spatial planning rules with precision manufacturer expertise to help you to quickly determine viable PMH options for your development.<br />
| [[MIT]]<br />
|-<br />
| [[File:Icon QCAD.png]]<br />
| [[QCAD]]<br />
| QCAD is a free, open source application for computer aided drafting (CAD) in two dimensions (2D). With QCAD you can create technical drawings such as plans for buildings, interiors, mechanical parts or schematics and diagrams. QCAD works on Windows, macOS and Linux.<br />
| [[GPL-3.0]]<br />
|-<br />
| [[File:SolveSpace icon.svg|64x64px]]<br />
| [[SolveSpace]]<br />
| Small but capable parametric 2D/3D CAD (+ CAE & CAM) application for solid modeling. Highly interactive and well documented. Probably a good starting point for learning the basics of constraint-based modeling. Available for Linux, macOS and Windows.<br />
| [https://github.com/solvespace/solvespace/issues/943#issuecomment-786406785 GPLv3-or-later]<br />
|-<br />
|<br />
| [[Sorcar]]<br />
| [[:Category:Blender_Add-on|Blender add-on]]. Sorcar is a procedural modeling node-based system which utilizes Blender and its Python API to create a visual programming environment for artists and developers. Heavily inspired by Side-FX Houdini, it presents a node editor with a variety of modular nodes to make the modelling workflow easier and fast.<br />
| [[GPL-3.0]]<br />
|-<br />
| [[File:Icon speckle 64.png]]<br />
| [[Speckle]]<br />
| Speckle is an open source cloud-based data platform for AEC. It provides a method of liberating data from one platform to another in a quick, manageable, and efficient way. It works with Blender, ThreeJS, Rhino, Grasshopper, Excel, Unity, GSA, [[Revit]], and Dynamo.<br />
| [[MIT]]<br />
|-<br />
|<br />
| [[Sverchok]]<br />
| [[:Category:Blender_Add-on|Blender add-on]]. Sverchok is a parametric tool for architects and designers for Blender. You can use it to program objects' shapes without knowing any programming languages. Sverchok has been inspired by Grasshopper from Rhino 3D and it uses a similar node-based visual programming principle. We are trying to bring this feature set to Blender users.<br />
| [[GPL-3.0]]<br />
|-<br />
|<br />
| [http://www.co-de-it.com/wordpress/code/blender-tissue Tissue]<br />
| [[:Category:Blender_Add-on|Blender add-on]]. Create parametric and tessellated panels in Blender, for computational design.<br />
| [[GPL-2.0]]<br />
|-<br />
| [[File:Icon_topologic_64x64.png]]<br />
| [[Topologic]]<br />
| Topologic is a software modelling library enabling hierarchical and topological representations of architectural spaces, buildings and artefacts through non-manifold topology.<br />
| [[AGPL-3.0]]<br />
|-<br />
|<br />
| [https://blenderartists.org/t/construction-lines-add-on-cad/1237928/ Construction Lines Add-on]<br />
| [[:Category:Blender_Add-on|Blender add-on]]. Construction Lines Add-on for Blender, is currently under development (July 2020) and enables accurate modeling with a CAD-like workflow (though can be used in any modeling), building models from 2D primitives, setting out geometry with guide points and guidelines. A beta release is imminent. <br />
| unknown<br />
|-<br />
|<br />
| [https://github.com/zamtmn/zcad ZCAD]<br />
| ZCAD is a simple CAD program, written in Lazarus / FPC. It can open DXF files and save it as PDF, SVG... Also, it has some edition tools. <br />
| mLGPLv2<br />
|}<br />
<br />
== OpenBIM Management ==<br />
<br />
{| class="mw-collapsible wikitable sortable"<br />
! Icon<br />
! Name<br />
! Description<br />
! License<br />
|-<br />
| -<br />
| [[BCF-Plugin-FreeCAD]]<br />
| A standalone plugin for the free, open source CAD tool [[FreeCAD]]. The aim is it to integrate collaboration in the BIM space through support of [[BIM Collaboration Format (BCF)|BCF]]."<br />
| [[LGPL-3.0]]<br />
|-<br />
| [[File:Bimdata_logo.svg|BIMData|64x64px]]<br />
| [https://bimdata.io/ BIMData]<br />
| A simple online tool to deal with [[Industry_Foundation_Class|IFC]] and [[BIM Collaboration Format (BCF)|BCF]]. Has an electronic document management, issue management, visualise, check, and share digital models.<br />
| [[LGPL-3.0]]<br />
|-<br />
| [[File:BIMserverorg.gif|BIMServer|64x64px]]<br />
| [[BIMServer]]<br />
| BIMserver.org is an open source development and has been a leader in the [[openBIM]] world for more than 10 years. The open source BIM community works together to create a best-of-class BIM-environment, including the Netherlands Organisation for Applied Scientific Research, TNO, who has been at the forefront of the development of this software for many years.<br />
| [[AGPL-3.0]]<br />
|-<br />
| -<br />
| [[BIMTester]]<br />
| Write unit tests to check exchange requirements in [[Industry_Foundation_Class|IFC]]s and perform quality auditing of [[Industry_Foundation_Class|IFC]] data, based off Python behave.<br />
| [[LGPL-2.0]]<br />
|-<br />
| -<br />
| [https://github.com/opensourceBIM/BIMsurfer BIMSurfer]<br />
| WebGL-based IFC model viewer with support for 3D tiles with a focus on high performance.<br />
| [[MIT]]<br />
|-<br />
| [[File:Ifcopenshell logo.png|64x64px]]<br />
| [https://blenderbim.org/download.html IFCCOBie]<br />
| CLI tool to convert COBie data from an IFC file to spreadsheet format, and log all IFC errors that occur during the conversion process.<br />
| [[LGPL-3.0]]<br />
|-<br />
| [[File:Ifcopenshell logo.png|64x64px]]<br />
| [https://blenderbim.org/download.html IFCDiff]<br />
| CLI tool to compare geometric and data differences between two IFC files and produce a diff report in JSON format.<br />
| [[LGPL-3.0]]<br />
|-<br />
|-<br />
| -<br />
| [[IFC.js]]<br />
| A front-end IFC viewer. Parsing is done via the browser.<br />
| [[MIT]]<br />
|-<br />
| -<br />
| [https://github.com/AECgeeks/ifc-pipeline IFC-Pipeline]<br />
| A processing queue that uses [[IfcOpenShell]] to convert IFC input files into a graphic display using glTF 2.0 and BIMSurfer2 for web-based visualization.<br />
| [[MIT]]<br />
|-<br />
| [[File:IFC%2B%2Btransparent120.png|IFC++|64x64px]]<br />
| [[IfcPlusPlus|IfcQuery/IFC++]] ([[IfcPlusPlus|IfcPlusPlus]])<br />
| C++ library and IFC viewer application for Windows and Linux<br />
| [[MIT]] and closed source<br />
|-<br />
| [[File:Sloth.png|Sloth|64x64px]]<br />
| [[Sloth]]<br />
| Sloth is a [[BIM Collaboration Format (BCF)]] online viewer and report generator.<br />
| [[MIT]]<br />
|}<br />
<br />
== Analysis and Simulation ==<br />
See also [[Structural Analysis]] & [[Learn_about_environmental_analysis|Environmental Analysis]]<br />
<br />
===Mesh generator and scientific data visualisation===<br />
{| class="mw-collapsible wikitable sortable"<br />
! Icon<br />
! Name<br />
! Description<br />
! License<br />
|-<br />
|<br />
| [https://gmsh.info/ Gmsh]<br />
| Gmsh is an open source 3D finite element mesh generator with a built-in CAD engine and post-processor. Its design goal is to provide a fast, light and user-friendly meshing tool with parametric input and advanced visualization capabilities. Gmsh is built around four modules: geometry, mesh, solver and post-processing.<br />
| [[LGPL-2.0]]<br />
|-<br />
|<br />
| [https://www.paraview.org/ ParaView]<br />
| ParaView is an open-source, multi-platform data analysis and visualization application. ParaView users can quickly build visualizations to analyze their data using qualitative and quantitative techniques. The data exploration can be done interactively in 3D or programmatically using ParaView’s batch processing capabilities.<br />
| [[BSD]]<br />
|}<br />
===Structural, thermal and computational fluid dynamics (CFD) analysis===<br />
{| class="mw-collapsible wikitable sortable"<br />
! Icon<br />
! Name<br />
! Description<br />
! License<br />
|-<br />
|<br />
| [https://github.com/synthetik-technologies/blastfoam/ blastFoam]<br />
| A CFD solver, built on top of OpenFOAM,for multi-component compressible flow with application to high-explosive detonation, explosive safety and air blast.<br />
| [[GPL-3.0]]<br />
|-<br />
|<br />
| [http://www.calculix.de/ CalculiX]<br />
| CalculiX is a package designed to solve field problems. The method used is the finite element method. With CalculiX Finite Element Models can be built, calculated and post-processed.<br />
| [[GPL-2.0]]<br />
|-<br />
| [[File:Icon_code_aster.png|64px]]<br />
| [[Code_Aster]]<br />
| Code_Aster offers a full range of multiphysical analysis and modelling methods that go well beyond the standard functions of a thermo mechanical calculation code: from seismic analysis to porous media via acoustics, fatigue, stochastic dynamics,etc.<br />
| [[GPL-3.0]]<br />
|-<br />
|<br />
| [https://www.code-saturne.org/cms/ Code_Saturne]<br />
| Code_Saturne is the free, open-source software developed and released by EDF to solve computational fluid dynamics (CFD) applications. It solves the Navier-Stokes equations for 2D, 2D-axisymmetric and 3D flows, steady or unsteady, laminar or turbulent, incompressible or weakly dilatable, isothermal or not, with scalars transport if required.<br />
| [[GPL-2.0]]<br />
|-<br />
|<br />
| [https://www.csc.fi/web/elmer Elmer]<br />
| Elmer is a multiphysical simulation software that includes physical models of fluid dynamics, structural mechanics, electromagnetics, heat transfer and acoustics, for example. These are described by partial differential equations which Elmer solves by the Finite Element Method (FEM).<br />
| [[GPL-2.0]] (software) and [[LGPL-2.1]] (solver)<br />
|-<br />
|<br />
| [https://energy.concord.org/energy2d/ Energy2D]<br />
| "Energy2D is an interactive multiphysics simulation program that models all three modes of heat transfer—conduction, convection, and radiation, and their coupling with particle dynamics. Energy2D runs quickly on most computers and eliminates the switches among preprocessors, solvers, and postprocessors typically needed to perform computational fluid dynamics simulations." [https://github.com/charxie/multiphysics source]<br />
| [[LGPL-3.0-only]] <br />
|-<br />
|<br />
| [https://www.epa.gov/water-research/epanet EPANet]<br />
| EPANet is a software application used throughout the world to model water distribution systems. It was developed as a tool for understanding the movement and fate of drinking water constituents within distribution systems, and can be used for many different types of applications in distribution systems analysis.<br />
| [[MIT]]<br />
|-<br />
|<br />
| [https://sourceforge.net/projects/estru3d/ Estru3D]<br />
| Program for structural analisys using the Stiffness Matrix Method. It has its own graphical interface and full GUI. Now beign translated to english. It is developed in Gambas3 basic only.<br />
| [[GPL-3.0]]<br />
|-<br />
|<br />
| [https://seamplex.com/fino/ Fino]<br />
| Fino is a free and open source tool that uses the finite-element method to solve (i) steady-state thermo-mechanical problems, or (ii) steady or transient heat conduction problems, or (iii) modal analysis problems.<br />
| [[GPL-3.0]]<br />
|-<br />
|<br />
| [https://github.com/firemodels/fds Fire Dynamics Simulator (FDS)]<br />
| Fire Dynamics Simulator (FDS) is a large-eddy simulation (LES) code for low-speed flows, with an emphasis on smoke and heat transport from fires.<br />
| [https://github.com/firetools/blenderfds/blob/master/LICENSE GNU3.0]<br />
|-<br />
|<br />
| [https://fenicsproject.org/ FEniCS]<br />
| FEniCS is a computing platform for solving partial differential equations (PDEs). FEniCS enables users to quickly translate scientific models into efficient finite element code. FEniCS runs on a multitude of platforms ranging from laptops to high-performance clusters.<br />
| [[LGPL-3.0]]<br />
|-<br />
|<br />
| [http://frame3dd.sourceforge.net/ Frame3DD]<br />
| Frame3DD is free open-source software for static and dynamic structural analysis of 2D and 3D frames and trusses with elastic and geometric stiffness. It computes the static deflections, reactions, internal element forces, natural frequencies, mode shapes and modal participation factors of two- and three- dimensional elastic structures using direct stiffness and mass assembly. Note there is also [https://nwtc.nrel.gov/pyFrame3DD pyFrame3DD] for Python.<br />
| [[GPL-3.0]]<br />
|-<br />
|<br />
|| [https://www.gempy.org/ GemPy]<br />
|GemPy is a tool for generating 3D structural geological models in Python. As such, it enables you to create complex combinations of stratigraphical and structural features such as folds, faults, and unconformities. It was furthermore designed to enable probabilistic modeling to address parameter and model uncertainties.<br />
| [[GPL-3.0]]<br />
|-<br />
| [[File:OpenFoam_logo.png|64px]]<br />
| [[OpenFOAM]]<br />
| OpenFOAM is the free, open source CFD software developed primarily by OpenCFD Ltd since 2004. It has a large user base across most areas of engineering and science, from both commercial and academic organisations. OpenFOAM has an extensive range of features to solve anything from complex fluid flows involving chemical reactions, turbulence and heat transfer, to acoustics, solid mechanics and electromagnetics.<br />
| [[GPL-3.0]]<br />
|-<br />
|<br />
| [https://opensees.berkeley.edu/ OpenSees]<br />
| OpenSees is a software framework for developing applications to simulate the performance of structural and geotechnical systems subjected to earthquakes.<br />
| UC Regents<br />
|-<br />
|<br />
| [https://pythermalcomfort.readthedocs.io/en/latest/readme.html pythermalcomfort]<br />
| pythermalcomfort is a Python package that allows users to calculate the most common thermal comfort indices in compliance with the main thermal comfort standards such as ASHRAE 55 and ISO 7730. For example, pythermalcomfort can be used to calculate: thermal comfort indices (e.g., Predicted Mean Vote, adaptive models, Standard Equivalent Temperature), local discomfort, clothing insulation, and psychrometric properties of air.<br />
| [[MIT]]<br />
|-<br />
|<br />
| [https://www.salome-platform.org/ Salome]<br />
| SALOME is an open-source software that provides a generic Pre- and Post-Processing platform for numerical simulation. It is based on an open and flexible architecture made of reusable components.<br />
| [[LGPL-2.1]]<br />
|-<br />
| [[File:Sparselizard64x64.png|64px]]<br />
| [http://www.sparselizard.org/ sparselizard]<br />
| Sparselizard is an efficient, highly multiphysics, hp-adaptive, open source C++ finite element library with demonstrated capabilities as of 2020/12 for at least fluid flow (creeping, laminar, transport), mechanics (isotropic, anisotropic, geometric nonlinearity, plasticity,...), electromagnetics (current flow, electro/magnetostatics, ac induction, antennas, electric motors, piezoelectricity, piezoresistivity,superconductivity,...), thermal, acoustics, FSI<br />
| [[GPL-2+]]<br />
|-<br />
|<br />
| [https://www.edf.fr/en/the-edf-group/world-s-largest-power-company/activities/research-and-development/scientific-communities/simulation-softwares?logiciel=10818 Syrthes]<br />
| SYRTHES is a general thermal software dedicated to transient thermal simulations in complex solid geometries. EDF's R&D developed the software that can be used for a range of problems: nuclear (lifetime, nuclear waste disposal, new concepts, fuel transportation, etc.), electricity (transport, electromechanical devices, etc.), building efficiency, material physical properties, etc.<br />
| [[GPL-2.0]]<br />
|-<br />
|<br />
| [https://github.com/xcfem/xc XC]<br />
| XC OSS is aimed directly at civil structural engineering. The software provides a set of structural analysis tools based on the finite element method and a framework to implement the design of structural members according to structural codes (Eurocodes, ACI, ...). Our objective is to develop an open tool that provides the engineer with unlimited freedom to take control of the structural analysis and to customize procedures.<br />
| Project-specific FOSS<br />
|}<br />
===Environmental analysis===<br />
{| class="mw-collapsible wikitable sortable"<br />
! Icon<br />
! Name<br />
! Description<br />
! License<br />
|-<br />
| [[File:Icon_ladybug_64x64.png]]<br />
| [[Ladybug Tools]]<br />
| Ladybug Tools is a collection of free computer applications that support environmental design and education connecting 3D Computer-Aided Design (CAD) interfaces to a host of validated simulation engines. Ladybug Tools can be used as a suite of Python libraries, or as a set of visual programming nodes with Blender (via Sverchok), or with proprietary software like Rhino (via Grasshopper) or Revit (via Dynamo).<br />
| [[GPL-3.0]]<br />
|-<br />
| <br />
| [[OpenLCA]]<br />
| The world’s leading, high performance, open source Life Cycle Assessment software. openLCA is an open source and free software for Sustainability and Life Cycle Assessment, with calculation of your Sustainability Assessment and/or Life Cycle Assessment, detailed insights into calculation and analysis results, best in class import and export capabilities; easy to share your models<br />
Life Cycle Costing and social assessment smoothly integrated in the life cycle model, and more.<br />
| [[MPL 2.0]]<br />
|-<br />
|<br />
| [[Radiance]]<br />
| Radiance is a suite of programs for the analysis and visualization of lighting in design. Input files specify the scene geometry, materials, luminaires, time, date and sky conditions (for daylight calculations). Calculated values include spectral radiance (ie. luminance + color), irradiance (illuminance + color) and glare indices. Simulation results may be displayed as color images, numerical values and contour plots.<br />
| Project-specific FOSS<br />
|-<br />
| <br />
| [https://github.com/HoareLea SAM toolkit]<br />
| SAM Toolkit is designed to help engineers to create Analytical Model.<br />
| [[AGPL-3.0]]<br />
|-<br />
|<br />
| [[VI-Suite]]<br />
| [[:Category:Blender add-on|Blender Add-on]]. VI-Suite is a node-based add-on for performing environmental analysis in blender. The add-on acts as a pre/postprocessor for the EnergyPlus and Radiance simulation engines. Stable Version (0.4) released for blender 2.7, a version for blender 2.8 ([https://github.com/rgsouthall/vi-suite06 0.6]) is awaiting release.<br />
| [[GPL-2.0]](citation needed)<br />
|-<br />
|}<br />
<br />
===Energy analysis===<br />
{| class="mw-collapsible wikitable sortable"<br />
! Icon<br />
! Name<br />
! Description<br />
! License<br />
|-<br />
|<br />
| [[BIMxBEM]]<br />
| A tool which analyze IFC data to feed local standards compliant energy related data to energy simulation softwares.<br />
| [[LGPL-3.0-only]]<br />
|-<br />
|<br />
| [https://cityenergyanalyst.com/ CEA]<br />
| The City Energy Analyst (CEA) is an urban energy simulation platform and one of the first open-source computational tools for the design of low-carbon and highly efficient neighborhoods and districts. The CEA combines knowledge of urban planning and energy systems engineering in an integrated framework. This allows to study the effects, trade-offs and synergies of urban design options, building retrofits and energy infrastructure plans. https://github.com/architecture-building-systems/CityEnergyAnalyst<br />
| [[MIT]]<br />
|-<br />
| [[File:Eplus_logo_1.png]]<br />
| [https://energyplus.net/ EnergyPlus]<br />
| EnergyPlus™ is a whole building energy simulation program that engineers, architects, and researchers use to model both energy consumption—for heating, cooling, ventilation, lighting and plug and process loads—and water use in buildings.<br />
| [[BSD]]-Style<br />
|-<br />
| [[File:OpenStudio logo-crop.png|64px]]<br />
| [[OpenStudio SDK]]<br />
| OpenStudio® is a cross-platform (Windows, Mac, and Linux) collection of software tools to support whole building energy modeling using [[EnergyPlus]] and advanced daylight analysis using [[Radiance]]. OpenStudio is an open source (LGPL) project to facilitate community development, extension, and private sector adoption. OpenStudio includes a Software Development Kit (SDK) that allows building researchers and software developers to quickly get started through its multiple entry levels, including access through C++, Ruby, and C#.<br />
| LGPL-Style<br />
|-<br />
| [[File:OpenStudio%2BCoalition-logo-crop.png|64px]]<br />
| [https://openstudiocoalition.org/ OpenStudioApplication & OpenStudio Sketchup Plugin]<br />
| The OpenStudio Application is a fully featured graphical interface to OpenStudio models including envelope, loads, schedules, and HVAC. The OpenStudio SketchUp Plug-in is an extension to Trimble’s popular SketchUp 3D modeling tool that allows users to quickly create geometry needed for [[EnergyPlus]] using the built-in functionality of Trimble SketchUp including existing drawing tools, integration with Google Earth, Building Maker, and Photo Match. These two tools make use of the [[OpenStudio SDK]] and are being developed and maintained by the OpenStudio Coalition.<br />
| LGPL-Style<br />
|-<br />
|}<br />
<br />
===Traffic and pedestrian analysis/simulation===<br />
{| class="mw-collapsible wikitable sortable"<br />
! Icon<br />
! Name<br />
! Description<br />
! License<br />
|-<br />
| <br />
| [https://gama-platform.github.io/wiki/Home GAMA]<br />
| GAMA is a modeling and simulation development environment for building spatially explicit agent-based simulations.<br />
| [[GPL-3.0]]<br />
|-<br />
| <br />
| [https://www.jupedsim.org/ JuPedSim]<br />
| JuPedSim is an open source framework for simulating, analyzing and visualizing pedestrian dynamics.<br />
| LGPL-3.0 or later<br />
|-<br />
| <br />
| [http://www.massisframework.com/ MASSIS]<br />
| MASSIS is a software framework that facilitates the simulation of scenarios with multiple agents (representing people, robots, sensors, etc.) in indoor environments (i.e., inside a building).<br />
| GPL-3.0<br />
|-<br />
| <br />
| [https://eclipse.org/sumo SUMO]<br />
| Simulation of Urban MObility (SUMO) is an open source, portable, microscopic and continuous multi-modal traffic simulation package designed to handle large networks.<br />
| Eclipse Public License<br />
|-<br />
| <br />
| [https://github.com/UDST/urbansim UrbanSim]<br />
| UrbanSim is an open source urban simulation system designed by Paul Waddell of the University of California, Berkeley and developed with numerous collaborators to support metropolitan land use, transportation, and environmental planning.<br />
| New BSD License<br />
|}<br />
<br />
== Project Management ==<br />
<br />
{| class="mw-collapsible wikitable sortable"<br />
! Icons<br />
! Name<br />
! Description<br />
! License<br />
|-<br />
| [[File:Icon_ganttproject_64.png|64px]]<br />
| [https://www.ganttproject.biz/ GanttProject]<br />
| GanttProject is a free desktop project scheduling application for small and medium businesses which need Gantt charts. <br />
| [[GPL-3.0]]<br />
|-<br />
| [[File:Icon_OpenProject_64x64.png]]<br />
| [[OpenProject]]<br />
| OpenProject is the leading open source project management software. Support your project management process along the entire project life cycle: From project initiation to closure. Includes support for [[BIM_Collaboration_Format|BCF]][https://www.openproject.org/openproject-bim-10-5/]<br />
| [[GPL-3.0]]<br />
|-<br />
| [[File:Logo_ProjectLibre_64.png]]<br />
| [https://www.projectlibre.com/ ProjectLibre]<br />
| ProjectLibre is a free and open-source project management software system intended ultimately as a standalone replacement for Microsoft Project. ProjectLibre was developed by the founders of the abandoned project OpenProj.<br />
| [[CPAL]]<br />
|-<br />
| <br />
| [https://www.projeqtor.org/en/ ProjeQtOr]<br />
| ProjeQtOr is a collaborative and free open source project management software. It's a tool designed to be a Project Organizer as a Rich Internet Application. Web mode, once installed, you can work from the web browser.<br />
| [[AGPL-3.0]]<br />
|-<br />
| <br />
| [https://github.com/gorovt/Qex_Studio Qex Studio]<br />
| Software with a data base for cost analysis and estimate.<br />
| [[GPL-3.0]]<br />
|}<br />
<br />
== Facility Management ==<br />
<br />
{| class="mw-collapsible wikitable sortable"<br />
! Icon<br />
! Name<br />
! Description<br />
! License<br />
|-<br />
| <br />
| [https://sourceforge.net/projects/openjardin/ OpenJardin]<br />
| OpenJardin is a free open source software for the management of a permaculture oriented garden (available languages: Français-Italiano-English). It allows interactive management of crop plots, with annual planning and crop rotation .<br />
| [[GPL-3.0]]<br />
|-<br />
| [[File:Logo_openmaint.png|64px]]<br />
| [[openMAINT]]<br />
| openMAINT is the application for the management of mobile assets, plants and technical devices, furniture, etc., and the related logistical, economical and maintenance activities, scheduled and breakdown ones.<br />
| [[AGPL-3.0]] & [[GPL-3.0]]<br />
|-<br />
|<br />
| [https://github.com/vi-sense/vi-sense Vi-Sense]<br />
| Vi-Sense is a project that visualizes data of heating systems in a 3D model of the building they're installed in. Technicians or system administrators get an overview of all sensors located in a building, can take a closer look at the measured values of these sensors, and get information about data anomalies that indicate potential errors. The combination of the 3D representation of buildings and the visualization of measured values in a timeline makes it possible to perform detailed analyses of error sources such as the failure of heating or pump systems. In addition, sensor states in the building model are supported by color highlighting, which ensures a quick orientation and an intuitive overview.<br />
| [[MIT]]<br />
|}<br />
<br />
== Software Development ==<br />
<br />
If you are a software developer, you may be interested in a wide variety of free software libraries available to aid development of new free software tools in the AEC industry. Tools include file format parsers, geometry kernels, a visualisation libraries. See [[free software libraries for AEC software development]].<br />
<br />
== Extensions to proprietary software ==<br />
<br />
Some software is distributed as free software, but only as an extension, an add-on, plug-in, or only operating in conjunction with proprietary software. As it cannot be used practically without proprietary software, it is not considered "fully" free software. Sometimes, though not always, they are released as open source as a marketing strategy to seem more open, or as a way to attempt to get free community contributions to an otherwise proprietary core. See the directory of [[free software extensions to proprietary software]].<br />
<br />
[[Category:Directories]]<br />
[[Category:Visualization_and_Documentation]]<br />
[[Category:BIM Collaboration Format (BCF)]]</div>Moulthttps://wiki.osarch.org/index.php?title=IFC_-_Industry_Foundation_Classes/IFC_concepts/IFC_cost_concepts&diff=4083IFC - Industry Foundation Classes/IFC concepts/IFC cost concepts2021-08-09T02:02:28Z<p>Moult: /* A cost item may be assigned a classification reference */</p>
<hr />
<div>The primary classes related to this concept are:<br />
<br />
* IfcCostSchedule<br />
* IfcCostItem<br />
<br />
== A cost schedule can exist ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelDeclares -> IfcProject [ label="RelatingContext" ];<br />
IfcRelDeclares -> IfcCostSchedule [ label="RelatedDefinitions" ];<br />
IfcRelDeclares [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule.png]]<br />
<br />
A cost schedule is a collection of cost items, used for a specified purpose. Typical purposes are cost plans and tenders.<br />
<br />
Note: there is no explicit documentation which explains how a cost schedule is related back to the project or context. Therefore, in the absence of documentation, we are assuming that we declare it to the project as shown. However, this is only an assumption. There are explicit arguments against this assumption, such as that a cost schedule must be tied back to a project order. However, this evidence is not considered strong enough as it is never mentioned in the cost schedule documentation page itself.<br />
<br />
Source: IfcProjectOrder<br />
<br />
== A cost schedule can be part of a project order ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAggregates -> IfcProjectOrder [ label="RelatingObject" ];<br />
IfcRelAggregates -> IfcCostSchedule [ label="RelatedObjects" ];<br />
IfcRelAggregates [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-projectorder.png]]<br />
<br />
Project orders, such as work orders, change orders, or in particular purchase orders, may include a cost schedule. For example, a cost schedule may be used to provide an estimate of costs for a work order.<br />
<br />
Source: IfcCostSchedule, IfcProjectOrder<br />
<br />
== A cost schedule may have approval requests ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAssociatesApproval -> IfcApproval [ label="RelatingApproval" ];<br />
IfcRelAssociatesApproval -> IfcCostSchedule [ label="RelatedObjects" ];<br />
IfcRelAssociatesApproval [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule-approval.png]]<br />
<br />
A cost schedule may have an approval associated with it, to determine whether it is approved or not.<br />
<br />
Source: IfcCostSchedule<br />
<br />
== A cost schedule may have a series of approvals ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAssociatesApproval -> IfcCostSchedule [ label="RelatedObjects" ];<br />
IfcRelAssociatesApproval -> IfcApproval [ label="RelatingApproval" ];<br />
IfcRelAssociatesApproval [color="pink"]<br />
IfcApprovalRelationship [color="pink"]<br />
IfcApprovalRelationship -> IfcApproval [label="RelatingApproval"]<br />
IfcApprovalRelationship -> approval2 [label="RelatedApprovals"]<br />
approval2 [label="IfcApproval"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule-approval-rel.png]]<br />
<br />
An approval that relates to a cost schedule may itself be broken down into sub approvals. This implies that the sub approvals (RelatedApprovals) must first be approved before the parent approval (RelatingApproval) may be approved.<br />
<br />
Source: IfcCostSchedule<br />
<br />
== A cost schedule may have actors associated with it ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAssignsToActor -> IfcCostSchedule [ label="RelatedObjects" ];<br />
IfcRelAssignsToActor -> IfcActor [ label="RelatingActor" ];<br />
IfcRelAssignsToActor [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule-actor.png]]<br />
<br />
A cost schedule may describe the people who authored it, who are stakeholders, recipients, or clients.<br />
<br />
Source: IfcCostSchedule<br />
<br />
== A cost schedule may contain cost items ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAssignsToControl -> IfcCostSchedule [ label="RelatingControl" ];<br />
IfcRelAssignsToControl -> IfcCostItem [ label="RelatedObjects" ];<br />
IfcRelAssignsToControl [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule-costitem.png]]<br />
<br />
Cost schedules can contain multiple cost items. An IfcCostItem describes a cost or financial value together with descriptive information that describes its context in a form that enables it to be used within a cost schedule. An IfcCostItem can be used to represent the cost of goods and services, the execution of works by a process, lifecycle cost and more.<br />
<br />
Source: IfcCostSchedule<br />
<br />
== A cost item may be assigned a classification reference ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color=lightblue ];<br />
edge [ fontsize=10 ];<br />
IfcRelAssociatesClassification [color=pink]<br />
IfcRelAssociatesClassification -> IfcCostItem [ label="RelatedObjects" ];<br />
IfcRelAssociatesClassification -> IfcClassificationReference [ label="RelatingClassification" ];<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costitem-classification.png]]<br />
<br />
Cost items may relate to an external classification system, where a variety of identification codes are used extensively to identify the meaning of the cost. Examples include project phase codes, CSI codes, takeoff sequence numbers, and cost accounts.<br />
<br />
Source: IfcCostItem<br />
<br />
== A cost item may nest cost items ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color=lightblue ];<br />
edge [ fontsize=10 ];<br />
<br />
IfcRelNests [color=pink]<br />
IfcRelNests -> IfcCostItem [label="RelatingObject"]<br />
IfcRelNests -> subitem [label="RelatedObjects"]<br />
subitem [label="IfcCostItem"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costitem-nest.png]]<br />
<br />
A cost item may have cost items nested within it, typically forming the hierarchy or breakdown of a cost schedule.<br />
<br />
Source: IfcCostItem<br />
<br />
== A cost item may include arbitrary quantities ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcCostItem -> IfcQuantityVolume [ label="CostQuantities[0]" ];<br />
IfcCostItem -> IfcQuantityVolume2 [ label="CostQuantities[1]" ];<br />
IfcQuantityVolume2 [label="IfcQuantityVolume"]<br />
IfcQuantityVolume -> 3 [label="VolumeValue"]<br />
IfcQuantityVolume2 -> 2 [label="VolumeValue"]<br />
3 [shape=ellipse]<br />
2 [shape=ellipse]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costitem-costquantity.png]]<br />
<br />
A cost item may specify arbitrary quantities. These quantities are not linked to model elements. If multiple quantities are included for a single cost item, each individual quantity is a component which may be summed together to derive the total quantity. For example, this cost item has two components: one with volume of 3m2, another of 2m2. The total quantity is 3 + 2 = 5. All quantities must match the same measurement type (e.g. volume, area, count, etc).<br />
<br />
Source: IfcCostItem<br />
<br />
== A cost item may have a total monetary cost value ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcCostItem -> IfcCostValue [ label="CostValues" ];<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costitem-costvalue.png]]<br />
<br />
If a cost item has no cost quantities, this cost value represents the total cost of the cost item.<br />
<br />
Source: IfcCostItem<br />
<br />
== A cost item may have a total cost derived from a unit value and quantities ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcCostItem -> IfcQuantityVolume [ label="CostQuantities" ];<br />
IfcCostItem -> IfcCostValue [ label="CostValues" ];<br />
IfcQuantityVolume -> 3 [label="VolumeValue"]<br />
IfcCostValue -> 2 [label="AppliedValue"]<br />
3 [shape=ellipse]<br />
2 [shape=ellipse]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costitem-costvalue-unit.png]]<br />
<br />
If a cost item has quantities, the cost value represents a unit cost of the cost item, which is "2" in this case. The total cost of the cost item is derived by multiplying the cost quantities and the unit cost, which is 3 x 2 = 6 in this example.<br />
<br />
Source: IfcCostItem</div>Moulthttps://wiki.osarch.org/index.php?title=File:Ifc-concept-cost-costitem-classification.png&diff=4082File:Ifc-concept-cost-costitem-classification.png2021-08-09T02:02:23Z<p>Moult: </p>
<hr />
<div>Ifc-concept-cost-costitem-classification</div>Moulthttps://wiki.osarch.org/index.php?title=IFC_-_Industry_Foundation_Classes/IFC_concepts/IFC_cost_concepts&diff=4081IFC - Industry Foundation Classes/IFC concepts/IFC cost concepts2021-08-09T02:02:02Z<p>Moult: </p>
<hr />
<div>The primary classes related to this concept are:<br />
<br />
* IfcCostSchedule<br />
* IfcCostItem<br />
<br />
== A cost schedule can exist ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelDeclares -> IfcProject [ label="RelatingContext" ];<br />
IfcRelDeclares -> IfcCostSchedule [ label="RelatedDefinitions" ];<br />
IfcRelDeclares [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule.png]]<br />
<br />
A cost schedule is a collection of cost items, used for a specified purpose. Typical purposes are cost plans and tenders.<br />
<br />
Note: there is no explicit documentation which explains how a cost schedule is related back to the project or context. Therefore, in the absence of documentation, we are assuming that we declare it to the project as shown. However, this is only an assumption. There are explicit arguments against this assumption, such as that a cost schedule must be tied back to a project order. However, this evidence is not considered strong enough as it is never mentioned in the cost schedule documentation page itself.<br />
<br />
Source: IfcProjectOrder<br />
<br />
== A cost schedule can be part of a project order ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAggregates -> IfcProjectOrder [ label="RelatingObject" ];<br />
IfcRelAggregates -> IfcCostSchedule [ label="RelatedObjects" ];<br />
IfcRelAggregates [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-projectorder.png]]<br />
<br />
Project orders, such as work orders, change orders, or in particular purchase orders, may include a cost schedule. For example, a cost schedule may be used to provide an estimate of costs for a work order.<br />
<br />
Source: IfcCostSchedule, IfcProjectOrder<br />
<br />
== A cost schedule may have approval requests ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAssociatesApproval -> IfcApproval [ label="RelatingApproval" ];<br />
IfcRelAssociatesApproval -> IfcCostSchedule [ label="RelatedObjects" ];<br />
IfcRelAssociatesApproval [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule-approval.png]]<br />
<br />
A cost schedule may have an approval associated with it, to determine whether it is approved or not.<br />
<br />
Source: IfcCostSchedule<br />
<br />
== A cost schedule may have a series of approvals ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAssociatesApproval -> IfcCostSchedule [ label="RelatedObjects" ];<br />
IfcRelAssociatesApproval -> IfcApproval [ label="RelatingApproval" ];<br />
IfcRelAssociatesApproval [color="pink"]<br />
IfcApprovalRelationship [color="pink"]<br />
IfcApprovalRelationship -> IfcApproval [label="RelatingApproval"]<br />
IfcApprovalRelationship -> approval2 [label="RelatedApprovals"]<br />
approval2 [label="IfcApproval"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule-approval-rel.png]]<br />
<br />
An approval that relates to a cost schedule may itself be broken down into sub approvals. This implies that the sub approvals (RelatedApprovals) must first be approved before the parent approval (RelatingApproval) may be approved.<br />
<br />
Source: IfcCostSchedule<br />
<br />
== A cost schedule may have actors associated with it ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAssignsToActor -> IfcCostSchedule [ label="RelatedObjects" ];<br />
IfcRelAssignsToActor -> IfcActor [ label="RelatingActor" ];<br />
IfcRelAssignsToActor [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule-actor.png]]<br />
<br />
A cost schedule may describe the people who authored it, who are stakeholders, recipients, or clients.<br />
<br />
Source: IfcCostSchedule<br />
<br />
== A cost schedule may contain cost items ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAssignsToControl -> IfcCostSchedule [ label="RelatingControl" ];<br />
IfcRelAssignsToControl -> IfcCostItem [ label="RelatedObjects" ];<br />
IfcRelAssignsToControl [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule-costitem.png]]<br />
<br />
Cost schedules can contain multiple cost items. An IfcCostItem describes a cost or financial value together with descriptive information that describes its context in a form that enables it to be used within a cost schedule. An IfcCostItem can be used to represent the cost of goods and services, the execution of works by a process, lifecycle cost and more.<br />
<br />
Source: IfcCostSchedule<br />
<br />
== A cost item may be assigned a classification reference ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color=lightblue ];<br />
edge [ fontsize=10 ];<br />
IfcRelAssociatesClassification [color=pink]<br />
IfcRelAssociatesClassification -> IfcCostItem [ label="RelatedObjects" ];<br />
IfcRelAssociatesClassification -> IfcClassificationReference [ label="RelatingClassification" ];<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-sequence-task-classification.png]]<br />
<br />
Cost items may relate to an external classification system, where a variety of identification codes are used extensively to identify the meaning of the cost. Examples include project phase codes, CSI codes, takeoff sequence numbers, and cost accounts.<br />
<br />
Source: IfcCostItem<br />
<br />
== A cost item may nest cost items ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color=lightblue ];<br />
edge [ fontsize=10 ];<br />
<br />
IfcRelNests [color=pink]<br />
IfcRelNests -> IfcCostItem [label="RelatingObject"]<br />
IfcRelNests -> subitem [label="RelatedObjects"]<br />
subitem [label="IfcCostItem"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costitem-nest.png]]<br />
<br />
A cost item may have cost items nested within it, typically forming the hierarchy or breakdown of a cost schedule.<br />
<br />
Source: IfcCostItem<br />
<br />
== A cost item may include arbitrary quantities ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcCostItem -> IfcQuantityVolume [ label="CostQuantities[0]" ];<br />
IfcCostItem -> IfcQuantityVolume2 [ label="CostQuantities[1]" ];<br />
IfcQuantityVolume2 [label="IfcQuantityVolume"]<br />
IfcQuantityVolume -> 3 [label="VolumeValue"]<br />
IfcQuantityVolume2 -> 2 [label="VolumeValue"]<br />
3 [shape=ellipse]<br />
2 [shape=ellipse]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costitem-costquantity.png]]<br />
<br />
A cost item may specify arbitrary quantities. These quantities are not linked to model elements. If multiple quantities are included for a single cost item, each individual quantity is a component which may be summed together to derive the total quantity. For example, this cost item has two components: one with volume of 3m2, another of 2m2. The total quantity is 3 + 2 = 5. All quantities must match the same measurement type (e.g. volume, area, count, etc).<br />
<br />
Source: IfcCostItem<br />
<br />
== A cost item may have a total monetary cost value ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcCostItem -> IfcCostValue [ label="CostValues" ];<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costitem-costvalue.png]]<br />
<br />
If a cost item has no cost quantities, this cost value represents the total cost of the cost item.<br />
<br />
Source: IfcCostItem<br />
<br />
== A cost item may have a total cost derived from a unit value and quantities ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcCostItem -> IfcQuantityVolume [ label="CostQuantities" ];<br />
IfcCostItem -> IfcCostValue [ label="CostValues" ];<br />
IfcQuantityVolume -> 3 [label="VolumeValue"]<br />
IfcCostValue -> 2 [label="AppliedValue"]<br />
3 [shape=ellipse]<br />
2 [shape=ellipse]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costitem-costvalue-unit.png]]<br />
<br />
If a cost item has quantities, the cost value represents a unit cost of the cost item, which is "2" in this case. The total cost of the cost item is derived by multiplying the cost quantities and the unit cost, which is 3 x 2 = 6 in this example.<br />
<br />
Source: IfcCostItem</div>Moulthttps://wiki.osarch.org/index.php?title=IFC_-_Industry_Foundation_Classes/IFC_concepts/IFC_cost_concepts&diff=4080IFC - Industry Foundation Classes/IFC concepts/IFC cost concepts2021-08-09T01:58:59Z<p>Moult: </p>
<hr />
<div>The primary classes related to this concept are:<br />
<br />
* IfcCostSchedule<br />
* IfcCostItem<br />
<br />
== A cost schedule can exist ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelDeclares -> IfcProject [ label="RelatingContext" ];<br />
IfcRelDeclares -> IfcCostSchedule [ label="RelatedDefinitions" ];<br />
IfcRelDeclares [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule.png]]<br />
<br />
A cost schedule is a collection of cost items, used for a specified purpose. Typical purposes are cost plans and tenders.<br />
<br />
Note: there is no explicit documentation which explains how a cost schedule is related back to the project or context. Therefore, in the absence of documentation, we are assuming that we declare it to the project as shown. However, this is only an assumption. There are explicit arguments against this assumption, such as that a cost schedule must be tied back to a project order. However, this evidence is not considered strong enough as it is never mentioned in the cost schedule documentation page itself.<br />
<br />
Source: IfcProjectOrder<br />
<br />
== A cost schedule can be part of a project order ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAggregates -> IfcProjectOrder [ label="RelatingObject" ];<br />
IfcRelAggregates -> IfcCostSchedule [ label="RelatedObjects" ];<br />
IfcRelAggregates [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-projectorder.png]]<br />
<br />
Project orders, such as work orders, change orders, or in particular purchase orders, may include a cost schedule. For example, a cost schedule may be used to provide an estimate of costs for a work order.<br />
<br />
Source: IfcCostSchedule, IfcProjectOrder<br />
<br />
== A cost schedule may have approval requests ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAssociatesApproval -> IfcApproval [ label="RelatingApproval" ];<br />
IfcRelAssociatesApproval -> IfcCostSchedule [ label="RelatedObjects" ];<br />
IfcRelAssociatesApproval [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule-approval.png]]<br />
<br />
A cost schedule may have an approval associated with it, to determine whether it is approved or not.<br />
<br />
Source: IfcCostSchedule<br />
<br />
== A cost schedule may have a series of approvals ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAssociatesApproval -> IfcCostSchedule [ label="RelatedObjects" ];<br />
IfcRelAssociatesApproval -> IfcApproval [ label="RelatingApproval" ];<br />
IfcRelAssociatesApproval [color="pink"]<br />
IfcApprovalRelationship [color="pink"]<br />
IfcApprovalRelationship -> IfcApproval [label="RelatingApproval"]<br />
IfcApprovalRelationship -> approval2 [label="RelatedApprovals"]<br />
approval2 [label="IfcApproval"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule-approval-rel.png]]<br />
<br />
An approval that relates to a cost schedule may itself be broken down into sub approvals. This implies that the sub approvals (RelatedApprovals) must first be approved before the parent approval (RelatingApproval) may be approved.<br />
<br />
Source: IfcCostSchedule<br />
<br />
== A cost schedule may have actors associated with it ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAssignsToActor -> IfcCostSchedule [ label="RelatedObjects" ];<br />
IfcRelAssignsToActor -> IfcActor [ label="RelatingActor" ];<br />
IfcRelAssignsToActor [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule-actor.png]]<br />
<br />
A cost schedule may describe the people who authored it, who are stakeholders, recipients, or clients.<br />
<br />
Source: IfcCostSchedule<br />
<br />
== A cost schedule may contain cost items ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAssignsToControl -> IfcCostSchedule [ label="RelatingControl" ];<br />
IfcRelAssignsToControl -> IfcCostItem [ label="RelatedObjects" ];<br />
IfcRelAssignsToControl [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule-costitem.png]]<br />
<br />
Cost schedules can contain multiple cost items. An IfcCostItem describes a cost or financial value together with descriptive information that describes its context in a form that enables it to be used within a cost schedule. An IfcCostItem can be used to represent the cost of goods and services, the execution of works by a process, lifecycle cost and more.<br />
<br />
Source: IfcCostSchedule<br />
<br />
== A cost item may nest cost items ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color=lightblue ];<br />
edge [ fontsize=10 ];<br />
<br />
IfcRelNests [color=pink]<br />
IfcRelNests -> IfcCostItem [label="RelatingObject"]<br />
IfcRelNests -> subitem [label="RelatedObjects"]<br />
subitem [label="IfcCostItem"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costitem-nest.png]]<br />
<br />
A cost item may have cost items nested within it, typically forming the hierarchy or breakdown of a cost schedule.<br />
<br />
Source: IfcCostItem<br />
<br />
== A cost item may include arbitrary quantities ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcCostItem -> IfcQuantityVolume [ label="CostQuantities[0]" ];<br />
IfcCostItem -> IfcQuantityVolume2 [ label="CostQuantities[1]" ];<br />
IfcQuantityVolume2 [label="IfcQuantityVolume"]<br />
IfcQuantityVolume -> 3 [label="VolumeValue"]<br />
IfcQuantityVolume2 -> 2 [label="VolumeValue"]<br />
3 [shape=ellipse]<br />
2 [shape=ellipse]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costitem-costquantity.png]]<br />
<br />
A cost item may specify arbitrary quantities. These quantities are not linked to model elements. If multiple quantities are included for a single cost item, each individual quantity is a component which may be summed together to derive the total quantity. For example, this cost item has two components: one with volume of 3m2, another of 2m2. The total quantity is 3 + 2 = 5. All quantities must match the same measurement type (e.g. volume, area, count, etc).<br />
<br />
Source: IfcCostItem<br />
<br />
== A cost item may have a total monetary cost value ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcCostItem -> IfcCostValue [ label="CostValues" ];<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costitem-costvalue.png]]<br />
<br />
If a cost item has no cost quantities, this cost value represents the total cost of the cost item.<br />
<br />
Source: IfcCostItem<br />
<br />
== A cost item may have a total cost derived from a unit value and quantities ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcCostItem -> IfcQuantityVolume [ label="CostQuantities" ];<br />
IfcCostItem -> IfcCostValue [ label="CostValues" ];<br />
IfcQuantityVolume -> 3 [label="VolumeValue"]<br />
IfcCostValue -> 2 [label="AppliedValue"]<br />
3 [shape=ellipse]<br />
2 [shape=ellipse]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costitem-costvalue-unit.png]]<br />
<br />
If a cost item has quantities, the cost value represents a unit cost of the cost item, which is "2" in this case. The total cost of the cost item is derived by multiplying the cost quantities and the unit cost, which is 3 x 2 = 6 in this example.<br />
<br />
Source: IfcCostItem</div>Moulthttps://wiki.osarch.org/index.php?title=File:Ifc-concept-cost-costitem-nest.png&diff=4079File:Ifc-concept-cost-costitem-nest.png2021-08-09T01:58:54Z<p>Moult: </p>
<hr />
<div>Ifc-concept-cost-costitem-nest</div>Moulthttps://wiki.osarch.org/index.php?title=IFC_-_Industry_Foundation_Classes/IFC_concepts/IFC_cost_concepts&diff=4078IFC - Industry Foundation Classes/IFC concepts/IFC cost concepts2021-08-09T01:53:52Z<p>Moult: </p>
<hr />
<div>The primary classes related to this concept are:<br />
<br />
* IfcCostSchedule<br />
* IfcCostItem<br />
<br />
== A cost schedule can exist ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelDeclares -> IfcProject [ label="RelatingContext" ];<br />
IfcRelDeclares -> IfcCostSchedule [ label="RelatedDefinitions" ];<br />
IfcRelDeclares [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule.png]]<br />
<br />
A cost schedule is a collection of cost items, used for a specified purpose. Typical purposes are cost plans and tenders.<br />
<br />
Note: there is no explicit documentation which explains how a cost schedule is related back to the project or context. Therefore, in the absence of documentation, we are assuming that we declare it to the project as shown. However, this is only an assumption. There are explicit arguments against this assumption, such as that a cost schedule must be tied back to a project order. However, this evidence is not considered strong enough as it is never mentioned in the cost schedule documentation page itself.<br />
<br />
Source: IfcProjectOrder<br />
<br />
== A cost schedule can be part of a project order ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAggregates -> IfcProjectOrder [ label="RelatingObject" ];<br />
IfcRelAggregates -> IfcCostSchedule [ label="RelatedObjects" ];<br />
IfcRelAggregates [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-projectorder.png]]<br />
<br />
Project orders, such as work orders, change orders, or in particular purchase orders, may include a cost schedule. For example, a cost schedule may be used to provide an estimate of costs for a work order.<br />
<br />
Source: IfcCostSchedule, IfcProjectOrder<br />
<br />
== A cost schedule may have approval requests ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAssociatesApproval -> IfcApproval [ label="RelatingApproval" ];<br />
IfcRelAssociatesApproval -> IfcCostSchedule [ label="RelatedObjects" ];<br />
IfcRelAssociatesApproval [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule-approval.png]]<br />
<br />
A cost schedule may have an approval associated with it, to determine whether it is approved or not.<br />
<br />
Source: IfcCostSchedule<br />
<br />
== A cost schedule may have a series of approvals ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAssociatesApproval -> IfcCostSchedule [ label="RelatedObjects" ];<br />
IfcRelAssociatesApproval -> IfcApproval [ label="RelatingApproval" ];<br />
IfcRelAssociatesApproval [color="pink"]<br />
IfcApprovalRelationship [color="pink"]<br />
IfcApprovalRelationship -> IfcApproval [label="RelatingApproval"]<br />
IfcApprovalRelationship -> approval2 [label="RelatedApprovals"]<br />
approval2 [label="IfcApproval"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule-approval-rel.png]]<br />
<br />
An approval that relates to a cost schedule may itself be broken down into sub approvals. This implies that the sub approvals (RelatedApprovals) must first be approved before the parent approval (RelatingApproval) may be approved.<br />
<br />
Source: IfcCostSchedule<br />
<br />
== A cost schedule may have actors associated with it ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAssignsToActor -> IfcCostSchedule [ label="RelatedObjects" ];<br />
IfcRelAssignsToActor -> IfcActor [ label="RelatingActor" ];<br />
IfcRelAssignsToActor [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule-actor.png]]<br />
<br />
A cost schedule may describe the people who authored it, who are stakeholders, recipients, or clients.<br />
<br />
Source: IfcCostSchedule<br />
<br />
== A cost schedule may contain cost items ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAssignsToControl -> IfcCostSchedule [ label="RelatingControl" ];<br />
IfcRelAssignsToControl -> IfcCostItem [ label="RelatedObjects" ];<br />
IfcRelAssignsToControl [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule-costitem.png]]<br />
<br />
Cost schedules can contain multiple cost items. An IfcCostItem describes a cost or financial value together with descriptive information that describes its context in a form that enables it to be used within a cost schedule. An IfcCostItem can be used to represent the cost of goods and services, the execution of works by a process, lifecycle cost and more.<br />
<br />
Source: IfcCostSchedule<br />
<br />
== A cost item may include arbitrary quantities ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcCostItem -> IfcQuantityVolume [ label="CostQuantities[0]" ];<br />
IfcCostItem -> IfcQuantityVolume2 [ label="CostQuantities[1]" ];<br />
IfcQuantityVolume2 [label="IfcQuantityVolume"]<br />
IfcQuantityVolume -> 3 [label="VolumeValue"]<br />
IfcQuantityVolume2 -> 2 [label="VolumeValue"]<br />
3 [shape=ellipse]<br />
2 [shape=ellipse]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costitem-costquantity.png]]<br />
<br />
A cost item may specify arbitrary quantities. These quantities are not linked to model elements. If multiple quantities are included for a single cost item, each individual quantity is a component which may be summed together to derive the total quantity. For example, this cost item has two components: one with volume of 3m2, another of 2m2. The total quantity is 3 + 2 = 5. All quantities must match the same measurement type (e.g. volume, area, count, etc).<br />
<br />
Source: IfcCostItem<br />
<br />
== A cost item may have a total monetary cost value ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcCostItem -> IfcCostValue [ label="CostValues" ];<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costitem-costvalue.png]]<br />
<br />
If a cost item has no cost quantities, this cost value represents the total cost of the cost item.<br />
<br />
Source: IfcCostItem<br />
<br />
== A cost item may have a total cost derived from a unit value and quantities ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcCostItem -> IfcQuantityVolume [ label="CostQuantities" ];<br />
IfcCostItem -> IfcCostValue [ label="CostValues" ];<br />
IfcQuantityVolume -> 3 [label="VolumeValue"]<br />
IfcCostValue -> 2 [label="AppliedValue"]<br />
3 [shape=ellipse]<br />
2 [shape=ellipse]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costitem-costvalue-unit.png]]<br />
<br />
If a cost item has quantities, the cost value represents a unit cost of the cost item, which is "2" in this case. The total cost of the cost item is derived by multiplying the cost quantities and the unit cost, which is 3 x 2 = 6 in this example.<br />
<br />
Source: IfcCostItem</div>Moulthttps://wiki.osarch.org/index.php?title=File:Ifc-concept-cost-costitem-costvalue-unit.png&diff=4077File:Ifc-concept-cost-costitem-costvalue-unit.png2021-08-09T01:52:48Z<p>Moult: </p>
<hr />
<div>Ifc-concept-cost-costitem-costvalue-unit</div>Moulthttps://wiki.osarch.org/index.php?title=IFC_-_Industry_Foundation_Classes/IFC_concepts/IFC_cost_concepts&diff=4076IFC - Industry Foundation Classes/IFC concepts/IFC cost concepts2021-08-09T01:45:25Z<p>Moult: </p>
<hr />
<div>The primary classes related to this concept are:<br />
<br />
* IfcCostSchedule<br />
* IfcCostItem<br />
<br />
== A cost schedule can exist ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelDeclares -> IfcProject [ label="RelatingContext" ];<br />
IfcRelDeclares -> IfcCostSchedule [ label="RelatedDefinitions" ];<br />
IfcRelDeclares [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule.png]]<br />
<br />
A cost schedule is a collection of cost items, used for a specified purpose. Typical purposes are cost plans and tenders.<br />
<br />
Note: there is no explicit documentation which explains how a cost schedule is related back to the project or context. Therefore, in the absence of documentation, we are assuming that we declare it to the project as shown. However, this is only an assumption. There are explicit arguments against this assumption, such as that a cost schedule must be tied back to a project order. However, this evidence is not considered strong enough as it is never mentioned in the cost schedule documentation page itself.<br />
<br />
Source: IfcProjectOrder<br />
<br />
== A cost schedule can be part of a project order ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAggregates -> IfcProjectOrder [ label="RelatingObject" ];<br />
IfcRelAggregates -> IfcCostSchedule [ label="RelatedObjects" ];<br />
IfcRelAggregates [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-projectorder.png]]<br />
<br />
Project orders, such as work orders, change orders, or in particular purchase orders, may include a cost schedule. For example, a cost schedule may be used to provide an estimate of costs for a work order.<br />
<br />
Source: IfcCostSchedule, IfcProjectOrder<br />
<br />
== A cost schedule may have approval requests ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAssociatesApproval -> IfcApproval [ label="RelatingApproval" ];<br />
IfcRelAssociatesApproval -> IfcCostSchedule [ label="RelatedObjects" ];<br />
IfcRelAssociatesApproval [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule-approval.png]]<br />
<br />
A cost schedule may have an approval associated with it, to determine whether it is approved or not.<br />
<br />
Source: IfcCostSchedule<br />
<br />
== A cost schedule may have a series of approvals ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAssociatesApproval -> IfcCostSchedule [ label="RelatedObjects" ];<br />
IfcRelAssociatesApproval -> IfcApproval [ label="RelatingApproval" ];<br />
IfcRelAssociatesApproval [color="pink"]<br />
IfcApprovalRelationship [color="pink"]<br />
IfcApprovalRelationship -> IfcApproval [label="RelatingApproval"]<br />
IfcApprovalRelationship -> approval2 [label="RelatedApprovals"]<br />
approval2 [label="IfcApproval"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule-approval-rel.png]]<br />
<br />
An approval that relates to a cost schedule may itself be broken down into sub approvals. This implies that the sub approvals (RelatedApprovals) must first be approved before the parent approval (RelatingApproval) may be approved.<br />
<br />
Source: IfcCostSchedule<br />
<br />
== A cost schedule may have actors associated with it ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAssignsToActor -> IfcCostSchedule [ label="RelatedObjects" ];<br />
IfcRelAssignsToActor -> IfcActor [ label="RelatingActor" ];<br />
IfcRelAssignsToActor [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule-actor.png]]<br />
<br />
A cost schedule may describe the people who authored it, who are stakeholders, recipients, or clients.<br />
<br />
Source: IfcCostSchedule<br />
<br />
== A cost schedule may contain cost items ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAssignsToControl -> IfcCostSchedule [ label="RelatingControl" ];<br />
IfcRelAssignsToControl -> IfcCostItem [ label="RelatedObjects" ];<br />
IfcRelAssignsToControl [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule-costitem.png]]<br />
<br />
Cost schedules can contain multiple cost items. An IfcCostItem describes a cost or financial value together with descriptive information that describes its context in a form that enables it to be used within a cost schedule. An IfcCostItem can be used to represent the cost of goods and services, the execution of works by a process, lifecycle cost and more.<br />
<br />
Source: IfcCostSchedule<br />
<br />
== A cost item may include arbitrary quantities ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcCostItem -> IfcQuantityVolume [ label="CostQuantities[0]" ];<br />
IfcCostItem -> IfcQuantityVolume2 [ label="CostQuantities[1]" ];<br />
IfcQuantityVolume2 [label="IfcQuantityVolume"]<br />
IfcQuantityVolume -> 3 [label="VolumeValue"]<br />
IfcQuantityVolume2 -> 2 [label="VolumeValue"]<br />
3 [shape=ellipse]<br />
2 [shape=ellipse]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costitem-costquantity.png]]<br />
<br />
A cost item may specify arbitrary quantities. These quantities are not linked to model elements. If multiple quantities are included for a single cost item, each individual quantity is a component which may be summed together to derive the total quantity. For example, this cost item has two components: one with volume of 3m2, another of 2m2. The total quantity is 3 + 2 = 5. All quantities must match the same measurement type (e.g. volume, area, count, etc).<br />
<br />
Source: IfcCostItem<br />
<br />
== A cost item may have a total monetary cost value ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcCostItem -> IfcCostValue [ label="CostValues" ];<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costitem-costvalue.png]]<br />
<br />
If a cost item has no cost quantities, this cost value represents the total cost of the cost item.<br />
<br />
Source: IfcCostItem</div>Moulthttps://wiki.osarch.org/index.php?title=File:Ifc-concept-cost-costitem-costquantity.png&diff=4075File:Ifc-concept-cost-costitem-costquantity.png2021-08-09T01:42:22Z<p>Moult: </p>
<hr />
<div>Ifc-concept-cost-costitem-costquantity</div>Moulthttps://wiki.osarch.org/index.php?title=IFC_-_Industry_Foundation_Classes/IFC_concepts/IFC_cost_concepts&diff=4074IFC - Industry Foundation Classes/IFC concepts/IFC cost concepts2021-08-09T01:38:20Z<p>Moult: </p>
<hr />
<div>The primary classes related to this concept are:<br />
<br />
* IfcCostSchedule<br />
* IfcCostItem<br />
<br />
== A cost schedule can exist ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelDeclares -> IfcProject [ label="RelatingContext" ];<br />
IfcRelDeclares -> IfcCostSchedule [ label="RelatedDefinitions" ];<br />
IfcRelDeclares [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule.png]]<br />
<br />
A cost schedule is a collection of cost items, used for a specified purpose. Typical purposes are cost plans and tenders.<br />
<br />
Note: there is no explicit documentation which explains how a cost schedule is related back to the project or context. Therefore, in the absence of documentation, we are assuming that we declare it to the project as shown. However, this is only an assumption. There are explicit arguments against this assumption, such as that a cost schedule must be tied back to a project order. However, this evidence is not considered strong enough as it is never mentioned in the cost schedule documentation page itself.<br />
<br />
Source: IfcProjectOrder<br />
<br />
== A cost schedule can be part of a project order ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAggregates -> IfcProjectOrder [ label="RelatingObject" ];<br />
IfcRelAggregates -> IfcCostSchedule [ label="RelatedObjects" ];<br />
IfcRelAggregates [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-projectorder.png]]<br />
<br />
Project orders, such as work orders, change orders, or in particular purchase orders, may include a cost schedule. For example, a cost schedule may be used to provide an estimate of costs for a work order.<br />
<br />
Source: IfcCostSchedule, IfcProjectOrder<br />
<br />
== A cost schedule may have approval requests ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAssociatesApproval -> IfcApproval [ label="RelatingApproval" ];<br />
IfcRelAssociatesApproval -> IfcCostSchedule [ label="RelatedObjects" ];<br />
IfcRelAssociatesApproval [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule-approval.png]]<br />
<br />
A cost schedule may have an approval associated with it, to determine whether it is approved or not.<br />
<br />
Source: IfcCostSchedule<br />
<br />
== A cost schedule may have a series of approvals ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAssociatesApproval -> IfcCostSchedule [ label="RelatedObjects" ];<br />
IfcRelAssociatesApproval -> IfcApproval [ label="RelatingApproval" ];<br />
IfcRelAssociatesApproval [color="pink"]<br />
IfcApprovalRelationship [color="pink"]<br />
IfcApprovalRelationship -> IfcApproval [label="RelatingApproval"]<br />
IfcApprovalRelationship -> approval2 [label="RelatedApprovals"]<br />
approval2 [label="IfcApproval"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule-approval-rel.png]]<br />
<br />
An approval that relates to a cost schedule may itself be broken down into sub approvals. This implies that the sub approvals (RelatedApprovals) must first be approved before the parent approval (RelatingApproval) may be approved.<br />
<br />
Source: IfcCostSchedule<br />
<br />
== A cost schedule may have actors associated with it ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAssignsToActor -> IfcCostSchedule [ label="RelatedObjects" ];<br />
IfcRelAssignsToActor -> IfcActor [ label="RelatingActor" ];<br />
IfcRelAssignsToActor [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule-actor.png]]<br />
<br />
A cost schedule may describe the people who authored it, who are stakeholders, recipients, or clients.<br />
<br />
Source: IfcCostSchedule<br />
<br />
== A cost schedule may contain cost items ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAssignsToControl -> IfcCostSchedule [ label="RelatingControl" ];<br />
IfcRelAssignsToControl -> IfcCostItem [ label="RelatedObjects" ];<br />
IfcRelAssignsToControl [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule-costitem.png]]<br />
<br />
Cost schedules can contain multiple cost items. An IfcCostItem describes a cost or financial value together with descriptive information that describes its context in a form that enables it to be used within a cost schedule. An IfcCostItem can be used to represent the cost of goods and services, the execution of works by a process, lifecycle cost and more.<br />
<br />
Source: IfcCostSchedule<br />
<br />
== A cost item may have a total monetary cost value ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcCostItem -> IfcCostValue [ label="CostValues" ];<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costitem-costvalue.png]]<br />
<br />
If a cost item has a cost value with no cost quantities, this cost value represents the total cost of the cost item.<br />
<br />
Source: IfcCostItem</div>Moulthttps://wiki.osarch.org/index.php?title=File:Ifc-concept-cost-costitem-costvalue.png&diff=4073File:Ifc-concept-cost-costitem-costvalue.png2021-08-09T01:38:15Z<p>Moult: </p>
<hr />
<div>Ifc-concept-cost-costitem-costvalue</div>Moulthttps://wiki.osarch.org/index.php?title=IFC_-_Industry_Foundation_Classes/IFC_concepts/IFC_cost_concepts&diff=4072IFC - Industry Foundation Classes/IFC concepts/IFC cost concepts2021-08-05T04:48:32Z<p>Moult: /* A cost schedule may contain cost items */</p>
<hr />
<div>The primary classes related to this concept are:<br />
<br />
* IfcCostSchedule<br />
* IfcCostItem<br />
<br />
== A cost schedule can exist ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelDeclares -> IfcProject [ label="RelatingContext" ];<br />
IfcRelDeclares -> IfcCostSchedule [ label="RelatedDefinitions" ];<br />
IfcRelDeclares [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule.png]]<br />
<br />
A cost schedule is a collection of cost items, used for a specified purpose. Typical purposes are cost plans and tenders.<br />
<br />
Note: there is no explicit documentation which explains how a cost schedule is related back to the project or context. Therefore, in the absence of documentation, we are assuming that we declare it to the project as shown. However, this is only an assumption. There are explicit arguments against this assumption, such as that a cost schedule must be tied back to a project order. However, this evidence is not considered strong enough as it is never mentioned in the cost schedule documentation page itself.<br />
<br />
Source: IfcProjectOrder<br />
<br />
== A cost schedule can be part of a project order ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAggregates -> IfcProjectOrder [ label="RelatingObject" ];<br />
IfcRelAggregates -> IfcCostSchedule [ label="RelatedObjects" ];<br />
IfcRelAggregates [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-projectorder.png]]<br />
<br />
Project orders, such as work orders, change orders, or in particular purchase orders, may include a cost schedule. For example, a cost schedule may be used to provide an estimate of costs for a work order.<br />
<br />
Source: IfcCostSchedule, IfcProjectOrder<br />
<br />
== A cost schedule may have approval requests ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAssociatesApproval -> IfcApproval [ label="RelatingApproval" ];<br />
IfcRelAssociatesApproval -> IfcCostSchedule [ label="RelatedObjects" ];<br />
IfcRelAssociatesApproval [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule-approval.png]]<br />
<br />
A cost schedule may have an approval associated with it, to determine whether it is approved or not.<br />
<br />
Source: IfcCostSchedule<br />
<br />
== A cost schedule may have a series of approvals ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAssociatesApproval -> IfcCostSchedule [ label="RelatedObjects" ];<br />
IfcRelAssociatesApproval -> IfcApproval [ label="RelatingApproval" ];<br />
IfcRelAssociatesApproval [color="pink"]<br />
IfcApprovalRelationship [color="pink"]<br />
IfcApprovalRelationship -> IfcApproval [label="RelatingApproval"]<br />
IfcApprovalRelationship -> approval2 [label="RelatedApprovals"]<br />
approval2 [label="IfcApproval"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule-approval-rel.png]]<br />
<br />
An approval that relates to a cost schedule may itself be broken down into sub approvals. This implies that the sub approvals (RelatedApprovals) must first be approved before the parent approval (RelatingApproval) may be approved.<br />
<br />
Source: IfcCostSchedule<br />
<br />
== A cost schedule may have actors associated with it ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAssignsToActor -> IfcCostSchedule [ label="RelatedObjects" ];<br />
IfcRelAssignsToActor -> IfcActor [ label="RelatingActor" ];<br />
IfcRelAssignsToActor [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule-actor.png]]<br />
<br />
A cost schedule may describe the people who authored it, who are stakeholders, recipients, or clients.<br />
<br />
Source: IfcCostSchedule<br />
<br />
== A cost schedule may contain cost items ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAssignsToControl -> IfcCostSchedule [ label="RelatingControl" ];<br />
IfcRelAssignsToControl -> IfcCostItem [ label="RelatedObjects" ];<br />
IfcRelAssignsToControl [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule-costitem.png]]<br />
<br />
Cost schedules can contain multiple cost items. An IfcCostItem describes a cost or financial value together with descriptive information that describes its context in a form that enables it to be used within a cost schedule. An IfcCostItem can be used to represent the cost of goods and services, the execution of works by a process, lifecycle cost and more.<br />
<br />
Source: IfcCostSchedule</div>Moulthttps://wiki.osarch.org/index.php?title=IFC_-_Industry_Foundation_Classes/IFC_concepts/IFC_cost_concepts&diff=4071IFC - Industry Foundation Classes/IFC concepts/IFC cost concepts2021-08-05T04:45:55Z<p>Moult: </p>
<hr />
<div>The primary classes related to this concept are:<br />
<br />
* IfcCostSchedule<br />
* IfcCostItem<br />
<br />
== A cost schedule can exist ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelDeclares -> IfcProject [ label="RelatingContext" ];<br />
IfcRelDeclares -> IfcCostSchedule [ label="RelatedDefinitions" ];<br />
IfcRelDeclares [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule.png]]<br />
<br />
A cost schedule is a collection of cost items, used for a specified purpose. Typical purposes are cost plans and tenders.<br />
<br />
Note: there is no explicit documentation which explains how a cost schedule is related back to the project or context. Therefore, in the absence of documentation, we are assuming that we declare it to the project as shown. However, this is only an assumption. There are explicit arguments against this assumption, such as that a cost schedule must be tied back to a project order. However, this evidence is not considered strong enough as it is never mentioned in the cost schedule documentation page itself.<br />
<br />
Source: IfcProjectOrder<br />
<br />
== A cost schedule can be part of a project order ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAggregates -> IfcProjectOrder [ label="RelatingObject" ];<br />
IfcRelAggregates -> IfcCostSchedule [ label="RelatedObjects" ];<br />
IfcRelAggregates [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-projectorder.png]]<br />
<br />
Project orders, such as work orders, change orders, or in particular purchase orders, may include a cost schedule. For example, a cost schedule may be used to provide an estimate of costs for a work order.<br />
<br />
Source: IfcCostSchedule, IfcProjectOrder<br />
<br />
== A cost schedule may have approval requests ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAssociatesApproval -> IfcApproval [ label="RelatingApproval" ];<br />
IfcRelAssociatesApproval -> IfcCostSchedule [ label="RelatedObjects" ];<br />
IfcRelAssociatesApproval [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule-approval.png]]<br />
<br />
A cost schedule may have an approval associated with it, to determine whether it is approved or not.<br />
<br />
Source: IfcCostSchedule<br />
<br />
== A cost schedule may have a series of approvals ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAssociatesApproval -> IfcCostSchedule [ label="RelatedObjects" ];<br />
IfcRelAssociatesApproval -> IfcApproval [ label="RelatingApproval" ];<br />
IfcRelAssociatesApproval [color="pink"]<br />
IfcApprovalRelationship [color="pink"]<br />
IfcApprovalRelationship -> IfcApproval [label="RelatingApproval"]<br />
IfcApprovalRelationship -> approval2 [label="RelatedApprovals"]<br />
approval2 [label="IfcApproval"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule-approval-rel.png]]<br />
<br />
An approval that relates to a cost schedule may itself be broken down into sub approvals. This implies that the sub approvals (RelatedApprovals) must first be approved before the parent approval (RelatingApproval) may be approved.<br />
<br />
Source: IfcCostSchedule<br />
<br />
== A cost schedule may have actors associated with it ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAssignsToActor -> IfcCostSchedule [ label="RelatedObjects" ];<br />
IfcRelAssignsToActor -> IfcActor [ label="RelatingActor" ];<br />
IfcRelAssignsToActor [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule-actor.png]]<br />
<br />
A cost schedule may describe the people who authored it, who are stakeholders, recipients, or clients.<br />
<br />
Source: IfcCostSchedule<br />
<br />
== A cost schedule may contain cost items ==<br />
<br />
<!--<br />
digraph {<br />
node [ shape=rect, color="lightblue" ];<br />
edge [ fontsize=10 ];<br />
IfcRelAssignsToControl -> IfcCostSchedule [ label="RelatingControl" ];<br />
IfcRelAssignsToControl -> IfcCostItem [ label="RelatedObjects" ];<br />
IfcRelAssignsToControl [color="pink"]<br />
}<br />
--><br />
<br />
[[File:Ifc-concept-cost-costschedule-costitem.png]]<br />
<br />
Cost schedules can contain multiple cost items.<br />
<br />
Source: IfcCostSchedule</div>Moult