Using Rhino IFC Layers

Explanation of using Rhino IFC Layers for Generating IFC files

Rhino IFC Layers allows the user to take geometry created in Rhino and build an IFC BIM model. This is done by referencing geometrical layers in Rhino and assigning IFC information such as project, site, building, building level and element class type information.

This allows us to generate .ifc files directly from Rhino that can be imported into external applications such as Revit or other CAD/BIM applications. The simple building example below will guide through setting up a simple building in Rhino using RhinoIFC layer for export.

Note that all Geometry Gym Ifc Attributes are simply stored as User Text on layers. So if you prefer to manage this using python, grasshopper or other programming techniques, it's possible to automate the user interface shown below.

Rhino Layers Toolbar

After installing the ggRhinoIFC plug-in there should be an accessible window called ggRhinoIFCLayers available. If you cannot see the window in the properties window right click and see if it is available from the drop down toolbar list.

Don't get this panel confused with the ggRhinoIFC panel. This panel is the IFC tree viewer panel used for browsing imported .ifc files.

Using the RhinoIFC Layers Panel

You will notice that the view of the RhinoIFC Layers panel is a direct representation of the Rhino Layers panel and provides all the available layers that the user has created in Rhino. As new layers are created in Rhino these will automatically be reflected and viewed in the RhinoIFC layers toolbar.

Once you have defined a couple of layers within Rhino you can use the RhinoIFC layers panel to assign IFC information to objects contained within or to Sub/Children layers.

The RhinoIFC Layers Panel is solely used to manage the IFC information assigned to objects within a Rhino Layer. You do not use it to create layers.

Right click on one of the layers in the IFC Layers window. A context menu will appear and allow you to assign an IFC Classification to that layer. Assign the appropriate ifc class designation to the layer by traversing through the context menu to get to your desired classification. The root (or uppermost) layer should be classified as the IfcProject. IFC file can then be created by the ExportToFile option on the right click context menu of this layer for rhino objects on children layers.

Once a layer has been assigned a IFC class designation it will be displayed within brackets next to the layer item. If you right click on the element again the context of the menu is changed to reflect the information in-which can be assigned to that object.

For example if Layer 01 is assigned as the IFC Project Root Layer, when right clicking on the layer again there will be a number of options to assign additional information to the project such as the Project Placement Plane. This menu is context sensitive so will change based on the IFC Class designated. You can also change the provided classification or remove it completely under the Change classification menu item..

You can set a Project Template text file to assign property sets to specific class objects within Rhino. See below for more information

Ignoring layers

Typically when generating Rhino geometry you will have layers in-which you will not want to be exported in the .ifc file. If you do not want a layer to be included in the IFC export then you can set that layer to be IGNORED as shown below:

Setting Classification Systems

In progress. Please contact us for information and advice or please see the information provided under Rhino IFC for Grasshopper.

Setting a Rhino Layer Hierarchy

The first thing to do when defining an IFC export is to understand how the building is broken up hierarchically. An understanding of IFC of benefit for this. As a simple guide the below shows the typical breakdown.

Project -> Site -> Building -> Building Story -> Space -> Assembly -> Element

The items shown in Bold are typically required as a minimum. However, it is good practice to provide further breakdown to make it easier to reference building parts further down the line. Each project will be different, in complexity and stage and requirements.

Adding Properties

It is possible to add properties to associated ifc objects. This process works by assigning user-text to objects in the background and managing this by a IFC properties tab in Rhino under the

Assigning a property set to specific IFC classes

You can automatically assign property keys to objects which have been defined as object classifications using a .ifc text file project template with the containing property sets. This will then allow you to assign property values to each object defined within Rhino.

To add a Project Template:

  1. Navigate to the root Project layer within the Rhino IFC Layers toolbar and select Project Template from the drop down.

  2. A text box should appear which will allow you to paste in your ifc text. This can be in .xml, .step or .json format.

  3. Click Okay. Not if you reopen this text box it will likely be converted to a .json format string.

