ifcopenshell.api.style.assign_item_style

Module Contents

ifcopenshell.api.style.assign_item_style.assign_item_style(file: ifcopenshell.file, item: ifcopenshell.entity_instance, style: ifcopenshell.entity_instance | None, should_use_presentation_style_assignment: bool = False) ifcopenshell.entity_instance | None

Assigns a style directly to a representation item

A style may either be assigned directly to an object’s representation items, or to a material which is then associated with the object. If both exist, then the style assigned directly to the object’s representation takes precedence. It is recommended to use materials and assign styles to materials. However, sometimes you may want to assign colours directly to the object representation as an override. This API function provides that capability.

If you want to assign styles to a material instead (recommended), then please see ifcopenshell.api.style.assign_material_style.

Parameters:
  • item – The IfcRepresentationItem of the object that you want to assign styles to.

  • style – A presentation style, typically IfcSurfaceStyle. None if you want to remove an existing style from the item.

Returns:

Created or existing IfcStyledItem, or None if the style was removed.

Example:

# A model context is needed to store 3D geometry
model3d = ifcopenshell.api.context.add_context(model, context_type="Model")

# Specifically, we want to store body geometry
body = ifcopenshell.api.context.add_context(model,
    context_type="Model", context_identifier="Body", target_view="MODEL_VIEW", parent=model3d)

# Let's create a new block shaped furniture. The furniture does not have any geometry yet.
wall = ifcopenshell.api.root.create_entity(model, ifc_class="IfcWall")

# Let's use the "3D Body" representation we created earlier to add a
# new wall-like body geometry, 5 meters long, 3 meters high, and
# 200mm thick
representation = ifcopenshell.api.geometry.add_wall_representation(model,
    context=body, length=5, height=3, thickness=0.2)

# Assign our new body geometry back to our wall
ifcopenshell.api.geometry.assign_representation(model,
    product=wall, representation=representation)

# Place our wall at the origin
ifcopenshell.api.geometry.edit_object_placement(model, product=wall)

# Create a new surface style
style = ifcopenshell.api.style.add_style(model)

# Create a simple grey shading colour and transparency.
ifcopenshell.api.style.add_surface_style(model,
    style=style, ifc_class="IfcSurfaceStyleShading", attributes={
        "SurfaceColour": { "Name": None, "Red": 0.5, "Green": 0.5, "Blue": 0.5 },
        "Transparency": 0., # 0 is opaque, 1 is transparent
    })

# Now specifically our wall's only item only will be coloured grey.
ifcopenshell.api.style.assign_item_style(model,
    shape_representation=representation, style=style, item=representation.Items[0])