mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-10 22:16:41 +00:00
Psets and qtos can be selected from a list instead of typed
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
import csv
|
import csv
|
||||||
|
import ifcopenshell
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from . import export_ifc
|
from . import export_ifc
|
||||||
from . import schema
|
from . import schema
|
||||||
@@ -33,6 +34,8 @@ psetfiles_enum = []
|
|||||||
classification_enum = []
|
classification_enum = []
|
||||||
reference_enum = []
|
reference_enum = []
|
||||||
attributes_enum = []
|
attributes_enum = []
|
||||||
|
overridepsetnames_enum = []
|
||||||
|
qtonames_enum = []
|
||||||
materialattributes_enum = []
|
materialattributes_enum = []
|
||||||
documents_enum = []
|
documents_enum = []
|
||||||
materialtypes_enum = []
|
materialtypes_enum = []
|
||||||
@@ -260,6 +263,32 @@ def getReferences(self, context):
|
|||||||
return reference_enum
|
return reference_enum
|
||||||
|
|
||||||
|
|
||||||
|
def getOverridePsetNames(self, context):
|
||||||
|
global overridepsetnames_enum
|
||||||
|
overridepsetnames_enum.clear()
|
||||||
|
if '/' in context.active_object.name \
|
||||||
|
and context.active_object.name.split('/')[0] in schema.ifc.elements:
|
||||||
|
empty = ifcopenshell.file()
|
||||||
|
element = empty.create_entity(context.active_object.name.split('/')[0])
|
||||||
|
for ifc_class, pset_names in schema.ifc.applicable_psets.items():
|
||||||
|
if element.is_a(ifc_class):
|
||||||
|
overridepsetnames_enum.extend([(p, p, '') for p in pset_names])
|
||||||
|
return overridepsetnames_enum
|
||||||
|
|
||||||
|
|
||||||
|
def getQtoNames(self, context):
|
||||||
|
global qtonames_enum
|
||||||
|
qtonames_enum.clear()
|
||||||
|
if '/' in context.active_object.name \
|
||||||
|
and context.active_object.name.split('/')[0] in schema.ifc.elements:
|
||||||
|
empty = ifcopenshell.file()
|
||||||
|
element = empty.create_entity(context.active_object.name.split('/')[0])
|
||||||
|
for ifc_class, qto_names in schema.ifc.applicable_qtos.items():
|
||||||
|
if element.is_a(ifc_class):
|
||||||
|
qtonames_enum.extend([(q, q, '') for q in qto_names])
|
||||||
|
return qtonames_enum
|
||||||
|
|
||||||
|
|
||||||
def getApplicableAttributes(self, context):
|
def getApplicableAttributes(self, context):
|
||||||
global attributes_enum
|
global attributes_enum
|
||||||
attributes_enum.clear()
|
attributes_enum.clear()
|
||||||
@@ -718,8 +747,8 @@ class BIMObjectProperties(PropertyGroup):
|
|||||||
classifications: CollectionProperty(name="Classifications", type=Classification)
|
classifications: CollectionProperty(name="Classifications", type=Classification)
|
||||||
material_type: EnumProperty(items=getMaterialTypes, name="Material Type")
|
material_type: EnumProperty(items=getMaterialTypes, name="Material Type")
|
||||||
override_psets: CollectionProperty(name="Override Psets", type=PsetQto)
|
override_psets: CollectionProperty(name="Override Psets", type=PsetQto)
|
||||||
override_pset_name: StringProperty(name="Override Pset Name")
|
override_pset_name: EnumProperty(items=getOverridePsetNames, name='Override Pset Name')
|
||||||
qto_name: StringProperty(name="Qto Name")
|
qto_name: EnumProperty(items=getQtoNames, name='Qto Name')
|
||||||
has_boundary_condition: BoolProperty(name='Has Boundary Condition')
|
has_boundary_condition: BoolProperty(name='Has Boundary Condition')
|
||||||
boundary_condition: PointerProperty(name='Boundary Condition', type=BoundaryCondition)
|
boundary_condition: PointerProperty(name='Boundary Condition', type=BoundaryCondition)
|
||||||
structural_member_connection: PointerProperty(name='Structural Member Connection', type=bpy.types.Object)
|
structural_member_connection: PointerProperty(name='Structural Member Connection', type=bpy.types.Object)
|
||||||
|
|||||||
@@ -26,6 +26,8 @@ class IfcSchema():
|
|||||||
self.property_files.append(ifcopenshell.open(path))
|
self.property_files.append(ifcopenshell.open(path))
|
||||||
self.psets = {}
|
self.psets = {}
|
||||||
self.qtos = {}
|
self.qtos = {}
|
||||||
|
self.applicable_psets = {}
|
||||||
|
self.applicable_qtos = {}
|
||||||
self.load()
|
self.load()
|
||||||
|
|
||||||
def load(self):
|
def load(self):
|
||||||
@@ -42,8 +44,12 @@ class IfcSchema():
|
|||||||
if prop.Name[0:4] == 'Qto_':
|
if prop.Name[0:4] == 'Qto_':
|
||||||
self.qtos[prop.Name] = {
|
self.qtos[prop.Name] = {
|
||||||
'HasPropertyTemplates': {p.Name: p for p in prop.HasPropertyTemplates}}
|
'HasPropertyTemplates': {p.Name: p for p in prop.HasPropertyTemplates}}
|
||||||
|
entity = prop.ApplicableEntity if prop.ApplicableEntity else 'IfcRoot'
|
||||||
|
self.applicable_qtos.setdefault(entity, []).append(prop.Name)
|
||||||
else:
|
else:
|
||||||
self.psets[prop.Name] = {
|
self.psets[prop.Name] = {
|
||||||
'HasPropertyTemplates': {p.Name: p for p in prop.HasPropertyTemplates}}
|
'HasPropertyTemplates': {p.Name: p for p in prop.HasPropertyTemplates}}
|
||||||
|
entity = prop.ApplicableEntity if prop.ApplicableEntity else 'IfcRoot'
|
||||||
|
self.applicable_psets.setdefault(entity, []).append(prop.Name)
|
||||||
|
|
||||||
ifc = IfcSchema()
|
ifc = IfcSchema()
|
||||||
|
|||||||
Reference in New Issue
Block a user