diff --git a/src/blenderbim/blenderbim/bim/module/geometry/operator.py b/src/blenderbim/blenderbim/bim/module/geometry/operator.py index c4ee14f969..d40edddf47 100644 --- a/src/blenderbim/blenderbim/bim/module/geometry/operator.py +++ b/src/blenderbim/blenderbim/bim/module/geometry/operator.py @@ -329,7 +329,7 @@ class UpdateRepresentation(bpy.types.Operator, Operator): "style.assign_representation_styles", self.file, shape_representation=new_representation, - styles=tool.Geometry.get_styles(obj), + styles=tool.Geometry.get_styles(obj, only_assigned_to_faces=True), should_use_presentation_style_assignment=context.scene.BIMGeometryProperties.should_use_presentation_style_assignment, ) tool.Geometry.record_object_materials(obj) diff --git a/src/blenderbim/blenderbim/tool/geometry.py b/src/blenderbim/blenderbim/tool/geometry.py index fe57aa6a76..dbe96048c0 100644 --- a/src/blenderbim/blenderbim/tool/geometry.py +++ b/src/blenderbim/blenderbim/tool/geometry.py @@ -396,8 +396,16 @@ class Geometry(blenderbim.core.tool.Geometry): return f"{representation.ContextOfItems.id()}/{representation.id()}" @classmethod - def get_styles(cls, obj): - return [tool.Style.get_style(s.material) for s in obj.material_slots if s.material] + def get_styles(cls, obj, only_assigned_to_faces=False): + styles = [tool.Style.get_style(s.material) for s in obj.material_slots if s.material] + if not only_assigned_to_faces: + return styles + + usage_count = [0] * len(obj.material_slots) + for poly in obj.data.polygons: + usage_count[poly.material_index] += 1 + styles = [style for style, usage in zip(styles, usage_count, strict=True) if usage > 0] + return styles # TODO: multiple Literals? @classmethod