Add description to more ifc entities enums

- Constraint type
- Material type
- ObjectMaterial type
- Actor class and type
- Structural load type and boundary condition type
- Style type
- System type
- Relating type
- Unit type
This commit is contained in:
Gorgious56
2022-10-27 17:19:24 +02:00
parent 17a872a8d8
commit e602f16ed3
10 changed files with 68 additions and 34 deletions
@@ -17,7 +17,7 @@
# along with BlenderBIM Add-on. If not, see <http://www.gnu.org/licenses/>. # along with BlenderBIM Add-on. If not, see <http://www.gnu.org/licenses/>.
import bpy import bpy
from blenderbim.bim.prop import StrProperty, Attribute from blenderbim.bim.prop import StrProperty, Attribute, get_ifc_entity_description
from bpy.types import PropertyGroup from bpy.types import PropertyGroup
from bpy.props import ( from bpy.props import (
PointerProperty, PointerProperty,
@@ -31,6 +31,10 @@ from bpy.props import (
) )
def get_available_constraint_types(self, context):
return [(c, c, get_ifc_entity_description(c)) for c in ["IfcObjective"]]
class Constraint(PropertyGroup): class Constraint(PropertyGroup):
name: StringProperty(name="Name") name: StringProperty(name="Name")
ifc_definition_id: IntProperty(name="IFC Definition ID") ifc_definition_id: IntProperty(name="IFC Definition ID")
@@ -46,6 +50,4 @@ class BIMConstraintProperties(PropertyGroup):
class BIMObjectConstraintProperties(PropertyGroup): class BIMObjectConstraintProperties(PropertyGroup):
is_adding: StringProperty(name="Is Adding") is_adding: StringProperty(name="Is Adding")
available_constraint_types: EnumProperty( available_constraint_types: EnumProperty(items=get_available_constraint_types, name="Available Constraint Types")
items=[(c, c, "") for c in ["IfcObjective"]], name="Available Constraint Types"
)
@@ -21,6 +21,7 @@ import bpy
import ifcopenshell import ifcopenshell
import ifcopenshell.util.schema import ifcopenshell.util.schema
import blenderbim.tool as tool import blenderbim.tool as tool
from blenderbim.bim.prop import get_ifc_entity_description
def refresh(): def refresh():
@@ -67,7 +68,7 @@ class MaterialsData:
] ]
if tool.Ifc.get_schema() == "IFC2X3": if tool.Ifc.get_schema() == "IFC2X3":
material_types = ["IfcMaterial", "IfcMaterialLayerSet", "IfcMaterialList"] material_types = ["IfcMaterial", "IfcMaterialLayerSet", "IfcMaterialList"]
return [(m, m, "") for m in material_types] return [(m, m, get_ifc_entity_description(m)) for m in material_types]
class ObjectMaterialData: class ObjectMaterialData:
@@ -20,7 +20,7 @@ import bpy
from ifcopenshell.api.material.data import Data from ifcopenshell.api.material.data import Data
from blenderbim.bim.module.material.data import MaterialsData, ObjectMaterialData from blenderbim.bim.module.material.data import MaterialsData, ObjectMaterialData
from blenderbim.bim.ifc import IfcStore from blenderbim.bim.ifc import IfcStore
from blenderbim.bim.prop import StrProperty, Attribute from blenderbim.bim.prop import StrProperty, Attribute, get_ifc_entity_description
from bpy.types import PropertyGroup from bpy.types import PropertyGroup
from bpy.props import ( from bpy.props import (
PointerProperty, PointerProperty,
@@ -81,7 +81,7 @@ def get_materials(self, context):
return ObjectMaterialData.data["materials"] return ObjectMaterialData.data["materials"]
def getMaterialTypes(self, context): def get_object_material_types(self, context):
global materialtypes_enum global materialtypes_enum
if len(materialtypes_enum) == 0 and IfcStore.get_file(): if len(materialtypes_enum) == 0 and IfcStore.get_file():
material_types = [ material_types = [
@@ -96,7 +96,7 @@ def getMaterialTypes(self, context):
if IfcStore.get_file().schema == "IFC2X3": if IfcStore.get_file().schema == "IFC2X3":
material_types = ["IfcMaterial", "IfcMaterialLayerSet", "IfcMaterialLayerSetUsage", "IfcMaterialList"] material_types = ["IfcMaterial", "IfcMaterialLayerSet", "IfcMaterialLayerSetUsage", "IfcMaterialList"]
materialtypes_enum.clear() materialtypes_enum.clear()
materialtypes_enum = [(m, m, "") for m in material_types] materialtypes_enum = [(m, m, get_ifc_entity_description(m)) for m in material_types]
return materialtypes_enum return materialtypes_enum
@@ -122,7 +122,7 @@ class BIMMaterialProperties(PropertyGroup):
class BIMObjectMaterialProperties(PropertyGroup): class BIMObjectMaterialProperties(PropertyGroup):
material_type: EnumProperty(items=getMaterialTypes, name="Material Type") material_type: EnumProperty(items=get_object_material_types, name="Material Type")
material: EnumProperty(items=get_materials, name="Material") material: EnumProperty(items=get_materials, name="Material")
is_editing: BoolProperty(name="Is Editing", default=False) is_editing: BoolProperty(name="Is Editing", default=False)
material_set_usage_attributes: CollectionProperty(name="Material Set Usage Attributes", type=Attribute) material_set_usage_attributes: CollectionProperty(name="Material Set Usage Attributes", type=Attribute)
@@ -17,7 +17,7 @@
# along with BlenderBIM Add-on. If not, see <http://www.gnu.org/licenses/>. # along with BlenderBIM Add-on. If not, see <http://www.gnu.org/licenses/>.
import bpy import bpy
from blenderbim.bim.prop import StrProperty, Attribute from blenderbim.bim.prop import StrProperty, Attribute, get_ifc_entity_description
from blenderbim.bim.module.owner.data import OwnerData, ActorData, ObjectActorData from blenderbim.bim.module.owner.data import OwnerData, ActorData, ObjectActorData
from bpy.types import PropertyGroup from bpy.types import PropertyGroup
from bpy.props import ( from bpy.props import (
@@ -64,6 +64,21 @@ def update_actor_class(self, context):
ActorData.data["actors"] = ActorData.actors() ActorData.data["actors"] = ActorData.actors()
def get_actor_class_enum(self, context):
return [
("IfcActor", "Actor", get_ifc_entity_description("IfcActor")),
("IfcOccupant", "Occupant", get_ifc_entity_description("IfcOccupant")),
]
def get_actor_type_enum(self, context):
return [
("IfcPerson", "Person", get_ifc_entity_description("IfcPerson")),
("IfcOrganization", "Organisation", get_ifc_entity_description("IfcOrganization")),
("IfcPersonAndOrganization", "User", get_ifc_entity_description("IfcPersonAndOrganization")),
]
class BIMOwnerProperties(PropertyGroup): class BIMOwnerProperties(PropertyGroup):
active_person_id: IntProperty(name="Active Person Id") active_person_id: IntProperty(name="Active Person Id")
person_attributes: CollectionProperty(name="Person Attributes", type=Attribute) person_attributes: CollectionProperty(name="Person Attributes", type=Attribute)
@@ -87,16 +102,12 @@ class BIMOwnerProperties(PropertyGroup):
active_actor_id: IntProperty(name="Active Actor Id") active_actor_id: IntProperty(name="Active Actor Id")
actor_attributes: CollectionProperty(name="Actor Attributes", type=Attribute) actor_attributes: CollectionProperty(name="Actor Attributes", type=Attribute)
actor_class: EnumProperty( actor_class: EnumProperty(
items=(("IfcActor", "Actor", ""), ("IfcOccupant", "Occupant", "")), items=get_actor_class_enum,
name="Actor Type", name="Actor Type",
update=update_actor_class, update=update_actor_class,
) )
actor_type: EnumProperty( actor_type: EnumProperty(
items=( items=get_actor_type_enum,
("IfcPerson", "Person", ""),
("IfcOrganization", "Organisation", ""),
("IfcPersonAndOrganization", "User", ""),
),
name="Actor Type", name="Actor Type",
update=update_actor_type, update=update_actor_type,
) )
@@ -19,7 +19,7 @@
import bpy import bpy
from blenderbim.bim.ifc import IfcStore from blenderbim.bim.ifc import IfcStore
from math import radians from math import radians
from blenderbim.bim.prop import StrProperty, Attribute from blenderbim.bim.prop import StrProperty, Attribute, get_ifc_entity_description
from ifcopenshell.api.structural.data import Data from ifcopenshell.api.structural.data import Data
from bpy.types import PropertyGroup from bpy.types import PropertyGroup
from bpy.props import ( from bpy.props import (
@@ -84,20 +84,24 @@ def getApplicableStructuralLoads(self, context):
return applicablestructuralloads_enum return applicablestructuralloads_enum
def getStructuralLoadTypes(self, context): def get_structural_load_types(self, context):
global structuralloadtypes_enum global structuralloadtypes_enum
file = IfcStore.get_file() file = IfcStore.get_file()
if len(structuralloadtypes_enum) < 1 and file: if len(structuralloadtypes_enum) < 1 and file:
declaration = IfcStore.get_schema().declaration_by_name("IfcStructuralLoadStatic") declaration = IfcStore.get_schema().declaration_by_name("IfcStructuralLoadStatic")
structuralloadtypes_enum.extend([(d.name(), d.name(), "") for d in declaration.subtypes()]) structuralloadtypes_enum.extend(
[(d.name(), d.name(), get_ifc_entity_description(d.name())) for d in declaration.subtypes()]
)
return structuralloadtypes_enum return structuralloadtypes_enum
def getBoundaryConditionTypes(self, context): def get_boundary_condition_types(self, context):
file = IfcStore.get_file() file = IfcStore.get_file()
if file: if file:
declaration = IfcStore.get_schema().declaration_by_name("IfcBoundaryCondition") declaration = IfcStore.get_schema().declaration_by_name("IfcBoundaryCondition")
boundaryconditiontypes_enum = [(d.name(), d.name(), "") for d in declaration.subtypes()] boundaryconditiontypes_enum = [
(d.name(), d.name(), get_ifc_entity_description(d.name())) for d in declaration.subtypes()
]
return boundaryconditiontypes_enum return boundaryconditiontypes_enum
return [] return []
@@ -177,7 +181,7 @@ class BIMStructuralProperties(PropertyGroup):
active_structural_load_index: IntProperty(name="Active Structural Load Index") active_structural_load_index: IntProperty(name="Active Structural Load Index")
active_structural_load_id: IntProperty(name="Active Structural Load Id") active_structural_load_id: IntProperty(name="Active Structural Load Id")
is_editing_loads: BoolProperty(name="Is Editing Loads", default=False) is_editing_loads: BoolProperty(name="Is Editing Loads", default=False)
structural_load_types: EnumProperty(items=getStructuralLoadTypes, name="Structural Load Types") structural_load_types: EnumProperty(items=get_structural_load_types, name="Structural Load Types")
structural_load_attributes: CollectionProperty(name="Structural Load Attributes", type=Attribute) structural_load_attributes: CollectionProperty(name="Structural Load Attributes", type=Attribute)
filtered_structural_loads: BoolProperty(name="Filtered Structural Loads", default=False) filtered_structural_loads: BoolProperty(name="Filtered Structural Loads", default=False)
@@ -185,7 +189,7 @@ class BIMStructuralProperties(PropertyGroup):
active_boundary_condition_index: IntProperty(name="Active Boundary Condition Index") active_boundary_condition_index: IntProperty(name="Active Boundary Condition Index")
active_boundary_condition_id: IntProperty(name="Active Boundary Condition Id") active_boundary_condition_id: IntProperty(name="Active Boundary Condition Id")
is_editing_boundary_conditions: BoolProperty(name="Is Editing Boundary Conditions", default=False) is_editing_boundary_conditions: BoolProperty(name="Is Editing Boundary Conditions", default=False)
boundary_condition_types: EnumProperty(items=getBoundaryConditionTypes, name="Boundary Condition Types") boundary_condition_types: EnumProperty(items=get_boundary_condition_types, name="Boundary Condition Types")
boundary_condition_attributes: CollectionProperty(name="Boundary Condition Attributes", type=Attribute) boundary_condition_attributes: CollectionProperty(name="Boundary Condition Attributes", type=Attribute)
filtered_boundary_conditions: BoolProperty(name="Filtered Boundary Conditions", default=False) filtered_boundary_conditions: BoolProperty(name="Filtered Boundary Conditions", default=False)
@@ -19,6 +19,7 @@
import bpy import bpy
import blenderbim.tool as tool import blenderbim.tool as tool
import ifcopenshell import ifcopenshell
from blenderbim.bim.prop import get_ifc_entity_description
def refresh(): def refresh():
@@ -38,7 +39,7 @@ class StylesData:
def style_types(cls): def style_types(cls):
declaration = tool.Ifc.schema().declaration_by_name("IfcPresentationStyle") declaration = tool.Ifc.schema().declaration_by_name("IfcPresentationStyle")
declarations = ifcopenshell.util.schema.get_subtypes(declaration) declarations = ifcopenshell.util.schema.get_subtypes(declaration)
return [(c, c, "") for c in sorted([d.name() for d in declarations])] return [(c, c, get_ifc_entity_description(c)) for c in sorted([d.name() for d in declarations])]
@classmethod @classmethod
def total_styles(cls): def total_styles(cls):
@@ -20,6 +20,7 @@ import bpy
import ifcopenshell import ifcopenshell
import ifcopenshell.util.schema import ifcopenshell.util.schema
import blenderbim.tool as tool import blenderbim.tool as tool
from blenderbim.bim.prop import get_ifc_entity_description
def refresh(): def refresh():
@@ -46,7 +47,7 @@ class SystemData:
declarations = ifcopenshell.util.schema.get_subtypes(declaration) declarations = ifcopenshell.util.schema.get_subtypes(declaration)
# We're only interested in systems for services. Not sure why IFC groups these together. # We're only interested in systems for services. Not sure why IFC groups these together.
return [ return [
(c, c, "") (c, c, get_ifc_entity_description(c))
for c in sorted([d.name() for d in declarations]) for c in sorted([d.name() for d in declarations])
if c not in ("IfcZone", "IfcStructuralAnalysisModel") if c not in ("IfcZone", "IfcStructuralAnalysisModel")
] ]
@@ -20,6 +20,7 @@ import bpy
import ifcopenshell.util.type import ifcopenshell.util.type
import ifcopenshell.util.element import ifcopenshell.util.element
import blenderbim.tool as tool import blenderbim.tool as tool
from blenderbim.bim.prop import get_ifc_entity_description
def refresh(): def refresh():
@@ -54,7 +55,7 @@ class TypeData:
if not element: if not element:
return [] return []
types = ifcopenshell.util.type.get_applicable_types(element.is_a(), schema=tool.Ifc.get_schema()) types = ifcopenshell.util.type.get_applicable_types(element.is_a(), schema=tool.Ifc.get_schema())
results.extend((t, t, "") for t in types) results.extend((t, t, get_ifc_entity_description(t)) for t in types)
return results return results
@classmethod @classmethod
@@ -21,6 +21,7 @@ import ifcopenshell.util.unit
import ifcopenshell.util.schema import ifcopenshell.util.schema
import ifcopenshell.util.attribute import ifcopenshell.util.attribute
import blenderbim.tool as tool import blenderbim.tool as tool
from blenderbim.bim.prop import get_ifc_entity_description
def refresh(): def refresh():
@@ -44,7 +45,7 @@ class UnitsData:
@classmethod @classmethod
def unit_classes(cls): def unit_classes(cls):
declarations = ifcopenshell.util.schema.get_subtypes(tool.Ifc.schema().declaration_by_name("IfcNamedUnit")) declarations = ifcopenshell.util.schema.get_subtypes(tool.Ifc.schema().declaration_by_name("IfcNamedUnit"))
results = [(c, c, "") for c in sorted([d.name() for d in declarations])] results = [(c, c, get_ifc_entity_description(c)) for c in sorted([d.name() for d in declarations])]
results.extend([("IfcDerivedUnit", "IfcDerivedUnit", ""), ("IfcMonetaryUnit", "IfcMonetaryUnit", "")]) results.extend([("IfcDerivedUnit", "IfcDerivedUnit", ""), ("IfcMonetaryUnit", "IfcMonetaryUnit", "")])
return results return results
+19 -7
View File
@@ -128,7 +128,19 @@ def get_predefined_type_description(entity, predefined_type):
return get_predefined_type_doc(schema, entity, predefined_type) return get_predefined_type_doc(schema, entity, predefined_type)
def getAttributeEnumValues(prop, context): def get_attribute_description(entity, attribute):
schema = tool.Ifc.get_schema()
if schema is not None:
return get_attribute_doc(schema, entity, attribute)
def get_property_set_description(pset):
schema = tool.Ifc.get_schema()
if schema is not None:
return get_property_set_doc(schema, pset)
def get_attribute_enum_values(prop, context):
# Support weird buildingSMART dictionary mappings which behave like enums # Support weird buildingSMART dictionary mappings which behave like enums
items = [] items = []
data = json.loads(prop.enum_items) data = json.loads(prop.enum_items)
@@ -200,7 +212,7 @@ class ObjProperty(PropertyGroup):
obj: bpy.props.PointerProperty(type=bpy.types.Object) obj: bpy.props.PointerProperty(type=bpy.types.Object)
def updateAttributeValue(self, context): def update_attribute_value(self, context):
value_name = self.get_value_name() value_name = self.get_value_name()
if value_name: if value_name:
value_names = [value_name] value_names = [value_name]
@@ -217,12 +229,12 @@ def updateAttributeValue(self, context):
class Attribute(PropertyGroup): class Attribute(PropertyGroup):
name: StringProperty(name="Name") name: StringProperty(name="Name")
data_type: StringProperty(name="Data Type") data_type: StringProperty(name="Data Type")
string_value: StringProperty(name="Value", update=updateAttributeValue) string_value: StringProperty(name="Value", update=update_attribute_value)
bool_value: BoolProperty(name="Value", update=updateAttributeValue) bool_value: BoolProperty(name="Value", update=update_attribute_value)
int_value: IntProperty(name="Value", update=updateAttributeValue) int_value: IntProperty(name="Value", update=update_attribute_value)
float_value: FloatProperty(name="Value", update=updateAttributeValue) float_value: FloatProperty(name="Value", update=update_attribute_value)
enum_items: StringProperty(name="Value") enum_items: StringProperty(name="Value")
enum_value: EnumProperty(items=getAttributeEnumValues, name="Value", update=updateAttributeValue) enum_value: EnumProperty(items=get_attribute_enum_values, name="Value", update=update_attribute_value)
is_null: BoolProperty(name="Is Null") is_null: BoolProperty(name="Is Null")
is_optional: BoolProperty(name="Is Optional") is_optional: BoolProperty(name="Is Optional")
is_uri: BoolProperty(name="Is Uri", default=False) is_uri: BoolProperty(name="Is Uri", default=False)