Module Contents#

class ifcopenshell.sql.sqlite(filepath)#

Bases: ifcopenshell.file.file

Base class for containing IFC files.

Class has instance methods for filtering by element Id, Type, etc. Instantiated objects can be subscripted by Id or Guid


ifc_file = ifcopenshell.open(file_path)
products = ifc_file.by_type("IfcProduct")
print(products[0].id(), products[0].GlobalId) # 122 2XQ$n5SLP5MBLyL442paFx
print(products[0] == ifc_file[122] == ifc_file["2XQ$n5SLP5MBLyL442paFx"]) # True

Create a new blank IFC model

This IFC model does not have any entities in it yet. See the create_entity function for how to create new entities. All data is stored in memory. If you wish to write the IFC model to disk, see the write function.

  • f – The underlying IfcOpenShell file object to be wrapped. This is an internal implementation detail and should generally be left as None by users.

  • schema (string) – Which IFC schema to use, chosen from “IFC2X3”, “IFC4”, or “IFC4X3”. These refer to the ISO approved versions of IFC. Defaults to “IFC4” if not specified, which is currently recommended for all new projects.

  • schema_version (tuple[int]) – If you want to specify an exact version of IFC that may not be an ISO approved version, use this argument instead of schema. IFC versions on technical.buildingsmart.org are described using 4 integers representing the major, minor, addendum, and corrigendum number. For example, (4, 0, 2, 1) refers to IFC4 ADD2 TC1, which is the official version approved by ISO when people refer to “IFC4”. Generally you should not use this argument unless you are testing non-ISO IFC releases.


# Create a new IFC4 model, create a wall, then save it to an IFC-SPF file.
model = ifcopenshell.file()

# Create a new IFC4X3 model
model = ifcopenshell.file(schema="IFC4X3")

# A poweruser testing out a particular version of IFC4X3
model = ifcopenshell.file(schema_version=(4, 3, 0, 1))
by_id(self, id)#

Return an IFC entity instance filtered by IFC ID.


id (int) – STEP numerical identifier


An ifcopenshell.entity_instance.entity_instance

Return type


by_type(self, type, include_subtypes=True)#

Return IFC objects filtered by IFC Type and wrapped with the entity_instance class.

If an IFC type class has subclasses, all entities of those subclasses are also returned.

  • type (string) – The case insensitive type of IFC class to return.

  • include_subtypes (bool) – Whether or not to return subtypes of the IFC class


A list of ifcopenshell.entity_instance.entity_instance objects

Return type


create_entity(self, type, *args, **kawrgs)#

Create a new IFC entity in the file.

  • type (string) – Case insensitive name of the IFC class

  • args – The positional arguments of the IFC class

  • kwargs – The keyword arguments of the IFC class


An entity instance

Return type



f = ifcopenshell.file()
# >>> #1=IfcPerson($,$,$,$,$,$,$,$)
f.create_entity("IfcPerson", "Foobar")
# >>> #2=IfcPerson('Foobar',$,$,$,$,$,$,$)
f.create_entity("IfcPerson", Identification="Foobar")
# >>> #3=IfcPerson('Foobar',$,$,$,$,$,$,$)
get_geometry(self, ids)#
get_inverse(self, inst, allow_duplicate=False, with_attribute_indices=False)#

Return a list of entities that reference this entity

  • inst (ifcopenshell.entity_instance.entity_instance) – The entity instance to get inverse relationships

  • allow_duplicate – Returns a list when True, set when False

  • with_attribute_indices – Returns pairs of <i, idx> where i[idx] is inst or contains inst. Requires allow_duplicate=True


A list of ifcopenshell.entity_instance.entity_instance objects

Return type


is_entity_list(self, attribute)#
traverse(self, inst, max_levels=None, breadth_first=False)#

Get a list of all referenced instances for a particular instance including itself

  • inst (ifcopenshell.entity_instance.entity_instance) – The entity instance to get all sub instances

  • max_levels (bool) – How far deep to recursively fetch sub instances. None or -1 means infinite.

  • breadth_first – Whether to use breadth-first search, the default is depth-first.


A list of ifcopenshell.entity_instance.entity_instance objects

Return type


class ifcopenshell.sql.sqlite_entity(id, ifc_class, file=None)#

Bases: ifcopenshell.entity_instance.entity_instance

Base class for all IFC objects.

An instantiated entity_instance will have methods of Python and the IFC class itself.


ifc_file = ifcopenshell.open(file_path)
products = ifc_file.by_type("IfcProduct")
>>> <class 'ifcopenshell.entity_instance.entity_instance'>
>>> #423=IfcProductDefinitionShape($,$,(#409,#421))

#2471 while the precise chain of action is unclear, creating instance references prevents file gc, even with all instance refs deleted. This is a work-around for that.

__eq__(self, other)#

Return self==value.

__getattr__(self, name)#
__getitem__(self, key)#

Return hash(self).

__setattr__(self, key, value)#

Implement setattr(self, name, value).

get_info(self, include_identifier=True, recursive=False, return_type=dict, ignore=(), scalar_only=False)#

Return a dictionary of the entity_instance’s properties (Python and IFC) and their values.

  • include_identifier (bool) – Whether or not to include the STEP numerical identifier

  • recursive (bool) – Whether or not to convert referenced IFC elements into dictionaries too. All attributes also apply recursively

  • return_type (dict|list|other) – The return data type to be casted into

  • ignore (set|list) – A list of attribute names to ignore

  • scalar_only (bool) – Filters out all values that are IFC instances


A dictionary of properties and their corresponding values

Return type



ifc_file = ifcopenshell.open(file_path)
products = ifc_file.by_type("IfcProduct")
obj_info = products[0].get_info()
>>> dict_keys(['Description', 'Name', 'BuildingAddress', 'LongName', 'GlobalId', 'ObjectPlacement', 'OwnerHistory', 'ObjectType',
>>> ...'ElevationOfTerrain', 'CompositionType', 'id', 'Representation', 'type', 'ElevationOfRefHeight'])

Return the STEP numerical identifier

Return type


unserialise_value(self, value)#
class ifcopenshell.sql.sqlite_wrapper(id, ifc_class, file)#

Return repr(self).