mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-29 11:46:33 +00:00
Add Description-ContextMenu Entry to bSDD Properties (#6970)
See #6970 for example.
This commit is contained in:
@@ -25,6 +25,7 @@ classes = (
|
|||||||
operator.LoadBSDDDictionaries,
|
operator.LoadBSDDDictionaries,
|
||||||
operator.SearchBSDDClassifications,
|
operator.SearchBSDDClassifications,
|
||||||
operator.SearchBSDDProperties,
|
operator.SearchBSDDProperties,
|
||||||
|
operator.BIM_OT_show_bsdd_description,
|
||||||
prop.BSDDDictionary,
|
prop.BSDDDictionary,
|
||||||
prop.BSDDClassification,
|
prop.BSDDClassification,
|
||||||
prop.BSDDProperty,
|
prop.BSDDProperty,
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
#
|
#
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with Bonsai. If not, see <http://www.gnu.org/licenses/>.
|
# along with Bonsai. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
import textwrap
|
||||||
import bpy
|
import bpy
|
||||||
import bsdd
|
import bsdd
|
||||||
import bonsai.tool as tool
|
import bonsai.tool as tool
|
||||||
@@ -105,3 +105,35 @@ class AddBSDDProperties(bpy.types.Operator, tool.Ifc.Operator):
|
|||||||
else:
|
else:
|
||||||
pset = ifcopenshell.api.pset.add_pset(self.file, product=element, name=pset_name)
|
pset = ifcopenshell.api.pset.add_pset(self.file, product=element, name=pset_name)
|
||||||
ifcopenshell.api.pset.edit_pset(self.file, pset=pset, properties=properties)
|
ifcopenshell.api.pset.edit_pset(self.file, pset=pset, properties=properties)
|
||||||
|
|
||||||
|
|
||||||
|
class BIM_OT_show_bsdd_description(bpy.types.Operator):
|
||||||
|
bl_idname = "bim.show_bsdd_description"
|
||||||
|
bl_label = "bSDD Description"
|
||||||
|
url: bpy.props.StringProperty()
|
||||||
|
|
||||||
|
def invoke(self, context, event):
|
||||||
|
wm = context.window_manager
|
||||||
|
return wm.invoke_props_dialog(self, width=450)
|
||||||
|
|
||||||
|
def execute(self, context):
|
||||||
|
return {"FINISHED"}
|
||||||
|
|
||||||
|
def draw(self, context):
|
||||||
|
WIDTH = 80
|
||||||
|
layout = self.layout
|
||||||
|
wrapper = textwrap.TextWrapper(width=WIDTH)
|
||||||
|
result = tool.Bsdd.get_bsdd_property(self.url)
|
||||||
|
description = result.get("description") or ""
|
||||||
|
definition = result.get("definition") or ""
|
||||||
|
if description != definition:
|
||||||
|
text = wrapper.wrap(f"Description : {description}")
|
||||||
|
text.append("-" * (WIDTH - 15))
|
||||||
|
text += wrapper.wrap(f"Definition : {definition}")
|
||||||
|
else:
|
||||||
|
text = wrapper.wrap(f"Description : {description}")
|
||||||
|
for line in text:
|
||||||
|
layout.label(text=line)
|
||||||
|
if self.url:
|
||||||
|
url_op = layout.operator("bim.open_uri", icon="URL", text="Online bSDD Documentation")
|
||||||
|
url_op.uri = self.url
|
||||||
|
|||||||
@@ -147,6 +147,7 @@ class BIM_UL_bsdd_properties(UIList):
|
|||||||
active_propname,
|
active_propname,
|
||||||
) -> None:
|
) -> None:
|
||||||
if item:
|
if item:
|
||||||
|
layout.context_pointer_set("active_bsdd_property", item) # used for context menu
|
||||||
row = layout.row(align=True)
|
row = layout.row(align=True)
|
||||||
name = item.name
|
name = item.name
|
||||||
if name != item.code:
|
if name != item.code:
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ import bonsai.bim
|
|||||||
import bonsai.tool as tool
|
import bonsai.tool as tool
|
||||||
from ifcopenshell.util.file import IfcHeaderExtractor
|
from ifcopenshell.util.file import IfcHeaderExtractor
|
||||||
from bonsai.bim.prop import Attribute
|
from bonsai.bim.prop import Attribute
|
||||||
|
from bonsai.bim.module.bsdd.prop import BIMBSDDProperties
|
||||||
from typing import Optional, TYPE_CHECKING, Literal
|
from typing import Optional, TYPE_CHECKING, Literal
|
||||||
from natsort import natsorted
|
from natsort import natsorted
|
||||||
|
|
||||||
@@ -1440,6 +1441,10 @@ def draw_custom_context_menu(self: bpy.types.Menu, context: bpy.types.Context) -
|
|||||||
if attr_name:
|
if attr_name:
|
||||||
op = layout.operator("bim.copy_text_to_clipboard", text="Copy Attribute Name", icon="COPYDOWN")
|
op = layout.operator("bim.copy_text_to_clipboard", text="Copy Attribute Name", icon="COPYDOWN")
|
||||||
op.text = attr_name
|
op.text = attr_name
|
||||||
|
elif isinstance(prop_struct, BIMBSDDProperties) and hasattr(context, "active_bsdd_property"):
|
||||||
|
# Context Menu for bSDD Properties
|
||||||
|
op_description = layout.operator("bim.show_bsdd_description", text="bSDD Description", icon="INFO")
|
||||||
|
op_description.url = context.active_bsdd_property.uri
|
||||||
else:
|
else:
|
||||||
# Basically context menu for any Blender property will end up here,
|
# Basically context menu for any Blender property will end up here,
|
||||||
# and will check 3 types of docs.
|
# and will check 3 types of docs.
|
||||||
|
|||||||
@@ -220,7 +220,7 @@ class Bsdd(bonsai.core.tool.Bsdd):
|
|||||||
prop.dictionary_name = dictionary_name
|
prop.dictionary_name = dictionary_name
|
||||||
prop.dictionary_namespace_uri = dictionary_namespace_uri
|
prop.dictionary_namespace_uri = dictionary_namespace_uri
|
||||||
|
|
||||||
total_results = response.get("count", response.get("classesCount"))
|
total_results = len(bprops.classifications)
|
||||||
# For now, hard limit at 1000 results because any more and Blender
|
# For now, hard limit at 1000 results because any more and Blender
|
||||||
# starts getting slow and they really should filter better
|
# starts getting slow and they really should filter better
|
||||||
if offset < 1000 and should_paginate and total_results == limit:
|
if offset < 1000 and should_paginate and total_results == limit:
|
||||||
|
|||||||
Reference in New Issue
Block a user