mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-09 17:31:45 +00:00
#3478 : Ifc class name suggestions can now autofill predefined type
If they are correctly filled in the json file :)
This commit is contained in:
@@ -19,7 +19,7 @@
|
||||
from collections import defaultdict
|
||||
import bpy
|
||||
import ifcopenshell.util.element
|
||||
from ifcopenshell.util.doc import get_entity_doc, get_predefined_type_doc
|
||||
from ifcopenshell.util.doc import get_entity_doc, get_predefined_type_doc, get_class_suggestions
|
||||
import blenderbim.tool as tool
|
||||
import blenderbim.bim.helper
|
||||
from blenderbim.bim.ifc import IfcStore
|
||||
@@ -110,28 +110,20 @@ class IfcClassData:
|
||||
|
||||
@classmethod
|
||||
def ifc_classes_suggestions(cls):
|
||||
# suggestions : dict[class_name: list[dict[predefined_type, name(optional)]]]
|
||||
suggestions = defaultdict(list)
|
||||
suggestions.update(
|
||||
{
|
||||
"IfcActuator": ["Electric Strike"],
|
||||
"IfcAirTerminalBox": ["VAV Box"],
|
||||
"IfcCableSegment": ["Lighting Rod"],
|
||||
"IfcCovering": ["Flashing", "Capping"],
|
||||
"IfcFurniture": ["Signage"],
|
||||
"IfcPlate": ["Glazing", "Glass", "Pane"],
|
||||
"IfcSensor": ["Card Reader", "Fob Reader"],
|
||||
"IfcSlab": ["Hob"],
|
||||
"IfcSwitchingDevice": ["Reed Switch", "Electric Isolating Switch"],
|
||||
"IfcUnitaryEquipment": ["Fan Coil Unit"],
|
||||
"IfcWall": ["Glazing", "Glass", "Pane"],
|
||||
"IfcWindow": ["Glazing", "Glass", "Pane"],
|
||||
}
|
||||
)
|
||||
version = tool.Ifc.get_schema()
|
||||
for ifc_class, _, _ in cls.data["ifc_classes"]:
|
||||
class_doc = get_entity_doc(version, ifc_class) or {}
|
||||
predefined_types = class_doc.get("predefined_types", {})
|
||||
suggestions[ifc_class].extend(predefined_types.keys())
|
||||
for predefined_type in predefined_types.keys():
|
||||
suggestions[ifc_class].append({"predefined_type": predefined_type})
|
||||
|
||||
class_suggestions = get_class_suggestions(version, ifc_class)
|
||||
if not class_suggestions:
|
||||
continue
|
||||
for suggestion_dict in class_suggestions:
|
||||
suggestions[ifc_class].append(suggestion_dict)
|
||||
return suggestions
|
||||
|
||||
@classmethod
|
||||
|
||||
@@ -870,7 +870,13 @@ class BIM_OT_enum_property_search(bpy.types.Operator):
|
||||
if not isinstance(values, (tuple, list)):
|
||||
values = [values]
|
||||
for value in values:
|
||||
self.add_item(identifier=key, name=key + " > " + value, predefined_type=value.upper())
|
||||
predefined_type = value["predefined_type"].upper()
|
||||
name = value.get("name")
|
||||
self.add_item(
|
||||
identifier=key,
|
||||
name=f"{key} > {name if name else predefined_type }",
|
||||
predefined_type=predefined_type,
|
||||
)
|
||||
|
||||
|
||||
class EditBlenderCollection(bpy.types.Operator):
|
||||
|
||||
@@ -64,16 +64,19 @@ SCHEMA_FILES = {
|
||||
"entities": BASE_MODULE_PATH / "schema/ifc2x3_entities.json",
|
||||
"properties": BASE_MODULE_PATH / "schema/ifc2x3_properties.json",
|
||||
"types": BASE_MODULE_PATH / "schema/ifc2x3_types.json",
|
||||
"classes_suggestions": BASE_MODULE_PATH / "schema/ifc_classes_suggestions.json",
|
||||
},
|
||||
"IFC4": {
|
||||
"entities": BASE_MODULE_PATH / "schema/ifc4_entities.json",
|
||||
"properties": BASE_MODULE_PATH / "schema/ifc4_properties.json",
|
||||
"types": BASE_MODULE_PATH / "schema/ifc4_types.json",
|
||||
"classes_suggestions": BASE_MODULE_PATH / "schema/ifc_classes_suggestions.json",
|
||||
},
|
||||
"IFC4X3": {
|
||||
"entities": BASE_MODULE_PATH / "schema/ifc4x3_entities.json",
|
||||
"properties": BASE_MODULE_PATH / "schema/ifc4x3_properties.json",
|
||||
"types": BASE_MODULE_PATH / "schema/ifc4x3_types.json",
|
||||
"classes_suggestions": BASE_MODULE_PATH / "schema/ifc_classes_suggestions.json",
|
||||
},
|
||||
}
|
||||
|
||||
@@ -105,6 +108,14 @@ def get_schema_by_name(version):
|
||||
return schema_by_name[version]
|
||||
|
||||
|
||||
def get_class_suggestions(version, class_name):
|
||||
db = get_db(version)
|
||||
if not db:
|
||||
return
|
||||
class_suggestions = db["classes_suggestions"].get(class_name)
|
||||
return class_suggestions
|
||||
|
||||
|
||||
def get_entity_doc(version, entity_name, recursive=True):
|
||||
db = get_db(version)
|
||||
if db:
|
||||
|
||||
@@ -0,0 +1,110 @@
|
||||
{
|
||||
"IfcActuator": [
|
||||
{
|
||||
"name": "Electric Strike",
|
||||
"predefined_type": "NOTDEFINED"
|
||||
}
|
||||
],
|
||||
"IfcAirTerminalBox": [
|
||||
{
|
||||
"name": "VAV Box",
|
||||
"predefined_type": "NOTDEFINED"
|
||||
}
|
||||
],
|
||||
"IfcCableSegment": [
|
||||
{
|
||||
"name": "Lighting Rod",
|
||||
"predefined_type": "NOTDEFINED"
|
||||
}
|
||||
],
|
||||
"IfcCovering": [
|
||||
{
|
||||
"name": "Flashing",
|
||||
"predefined_type": "NOTDEFINED"
|
||||
},
|
||||
{
|
||||
"name": "Capping",
|
||||
"predefined_type": "NOTDEFINED"
|
||||
}
|
||||
],
|
||||
"IfcFurniture": [
|
||||
{
|
||||
"name": "Signage",
|
||||
"predefined_type": "NOTDEFINED"
|
||||
}
|
||||
],
|
||||
"IfcPlate": [
|
||||
{
|
||||
"name": "Glazing",
|
||||
"predefined_type": "NOTDEFINED"
|
||||
},
|
||||
{
|
||||
"name": "Glass",
|
||||
"predefined_type": "NOTDEFINED"
|
||||
},
|
||||
{
|
||||
"name": "Pane",
|
||||
"predefined_type": "NOTDEFINED"
|
||||
}
|
||||
],
|
||||
"IfcSensor": [
|
||||
{
|
||||
"name": "Card Reader",
|
||||
"predefined_type": "NOTDEFINED"
|
||||
},
|
||||
{
|
||||
"name": "Fob Reader",
|
||||
"predefined_type": "NOTDEFINED"
|
||||
}
|
||||
],
|
||||
"IfcSlab": [
|
||||
{
|
||||
"name": "Hob",
|
||||
"predefined_type": "NOTDEFINED"
|
||||
}
|
||||
],
|
||||
"IfcSwitchingDevice": [
|
||||
{
|
||||
"name": "Reed Switch",
|
||||
"predefined_type": "NOTDEFINED"
|
||||
},
|
||||
{
|
||||
"name": "Electric Isolating Switch",
|
||||
"predefined_type": "NOTDEFINED"
|
||||
}
|
||||
],
|
||||
"IfcUnitaryEquipment": [
|
||||
{
|
||||
"name": "Fan Coil Unit",
|
||||
"predefined_type": "NOTDEFINED"
|
||||
}
|
||||
],
|
||||
"IfcWall": [
|
||||
{
|
||||
"name": "Glazing",
|
||||
"predefined_type": "NOTDEFINED"
|
||||
},
|
||||
{
|
||||
"name": "Glass",
|
||||
"predefined_type": "NOTDEFINED"
|
||||
},
|
||||
{
|
||||
"name": "Pane",
|
||||
"predefined_type": "NOTDEFINED"
|
||||
}
|
||||
],
|
||||
"IfcWindow": [
|
||||
{
|
||||
"name": "Glazing",
|
||||
"predefined_type": "NOTDEFINED"
|
||||
},
|
||||
{
|
||||
"name": "Glass",
|
||||
"predefined_type": "NOTDEFINED"
|
||||
},
|
||||
{
|
||||
"name": "Pane",
|
||||
"predefined_type": "NOTDEFINED"
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user