mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-17 05:52:33 +00:00
Utility to extract documentation for all maintainable assets
This commit is contained in:
@@ -0,0 +1,43 @@
|
|||||||
|
import json
|
||||||
|
import ifcopenshell
|
||||||
|
import ifcopenshell.util.selector
|
||||||
|
|
||||||
|
with open('../ifcblenderexport/blenderbim/bim/schema/entity_descriptions.json') as f:
|
||||||
|
entity_descriptions = json.load(f)
|
||||||
|
with open('../ifcblenderexport/blenderbim/bim/schema/enum_descriptions.json') as f:
|
||||||
|
enum_descriptions = json.load(f)
|
||||||
|
|
||||||
|
print('{|class="wikitable"')
|
||||||
|
print('! IFC Class')
|
||||||
|
print('! Predefined Type')
|
||||||
|
|
||||||
|
def print_entity(entity):
|
||||||
|
print('|-')
|
||||||
|
print('| ' + entity.name())
|
||||||
|
print('| ')
|
||||||
|
if entity.name() in entity_descriptions:
|
||||||
|
print('{} ... [https://standards.buildingsmart.org/IFC/DEV/IFC4_3/RC1/HTML/link/{}.htm read more]'.format(entity_descriptions[entity.name()], entity.name().lower()))
|
||||||
|
else:
|
||||||
|
print('No description provided ... [https://standards.buildingsmart.org/IFC/DEV/IFC4_3/RC1/HTML/link/{}.htm read more]'.format(entity_descriptions[entity.name()], entity.name().lower()))
|
||||||
|
for attribute in entity.attributes():
|
||||||
|
if attribute.name() == 'PredefinedType':
|
||||||
|
enum = attribute.type_of_attribute().declared_type()
|
||||||
|
print('\nThe following predefined types are defined:\n')
|
||||||
|
for item in enum.enumeration_items():
|
||||||
|
#print('|-')
|
||||||
|
#print('| ' + entity.name())
|
||||||
|
#print('| ' + item)
|
||||||
|
if enum.name() in enum_descriptions \
|
||||||
|
and item in enum_descriptions[enum.name()]:
|
||||||
|
print('* \'\'\'{}\'\'\' - {} ... [https://standards.buildingsmart.org/IFC/DEV/IFC4_3/RC1/HTML/link/{}.htm read more]'.format(item, enum_descriptions[enum.name()][item], enum.name().lower()))
|
||||||
|
else:
|
||||||
|
print('* \'\'\'{}\'\'\' - No description provided ... [https://standards.buildingsmart.org/IFC/DEV/IFC4_3/RC1/HTML/link/{}.htm read more]'.format(item, enum.name().lower()))
|
||||||
|
|
||||||
|
for subtype in entity.subtypes():
|
||||||
|
print_entity(subtype)
|
||||||
|
|
||||||
|
for asset in ifcopenshell.util.selector.cobie_component_assets:
|
||||||
|
schema = ifcopenshell.ifcopenshell_wrapper.schema_by_name('IFC4')
|
||||||
|
print_entity(schema.declaration_by_name(asset))
|
||||||
|
|
||||||
|
print('|}')
|
||||||
@@ -2,63 +2,64 @@ import ifcopenshell.util
|
|||||||
import ifcopenshell.util.element
|
import ifcopenshell.util.element
|
||||||
import lark
|
import lark
|
||||||
|
|
||||||
|
cobie_type_assets = [
|
||||||
|
'IfcDoorStyle',
|
||||||
|
'IfcBuildingElementProxyType',
|
||||||
|
'IfcChimneyType',
|
||||||
|
'IfcCoveringType',
|
||||||
|
'IfcDoorType',
|
||||||
|
'IfcFootingType',
|
||||||
|
'IfcPileType',
|
||||||
|
'IfcRoofType',
|
||||||
|
'IfcShadingDeviceType',
|
||||||
|
'IfcWindowType',
|
||||||
|
'IfcDistributionControlElementType',
|
||||||
|
'IfcDistributionChamberElementType',
|
||||||
|
'IfcEnergyConversionDeviceType',
|
||||||
|
'IfcFlowControllerType',
|
||||||
|
'IfcFlowMovingDeviceType',
|
||||||
|
'IfcFlowStorageDeviceType',
|
||||||
|
'IfcFlowTerminalType',
|
||||||
|
'IfcFlowTreatmentDeviceType',
|
||||||
|
'IfcElementAssemblyType',
|
||||||
|
'IfcBuildingElementPartType',
|
||||||
|
'IfcDiscreteAccessoryType',
|
||||||
|
'IfcMechanicalFastenerType',
|
||||||
|
'IfcReinforcingElementType',
|
||||||
|
'IfcVibrationIsolatorType',
|
||||||
|
'IfcFurnishingElementType',
|
||||||
|
'IfcGeographicElementType',
|
||||||
|
'IfcTransportElementType',
|
||||||
|
'IfcSpatialZoneType',
|
||||||
|
'IfcWindowStyle',
|
||||||
|
]
|
||||||
|
cobie_component_assets = [
|
||||||
|
'IfcBuildingElementProxy',
|
||||||
|
'IfcChimney',
|
||||||
|
'IfcCovering',
|
||||||
|
'IfcDoor',
|
||||||
|
'IfcShadingDevice',
|
||||||
|
'IfcWindow',
|
||||||
|
'IfcDistributionControlElement',
|
||||||
|
'IfcDistributionChamberElement',
|
||||||
|
'IfcEnergyConversionDevice',
|
||||||
|
'IfcFlowController',
|
||||||
|
'IfcFlowMovingDevice',
|
||||||
|
'IfcFlowStorageDevice',
|
||||||
|
'IfcFlowTerminal',
|
||||||
|
'IfcFlowTreatmentDevice',
|
||||||
|
'IfcDiscreteAccessory',
|
||||||
|
'IfcTendon',
|
||||||
|
'IfcTendonAnchor',
|
||||||
|
'IfcVibrationIsolator',
|
||||||
|
'IfcFurnishingElement',
|
||||||
|
'IfcGeographicElement',
|
||||||
|
'IfcTransportElement',
|
||||||
|
]
|
||||||
|
|
||||||
class Selector():
|
class Selector():
|
||||||
def parse(self, ifc_file, query):
|
def parse(self, ifc_file, query):
|
||||||
self.file = ifc_file
|
self.file = ifc_file
|
||||||
self.cobie_type_assets = [
|
|
||||||
'IfcDoorStyle',
|
|
||||||
'IfcBuildingElementProxyType',
|
|
||||||
'IfcChimneyType',
|
|
||||||
'IfcCoveringType',
|
|
||||||
'IfcDoorType',
|
|
||||||
'IfcFootingType',
|
|
||||||
'IfcPileType',
|
|
||||||
'IfcRoofType',
|
|
||||||
'IfcShadingDeviceType',
|
|
||||||
'IfcWindowType',
|
|
||||||
'IfcDistributionControlElementType',
|
|
||||||
'IfcDistributionChamberElementType',
|
|
||||||
'IfcEnergyConversionDeviceType',
|
|
||||||
'IfcFlowControllerType',
|
|
||||||
'IfcFlowMovingDeviceType',
|
|
||||||
'IfcFlowStorageDeviceType',
|
|
||||||
'IfcFlowTerminalType',
|
|
||||||
'IfcFlowTreatmentDeviceType',
|
|
||||||
'IfcElementAssemblyType',
|
|
||||||
'IfcBuildingElementPartType',
|
|
||||||
'IfcDiscreteAccessoryType',
|
|
||||||
'IfcMechanicalFastenerType',
|
|
||||||
'IfcReinforcingElementType',
|
|
||||||
'IfcVibrationIsolatorType',
|
|
||||||
'IfcFurnishingElementType',
|
|
||||||
'IfcGeographicElementType',
|
|
||||||
'IfcTransportElementType',
|
|
||||||
'IfcSpatialZoneType',
|
|
||||||
'IfcWindowStyle',
|
|
||||||
]
|
|
||||||
self.cobie_component_assets = [
|
|
||||||
'IfcBuildingElementProxy',
|
|
||||||
'IfcChimney',
|
|
||||||
'IfcCovering',
|
|
||||||
'IfcDoor',
|
|
||||||
'IfcShadingDevice',
|
|
||||||
'IfcWindow',
|
|
||||||
'IfcDistributionControlElement',
|
|
||||||
'IfcDistributionChamberElement',
|
|
||||||
'IfcEnergyConversionDevice',
|
|
||||||
'IfcFlowController',
|
|
||||||
'IfcFlowMovingDevice',
|
|
||||||
'IfcFlowStorageDevice',
|
|
||||||
'IfcFlowTerminal',
|
|
||||||
'IfcFlowTreatmentDevice',
|
|
||||||
'IfcDiscreteAccessory',
|
|
||||||
'IfcTendon',
|
|
||||||
'IfcTendonAnchor',
|
|
||||||
'IfcVibrationIsolator',
|
|
||||||
'IfcFurnishingElement',
|
|
||||||
'IfcGeographicElement',
|
|
||||||
'IfcTransportElement',
|
|
||||||
]
|
|
||||||
|
|
||||||
l = lark.Lark('''start: query (lfunction query)*
|
l = lark.Lark('''start: query (lfunction query)*
|
||||||
query: selector | group
|
query: selector | group
|
||||||
@@ -172,14 +173,14 @@ class Selector():
|
|||||||
def get_class_selector(self, class_selector):
|
def get_class_selector(self, class_selector):
|
||||||
if class_selector.children[0] == 'COBie':
|
if class_selector.children[0] == 'COBie':
|
||||||
elements = []
|
elements = []
|
||||||
for ifc_class in self.cobie_component_assets:
|
for ifc_class in cobie_component_assets:
|
||||||
try:
|
try:
|
||||||
elements += self.file.by_type(ifc_class)
|
elements += self.file.by_type(ifc_class)
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
elif class_selector.children[0] == 'COBieType':
|
elif class_selector.children[0] == 'COBieType':
|
||||||
elements = []
|
elements = []
|
||||||
for ifc_class in self.cobie_type_assets:
|
for ifc_class in cobie_type_assets:
|
||||||
try:
|
try:
|
||||||
elements += self.file.by_type(ifc_class)
|
elements += self.file.by_type(ifc_class)
|
||||||
except:
|
except:
|
||||||
|
|||||||
Reference in New Issue
Block a user