Once you have added the Project Template text you can now select an object in the Rhino Viewport and assign its property values. Navigate to the Properties panel of and click on the IFC logo icon to view all available properties. You can now also edit these properties for each object.

Property Template File

The below provides a simple example of a property template file. This example generates two property sets. One which is applicable to all IfcSpatialStructureElements and one that is applicable to both IfcElements and IfcSystems.

You can specify which IFC entities each property sets should be assigned too. You can simply do this by modifying the text in project template or by defining this on creation of the template file.

In order to create such a file, we typically recommend Grasshopper as the best way to do this. You can read more about this at the page link below:

{
  "HEADER": {
    "FILE_DESCRIPTION": {
      "description": "ViewDefinition[notYetAssigned]",
      "implementation_level": "2;1"
    },
    "FILE_NAME": {
      "name": "",
      "time_stamp": "2020-06-05T10:55:27",
      "author": "NathanLuke",
      "organization": "Unknown",
      "preprocessor_version": "ggRhinoIFC v1.8.19.0 by Geometry Gym Pty Ltd built 2020-05-25T05:19:24",
      "originating_system": "ggRhinoIFC - Rhino6 Plug-in by Geometry Gym Pty Ltd",
      "authorization": "None"
    },
    "FILE_SCHEMA": {
      "schema_identifiers": "IFC4"
    }
  },
  "DATA": [
    {
      "type": "IfcProjectLibrary",
      "GlobalId": "21hMc4wgjAqRSadX1a_jic",
      "Name": "Asset Property Templates",
      "Declares": [
        {
          "type": "IfcRelDeclares",
          "GlobalId": "1V9uXw1gT02gPkPEPwlIvO",
          "RelatedDefinitions": [
            {
              "type": "IfcPropertySetTemplate",
              "GlobalId": "12aLVZVcv5rgaTnLltBLnd",
              "Name": "Location",
              "TemplateType": "PSET_OCCURRENCEDRIVEN",
              "ApplicableEntity": "IfcSpatialStructureElement",
              "HasPropertyTemplates": [
                {
                  "type": "IfcSimplePropertyTemplate",
                  "GlobalId": "1ymLuN8vPF5RF4P6XK_FZH",
                  "Name": "Project_LocationCode",
                  "TemplateType": "P_SINGLEVALUE",
                  "PrimaryMeasureType": "IfcIdentifier"
                },
                {
                  "type": "IfcSimplePropertyTemplate",
                  "GlobalId": "34G2EWsZX1_BtdJhGiPbzd",
                  "Name": "Project_Parent_LocationCode",
                  "TemplateType": "P_SINGLEVALUE",
                  "PrimaryMeasureType": "IfcIdentifier"
                },
                {
                  "type": "IfcSimplePropertyTemplate",
                  "GlobalId": "29r3CIC1PCPO$6Nig4rMHZ",
                  "Name": "Uniclass_LocationCode",
                  "TemplateType": "P_SINGLEVALUE",
                  "PrimaryMeasureType": "IfcIdentifier"
                },
                {
                  "type": "IfcSimplePropertyTemplate",
                  "GlobalId": "3pfbcjXrH0hPIvvT4aqUNR",
                  "Name": "Location_ID",
                  "TemplateType": "P_SINGLEVALUE",
                  "PrimaryMeasureType": "IfcIdentifier"
                },
                {
                  "type": "IfcSimplePropertyTemplate",
                  "GlobalId": "1dITTjslz1XP3BC2w_8NEs",
                  "Name": "Project_LocationDescription",
                  "TemplateType": "P_SINGLEVALUE",
                  "PrimaryMeasureType": "IfcIdentifier"
                }
              ]
            },
            {
              "type": "IfcPropertySetTemplate",
              "GlobalId": "1lQqf4HwjC39J3cNGKe2hl",
              "Name": "Asset",
              "TemplateType": "PSET_OCCURRENCEDRIVEN",
              "ApplicableEntity": "IfcElement,IfcSystem",
              "HasPropertyTemplates": [
                {
                  "type": "IfcSimplePropertyTemplate",
                  "GlobalId": "2Y_Jhjgh5DNhT3xdCgImT8",
                  "Name": "Asset_ID",
                  "TemplateType": "P_SINGLEVALUE",
                  "PrimaryMeasureType": "IfcIdentifier"
                },
                {
                  "type": "IfcSimplePropertyTemplate",
                  "GlobalId": "0Yev3wh$rDpQcrYWiOyxUl",
                  "Name": "Project_AssetCode",
                  "TemplateType": "P_SINGLEVALUE",
                  "PrimaryMeasureType": "IfcIdentifier"
                },
                {
                  "type": "IfcSimplePropertyTemplate",
                  "GlobalId": "1vNtVROzbF5eYn42ZtYyam",
                  "Name": "Project_Parent_AssetCode",
                  "TemplateType": "P_SINGLEVALUE",
                  "PrimaryMeasureType": "IfcIdentifier"
                },
                {
                  "type": "IfcSimplePropertyTemplate",
                  "GlobalId": "0rfq8vx9n6gByNOqe2oAEt",
                  "Name": "Uniclass_AssetCode",
                  "TemplateType": "P_SINGLEVALUE",
                  "PrimaryMeasureType": "IfcIdentifier"
                },
                {
                  "href": "1ymLuN8vPF5RF4P6XK_FZH"
                },
                {
                  "type": "IfcSimplePropertyTemplate",
                  "GlobalId": "2B75DEezL0kQcI6E0mT$iR",
                  "Name": "Asset_Description",
                  "TemplateType": "P_SINGLEVALUE",
                  "PrimaryMeasureType": "IfcIdentifier"
                },
                {
                  "type": "IfcSimplePropertyTemplate",
                  "GlobalId": "05dQRSKDfCPPiaDLP5Hql$",
                  "Name": "DisciplineCode",
                  "TemplateType": "P_SINGLEVALUE",
                  "PrimaryMeasureType": "IfcIdentifier"
                },
                {
                  "type": "IfcSimplePropertyTemplate",
                  "GlobalId": "2v22J7cJ1Axh4dmEY90uR3",
                  "Name": "SubDiscCode",
                  "TemplateType": "P_SINGLEVALUE",
                  "PrimaryMeasureType": "IfcIdentifier"
                },
                {
                  "type": "IfcSimplePropertyTemplate",
                  "GlobalId": "3pmODlgYP1$QD5mbRxAFSo",
                  "Name": "Asset_Status",
                  "TemplateType": "P_SINGLEVALUE",
                  "PrimaryMeasureType": "IfcLabel"
                },
                {
                  "type": "IfcSimplePropertyTemplate",
                  "GlobalId": "0OC6ewtzn6yh2tb77f9yOq",
                  "Name": "Asset_Owner",
                  "TemplateType": "P_SINGLEVALUE",
                  "PrimaryMeasureType": "IfcLabel"
                },
                {
                  "type": "IfcSimplePropertyTemplate",
                  "GlobalId": "12QUin7SD0YO_r_$YCwTQO",
                  "Name": "Asset_Operator",
                  "TemplateType": "P_SINGLEVALUE",
                  "PrimaryMeasureType": "IfcLabel"
                },
                {
                  "type": "IfcSimplePropertyTemplate",
                  "GlobalId": "2X7ozp8wr6ehHIXjw4$5V0",
                  "Name": "Asset_Maintainer",
                  "TemplateType": "P_SINGLEVALUE",
                  "PrimaryMeasureType": "IfcLabel"
                }
              ]
            }
          ]
        }
      ]
    }
  ]
}

If you have improvement suggestions for this process please do get in touch.

Last updated