ifcopenshell.api.pset_template

Manage property templates to standard project property names and data types

To help standardise the naming, data types, and association of properties to elements, IFC supports property set templates. buildingSMART provides their own built-in ISO-standardised property templates, but governments, companies, and individuals may also create their own.

Submodules

Package Contents

ifcopenshell.api.pset_template.add_prop_template(file: ifcopenshell.file, pset_template: ifcopenshell.entity_instance, name: str = 'NewProperty', description: str | None = None, template_type: str = 'P_SINGLEVALUE', primary_measure_type: str = 'IfcLabel') ifcopenshell.entity_instance

Adds new property templates to a property set template

Assuming you first have a property set template, this allows you to add templates for properties within that property set. A property template lets you specify the name, description, and data type of a property. When the template is provided to a model author, this gives them clear instructions about the intention of the property and exactly which data type to use.

Types of properties and quantities include:

  • P_SINGLEVALUE - a single value, the most common type of property.

  • P_ENUMERATEDVALUE - the property value may one or more values chosen

    from a preset list of values.

  • P_BOUNDEDVALUE - the property has a minimum, maximum, and set value.

  • P_LISTVALUE - the property has a list of values.

  • P_TABLEVALUE - the property has a table of values.

  • P_REFERENCEVALUE - the property is a parametric reference to another

    value. This is only for advanced users.

  • Q_LENGTH - the quantity is a length.

  • Q_AREA - the quantity is an area.

  • Q_VOLUME - the quantity is a volume.

  • Q_COUNT - the quantity is counting a item.

  • Q_WEIGHT - the quantity is a weight.

  • Q_TIME - the quantity is a time duration.

Parameters:
  • pset_template (ifcopenshell.entity_instance) – The property set template to add the property template to.

  • name (str,optional) – The name of the property

  • description (str,optional) – A few words describing what the property stores.

  • primary_measure_type – The data type of the property. Consult the IFC documentation for the full list of data types.

  • primary_measure_type – str,optional

Returns:

The newly created IfcSimplePropertyTemplate.

Return type:

ifcopenshell.entity_instance

Example:

# Create a simple template that may be applied to all types
template = ifcopenshell.api.pset_template.add_pset_template(model, name="ABC_RiskFactors")

# Here's one example property
ifcopenshell.api.pset_template.add_prop_template(model, pset_template=template,
    name="HighVoltage", description="Whether there is a risk of high voltage.",
    primary_measure_type="IfcBoolean")

# Here's another
ifcopenshell.api.pset_template.add_prop_template(model, pset_template=template,
    name="ChemicalType", description="The class of chemical spillage.",
    primary_measure_type="IfcLabel")
ifcopenshell.api.pset_template.add_pset_template(file: ifcopenshell.file, name: str = 'New_Pset', template_type: str = 'PSET_TYPEDRIVENOVERRIDE', applicable_entity: str = 'IfcObject,IfcTypeObject') ifcopenshell.entity_instance

Adds a new property set template

This creates a new template for property sets. A template defines what the name of the property set should be, what properties it can have, what entities (e.g. wall) the property set can be assigned to, whether it should be assigned at a type or occurrence level, the data types of the properties, and descriptions of the properties. This template can then be used as a project, company, or local government standard.

buildingSMART itself ships a catalogue of property sets using these templates, ensuring that internationally common properties (e.g. fire rating of a wall) are all implemented exactly the same way across all vendors and projects. Naturally, not everything can be standardised internationally, so this allows you to create your own templates.

You may either create a property template to store properties, or a quantity template to store quantities. For convenience, we will always call them “property templates” as they are conceptually very similar.

This function only creates a template for the property set, not the properties themselves within the property set. At this level, you are allowed to define the name of the property set, whether it is type or occurrence based, and which entities it applies to.

See the documentation for IfcPropertySetTemplate for instructions on the types of template type and list of applicable entities.

The types of property set templates are:

  • PSET_TYPEDRIVENONLY - assigned only to types

  • PSET_TYPEDRIVENOVERRIDE - assigned to types or occurrences. If both,

    the occurrence overrides the type.

  • PSET_OCCURRENCEDRIVEN - assigned to occurrences only.

  • PSET_PERFORMANCEDRIVEN - assigned as a timeseries data range. This is

    only recommended for advanced users.

  • QTO_TYPEDRIVENONLY - assigned only to types, but for quantities.

  • QTO_TYPEDRIVENOVERRIDE - assigned to types or occurrences, but for

    quantities. If both, the occurrence overrides the type.

  • QTO_OCCURRENCEDRIVEN - assigned to occurrences only, but for

    quantities.

