mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-16 21:42:19 +00:00
Implement support for adding BCF document references
This commit is contained in:
@@ -532,6 +532,19 @@ class BcfXml:
|
|||||||
del topic.document_references[index]
|
del topic.document_references[index]
|
||||||
self.edit_topic(topic)
|
self.edit_topic(topic)
|
||||||
|
|
||||||
|
def add_document_reference(self, topic, document_reference):
|
||||||
|
if os.path.exists(document_reference.referenced_document):
|
||||||
|
topic_filepath = os.path.join(self.filepath, topic.guid)
|
||||||
|
filename = os.path.basename(document_reference.referenced_document)
|
||||||
|
copyfile(document_reference.referenced_document, os.path.join(topic_filepath, filename))
|
||||||
|
document_reference.is_external = False
|
||||||
|
else:
|
||||||
|
document_reference.is_external = True
|
||||||
|
if not document_reference.guid:
|
||||||
|
document_reference.guid = str(uuid.uuid4())
|
||||||
|
topic.document_references.append(document_reference)
|
||||||
|
self.edit_topic(topic)
|
||||||
|
|
||||||
def add_bim_snippet(self, topic, bim_snippet):
|
def add_bim_snippet(self, topic, bim_snippet):
|
||||||
if topic.bim_snippet:
|
if topic.bim_snippet:
|
||||||
self.delete_bim_snippet(topic)
|
self.delete_bim_snippet(topic)
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ if bpy is not None:
|
|||||||
operator.AddBcfHeaderFile,
|
operator.AddBcfHeaderFile,
|
||||||
operator.AddBcfBimSnippet,
|
operator.AddBcfBimSnippet,
|
||||||
operator.AddBcfReferenceLink,
|
operator.AddBcfReferenceLink,
|
||||||
|
operator.AddBcfDocumentReference,
|
||||||
operator.AddBcfLabel,
|
operator.AddBcfLabel,
|
||||||
operator.ViewBcfTopic,
|
operator.ViewBcfTopic,
|
||||||
operator.RemoveBcfComment,
|
operator.RemoveBcfComment,
|
||||||
@@ -58,6 +59,7 @@ if bpy is not None:
|
|||||||
operator.OpenBcfReferenceLink,
|
operator.OpenBcfReferenceLink,
|
||||||
operator.SelectBcfHeaderFile,
|
operator.SelectBcfHeaderFile,
|
||||||
operator.SelectBcfBimSnippetReference,
|
operator.SelectBcfBimSnippetReference,
|
||||||
|
operator.SelectBcfDocumentReference,
|
||||||
operator.SelectFeaturesDir,
|
operator.SelectFeaturesDir,
|
||||||
operator.SelectDiffJsonFile,
|
operator.SelectDiffJsonFile,
|
||||||
operator.SelectDiffNewFile,
|
operator.SelectDiffNewFile,
|
||||||
|
|||||||
@@ -901,6 +901,27 @@ class AddBcfReferenceLink(bpy.types.Operator):
|
|||||||
return {"FINISHED"}
|
return {"FINISHED"}
|
||||||
|
|
||||||
|
|
||||||
|
class AddBcfDocumentReference(bpy.types.Operator):
|
||||||
|
bl_idname = "bim.add_bcf_document_reference"
|
||||||
|
bl_label = "Add BCF Document Reference"
|
||||||
|
|
||||||
|
def execute(self, context):
|
||||||
|
bcfxml = bcfstore.BcfStore.get_bcfxml()
|
||||||
|
props = bpy.context.scene.BCFProperties
|
||||||
|
blender_topic = props.topics[props.active_topic_index]
|
||||||
|
topic = bcfxml.topics[blender_topic.name]
|
||||||
|
if not blender_topic.document_reference:
|
||||||
|
return {"FINISHED"}
|
||||||
|
document_reference = bcf.data.DocumentReference()
|
||||||
|
document_reference.referenced_document = blender_topic.document_reference
|
||||||
|
document_reference.description = blender_topic.document_reference_description or None
|
||||||
|
bcfxml.add_document_reference(topic, document_reference)
|
||||||
|
bpy.ops.bim.load_bcf_topic(topic_guid = topic.guid, topic_index = props.active_topic_index)
|
||||||
|
blender_topic.document_reference = ""
|
||||||
|
blender_topic.document_reference_description = ""
|
||||||
|
return {"FINISHED"}
|
||||||
|
|
||||||
|
|
||||||
class AddBcfLabel(bpy.types.Operator):
|
class AddBcfLabel(bpy.types.Operator):
|
||||||
bl_idname = "bim.add_bcf_label"
|
bl_idname = "bim.add_bcf_label"
|
||||||
bl_label = "Add BCF Label"
|
bl_label = "Add BCF Label"
|
||||||
@@ -946,8 +967,8 @@ class EditBcfLabels(bpy.types.Operator):
|
|||||||
props = bpy.context.scene.BCFProperties
|
props = bpy.context.scene.BCFProperties
|
||||||
blender_topic = props.topics[props.active_topic_index]
|
blender_topic = props.topics[props.active_topic_index]
|
||||||
topic = bcfxml.topics[blender_topic.name]
|
topic = bcfxml.topics[blender_topic.name]
|
||||||
for index, label in enumerate(topic.labels):
|
for index, label in enumerate(blender_topic.labels):
|
||||||
if label == blender_topic.labels[index].name:
|
if label.name == topic.labels[index]:
|
||||||
continue
|
continue
|
||||||
topic.labels[index] = blender_topic.labels[index].name
|
topic.labels[index] = blender_topic.labels[index].name
|
||||||
bcfxml.edit_topic(topic)
|
bcfxml.edit_topic(topic)
|
||||||
@@ -2540,6 +2561,23 @@ class SelectBcfBimSnippetReference(bpy.types.Operator):
|
|||||||
return {"RUNNING_MODAL"}
|
return {"RUNNING_MODAL"}
|
||||||
|
|
||||||
|
|
||||||
|
class SelectBcfDocumentReference(bpy.types.Operator):
|
||||||
|
bl_idname = "bim.select_bcf_document_reference"
|
||||||
|
bl_label = "Select BCF Document Reference"
|
||||||
|
filepath: bpy.props.StringProperty(subtype="FILE_PATH")
|
||||||
|
|
||||||
|
def execute(self, context):
|
||||||
|
if self.filepath:
|
||||||
|
props = bpy.context.scene.BCFProperties
|
||||||
|
topic = props.topics[props.active_topic_index]
|
||||||
|
topic.document_reference = self.filepath
|
||||||
|
return {"FINISHED"}
|
||||||
|
|
||||||
|
def invoke(self, context, event):
|
||||||
|
context.window_manager.fileselect_add(self)
|
||||||
|
return {"RUNNING_MODAL"}
|
||||||
|
|
||||||
|
|
||||||
class SelectFeaturesDir(bpy.types.Operator):
|
class SelectFeaturesDir(bpy.types.Operator):
|
||||||
bl_idname = "bim.select_features_dir"
|
bl_idname = "bim.select_features_dir"
|
||||||
bl_label = "Select Features Directory"
|
bl_label = "Select Features Directory"
|
||||||
|
|||||||
@@ -1041,6 +1041,8 @@ class BcfTopic(PropertyGroup):
|
|||||||
bim_snippet_reference: StringProperty(default="", name="Reference")
|
bim_snippet_reference: StringProperty(default="", name="Reference")
|
||||||
bim_snippet_schema: StringProperty(default="", name="Schema")
|
bim_snippet_schema: StringProperty(default="", name="Schema")
|
||||||
document_references: CollectionProperty(name="Document References", type=BcfDocumentReference)
|
document_references: CollectionProperty(name="Document References", type=BcfDocumentReference)
|
||||||
|
document_reference: StringProperty(default="", name="Referenced Document")
|
||||||
|
document_reference_description: StringProperty(default="", name="Description")
|
||||||
related_topics: CollectionProperty(name="Related Topics", type=StrProperty)
|
related_topics: CollectionProperty(name="Related Topics", type=StrProperty)
|
||||||
comments: CollectionProperty(name="Comments", type=BcfComment)
|
comments: CollectionProperty(name="Comments", type=BcfComment)
|
||||||
is_editable: BoolProperty(name="Is Editable", default=False, update=updateBcfTopicIsEditable)
|
is_editable: BoolProperty(name="Is Editable", default=False, update=updateBcfTopicIsEditable)
|
||||||
|
|||||||
@@ -1835,7 +1835,6 @@ class BIM_PT_bcf_metadata(Panel):
|
|||||||
row.prop(topic, "bim_snippet_type")
|
row.prop(topic, "bim_snippet_type")
|
||||||
row = layout.row()
|
row = layout.row()
|
||||||
row.prop(topic, "bim_snippet_schema")
|
row.prop(topic, "bim_snippet_schema")
|
||||||
|
|
||||||
row = layout.row()
|
row = layout.row()
|
||||||
row.operator("bim.add_bcf_bim_snippet")
|
row.operator("bim.add_bcf_bim_snippet")
|
||||||
|
|
||||||
@@ -1852,6 +1851,13 @@ class BIM_PT_bcf_metadata(Panel):
|
|||||||
row.operator("bim.remove_bcf_document_reference", icon="X", text="").index = index
|
row.operator("bim.remove_bcf_document_reference", icon="X", text="").index = index
|
||||||
row = box.row(align=True)
|
row = box.row(align=True)
|
||||||
row.prop(doc, "description")
|
row.prop(doc, "description")
|
||||||
|
row = layout.row(align=True)
|
||||||
|
row.prop(topic, "document_reference")
|
||||||
|
row.operator("bim.select_bcf_document_reference", icon="FILE_FOLDER", text="")
|
||||||
|
row = layout.row()
|
||||||
|
row.prop(topic, "document_reference_description")
|
||||||
|
row = layout.row()
|
||||||
|
row.operator("bim.add_bcf_document_reference")
|
||||||
|
|
||||||
if topic.related_topics:
|
if topic.related_topics:
|
||||||
layout.label(text="Related Topics:")
|
layout.label(text="Related Topics:")
|
||||||
|
|||||||
Reference in New Issue
Block a user