load_indexed_colour_map - to support loading colors for rep items

Enter item mode for simple faceset cube was failing because this wasn't supported.
This commit is contained in:
Andrej730
2024-09-25 10:34:15 +05:00
parent 3e3b133c7b
commit 3c309bbac8
+15 -5
View File
@@ -476,22 +476,32 @@ class Loader(bonsai.core.tool.Loader):
blender_material.node_tree.links.new(coord.outputs["UV"], node.inputs["Vector"]) blender_material.node_tree.links.new(coord.outputs["UV"], node.inputs["Vector"])
@classmethod @classmethod
def load_indexed_colour_map(cls, representation: ifcopenshell.entity_instance, mesh: bpy.types.Mesh) -> None: def load_indexed_colour_map(
cls, representation_or_item: ifcopenshell.entity_instance, mesh: bpy.types.Mesh
) -> None:
"""Ensure indexed colour map is loaded for representation if it's available. """Ensure indexed colour map is loaded for representation if it's available.
Method doesn't support elements with openings, see #5405. Method doesn't support elements with openings, see #5405.
:param representation: IfcShapeRepresentation of any type. Representation may not have an indexed colour map, :param representation: IfcShapeRepresentation or IfcRepresentationItem of any type.
Representation may not have an indexed colour map,
method will automatically check if it does and will skip it otherwise. method will automatically check if it does and will skip it otherwise.
:raises AssertionError: If mesh doesn't match the representation exactly, which usually occurs :raises AssertionError: If mesh doesn't match the representation exactly, which usually occurs
if element geometry is altered by openings. if element geometry is altered by openings.
""" """
if representation.RepresentationType != "Tessellation":
return is_representation = representation_or_item.is_a("IfcShapeRepresentation")
if is_representation:
if representation_or_item.RepresentationType != "Tessellation":
return
items = representation_or_item.Items
else:
items = [representation_or_item]
colours = [] colours = []
for item in representation.Items: for item in items:
if not item.is_a("IfcTessellatedFaceSet"): if not item.is_a("IfcTessellatedFaceSet"):
continue continue
# It's unclear what has priority, styled by item or indexed maps # It's unclear what has priority, styled by item or indexed maps