# IfcOpenShell - IFC toolkit and geometry engine # Copyright (C) 2021 Dion Moult # # This file is part of IfcOpenShell. # # IfcOpenShell is free software: you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # IfcOpenShell is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . cobie_type_classes = [ "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_classes = [ "IfcBuildingElementProxy", "IfcChimney", "IfcCovering", "IfcDoor", "IfcShadingDevice", "IfcWindow", "IfcDistributionControlElement", "IfcDistributionChamberElement", "IfcEnergyConversionDevice", "IfcFlowController", "IfcFlowMovingDevice", "IfcFlowStorageDevice", "IfcFlowTerminal", "IfcFlowTreatmentDevice", "IfcDiscreteAccessory", "IfcTendon", "IfcTendonAnchor", "IfcVibrationIsolator", "IfcFurnishingElement", "IfcGeographicElement", "IfcTransportElement", ] fmhem_classes_ifc4 = [ "IfcDoorType", "IfcWindowType", "IfcShadingDeviceType", "IfcDistributionControlElementType", "IfcEnergyConversionDeviceType", "IfcFlowControllerType", "IfcFlowMovingDeviceType", "IfcFlowStorageDeviceType", "IfcFlowTerminalType", "IfcFlowTreatmentDeviceType", "IfcFurnishingElementType", "IfcTransportElementType", ] fmhem_classes_ifc2x3 = [ "IfcDoorStyle", "IfcWindowStyle", "IfcShadingDeviceType", "IfcDistributionControlElementType", "IfcEnergyConversionDeviceType", "IfcFlowControllerType", "IfcFlowMovingDeviceType", "IfcFlowStorageDeviceType", "IfcFlowTerminalType", "IfcFlowTreatmentDeviceType", "IfcFurnishingElementType", "IfcTransportElementType", ] fmhem_excluded_classes = [ "IfcCooledBeamType", "IfcBurnerType", "IfcCoilType", "IfcLampType", ] def get_cobie_types(ifc_file): elements = [] for ifc_class in cobie_type_classes: try: elements += ifc_file.by_type(ifc_class) except: pass return elements def get_cobie_components(ifc_file): elements = [] for ifc_class in cobie_component_classes: try: elements += ifc_file.by_type(ifc_class) except: pass return elements def get_fmhem_types(ifc_file): elements = [] if ifc_file.schema == "IFC2X3": fmhem_classes = fmhem_classes_ifc2x3 else: fmhem_classes = fmhem_classes_ifc4 for ifc_class in fmhem_classes: try: if ifc_class == "IfcEnergyConversionDeviceType": elements += [e for e in ifc_file.by_type(ifc_class) if not e.is_a("IfcCooledBeamType")] else: elements += ifc_file.by_type(ifc_class) except: pass return elements