diff --git a/src/blenderbim/blenderbim/bim/helper.py b/src/blenderbim/blenderbim/bim/helper.py index 74d2ce77ce..3b2daee61d 100644 --- a/src/blenderbim/blenderbim/bim/helper.py +++ b/src/blenderbim/blenderbim/bim/helper.py @@ -23,12 +23,11 @@ import math import zipfile import ifcopenshell import ifcopenshell.util.attribute -from ifcopenshell.util.doc import get_attribute_doc +from ifcopenshell.util.doc import get_attribute_doc, get_predefined_type_doc from mathutils import geometry from mathutils import Vector import blenderbim.tool as tool from blenderbim.bim.ifc import IfcStore -from blenderbim.bim.prop import get_predefined_type_description def draw_attributes(props, layout, copy_operator=None): @@ -116,10 +115,14 @@ def add_attribute_enum_items_descriptions(attribute_blender, enum_items): attribute_blender.enum_descriptions.clear() if isinstance(enum_items, dict): enum_items = enum_items.keys() + version = tool.Ifc.get_schema() for enum_item in enum_items: new_enum_description = attribute_blender.enum_descriptions.add() - # TODO this only supports predefined type enums. Add support for other types of enums ? - new_enum_description.name = get_predefined_type_description(attribute_blender.ifc_class, enum_item) or "" + try: + description = get_predefined_type_doc(version, attribute_blender.ifc_class, enum_item) + except KeyError: # TODO this only supports predefined type enums. Add support for other types of enums ? + description = "" + new_enum_description.name = description def add_attribute_description(attribute_blender): diff --git a/src/blenderbim/blenderbim/bim/module/model/data.py b/src/blenderbim/blenderbim/bim/module/model/data.py index f980ef9c75..b9e39ad631 100644 --- a/src/blenderbim/blenderbim/bim/module/model/data.py +++ b/src/blenderbim/blenderbim/bim/module/model/data.py @@ -22,12 +22,10 @@ import json import functools import ifcopenshell import ifcopenshell.util.element -from ifcopenshell.util.doc import get_entity_doc +from ifcopenshell.util.doc import get_entity_doc, get_predefined_type_doc import blenderbim.tool as tool from blenderbim.bim.ifc import IfcStore from blenderbim.bim.module.model.root import ConstrTypeEntityNotFound -from blenderbim.bim.prop import get_predefined_type_description - def refresh(): AuthoringData.is_loaded = False @@ -72,11 +70,12 @@ class AuthoringData: def type_predefined_type(cls): results = [] declaration = tool.Ifc().schema().declaration_by_name(cls.props.type_class) + version = tool.Ifc.get_schema() for attribute in declaration.attributes(): if attribute.name() == "PredefinedType": results.extend( [ - (e, e, get_predefined_type_description(cls.props.type_class, e)) + (e, e, get_predefined_type_doc(version, cls.props.type_class, e)) for e in attribute.type_of_attribute().declared_type().enumeration_items() ] ) diff --git a/src/blenderbim/blenderbim/bim/module/root/data.py b/src/blenderbim/blenderbim/bim/module/root/data.py index cedd5b8ef7..b2cdccf9b5 100644 --- a/src/blenderbim/blenderbim/bim/module/root/data.py +++ b/src/blenderbim/blenderbim/bim/module/root/data.py @@ -19,10 +19,9 @@ from collections import defaultdict import bpy import ifcopenshell.util.element -from ifcopenshell.util.doc import get_entity_doc +from ifcopenshell.util.doc import get_entity_doc, get_predefined_type_doc import blenderbim.tool as tool from blenderbim.bim.ifc import IfcStore -from blenderbim.bim.prop import get_predefined_type_description def refresh(): @@ -87,11 +86,12 @@ class IfcClassData: types_enum = [] ifc_class = bpy.context.scene.BIMRootProperties.ifc_class declaration = tool.Ifc.schema().declaration_by_name(ifc_class) + version = tool.Ifc.get_schema() for attribute in declaration.attributes(): if attribute.name() == "PredefinedType": types_enum.extend( [ - (e, e, get_predefined_type_description(ifc_class, e)) + (e, e, get_predefined_type_doc(version, ifc_class, e)) for e in attribute.type_of_attribute().declared_type().enumeration_items() ] ) diff --git a/src/blenderbim/blenderbim/bim/prop.py b/src/blenderbim/blenderbim/bim/prop.py index 386cdb906e..b75059332b 100644 --- a/src/blenderbim/blenderbim/bim/prop.py +++ b/src/blenderbim/blenderbim/bim/prop.py @@ -106,15 +106,6 @@ def cache_string(s): cache_string.data = {} -def get_predefined_type_description(entity, predefined_type): - schema = tool.Ifc.get_schema() - if schema is not None: - try: - return get_predefined_type_doc(schema, entity, predefined_type) - except KeyError: # This entity doesn't have any predefined types - return "" - - def get_attribute_enum_values(prop, context): # Support weird buildingSMART dictionary mappings which behave like enums items = []