mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-25 17:57:02 +00:00
Merge pull request #7072 from falken10vdl/Enhanced-Classification-Display-in-Object-Information
Add classification system to the Object Information, Classification References Subpanel
This commit is contained in:
@@ -104,6 +104,7 @@ class ReferencesData:
|
|||||||
if element:
|
if element:
|
||||||
for reference in ifcopenshell.util.classification.get_references(element):
|
for reference in ifcopenshell.util.classification.get_references(element):
|
||||||
data = reference.get_info()
|
data = reference.get_info()
|
||||||
|
data["ifcClassificationReference"] = reference
|
||||||
del data["ReferencedSource"]
|
del data["ReferencedSource"]
|
||||||
results.append(data)
|
results.append(data)
|
||||||
return results
|
return results
|
||||||
|
|||||||
@@ -257,7 +257,9 @@ class EnableEditingClassificationReference(bpy.types.Operator):
|
|||||||
def execute(self, context):
|
def execute(self, context):
|
||||||
props = tool.Classification.get_classification_reference_props()
|
props = tool.Classification.get_classification_reference_props()
|
||||||
props.reference_attributes.clear()
|
props.reference_attributes.clear()
|
||||||
bonsai.bim.helper.import_attributes(tool.Ifc.get().by_id(self.reference), props.reference_attributes)
|
ifc_reference = tool.Ifc.get().by_id(self.reference)
|
||||||
|
bonsai.bim.helper.import_attributes(ifc_reference, props.reference_attributes)
|
||||||
|
props.classification_system_name = ifc_reference.ReferencedSource.Name or ""
|
||||||
props.active_reference_id = self.reference
|
props.active_reference_id = self.reference
|
||||||
return {"FINISHED"}
|
return {"FINISHED"}
|
||||||
|
|
||||||
@@ -324,9 +326,13 @@ class EditClassificationReference(bpy.types.Operator, tool.Ifc.Operator):
|
|||||||
props = tool.Classification.get_classification_reference_props()
|
props = tool.Classification.get_classification_reference_props()
|
||||||
attributes = bonsai.bim.helper.export_attributes(props.reference_attributes)
|
attributes = bonsai.bim.helper.export_attributes(props.reference_attributes)
|
||||||
ifc_file = tool.Ifc.get()
|
ifc_file = tool.Ifc.get()
|
||||||
|
reference_entity = ifc_file.by_id(props.active_reference_id)
|
||||||
|
referenced_source = reference_entity.ReferencedSource
|
||||||
|
if props.classification_system_name:
|
||||||
|
referenced_source.Name = props.classification_system_name
|
||||||
ifcopenshell.api.classification.edit_reference(
|
ifcopenshell.api.classification.edit_reference(
|
||||||
ifc_file,
|
ifc_file,
|
||||||
reference=ifc_file.by_id(props.active_reference_id),
|
reference=reference_entity,
|
||||||
attributes=attributes,
|
attributes=attributes,
|
||||||
)
|
)
|
||||||
bpy.ops.bim.disable_editing_classification_reference()
|
bpy.ops.bim.disable_editing_classification_reference()
|
||||||
|
|||||||
@@ -95,6 +95,7 @@ class BIMClassificationReferenceProperties(PropertyGroup):
|
|||||||
classifications: EnumProperty(items=get_classifications, name="Classifications")
|
classifications: EnumProperty(items=get_classifications, name="Classifications")
|
||||||
reference_attributes: CollectionProperty(name="Reference Attributes", type=Attribute)
|
reference_attributes: CollectionProperty(name="Reference Attributes", type=Attribute)
|
||||||
active_reference_id: IntProperty(name="Active Reference Id")
|
active_reference_id: IntProperty(name="Active Reference Id")
|
||||||
|
classification_system_name: StringProperty(name="Classification System Name")
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
is_adding: bool
|
is_adding: bool
|
||||||
|
|||||||
@@ -21,6 +21,8 @@ import bpy
|
|||||||
import bonsai.bim.helper
|
import bonsai.bim.helper
|
||||||
import bonsai.tool as tool
|
import bonsai.tool as tool
|
||||||
import bonsai.bim.module.classification.prop as classification_prop
|
import bonsai.bim.module.classification.prop as classification_prop
|
||||||
|
import ifcopenshell.util.classification
|
||||||
|
|
||||||
from bpy.types import Panel, UIList
|
from bpy.types import Panel, UIList
|
||||||
from bonsai.bim.module.classification.data import (
|
from bonsai.bim.module.classification.data import (
|
||||||
ClassificationsData,
|
ClassificationsData,
|
||||||
@@ -152,7 +154,15 @@ class ReferenceUI:
|
|||||||
row = self.layout.row(align=True)
|
row = self.layout.row(align=True)
|
||||||
row.label(text="No References")
|
row.label(text="No References")
|
||||||
|
|
||||||
for reference in self.data.data["references"]:
|
def get_classification_name(reference):
|
||||||
|
classification_entity = ifcopenshell.util.classification.get_classification(
|
||||||
|
reference["ifcClassificationReference"]
|
||||||
|
)
|
||||||
|
return classification_entity.Name if classification_entity else ""
|
||||||
|
|
||||||
|
sorted_references = sorted(self.data.data["references"], key=get_classification_name)
|
||||||
|
|
||||||
|
for reference in sorted_references:
|
||||||
if self.props.active_reference_id == reference["id"]:
|
if self.props.active_reference_id == reference["id"]:
|
||||||
self.draw_editable_ui()
|
self.draw_editable_ui()
|
||||||
else:
|
else:
|
||||||
@@ -248,10 +258,20 @@ class ReferenceUI:
|
|||||||
row = self.layout.row(align=True)
|
row = self.layout.row(align=True)
|
||||||
row.operator("bim.edit_classification_reference", text="Save changes", icon="CHECKMARK")
|
row.operator("bim.edit_classification_reference", text="Save changes", icon="CHECKMARK")
|
||||||
row.operator("bim.disable_editing_classification_reference", text="", icon="CANCEL")
|
row.operator("bim.disable_editing_classification_reference", text="", icon="CANCEL")
|
||||||
|
row = self.layout.row()
|
||||||
|
row.prop(self.props, "classification_system_name", text="Classification System Name")
|
||||||
|
|
||||||
bonsai.bim.helper.draw_attributes(self.props.reference_attributes, self.layout)
|
bonsai.bim.helper.draw_attributes(self.props.reference_attributes, self.layout)
|
||||||
|
|
||||||
def draw_reference_ui(self, reference: dict[str, Any]) -> None:
|
def draw_reference_ui(self, reference: dict[str, Any]) -> None:
|
||||||
row = self.layout.row(align=True)
|
row = self.layout.row(align=True)
|
||||||
|
|
||||||
|
classification_entity = ifcopenshell.util.classification.get_classification(
|
||||||
|
reference["ifcClassificationReference"]
|
||||||
|
)
|
||||||
|
classification_name = classification_entity.Name if classification_entity else ""
|
||||||
|
row.label(text=classification_name, icon="OUTLINER_COLLECTION")
|
||||||
|
|
||||||
if self.file.schema == "IFC2X3":
|
if self.file.schema == "IFC2X3":
|
||||||
name = reference["ItemReference"] or "No Identification"
|
name = reference["ItemReference"] or "No Identification"
|
||||||
else:
|
else:
|
||||||
|
|||||||
Reference in New Issue
Block a user