mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-17 10:59:17 +00:00
bonsai - bcf v3 referenced links support #2790
This commit is contained in:
@@ -691,14 +691,12 @@ class AddBcfReferenceLink(bpy.types.Operator):
|
||||
bcfxml = bcfstore.BcfStore.get_bcfxml()
|
||||
assert bcfxml
|
||||
|
||||
if not (version := (bcfxml.version.version_id or "")).startswith("2"):
|
||||
self.report({"INFO"}, f"BCF {version} is not yet supported.")
|
||||
return {"FINISHED"}
|
||||
|
||||
props = context.scene.BCFProperties
|
||||
blender_topic = props.active_topic
|
||||
topic = bcfxml.topics[blender_topic.name]
|
||||
topic.topic.reference_link.append(props.reference_link)
|
||||
reference_links = tool.Bcf.get_topic_reference_links(topic)
|
||||
reference_links.append(props.reference_link)
|
||||
tool.Bcf.set_topic_reference_links(topic, reference_links)
|
||||
bpy.ops.bim.load_bcf_topic(topic_guid=topic.guid, topic_index=props.active_topic_index)
|
||||
props.reference_link = ""
|
||||
return {"FINISHED"}
|
||||
@@ -782,17 +780,11 @@ class EditBcfReferenceLinks(bpy.types.Operator):
|
||||
bcfxml = bcfstore.BcfStore.get_bcfxml()
|
||||
assert bcfxml
|
||||
|
||||
if not (version := (bcfxml.version.version_id or "")).startswith("2"):
|
||||
self.report({"INFO"}, f"BCF {version} is not yet supported.")
|
||||
return {"FINISHED"}
|
||||
|
||||
props = context.scene.BCFProperties
|
||||
blender_topic = props.active_topic
|
||||
topic = bcfxml.topics[blender_topic.name]
|
||||
for index, reference_link in enumerate(topic.topic.reference_link):
|
||||
if reference_link == blender_topic.reference_links[index].name:
|
||||
continue
|
||||
topic.topic.reference_link[index] = blender_topic.reference_links[index].name
|
||||
reference_links = [r.name for r in blender_topic.reference_links]
|
||||
tool.Bcf.set_topic_reference_links(topic, reference_links)
|
||||
return {"FINISHED"}
|
||||
|
||||
|
||||
@@ -823,14 +815,12 @@ class RemoveBcfReferenceLink(bpy.types.Operator):
|
||||
bcfxml = bcfstore.BcfStore.get_bcfxml()
|
||||
assert bcfxml
|
||||
|
||||
if not (version := (bcfxml.version.version_id or "")).startswith("2"):
|
||||
self.report({"INFO"}, f"BCF {version} is not yet supported.")
|
||||
return {"FINISHED"}
|
||||
|
||||
props = context.scene.BCFProperties
|
||||
blender_topic = props.active_topic
|
||||
topic = bcfxml.topics[blender_topic.name]
|
||||
del topic.topic.reference_link[self.index]
|
||||
reference_links = tool.Bcf.get_topic_reference_links(topic)
|
||||
del reference_links[self.index]
|
||||
tool.Bcf.set_topic_reference_links(topic, reference_links)
|
||||
blender_topic.reference_links.remove(self.index)
|
||||
return {"FINISHED"}
|
||||
|
||||
|
||||
@@ -176,11 +176,11 @@ class BIM_PT_bcf_metadata(Panel):
|
||||
layout.label(text="Reference Links:")
|
||||
for index, link in enumerate(topic.reference_links):
|
||||
row = layout.row(align=True)
|
||||
row.prop(link, "name")
|
||||
row.prop(link, "name", text="")
|
||||
row.operator("bim.open_uri", icon="URL", text="").uri = link.name
|
||||
row.operator("bim.remove_bcf_reference_link", icon="X", text="").index = index
|
||||
row = layout.row()
|
||||
row.prop(props, "reference_link")
|
||||
row.prop(props, "reference_link", text="New Reference Link:")
|
||||
row = layout.row()
|
||||
row.operator("bim.add_bcf_reference_link")
|
||||
|
||||
|
||||
@@ -93,6 +93,20 @@ class Bcf(bonsai.core.tool.Bcf):
|
||||
reference_links = reference_links.reference_link if reference_links else []
|
||||
return reference_links
|
||||
|
||||
@classmethod
|
||||
def set_topic_reference_links(cls, topic: bcf.agnostic.topic.TopicHandler, reference_links: list[str]) -> None:
|
||||
topic_ = topic.topic
|
||||
if isinstance(topic_, bcf.v2.model.Topic):
|
||||
topic_.reference_link = reference_links
|
||||
else:
|
||||
topic_links = topic_.reference_links
|
||||
if topic_links is None:
|
||||
if not reference_links:
|
||||
return
|
||||
topic_.reference_links = (topic_links := bcf.v3.model.TopicReferenceLinks())
|
||||
return
|
||||
topic_links.reference_link = reference_links
|
||||
|
||||
@classmethod
|
||||
def get_topic_related_topics(
|
||||
cls, topic: bcf.agnostic.topic.TopicHandler
|
||||
|
||||
Reference in New Issue
Block a user