bonsai - bcf v3 referenced links support #2790

This commit is contained in:
Andrej730
2024-08-15 17:25:43 +05:00
parent 28ee1a7781
commit 4348b9bff9
3 changed files with 24 additions and 20 deletions
+8 -18
View File
@@ -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"}
+2 -2
View File
@@ -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")
+14
View File
@@ -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