From c0b91848a367148c424ef4a534f889312b83f7e7 Mon Sep 17 00:00:00 2001 From: Gorgious Date: Mon, 31 Oct 2022 17:30:33 +0100 Subject: [PATCH] Refactor right click context menu --- src/blenderbim/blenderbim/bim/ui.py | 34 ++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/ui.py b/src/blenderbim/blenderbim/bim/ui.py index 6bee1fc1f7..00789c0c9b 100644 --- a/src/blenderbim/blenderbim/bim/ui.py +++ b/src/blenderbim/blenderbim/bim/ui.py @@ -19,11 +19,15 @@ import os import bpy from pathlib import Path +from ifcopenshell.util.doc import ( + get_entity_doc, + get_property_set_doc, + get_type_doc, +) from . import ifc from bpy.types import Panel from bpy.props import StringProperty, IntProperty, BoolProperty from blenderbim.bim.helper import IfcHeaderExtractor -from blenderbim.bim.prop import get_ifc_entity_doc_url, get_property_set_doc_url import blenderbim.tool as tool @@ -385,8 +389,6 @@ class BIM_PT_misc_object(Panel): def draw_custom_context_menu(self, context): - if not hasattr(context, "button_pointer") or not hasattr(context, "button_prop"): - return # https://blender.stackexchange.com/a/275555/86891 if ( not hasattr(context, "button_pointer") @@ -399,9 +401,29 @@ def draw_custom_context_menu(self, context): prop_value = getattr(prop, prop_name, None) if prop_value is None: return - url = get_ifc_entity_doc_url(prop_value) - if not bool(url): - url = get_property_set_doc_url(prop_value) + schema = tool.Ifc.get_schema() + + docs = {} + try: + docs = get_entity_doc(schema, prop_value) + if docs is None: + raise RuntimeError + except RuntimeError: + try: + docs = get_type_doc(schema, prop_value) + if docs is None: + raise RuntimeError + except RuntimeError: + try: + docs = get_property_set_doc(schema, prop_value) + if docs is None: + raise RuntimeError + except RuntimeError: + pass + if docs: + url = docs.get("spec_url", "") + else: + url = "" description = getattr(context.button_pointer, "description", None) if not url and not description: