bonsai - fix issues loading bcf v3 #2790

This commit is contained in:
Andrej730
2024-08-15 15:46:25 +05:00
parent 7597b1b29c
commit 774533911c
2 changed files with 61 additions and 6 deletions
+17 -6
View File
@@ -17,6 +17,9 @@
# along with Bonsai. If not, see <http://www.gnu.org/licenses/>.
import os
import bcf.v3
import bcf.v3.model
import bcf.v3.topic
import bpy
import bcf
import bcf.bcfxml
@@ -154,12 +157,12 @@ class LoadBcfTopic(bpy.types.Operator):
setattr(new, key, str(value))
new.reference_links.clear()
for reference_link in topic.topic.reference_link:
for reference_link in tool.Bcf.get_topic_reference_links(topic):
new_reference_link = new.reference_links.add()
new_reference_link.name = reference_link
new.labels.clear()
for label in topic.topic.labels:
for label in tool.Bcf.get_topic_labels(topic):
new_label = new.labels.add()
new_label.name = label
@@ -175,20 +178,28 @@ class LoadBcfTopic(bpy.types.Operator):
setattr(new.bim_snippet, key, value)
new.document_references.clear()
for doc in topic.topic.document_reference:
for doc in tool.Bcf.get_topic_document_references(topic):
new_document_references = new.document_references.add()
if isinstance(doc, bcf.v2.model.TopicDocumentReference):
reference = doc.referenced_document
is_external = doc.is_external
else:
is_external = doc.document_guid is None
reference = doc.url if is_external else doc.document_guid
data_map = {
"reference": doc.referenced_document,
"reference": reference,
"description": doc.description,
"guid": doc.guid,
"is_external": doc.is_external,
"is_external": is_external,
}
for key, value in data_map.items():
if value is not None:
setattr(new_document_references, key, value)
new.related_topics.clear()
for related_topic in topic.topic.related_topic:
for related_topic in tool.Bcf.get_topic_related_topics(topic):
new_related_topic = new.related_topics.add()
new_related_topic.name = related_topic.guid
+44
View File
@@ -19,6 +19,10 @@
import bonsai.core.tool
import bonsai.tool as tool
import bpy
import bcf.v2.model
import bcf.v2.topic
import bcf.v3.model
import bcf.v3.topic
from typing import Any, Union, Optional
@@ -26,3 +30,43 @@ class Bcf(bonsai.core.tool.Bcf):
@classmethod
def get_path(cls) -> str:
return bpy.context.scene.BCFProperties.bcf_file
@classmethod
def get_topic_document_references(
cls, topic: Union[bcf.v2.topic.TopicHandler, bcf.v3.topic.TopicHandler]
) -> Union[list[bcf.v2.model.TopicDocumentReference], list[bcf.v3.model.DocumentReference]]:
if isinstance(topic, bcf.v2.topic.TopicHandler):
document_references = topic.topic.document_reference
else:
document_references = topic.topic.document_references
document_references = document_references.document_reference if document_references else []
return document_references
@classmethod
def get_topic_labels(cls, topic: Union[bcf.v2.topic.TopicHandler, bcf.v3.topic.TopicHandler]) -> list[str]:
if isinstance(topic, bcf.v2.topic.TopicHandler):
labels = topic.topic.labels
else:
labels = topic.topic.labels
labels = labels.label if labels else []
return labels
@classmethod
def get_topic_reference_links(cls, topic: Union[bcf.v2.topic.TopicHandler, bcf.v3.topic.TopicHandler]) -> list[str]:
if isinstance(topic, bcf.v2.topic.TopicHandler):
reference_links = topic.topic.reference_link
else:
reference_links = topic.topic.reference_links
reference_links = reference_links.reference_link if reference_links else []
return reference_links
@classmethod
def get_topic_related_topics(
cls, topic: Union[bcf.v2.topic.TopicHandler, bcf.v3.topic.TopicHandler]
) -> Union[list[bcf.v2.model.TopicRelatedTopic], list[bcf.v3.model.TopicRelatedTopicsRelatedTopic]]:
if isinstance(topic, bcf.v2.topic.TopicHandler):
related_topics = topic.topic.related_topic
else:
related_topics = topic.topic.related_topics
related_topics = related_topics.related_topic if related_topics else []
return related_topics