diff --git a/src/blenderbim/blenderbim/core/geometry.py b/src/blenderbim/blenderbim/core/geometry.py index 79150a8c25..a69987164c 100644 --- a/src/blenderbim/blenderbim/core/geometry.py +++ b/src/blenderbim/blenderbim/core/geometry.py @@ -106,6 +106,9 @@ def switch_representation( entity = ifc.get_entity(obj) current_obj_data = geometry.get_object_data(obj) + if not current_obj_data and geometry.is_text_literal(representation): + return + has_openings = apply_openings and getattr(entity, "HasOpenings", None) if has_openings: # if it has openings make sure to switch to element's mapped representation diff --git a/src/blenderbim/blenderbim/tool/drawing.py b/src/blenderbim/blenderbim/tool/drawing.py index 2e31b17c23..e252d49e11 100644 --- a/src/blenderbim/blenderbim/tool/drawing.py +++ b/src/blenderbim/blenderbim/tool/drawing.py @@ -1636,11 +1636,32 @@ class Drawing(blenderbim.core.tool.Drawing): subcontexts = [] target_view = cls.get_drawing_target_view(drawing) - context_filters = [("Model", "Body", target_view), ("Model", "Body", "MODEL_VIEW")] + if target_view in ("PLAN_VIEW", "REFLECTED_PLAN_VIEW"): - plan_contexts = [("Plan", "Body", target_view), ("Plan", "Body", "MODEL_VIEW")] - plan_contexts.extend(context_filters) - context_filters = plan_contexts + context_filters = [ + ("Plan", "Body", target_view), + ("Plan", "Body", "MODEL_VIEW"), + ("Plan", "Facetation", target_view), + ("Plan", "Facetation", "MODEL_VIEW"), + ("Model", "Body", target_view), + ("Model", "Body", "MODEL_VIEW"), + ("Model", "Facetation", target_view), + ("Model", "Facetation", "MODEL_VIEW"), + ("Plan", "Annotation", target_view), + ("Plan", "Annotation", "MODEL_VIEW"), + ("Model", "Annotation", target_view), + ("Model", "Annotation", "MODEL_VIEW"), + ] + else: + context_filters = [ + ("Model", "Body", target_view), + ("Model", "Body", "MODEL_VIEW"), + ("Model", "Facetation", target_view), + ("Model", "Facetation", "MODEL_VIEW"), + ("Model", "Annotation", target_view), + ("Model", "Annotation", "MODEL_VIEW"), + ] + for context_filter in context_filters: subcontext = ifcopenshell.util.representation.get_context(tool.Ifc.get(), *context_filter) if subcontext: diff --git a/src/blenderbim/blenderbim/tool/geometry.py b/src/blenderbim/blenderbim/tool/geometry.py index 219ba0119b..3fdf5da479 100644 --- a/src/blenderbim/blenderbim/tool/geometry.py +++ b/src/blenderbim/blenderbim/tool/geometry.py @@ -586,6 +586,10 @@ class Geometry(blenderbim.core.tool.Geometry): "SweptSolid", ) + @classmethod + def is_text_literal(cls, representation): + return bool([i for i in representation.Items if i.is_a("IfcTextLiteral")]) + @classmethod def is_type_product(cls, element): return element.is_a("IfcTypeProduct")