ifcopenshell.api.layer
¶
Manage CAD layers
Note that in IFC, elements cannot be assigned to CAD layers. Instead, the geometric representation of the element is associated to a layer.
If you want to associated a whole element to a “layer”, consider using
ifcopenshell.api.classification
.
Submodules¶
Package Contents¶
- ifcopenshell.api.layer.add_layer(file: ifcopenshell.file, name: str = 'Unnamed') ifcopenshell.entity_instance ¶
Adds a new layer
An IFC layer is like a CAD layer. Portions of an object’s geometry (typically portions of its 2D linework) can be assigned to layers, which can provide stylistic information such as line weights, colours, or simply be used for filtering.
Layers have historically been used to organise CAD data and included in ISO standards such as ISO 13567 or by the AIA. This alllows IFC data to be compatible with older, 2D-oriented, layer-based workflows.
Some software that are still based on layers, such as Tekla or ArchiCAD may also use this layer information for filtering.
- Parameters:
name (str, optional) – The name of the layer. Defaults to “Unnamed”.
- Returns:
The newly created IfcPresentationLayerAssignment element
- Return type:
ifcopenshell.entity_instance
Example:
ifcopenshell.api.layer.add_layer(model, name=”AI-WALL-FULL-DIMS-N”)
- ifcopenshell.api.layer.assign_layer(file: ifcopenshell.file, items: list[ifcopenshell.entity_instance], layer: ifcopenshell.entity_instance) None ¶
Assigns representation items to a layer
In IFC, instead of objects being assigned to layers, representation items are assigned to layers. Representation items are portions of the object’s representation. For example, this allows a single IFC Window element to have portions of its 2D linework (e.g. the cross section of its frame) assigned to one layer, and another portion (e.g. the glazing panels) assigned to another layer.
- Parameters:
items (list[ifcopenshell.entity_instance]) – The list of IfcRepresentationItems to assign to the layer. This should be the items from the object’s IfcShapeRepresentation.
layer (ifcopenshell.entity_instance) – The IfcPresentationLayerAssignment layer to assign the item to.
- Returns:
None
- Return type:
None
Example:
# Remember, all geometry needs to specify the context it is part of first. # See ifcopenshell.api.context.add_context for details. model = ifcopenshell.api.context.add_context(model, context_type="Model") body = ifcopenshell.api.context.add_context(model, context_type="Model", context_identifier="Body", target_view="MODEL_VIEW", parent=model ) wall = ifcopenshell.api.root.create_entity(model, ifc_class="IfcWall") representation = ifcopenshell.api.geometry.add_wall_representation(model, context=body, length=5, height=3, thickness=0.2) ifcopenshell.api.geometry.assign_representation(model, product=wall, representation=representation) ifcopenshell.api.geometry.edit_object_placement(model, product=wall) # Now let's create a layer that contains walls layer = ifcopenshell.api.layer.add_layer(model, name="AI-WALL") # And assign our wall representation item (in this example, there is # only one item) to the layer. ifcopenshell.api.layer.assign_layer(model, items=[representation.Items[0]], layer=layer)
- ifcopenshell.api.layer.edit_layer(file: ifcopenshell.file, layer: ifcopenshell.entity_instance, attributes: dict[str, Any]) None ¶
Edits the attributes of an IfcPresentationLayerAssignment
For more information about the attributes and data types of an IfcPresentationLayerAssignment, consult the IFC documentation.
- Parameters:
layer (ifcopenshell.entity_instance) – The IfcPresentationLayerAssignment entity you want to edit
attributes (dict) – a dictionary of attribute names and values.
- Returns:
None
- Return type:
None
Example:
layer = ifcopenshell.api.layer.add_layer(model, name="AI-WALL") ifcopenshell.api.layer.edit_layer(model, layer=layer, attributes={"Description": "All walls, based on the AIA standard."})
- ifcopenshell.api.layer.remove_layer(file: ifcopenshell.file, layer: ifcopenshell.entity_instance) None ¶
Removes a layer
All representation items assigned to the layer will remain, but the relationship to the layer will be removed.
- Parameters:
layer (ifcopenshell.entity_instance) – The IfcPresentationLayerAssignment entity to remove
- Returns:
None
- Return type:
None
Example:
layer = ifcopenshell.api.layer.add_layer(model, name="AI-WALL") ifcopenshell.api.layer.remove_layer(model, layer=layer)
- ifcopenshell.api.layer.unassign_layer(file: ifcopenshell.file, items: list[ifcopenshell.entity_instance], layer: ifcopenshell.entity_instance) None ¶
Unassigns representation items from a layer
If the representation item isn’t assigned to the layer, nothing will happen. If after unassignment layer won’t have any assigned items it will be removed to keep IFC valid.
- Parameters:
items (list[ifcopenshell.entity_instance]) – A list IfcRepresentationItem elements to unassign
layer (ifcopenshell.entity_instance) – The IfcPresentationLayerAssignment to unassign from
- Returns:
None
- Return type:
None
Example:
# Remember, all geometry needs to specify the context it is part of first. # See ifcopenshell.api.context.add_context for details. model = ifcopenshell.api.context.add_context(model, context_type="Model") body = ifcopenshell.api.context.add_context(model, context_type="Model", context_identifier="Body", target_view="MODEL_VIEW", parent=model ) wall = ifcopenshell.api.root.create_entity(model, ifc_class="IfcWall") representation = ifcopenshell.api.geometry.add_wall_representation(model, context=body, length=5, height=3, thickness=0.2) ifcopenshell.api.geometry.assign_representation(model, product=wall, representation=representation) ifcopenshell.api.geometry.edit_object_placement(model, product=wall) # Now let's create a layer that contains walls layer = ifcopenshell.api.layer.add_layer(model, name="AI-WALL") # And assign our wall representation item (in this example, there is # only one item) to the layer. ifcopenshell.api.layer.assign_layer(model, items=[representation.Items[0]], layer=layer) # Let's undo it! ifcopenshell.api.layer.unassign_layer(model, items=[representation.Items[0]], layer=layer)