By default, this creates a template that can be applied to types, but overridden by occurrences, and is applicable to everything.

Parameters:
  • name (str,optional) – The name of the property set

  • template_type (str,optional) – Choose from one of PSET_TYPEDRIVENONLY, PSET_TYPEDRIVENOVERRIDE, PSET_OCCURRENCEDRIVEN, PSET_PERFORMANCEDRIVEN, QTO_TYPEDRIVENONLY, QTO_TYPEDRIVENOVERRIDE, QTO_OCCURRENCEDRIVEN, NOTDEFINED

  • applicable_entity (str,optional) – The entity that this template is allowed to be applied to. For example, IfcWall means that the property set may be assigned to walls only. IfcTypeObject, the default, means that the property set may be assigned to any type.

Returns:

The newly created IfcPropertySetTemplate

Return type:

ifcopenshell.entity_instance

Example:

# Create a simple template that may be applied to all types
ifcopenshell.api.pset_template.add_pset_template(model, name="ABC_RiskFactors")

# Note that we aren't finished yet. Our property set template
# doesn't have any properties in it. Let's add a minimum of one
# property.
ifcopenshell.api.pset_template.add_prop_template(model, pset_template=template,
    name="HighVoltage", description="Whether there is a risk of high voltage.",
    primary_measure_type="IfcBoolean")
ifcopenshell.api.pset_template.edit_prop_template(file: ifcopenshell.file, prop_template: ifcopenshell.entity_instance, attributes: dict[str, Any]) None

Edits the attributes of an IfcSimplePropertyTemplate

For more information about the attributes and data types of an IfcSimplePropertyTemplate, consult the IFC documentation.

Parameters:
  • prop_template (ifcopenshell.entity_instance) – The IfcSimplePropertyTemplate entity you want to edit

  • attributes (dict) – a dictionary of attribute names and values.

Returns:

None

Return type:

None

Example:

template = ifcopenshell.api.pset_template.add_pset_template(model, name="ABC_RiskFactors")

# Here's a property with just default values.
prop = ifcopenshell.api.pset_template.add_prop_template(model, pset_template=template)

# Let's edit it to give the actual values we need.
ifcopenshell.api.pset_template.edit_prop_template(model,
    prop_template=prop, attributes={"Name": "DemoA", "PrimaryMeasureType": "IfcLengthMeasure"})
ifcopenshell.api.pset_template.edit_pset_template(file: ifcopenshell.file, pset_template: ifcopenshell.entity_instance, attributes: dict[str, Any]) None

Edits the attributes of an IfcPropertySetTemplate

For more information about the attributes and data types of an IfcPropertySetTemplate, consult the IFC documentation.

Parameters:
  • pset_template (ifcopenshell.entity_instance) – The IfcPropertySetTemplate entity you want to edit

  • attributes (dict) – a dictionary of attribute names and values.

Returns:

None

Return type:

None

Example:

# Whoops! We named it with a buildingSMART reserved "Pset_" prefix!
template = ifcopenshell.api.pset_template.add_pset_template(model, name="Pset_RiskFactors")

# Let's fix it to prefix with our company code instead.
ifcopenshell.api.pset_template.edit_pset_template(model,
    pset_template=template, attributes={"Name": "ABC_RiskFactors"})
ifcopenshell.api.pset_template.remove_prop_template(file: ifcopenshell.file, prop_template: ifcopenshell.entity_instance) None

Removes a property template

Note that a property set template should always have at least one property template to be valid, so take care when removing property templates.

Parameters:

prop_template (ifcopenshell.entity_instance) – The IfcSimplePropertyTemplate to remove.

Returns:

None

Return type:

None

Example:

template = ifcopenshell.api.pset_template.add_pset_template(model, name="ABC_RiskFactors")

# Here's two propertes with just default values.
prop1 = ifcopenshell.api.pset_template.add_prop_template(model, pset_template=template)
prop2 = ifcopenshell.api.pset_template.add_prop_template(model, pset_template=template)

# Let's remove the second one.
ifcopenshell.api.pset_template.remove_prop_template(model, prop_template=prop2)
ifcopenshell.api.pset_template.remove_pset_template(file: ifcopenshell.file, pset_template: ifcopenshell.entity_instance) None

Removes a property set template

All property templates within the property set template are also removed along with it.

Parameters:

pset_template (ifcopenshell.entity_instance) – The IfcPropertySetTemplate to remove.

Returns:

None

Return type:

None

Example:

# Create a template.
template = ifcopenshell.api.pset_template.add_pset_template(model, name="ABC_RiskFactors")

# Let's remove the template.
ifcopenshell.api.pset_template.remove_pset_template(model, pset_template=template)