ifcopenshell.file

Module Contents

class ifcopenshell.file.Transaction(ifc_file)
batch() None
commit() None
get_element_inverses(element)
has_element_reference(value: Any, element: ifcopenshell.entity_instance) bool
rollback() None
serialise_entity_instance(element: ifcopenshell.entity_instance) dict[str, Any]
serialise_value(element, value)
store_create(element: ifcopenshell.entity_instance) None
store_delete(element: ifcopenshell.entity_instance) None
store_edit(element: ifcopenshell.entity_instance, index: int, value: Any) None
unbatch() None
unserialise_value(element, value)
batch_delete_ids
batch_delete_index = 0
batch_inverses = []
file
is_batched = False
operations = []
class ifcopenshell.file.file(f: ifcopenshell.ifcopenshell_wrapper.file | None = None, schema: str | None = None, schema_version: tuple[int, int, int, int] | None = None)

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

Example:

model = ifcopenshell.open(file_path)
products = model.by_type("IfcProduct")
print(products[0].id(), products[0].GlobalId) # 122 2XQ$n5SLP5MBLyL442paFx
print(products[0] == model[122] == model["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.

Parameters:
  • 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, int, int, 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.

Example:

# Create a new IFC4 model, create a wall, then save it to an IFC-SPF file.
model = ifcopenshell.file()
model.create_entity("IfcWall")
model.write("/path/to/model.ifc")

# 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))
add(inst: ifcopenshell.entity_instance, _id: int = None) ifcopenshell.entity_instance

Adds an entity including any dependent entities to an IFC file. If the entity already exists, it is not re-added. Existence of entity is checked by it’s .identity().

Parameters:

inst (ifcopenshell.entity_instance) – The entity instance to add

Returns:

An ifcopenshell.entity_instance

Return type:

ifcopenshell.entity_instance

batch()

Low-level mechanism to speed up deletion of large subgraphs

begin_transaction() None
by_guid(guid: str) ifcopenshell.entity_instance

Return an IFC entity instance filtered by IFC GUID.

Parameters:

guid (string) – GlobalId value in 22-character encoded form

Raises:

RuntimeError – If guid is not found.

Returns:

An ifcopenshell.entity_instance

Return type:

ifcopenshell.entity_instance

by_id(id: int) ifcopenshell.entity_instance

Return an IFC entity instance filtered by IFC ID.

Parameters:

id (int) – STEP numerical identifier

Raises:

RuntimeError – If id is not found.

Returns:

An ifcopenshell.entity_instance

Return type:

ifcopenshell.entity_instance

by_type(type: str, include_subtypes=True) list[ifcopenshell.entity_instance]

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.

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

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

Raises:

RuntimeError – If type is not found in IFC schema.

Returns:

A list of ifcopenshell.entity_instance objects

Return type:

list[ifcopenshell.entity_instance]

create_entity(type: str, *args, **kwargs) ifcopenshell.entity_instance

Create a new IFC entity in the file.

You can also use dynamic methods similar to ifc_file.createIfcWall(…) to create IFC entities. They work exactly the same as if you would do ifc_file.create_entity(“IfcWall”, …) but the resulting typing is not as accurate as for create_entity due to a dynamic nature of those methods.

Parameters:
  • 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

Returns:

An entity instance

Return type:

ifcopenshell.entity_instance

Example:

f = ifcopenshell.file()
f.create_entity("IfcPerson")
# >>> #1=IfcPerson($,$,$,$,$,$,$,$)
f.create_entity("IfcPerson", "Foobar")
# >>> #2=IfcPerson('Foobar',$,$,$,$,$,$,$)
f.create_entity("IfcPerson", Identification="Foobar")
# >>> #3=IfcPerson('Foobar',$,$,$,$,$,$,$)
discard_transaction() None
end_transaction() None
static from_pointer(v) file
static from_string(s: str) file
get_inverse(inst: ifcopenshell.entity_instance, allow_duplicate: bool = False, with_attribute_indices: bool = False) list[ifcopenshell.entity_instance]

Return a list of entities that reference this entity

Warning: this is a slow function, especially when there is a large number of inverses (such as for a shared owner history). If you are only interested in the total number of inverses (typically 0, 1, or N), consider using get_total_inverses().

Parameters:
  • inst (ifcopenshell.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

Returns:

A list of ifcopenshell.entity_instance objects

Return type:

list[ifcopenshell.entity_instance]

get_total_inverses(inst: ifcopenshell.entity_instance) int

Returns the number of entities that reference this entity

This is equivalent to len(model.get_inverse(element)), but significantly faster.

Parameters:

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

Returns:

The total number of references

Return type:

int

redo() None
remove(inst: ifcopenshell.entity_instance) None

Deletes an IFC object in the file.

Attribute values in other entity instances that reference the deleted object will be set to null. In the case of a list or set of references, the reference to the deleted will be removed from the aggregate.

Parameters:

inst (ifcopenshell.entity_instance) – The entity instance to delete

Return type:

None

set_history_size(size: int) None
traverse(inst: ifcopenshell.entity_instance, max_levels=None, breadth_first=False) list[ifcopenshell.entity_instance]

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

Parameters:
  • inst (ifcopenshell.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.

Returns:

A list of ifcopenshell.entity_instance objects

Return type:

list[ifcopenshell.entity_instance]

unbatch()

Low-level mechanism to speed up deletion of large subgraphs

undo() None
write(path: os.PathLike | str, format: str | None = None, zipped: bool = False) None

Write ifc model to file.

:param format: Force use of a specific format. Guessed from file name

if None. Supported formats : .ifc, .ifcXML, .ifcZIP (equivalent to format=”.ifc” with zipped=True) For zipped .ifcXML use format=”.ifcXML” with zipped=True

:param zipped: zip the file after it is written :type zipped: bool

Example:

model.write("path/to/model.ifc")
model.write("path/to/model.ifcXML")
model.write("path/to/model.ifcZIP")
model.write("path/to/model.ifcZIP", format=".ifcXML", zipped=True)
model.write("path/to/model.anyextension", format=".ifcXML")
future = []
history = []
history_size = 64
property schema: Literal['IFC2X3', 'IFC4', 'IFC4X3']

General IFC schema version: IFC2X3, IFC4, IFC4X3.

property schema_identifier: str

Full IFC schema version: IFC2X3_TC1, IFC4_ADD2, IFC4X3_ADD2, etc.

property schema_version: tuple[int, int, int, int]

Numeric representation of the full IFC schema version.

E.g. IFC4X3_ADD2 is represented as (4, 3, 2, 0).

transaction: Transaction | None = None
wrapped_data: ifcopenshell.ifcopenshell_wrapper.file
ifcopenshell.file.NO_HEADER
ifcopenshell.file.READ_ERROR
ifcopenshell.file.UNSUPPORTED_SCHEMA
ifcopenshell.file.file_dict