From 688552eb15ba25db2aea2f2b403493bfd8e4293c Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Wed, 23 Jan 2019 22:10:17 +1100 Subject: [PATCH 01/22] Add extracted list of IFC products --- src/Mod/Arch/Presets/ifc_products.json | 4439 ++++++++++++++++++++++++ 1 file changed, 4439 insertions(+) create mode 100644 src/Mod/Arch/Presets/ifc_products.json diff --git a/src/Mod/Arch/Presets/ifc_products.json b/src/Mod/Arch/Presets/ifc_products.json new file mode 100644 index 0000000000..aec4eb585d --- /dev/null +++ b/src/Mod/Arch/Presets/ifc_products.json @@ -0,0 +1,4439 @@ +[ + { + "name": "IfcActuator", + "is_abstract": false, + "parent": "IfcDistributionControlElement", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcActuatorTypeEnum", + "is_enum": true, + "enum_values": [ + "electricactuator", + "handoperatedactuator", + "hydraulicactuator", + "pneumaticactuator", + "thermostaticactuator", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcAirTerminal", + "is_abstract": false, + "parent": "IfcFlowTerminal", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcAirTerminalTypeEnum", + "is_enum": true, + "enum_values": [ + "diffuser", + "grille", + "louvre", + "register", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcAirTerminalBox", + "is_abstract": false, + "parent": "IfcFlowController", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcAirTerminalBoxTypeEnum", + "is_enum": true, + "enum_values": [ + "constantflow", + "variableflowpressuredependant", + "variableflowpressureindependant", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcAirToAirHeatRecovery", + "is_abstract": false, + "parent": "IfcEnergyConversionDevice", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcAirToAirHeatRecoveryTypeEnum", + "is_enum": true, + "enum_values": [ + "fixedplatecounterflowexchanger", + "fixedplatecrossflowexchanger", + "fixedplateparallelflowexchanger", + "rotarywheel", + "runaroundcoilloop", + "heatpipe", + "twintowerenthalpyrecoveryloops", + "thermosiphonsealedtubeheatexchangers", + "thermosiphoncoiltypeheatexchangers", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcAlarm", + "is_abstract": false, + "parent": "IfcDistributionControlElement", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcAlarmTypeEnum", + "is_enum": true, + "enum_values": [ + "bell", + "breakglassbutton", + "light", + "manualpullbox", + "siren", + "whistle", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcAnnotation", + "is_abstract": false, + "parent": "IfcProduct", + "attributes": [] + }, + { + "name": "IfcAudioVisualAppliance", + "is_abstract": false, + "parent": "IfcFlowTerminal", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcAudioVisualApplianceTypeEnum", + "is_enum": true, + "enum_values": [ + "amplifier", + "camera", + "display", + "microphone", + "player", + "projector", + "receiver", + "speaker", + "switcher", + "telephone", + "tuner", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcBeam", + "is_abstract": false, + "parent": "IfcBuildingElement", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcBeamTypeEnum", + "is_enum": true, + "enum_values": [ + "beam", + "joist", + "hollowcore", + "lintel", + "spandrel", + "t_beam", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcBeamStandardCase", + "is_abstract": false, + "parent": "IfcBeam", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcBeamTypeEnum", + "is_enum": true, + "enum_values": [ + "beam", + "joist", + "hollowcore", + "lintel", + "spandrel", + "t_beam", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcBoiler", + "is_abstract": false, + "parent": "IfcEnergyConversionDevice", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcBoilerTypeEnum", + "is_enum": true, + "enum_values": [ + "water", + "steam", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcBuilding", + "is_abstract": false, + "parent": "IfcSpatialStructureElement", + "attributes": [ + { + "name": "ElevationOfRefHeight", + "type": "IfcLengthMeasure", + "is_enum": false, + "enum_values": [] + }, + { + "name": "ElevationOfTerrain", + "type": "IfcLengthMeasure", + "is_enum": false, + "enum_values": [] + }, + { + "name": "CompositionType", + "type": "IfcElementCompositionEnum", + "is_enum": true, + "enum_values": [] + }, + { + "name": "LongName", + "type": "IfcLabel", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcBuildingElementPart", + "is_abstract": false, + "parent": "IfcElementComponent", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcBuildingElementPartTypeEnum", + "is_enum": true, + "enum_values": [ + "insulation", + "precastpanel", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcBuildingElementProxy", + "is_abstract": false, + "parent": "IfcBuildingElement", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcBuildingElementProxyTypeEnum", + "is_enum": true, + "enum_values": [ + "complex", + "element", + "partial", + "provisionforvoid", + "provisionforspace", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcBuildingStorey", + "is_abstract": false, + "parent": "IfcSpatialStructureElement", + "attributes": [ + { + "name": "Elevation", + "type": "IfcLengthMeasure", + "is_enum": false, + "enum_values": [] + }, + { + "name": "CompositionType", + "type": "IfcElementCompositionEnum", + "is_enum": true, + "enum_values": [] + }, + { + "name": "LongName", + "type": "IfcLabel", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcBurner", + "is_abstract": false, + "parent": "IfcEnergyConversionDevice", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcBurnerTypeEnum", + "is_enum": true, + "enum_values": [ + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcCableCarrierFitting", + "is_abstract": false, + "parent": "IfcFlowFitting", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcCableCarrierFittingTypeEnum", + "is_enum": true, + "enum_values": [ + "bend", + "cross", + "reducer", + "tee", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcCableCarrierSegment", + "is_abstract": false, + "parent": "IfcFlowSegment", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcCableCarrierSegmentTypeEnum", + "is_enum": true, + "enum_values": [ + "cableladdersegment", + "cabletraysegment", + "cabletrunkingsegment", + "conduitsegment", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcCableFitting", + "is_abstract": false, + "parent": "IfcFlowFitting", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcCableFittingTypeEnum", + "is_enum": true, + "enum_values": [ + "connector", + "entry", + "exit", + "junction", + "transition", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcCableSegment", + "is_abstract": false, + "parent": "IfcFlowSegment", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcCableSegmentTypeEnum", + "is_enum": true, + "enum_values": [ + "busbarsegment", + "cablesegment", + "conductorsegment", + "coresegment", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcChiller", + "is_abstract": false, + "parent": "IfcEnergyConversionDevice", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcChillerTypeEnum", + "is_enum": true, + "enum_values": [ + "aircooled", + "watercooled", + "heatrecovery", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcChimney", + "is_abstract": false, + "parent": "IfcBuildingElement", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcChimneyTypeEnum", + "is_enum": true, + "enum_values": [ + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcCivilElement", + "is_abstract": false, + "parent": "IfcElement", + "attributes": [ + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcCoil", + "is_abstract": false, + "parent": "IfcEnergyConversionDevice", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcCoilTypeEnum", + "is_enum": true, + "enum_values": [ + "dxcoolingcoil", + "electricheatingcoil", + "gasheatingcoil", + "hydroniccoil", + "steamheatingcoil", + "watercoolingcoil", + "waterheatingcoil", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcColumn", + "is_abstract": false, + "parent": "IfcBuildingElement", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcColumnTypeEnum", + "is_enum": true, + "enum_values": [ + "column", + "pilaster", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcColumnStandardCase", + "is_abstract": false, + "parent": "IfcColumn", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcColumnTypeEnum", + "is_enum": true, + "enum_values": [ + "column", + "pilaster", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcCommunicationsAppliance", + "is_abstract": false, + "parent": "IfcFlowTerminal", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcCommunicationsApplianceTypeEnum", + "is_enum": true, + "enum_values": [ + "antenna", + "computer", + "fax", + "gateway", + "modem", + "networkappliance", + "networkbridge", + "networkhub", + "printer", + "repeater", + "router", + "scanner", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcCompressor", + "is_abstract": false, + "parent": "IfcFlowMovingDevice", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcCompressorTypeEnum", + "is_enum": true, + "enum_values": [ + "dynamic", + "reciprocating", + "rotary", + "scroll", + "trochoidal", + "singlestage", + "booster", + "opentype", + "hermetic", + "semihermetic", + "weldedshellhermetic", + "rollingpiston", + "rotaryvane", + "singlescrew", + "twinscrew", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcCondenser", + "is_abstract": false, + "parent": "IfcEnergyConversionDevice", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcCondenserTypeEnum", + "is_enum": true, + "enum_values": [ + "aircooled", + "evaporativecooled", + "watercooled", + "watercooledbrazedplate", + "watercooledshellcoil", + "watercooledshelltube", + "watercooledtubeintube", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcController", + "is_abstract": false, + "parent": "IfcDistributionControlElement", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcControllerTypeEnum", + "is_enum": true, + "enum_values": [ + "floating", + "programmable", + "proportional", + "multiposition", + "twoposition", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcCooledBeam", + "is_abstract": false, + "parent": "IfcEnergyConversionDevice", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcCooledBeamTypeEnum", + "is_enum": true, + "enum_values": [ + "active", + "passive", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcCoolingTower", + "is_abstract": false, + "parent": "IfcEnergyConversionDevice", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcCoolingTowerTypeEnum", + "is_enum": true, + "enum_values": [ + "naturaldraft", + "mechanicalinduceddraft", + "mechanicalforceddraft", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcCovering", + "is_abstract": false, + "parent": "IfcBuildingElement", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcCoveringTypeEnum", + "is_enum": true, + "enum_values": [ + "ceiling", + "flooring", + "cladding", + "roofing", + "molding", + "skirtingboard", + "insulation", + "membrane", + "sleeving", + "wrapping", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcCurtainWall", + "is_abstract": false, + "parent": "IfcBuildingElement", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcCurtainWallTypeEnum", + "is_enum": true, + "enum_values": [ + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcDamper", + "is_abstract": false, + "parent": "IfcFlowController", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcDamperTypeEnum", + "is_enum": true, + "enum_values": [ + "backdraftdamper", + "balancingdamper", + "blastdamper", + "controldamper", + "firedamper", + "firesmokedamper", + "fumehoodexhaust", + "gravitydamper", + "gravityreliefdamper", + "reliefdamper", + "smokedamper", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcDiscreteAccessory", + "is_abstract": false, + "parent": "IfcElementComponent", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcDiscreteAccessoryTypeEnum", + "is_enum": true, + "enum_values": [ + "anchorplate", + "bracket", + "shoe", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcDistributionChamberElement", + "is_abstract": false, + "parent": "IfcDistributionFlowElement", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcDistributionChamberElementTypeEnum", + "is_enum": true, + "enum_values": [ + "formedduct", + "inspectionchamber", + "inspectionpit", + "manhole", + "meterchamber", + "sump", + "trench", + "valvechamber", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcDistributionControlElement", + "is_abstract": false, + "parent": "IfcDistributionElement", + "attributes": [ + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcDistributionElement", + "is_abstract": false, + "parent": "IfcElement", + "attributes": [ + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcDistributionFlowElement", + "is_abstract": false, + "parent": "IfcDistributionElement", + "attributes": [ + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcDistributionPort", + "is_abstract": false, + "parent": "IfcPort", + "attributes": [ + { + "name": "FlowDirection", + "type": "IfcFlowDirectionEnum", + "is_enum": true, + "enum_values": [ + "source", + "sink", + "sourceandsink", + "notdefined" + ] + }, + { + "name": "PredefinedType", + "type": "IfcDistributionPortTypeEnum", + "is_enum": true, + "enum_values": [ + "cable", + "cablecarrier", + "duct", + "pipe", + "userdefined", + "notdefined" + ] + }, + { + "name": "SystemType", + "type": "IfcDistributionSystemEnum", + "is_enum": true, + "enum_values": [ + "airconditioning", + "audiovisual", + "chemical", + "chilledwater", + "communication", + "compressedair", + "condenserwater", + "control", + "conveying", + "data", + "disposal", + "domesticcoldwater", + "domestichotwater", + "drainage", + "earthing", + "electrical", + "electroacoustic", + "exhaust", + "fireprotection", + "fuel", + "gas", + "hazardous", + "heating", + "lighting", + "lightningprotection", + "municipalsolidwaste", + "oil", + "operational", + "powergeneration", + "rainwater", + "refrigeration", + "security", + "sewage", + "signal", + "stormwater", + "telephone", + "tv", + "vacuum", + "vent", + "ventilation", + "wastewater", + "watersupply", + "userdefined", + "notdefined" + ] + } + ] + }, + { + "name": "IfcDoor", + "is_abstract": false, + "parent": "IfcBuildingElement", + "attributes": [ + { + "name": "OverallHeight", + "type": "IfcPositiveLengthMeasure", + "is_enum": false, + "enum_values": [] + }, + { + "name": "OverallWidth", + "type": "IfcPositiveLengthMeasure", + "is_enum": false, + "enum_values": [] + }, + { + "name": "PredefinedType", + "type": "IfcDoorTypeEnum", + "is_enum": true, + "enum_values": [ + "door", + "gate", + "trapdoor", + "userdefined", + "notdefined" + ] + }, + { + "name": "OperationType", + "type": "IfcDoorTypeOperationEnum", + "is_enum": true, + "enum_values": [ + "single_swing_left", + "single_swing_right", + "double_door_single_swing", + "double_door_single_swing_opposite_left", + "double_door_single_swing_opposite_right", + "double_swing_left", + "double_swing_right", + "double_door_double_swing", + "sliding_to_left", + "sliding_to_right", + "double_door_sliding", + "folding_to_left", + "folding_to_right", + "double_door_folding", + "revolving", + "rollingup", + "swing_fixed_left", + "swing_fixed_right", + "userdefined", + "notdefined" + ] + }, + { + "name": "UserDefinedOperationType", + "type": "IfcLabel", + "is_enum": false, + "enum_values": [] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcDoorStandardCase", + "is_abstract": false, + "parent": "IfcDoor", + "attributes": [ + { + "name": "OverallHeight", + "type": "IfcPositiveLengthMeasure", + "is_enum": false, + "enum_values": [] + }, + { + "name": "OverallWidth", + "type": "IfcPositiveLengthMeasure", + "is_enum": false, + "enum_values": [] + }, + { + "name": "PredefinedType", + "type": "IfcDoorTypeEnum", + "is_enum": true, + "enum_values": [ + "door", + "gate", + "trapdoor", + "userdefined", + "notdefined" + ] + }, + { + "name": "OperationType", + "type": "IfcDoorTypeOperationEnum", + "is_enum": true, + "enum_values": [ + "single_swing_left", + "single_swing_right", + "double_door_single_swing", + "double_door_single_swing_opposite_left", + "double_door_single_swing_opposite_right", + "double_swing_left", + "double_swing_right", + "double_door_double_swing", + "sliding_to_left", + "sliding_to_right", + "double_door_sliding", + "folding_to_left", + "folding_to_right", + "double_door_folding", + "revolving", + "rollingup", + "swing_fixed_left", + "swing_fixed_right", + "userdefined", + "notdefined" + ] + }, + { + "name": "UserDefinedOperationType", + "type": "IfcLabel", + "is_enum": false, + "enum_values": [] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcDuctFitting", + "is_abstract": false, + "parent": "IfcFlowFitting", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcDuctFittingTypeEnum", + "is_enum": true, + "enum_values": [ + "bend", + "connector", + "entry", + "exit", + "junction", + "obstruction", + "transition", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcDuctSegment", + "is_abstract": false, + "parent": "IfcFlowSegment", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcDuctSegmentTypeEnum", + "is_enum": true, + "enum_values": [ + "rigidsegment", + "flexiblesegment", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcDuctSilencer", + "is_abstract": false, + "parent": "IfcFlowTreatmentDevice", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcDuctSilencerTypeEnum", + "is_enum": true, + "enum_values": [ + "flatoval", + "rectangular", + "round", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcElectricAppliance", + "is_abstract": false, + "parent": "IfcFlowTerminal", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcElectricApplianceTypeEnum", + "is_enum": true, + "enum_values": [ + "dishwasher", + "electriccooker", + "freestandingelectricheater", + "freestandingfan", + "freestandingwaterheater", + "freestandingwatercooler", + "freezer", + "fridge_freezer", + "handdryer", + "kitchenmachine", + "microwave", + "photocopier", + "refrigerator", + "tumbledryer", + "vendingmachine", + "washingmachine", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcElectricDistributionBoard", + "is_abstract": false, + "parent": "IfcFlowController", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcElectricDistributionBoardTypeEnum", + "is_enum": true, + "enum_values": [ + "consumerunit", + "distributionboard", + "motorcontrolcentre", + "switchboard", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcElectricFlowStorageDevice", + "is_abstract": false, + "parent": "IfcFlowStorageDevice", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcElectricFlowStorageDeviceTypeEnum", + "is_enum": true, + "enum_values": [ + "battery", + "capacitorbank", + "harmonicfilter", + "inductorbank", + "ups", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcElectricGenerator", + "is_abstract": false, + "parent": "IfcEnergyConversionDevice", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcElectricGeneratorTypeEnum", + "is_enum": true, + "enum_values": [ + "chp", + "enginegenerator", + "standalone", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcElectricMotor", + "is_abstract": false, + "parent": "IfcEnergyConversionDevice", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcElectricMotorTypeEnum", + "is_enum": true, + "enum_values": [ + "dc", + "induction", + "polyphase", + "reluctancesynchronous", + "synchronous", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcElectricTimeControl", + "is_abstract": false, + "parent": "IfcFlowController", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcElectricTimeControlTypeEnum", + "is_enum": true, + "enum_values": [ + "timeclock", + "timedelay", + "relay", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcElementAssembly", + "is_abstract": false, + "parent": "IfcElement", + "attributes": [ + { + "name": "AssemblyPlace", + "type": "IfcAssemblyPlaceEnum", + "is_enum": true, + "enum_values": [ + "site", + "factory", + "notdefined" + ] + }, + { + "name": "PredefinedType", + "type": "IfcElementAssemblyTypeEnum", + "is_enum": true, + "enum_values": [ + "accessory_assembly", + "arch", + "beam_grid", + "braced_frame", + "girder", + "reinforcement_unit", + "rigid_frame", + "slab_field", + "truss", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcEnergyConversionDevice", + "is_abstract": false, + "parent": "IfcDistributionFlowElement", + "attributes": [ + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcEngine", + "is_abstract": false, + "parent": "IfcEnergyConversionDevice", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcEngineTypeEnum", + "is_enum": true, + "enum_values": [ + "externalcombustion", + "internalcombustion", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcEvaporativeCooler", + "is_abstract": false, + "parent": "IfcEnergyConversionDevice", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcEvaporativeCoolerTypeEnum", + "is_enum": true, + "enum_values": [ + "directevaporativerandommediaaircooler", + "directevaporativerigidmediaaircooler", + "directevaporativeslingerspackagedaircooler", + "directevaporativepackagedrotaryaircooler", + "directevaporativeairwasher", + "indirectevaporativepackageaircooler", + "indirectevaporativewetcoil", + "indirectevaporativecoolingtowerorcoilcooler", + "indirectdirectcombination", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcEvaporator", + "is_abstract": false, + "parent": "IfcEnergyConversionDevice", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcEvaporatorTypeEnum", + "is_enum": true, + "enum_values": [ + "directexpansion", + "directexpansionshellandtube", + "directexpansiontubeintube", + "directexpansionbrazedplate", + "floodedshellandtube", + "shellandcoil", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcExternalSpatialElement", + "is_abstract": false, + "parent": "IfcExternalSpatialStructureElement", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcExternalSpatialElementTypeEnum", + "is_enum": true, + "enum_values": [ + "external", + "external_earth", + "external_water", + "external_fire", + "userdefined", + "notdefined" + ] + }, + { + "name": "LongName", + "type": "IfcLabel", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcFan", + "is_abstract": false, + "parent": "IfcFlowMovingDevice", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcFanTypeEnum", + "is_enum": true, + "enum_values": [ + "centrifugalforwardcurved", + "centrifugalradial", + "centrifugalbackwardinclinedcurved", + "centrifugalairfoil", + "tubeaxial", + "vaneaxial", + "propelloraxial", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcFastener", + "is_abstract": false, + "parent": "IfcElementComponent", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcFastenerTypeEnum", + "is_enum": true, + "enum_values": [ + "glue", + "mortar", + "weld", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcFilter", + "is_abstract": false, + "parent": "IfcFlowTreatmentDevice", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcFilterTypeEnum", + "is_enum": true, + "enum_values": [ + "airparticlefilter", + "compressedairfilter", + "odorfilter", + "oilfilter", + "strainer", + "waterfilter", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcFireSuppressionTerminal", + "is_abstract": false, + "parent": "IfcFlowTerminal", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcFireSuppressionTerminalTypeEnum", + "is_enum": true, + "enum_values": [ + "breechinginlet", + "firehydrant", + "hosereel", + "sprinkler", + "sprinklerdeflector", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcFlowController", + "is_abstract": false, + "parent": "IfcDistributionFlowElement", + "attributes": [ + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcFlowFitting", + "is_abstract": false, + "parent": "IfcDistributionFlowElement", + "attributes": [ + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcFlowInstrument", + "is_abstract": false, + "parent": "IfcDistributionControlElement", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcFlowInstrumentTypeEnum", + "is_enum": true, + "enum_values": [ + "pressuregauge", + "thermometer", + "ammeter", + "frequencymeter", + "powerfactormeter", + "phaseanglemeter", + "voltmeter_peak", + "voltmeter_rms", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcFlowMeter", + "is_abstract": false, + "parent": "IfcFlowController", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcFlowMeterTypeEnum", + "is_enum": true, + "enum_values": [ + "energymeter", + "gasmeter", + "oilmeter", + "watermeter", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcFlowMovingDevice", + "is_abstract": false, + "parent": "IfcDistributionFlowElement", + "attributes": [ + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcFlowSegment", + "is_abstract": false, + "parent": "IfcDistributionFlowElement", + "attributes": [ + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcFlowStorageDevice", + "is_abstract": false, + "parent": "IfcDistributionFlowElement", + "attributes": [ + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcFlowTerminal", + "is_abstract": false, + "parent": "IfcDistributionFlowElement", + "attributes": [ + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcFlowTreatmentDevice", + "is_abstract": false, + "parent": "IfcDistributionFlowElement", + "attributes": [ + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcFooting", + "is_abstract": false, + "parent": "IfcBuildingElement", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcFootingTypeEnum", + "is_enum": true, + "enum_values": [ + "caisson_foundation", + "footing_beam", + "pad_footing", + "pile_cap", + "strip_footing", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcFurnishingElement", + "is_abstract": false, + "parent": "IfcElement", + "attributes": [ + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcFurniture", + "is_abstract": false, + "parent": "IfcFurnishingElement", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcFurnitureTypeEnum", + "is_enum": true, + "enum_values": [ + "chair", + "table", + "desk", + "bed", + "filecabinet", + "shelf", + "sofa", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcGeographicElement", + "is_abstract": false, + "parent": "IfcElement", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcGeographicElementTypeEnum", + "is_enum": true, + "enum_values": [ + "terrain", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcGrid", + "is_abstract": false, + "parent": "IfcProduct", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcGridTypeEnum", + "is_enum": true, + "enum_values": [ + "rectangular", + "radial", + "triangular", + "irregular", + "userdefined", + "notdefined" + ] + } + ] + }, + { + "name": "IfcHeatExchanger", + "is_abstract": false, + "parent": "IfcEnergyConversionDevice", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcHeatExchangerTypeEnum", + "is_enum": true, + "enum_values": [ + "plate", + "shellandtube", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcHumidifier", + "is_abstract": false, + "parent": "IfcEnergyConversionDevice", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcHumidifierTypeEnum", + "is_enum": true, + "enum_values": [ + "steaminjection", + "adiabaticairwasher", + "adiabaticpan", + "adiabaticwettedelement", + "adiabaticatomizing", + "adiabaticultrasonic", + "adiabaticrigidmedia", + "adiabaticcompressedairnozzle", + "assistedelectric", + "assistednaturalgas", + "assistedpropane", + "assistedbutane", + "assistedsteam", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcInterceptor", + "is_abstract": false, + "parent": "IfcFlowTreatmentDevice", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcInterceptorTypeEnum", + "is_enum": true, + "enum_values": [ + "cyclonic", + "grease", + "oil", + "petrol", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcJunctionBox", + "is_abstract": false, + "parent": "IfcFlowFitting", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcJunctionBoxTypeEnum", + "is_enum": true, + "enum_values": [ + "data", + "power", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcLamp", + "is_abstract": false, + "parent": "IfcFlowTerminal", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcLampTypeEnum", + "is_enum": true, + "enum_values": [ + "compactfluorescent", + "fluorescent", + "halogen", + "highpressuremercury", + "highpressuresodium", + "led", + "metalhalide", + "oled", + "tungstenfilament", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcLightFixture", + "is_abstract": false, + "parent": "IfcFlowTerminal", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcLightFixtureTypeEnum", + "is_enum": true, + "enum_values": [ + "pointsource", + "directionsource", + "securitylighting", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcMechanicalFastener", + "is_abstract": false, + "parent": "IfcElementComponent", + "attributes": [ + { + "name": "NominalDiameter", + "type": "IfcPositiveLengthMeasure", + "is_enum": false, + "enum_values": [] + }, + { + "name": "NominalLength", + "type": "IfcPositiveLengthMeasure", + "is_enum": false, + "enum_values": [] + }, + { + "name": "PredefinedType", + "type": "IfcMechanicalFastenerTypeEnum", + "is_enum": true, + "enum_values": [ + "anchorbolt", + "bolt", + "dowel", + "nail", + "nailplate", + "rivet", + "screw", + "shearconnector", + "staple", + "studshearconnector", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcMedicalDevice", + "is_abstract": false, + "parent": "IfcFlowTerminal", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcMedicalDeviceTypeEnum", + "is_enum": true, + "enum_values": [ + "airstation", + "feedairunit", + "oxygengenerator", + "oxygenplant", + "vacuumstation", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcMember", + "is_abstract": false, + "parent": "IfcBuildingElement", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcMemberTypeEnum", + "is_enum": true, + "enum_values": [ + "brace", + "chord", + "collar", + "member", + "mullion", + "plate", + "post", + "purlin", + "rafter", + "stringer", + "strut", + "stud", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcMemberStandardCase", + "is_abstract": false, + "parent": "IfcMember", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcMemberTypeEnum", + "is_enum": true, + "enum_values": [ + "brace", + "chord", + "collar", + "member", + "mullion", + "plate", + "post", + "purlin", + "rafter", + "stringer", + "strut", + "stud", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcMotorConnection", + "is_abstract": false, + "parent": "IfcEnergyConversionDevice", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcMotorConnectionTypeEnum", + "is_enum": true, + "enum_values": [ + "beltdrive", + "coupling", + "directdrive", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcOpeningElement", + "is_abstract": false, + "parent": "IfcFeatureElementSubtraction", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcOpeningElementTypeEnum", + "is_enum": true, + "enum_values": [ + "opening", + "recess", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcOpeningStandardCase", + "is_abstract": false, + "parent": "IfcOpeningElement", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcOpeningElementTypeEnum", + "is_enum": true, + "enum_values": [ + "opening", + "recess", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcOutlet", + "is_abstract": false, + "parent": "IfcFlowTerminal", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcOutletTypeEnum", + "is_enum": true, + "enum_values": [ + "audiovisualoutlet", + "communicationsoutlet", + "poweroutlet", + "dataoutlet", + "telephoneoutlet", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcPile", + "is_abstract": false, + "parent": "IfcBuildingElement", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcPileTypeEnum", + "is_enum": true, + "enum_values": [ + "bored", + "driven", + "jetgrouting", + "cohesion", + "friction", + "support", + "userdefined", + "notdefined" + ] + }, + { + "name": "ConstructionType", + "type": "IfcPileConstructionEnum", + "is_enum": true, + "enum_values": [ + "cast_in_place", + "composite", + "precast_concrete", + "prefab_steel", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcPipeFitting", + "is_abstract": false, + "parent": "IfcFlowFitting", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcPipeFittingTypeEnum", + "is_enum": true, + "enum_values": [ + "bend", + "connector", + "entry", + "exit", + "junction", + "obstruction", + "transition", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcPipeSegment", + "is_abstract": false, + "parent": "IfcFlowSegment", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcPipeSegmentTypeEnum", + "is_enum": true, + "enum_values": [ + "culvert", + "flexiblesegment", + "rigidsegment", + "gutter", + "spool", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcPlate", + "is_abstract": false, + "parent": "IfcBuildingElement", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcPlateTypeEnum", + "is_enum": true, + "enum_values": [ + "curtain_panel", + "sheet", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcPlateStandardCase", + "is_abstract": false, + "parent": "IfcPlate", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcPlateTypeEnum", + "is_enum": true, + "enum_values": [ + "curtain_panel", + "sheet", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcProjectionElement", + "is_abstract": false, + "parent": "IfcFeatureElementAddition", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcProjectionElementTypeEnum", + "is_enum": true, + "enum_values": [ + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcProtectiveDevice", + "is_abstract": false, + "parent": "IfcFlowController", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcProtectiveDeviceTypeEnum", + "is_enum": true, + "enum_values": [ + "circuitbreaker", + "earthleakagecircuitbreaker", + "earthingswitch", + "fusedisconnector", + "residualcurrentcircuitbreaker", + "residualcurrentswitch", + "varistor", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcProtectiveDeviceTrippingUnit", + "is_abstract": false, + "parent": "IfcDistributionControlElement", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcProtectiveDeviceTrippingUnitTypeEnum", + "is_enum": true, + "enum_values": [ + "electronic", + "electromagnetic", + "residualcurrent", + "thermal", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcProxy", + "is_abstract": false, + "parent": "IfcProduct", + "attributes": [ + { + "name": "ProxyType", + "type": "IfcObjectTypeEnum", + "is_enum": true, + "enum_values": [ + "product", + "process", + "control", + "resource", + "actor", + "group", + "project", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcLabel", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcPump", + "is_abstract": false, + "parent": "IfcFlowMovingDevice", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcPumpTypeEnum", + "is_enum": true, + "enum_values": [ + "circulator", + "endsuction", + "splitcase", + "submersiblepump", + "sumppump", + "verticalinline", + "verticalturbine", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcRailing", + "is_abstract": false, + "parent": "IfcBuildingElement", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcRailingTypeEnum", + "is_enum": true, + "enum_values": [ + "handrail", + "guardrail", + "balustrade", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcRamp", + "is_abstract": false, + "parent": "IfcBuildingElement", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcRampTypeEnum", + "is_enum": true, + "enum_values": [ + "straight_run_ramp", + "two_straight_run_ramp", + "quarter_turn_ramp", + "two_quarter_turn_ramp", + "half_turn_ramp", + "spiral_ramp", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcRampFlight", + "is_abstract": false, + "parent": "IfcBuildingElement", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcRampFlightTypeEnum", + "is_enum": true, + "enum_values": [ + "straight", + "spiral", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcReinforcingBar", + "is_abstract": false, + "parent": "IfcReinforcingElement", + "attributes": [ + { + "name": "NominalDiameter", + "type": "IfcPositiveLengthMeasure", + "is_enum": false, + "enum_values": [] + }, + { + "name": "CrossSectionArea", + "type": "IfcAreaMeasure", + "is_enum": false, + "enum_values": [] + }, + { + "name": "BarLength", + "type": "IfcPositiveLengthMeasure", + "is_enum": false, + "enum_values": [] + }, + { + "name": "PredefinedType", + "type": "IfcReinforcingBarTypeEnum", + "is_enum": true, + "enum_values": [ + "anchoring", + "edge", + "ligature", + "main", + "punching", + "ring", + "shear", + "stud", + "userdefined", + "notdefined" + ] + }, + { + "name": "BarSurface", + "type": "IfcReinforcingBarSurfaceEnum", + "is_enum": true, + "enum_values": [ + "plain", + "textured" + ] + }, + { + "name": "SteelGrade", + "type": "IfcLabel", + "is_enum": false, + "enum_values": [] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcReinforcingMesh", + "is_abstract": false, + "parent": "IfcReinforcingElement", + "attributes": [ + { + "name": "MeshLength", + "type": "IfcPositiveLengthMeasure", + "is_enum": false, + "enum_values": [] + }, + { + "name": "MeshWidth", + "type": "IfcPositiveLengthMeasure", + "is_enum": false, + "enum_values": [] + }, + { + "name": "LongitudinalBarNominalDiameter", + "type": "IfcPositiveLengthMeasure", + "is_enum": false, + "enum_values": [] + }, + { + "name": "TransverseBarNominalDiameter", + "type": "IfcPositiveLengthMeasure", + "is_enum": false, + "enum_values": [] + }, + { + "name": "LongitudinalBarCrossSectionArea", + "type": "IfcAreaMeasure", + "is_enum": false, + "enum_values": [] + }, + { + "name": "TransverseBarCrossSectionArea", + "type": "IfcAreaMeasure", + "is_enum": false, + "enum_values": [] + }, + { + "name": "LongitudinalBarSpacing", + "type": "IfcPositiveLengthMeasure", + "is_enum": false, + "enum_values": [] + }, + { + "name": "TransverseBarSpacing", + "type": "IfcPositiveLengthMeasure", + "is_enum": false, + "enum_values": [] + }, + { + "name": "PredefinedType", + "type": "IfcReinforcingMeshTypeEnum", + "is_enum": true, + "enum_values": [ + "userdefined", + "notdefined" + ] + }, + { + "name": "SteelGrade", + "type": "IfcLabel", + "is_enum": false, + "enum_values": [] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcRoof", + "is_abstract": false, + "parent": "IfcBuildingElement", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcRoofTypeEnum", + "is_enum": true, + "enum_values": [ + "flat_roof", + "shed_roof", + "gable_roof", + "hip_roof", + "hipped_gable_roof", + "gambrel_roof", + "mansard_roof", + "barrel_roof", + "rainbow_roof", + "butterfly_roof", + "pavilion_roof", + "dome_roof", + "freeform", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcSanitaryTerminal", + "is_abstract": false, + "parent": "IfcFlowTerminal", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcSanitaryTerminalTypeEnum", + "is_enum": true, + "enum_values": [ + "bath", + "bidet", + "cistern", + "shower", + "sink", + "sanitaryfountain", + "toiletpan", + "urinal", + "washhandbasin", + "wcseat", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcSensor", + "is_abstract": false, + "parent": "IfcDistributionControlElement", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcSensorTypeEnum", + "is_enum": true, + "enum_values": [ + "cosensor", + "co2sensor", + "conductancesensor", + "contactsensor", + "firesensor", + "flowsensor", + "frostsensor", + "gassensor", + "heatsensor", + "humiditysensor", + "identifiersensor", + "ionconcentrationsensor", + "levelsensor", + "lightsensor", + "moisturesensor", + "movementsensor", + "phsensor", + "pressuresensor", + "radiationsensor", + "radioactivitysensor", + "smokesensor", + "soundsensor", + "temperaturesensor", + "windsensor", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcShadingDevice", + "is_abstract": false, + "parent": "IfcBuildingElement", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcShadingDeviceTypeEnum", + "is_enum": true, + "enum_values": [ + "jalousie", + "shutter", + "awning", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcSite", + "is_abstract": false, + "parent": "IfcSpatialStructureElement", + "attributes": [ + { + "name": "RefLatitude", + "type": "List-IfcCompoundPlaneAngleMeasure", + "is_enum": false, + "enum_values": [] + }, + { + "name": "RefLongitude", + "type": "List-IfcCompoundPlaneAngleMeasure", + "is_enum": false, + "enum_values": [] + }, + { + "name": "RefElevation", + "type": "IfcLengthMeasure", + "is_enum": false, + "enum_values": [] + }, + { + "name": "LandTitleNumber", + "type": "IfcLabel", + "is_enum": false, + "enum_values": [] + }, + { + "name": "CompositionType", + "type": "IfcElementCompositionEnum", + "is_enum": true, + "enum_values": [] + }, + { + "name": "LongName", + "type": "IfcLabel", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcSlab", + "is_abstract": false, + "parent": "IfcBuildingElement", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcSlabTypeEnum", + "is_enum": true, + "enum_values": [ + "floor", + "roof", + "landing", + "baseslab", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcSlabElementedCase", + "is_abstract": false, + "parent": "IfcSlab", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcSlabTypeEnum", + "is_enum": true, + "enum_values": [ + "floor", + "roof", + "landing", + "baseslab", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcSlabStandardCase", + "is_abstract": false, + "parent": "IfcSlab", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcSlabTypeEnum", + "is_enum": true, + "enum_values": [ + "floor", + "roof", + "landing", + "baseslab", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcSolarDevice", + "is_abstract": false, + "parent": "IfcEnergyConversionDevice", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcSolarDeviceTypeEnum", + "is_enum": true, + "enum_values": [ + "solarcollector", + "solarpanel", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcSpace", + "is_abstract": false, + "parent": "IfcSpatialStructureElement", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcSpaceTypeEnum", + "is_enum": true, + "enum_values": [ + "space", + "parking", + "gfa", + "internal", + "external", + "userdefined", + "notdefined" + ] + }, + { + "name": "ElevationWithFlooring", + "type": "IfcLengthMeasure", + "is_enum": false, + "enum_values": [] + }, + { + "name": "CompositionType", + "type": "IfcElementCompositionEnum", + "is_enum": true, + "enum_values": [] + }, + { + "name": "LongName", + "type": "IfcLabel", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcSpaceHeater", + "is_abstract": false, + "parent": "IfcFlowTerminal", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcSpaceHeaterTypeEnum", + "is_enum": true, + "enum_values": [ + "convector", + "radiator", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcSpatialZone", + "is_abstract": false, + "parent": "IfcSpatialElement", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcSpatialZoneTypeEnum", + "is_enum": true, + "enum_values": [ + "construction", + "firesafety", + "lighting", + "occupancy", + "security", + "thermal", + "transport", + "ventilation", + "userdefined", + "notdefined" + ] + }, + { + "name": "LongName", + "type": "IfcLabel", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcStackTerminal", + "is_abstract": false, + "parent": "IfcFlowTerminal", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcStackTerminalTypeEnum", + "is_enum": true, + "enum_values": [ + "birdcage", + "cowl", + "rainwaterhopper", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcStair", + "is_abstract": false, + "parent": "IfcBuildingElement", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcStairTypeEnum", + "is_enum": true, + "enum_values": [ + "straight_run_stair", + "two_straight_run_stair", + "quarter_winding_stair", + "quarter_turn_stair", + "half_winding_stair", + "half_turn_stair", + "two_quarter_winding_stair", + "two_quarter_turn_stair", + "three_quarter_winding_stair", + "three_quarter_turn_stair", + "spiral_stair", + "double_return_stair", + "curved_run_stair", + "two_curved_run_stair", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcStairFlight", + "is_abstract": false, + "parent": "IfcBuildingElement", + "attributes": [ + { + "name": "NumberOfRisers", + "type": "IfcInteger", + "is_enum": false, + "enum_values": [] + }, + { + "name": "NumberOfTreads", + "type": "IfcInteger", + "is_enum": false, + "enum_values": [] + }, + { + "name": "RiserHeight", + "type": "IfcPositiveLengthMeasure", + "is_enum": false, + "enum_values": [] + }, + { + "name": "TreadLength", + "type": "IfcPositiveLengthMeasure", + "is_enum": false, + "enum_values": [] + }, + { + "name": "PredefinedType", + "type": "IfcStairFlightTypeEnum", + "is_enum": true, + "enum_values": [ + "straight", + "winder", + "spiral", + "curved", + "freeform", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcStructuralCurveAction", + "is_abstract": false, + "parent": "IfcStructuralAction", + "attributes": [ + { + "name": "ProjectedOrTrue", + "type": "IfcProjectedOrTrueLengthEnum", + "is_enum": true, + "enum_values": [ + "projected_length", + "true_length" + ] + }, + { + "name": "PredefinedType", + "type": "IfcStructuralCurveActivityTypeEnum", + "is_enum": true, + "enum_values": [ + "const", + "linear", + "polygonal", + "equidistant", + "sinus", + "parabola", + "discrete", + "userdefined", + "notdefined" + ] + }, + { + "name": "DestabilizingLoad", + "type": "IfcBoolean", + "is_enum": false, + "enum_values": [] + }, + { + "name": "GlobalOrLocal", + "type": "IfcGlobalOrLocalEnum", + "is_enum": true, + "enum_values": [] + } + ] + }, + { + "name": "IfcStructuralCurveConnection", + "is_abstract": false, + "parent": "IfcStructuralConnection", + "attributes": [] + }, + { + "name": "IfcStructuralCurveMember", + "is_abstract": false, + "parent": "IfcStructuralMember", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcStructuralCurveMemberTypeEnum", + "is_enum": true, + "enum_values": [ + "rigid_joined_member", + "pin_joined_member", + "cable", + "tension_member", + "compression_member", + "userdefined", + "notdefined" + ] + } + ] + }, + { + "name": "IfcStructuralCurveMemberVarying", + "is_abstract": false, + "parent": "IfcStructuralCurveMember", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcStructuralCurveMemberTypeEnum", + "is_enum": true, + "enum_values": [ + "rigid_joined_member", + "pin_joined_member", + "cable", + "tension_member", + "compression_member", + "userdefined", + "notdefined" + ] + } + ] + }, + { + "name": "IfcStructuralCurveReaction", + "is_abstract": false, + "parent": "IfcStructuralReaction", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcStructuralCurveActivityTypeEnum", + "is_enum": true, + "enum_values": [ + "const", + "linear", + "polygonal", + "equidistant", + "sinus", + "parabola", + "discrete", + "userdefined", + "notdefined" + ] + }, + { + "name": "GlobalOrLocal", + "type": "IfcGlobalOrLocalEnum", + "is_enum": true, + "enum_values": [] + } + ] + }, + { + "name": "IfcStructuralLinearAction", + "is_abstract": false, + "parent": "IfcStructuralCurveAction", + "attributes": [ + { + "name": "ProjectedOrTrue", + "type": "IfcProjectedOrTrueLengthEnum", + "is_enum": true, + "enum_values": [ + "projected_length", + "true_length" + ] + }, + { + "name": "PredefinedType", + "type": "IfcStructuralCurveActivityTypeEnum", + "is_enum": true, + "enum_values": [ + "const", + "linear", + "polygonal", + "equidistant", + "sinus", + "parabola", + "discrete", + "userdefined", + "notdefined" + ] + }, + { + "name": "DestabilizingLoad", + "type": "IfcBoolean", + "is_enum": false, + "enum_values": [] + }, + { + "name": "GlobalOrLocal", + "type": "IfcGlobalOrLocalEnum", + "is_enum": true, + "enum_values": [] + } + ] + }, + { + "name": "IfcStructuralPlanarAction", + "is_abstract": false, + "parent": "IfcStructuralSurfaceAction", + "attributes": [ + { + "name": "ProjectedOrTrue", + "type": "IfcProjectedOrTrueLengthEnum", + "is_enum": true, + "enum_values": [ + "projected_length", + "true_length" + ] + }, + { + "name": "PredefinedType", + "type": "IfcStructuralSurfaceActivityTypeEnum", + "is_enum": true, + "enum_values": [ + "const", + "bilinear", + "discrete", + "isocontour", + "userdefined", + "notdefined" + ] + }, + { + "name": "DestabilizingLoad", + "type": "IfcBoolean", + "is_enum": false, + "enum_values": [] + }, + { + "name": "GlobalOrLocal", + "type": "IfcGlobalOrLocalEnum", + "is_enum": true, + "enum_values": [] + } + ] + }, + { + "name": "IfcStructuralPointAction", + "is_abstract": false, + "parent": "IfcStructuralAction", + "attributes": [ + { + "name": "DestabilizingLoad", + "type": "IfcBoolean", + "is_enum": false, + "enum_values": [] + }, + { + "name": "GlobalOrLocal", + "type": "IfcGlobalOrLocalEnum", + "is_enum": true, + "enum_values": [] + } + ] + }, + { + "name": "IfcStructuralPointConnection", + "is_abstract": false, + "parent": "IfcStructuralConnection", + "attributes": [] + }, + { + "name": "IfcStructuralPointReaction", + "is_abstract": false, + "parent": "IfcStructuralReaction", + "attributes": [ + { + "name": "GlobalOrLocal", + "type": "IfcGlobalOrLocalEnum", + "is_enum": true, + "enum_values": [] + } + ] + }, + { + "name": "IfcStructuralSurfaceAction", + "is_abstract": false, + "parent": "IfcStructuralAction", + "attributes": [ + { + "name": "ProjectedOrTrue", + "type": "IfcProjectedOrTrueLengthEnum", + "is_enum": true, + "enum_values": [ + "projected_length", + "true_length" + ] + }, + { + "name": "PredefinedType", + "type": "IfcStructuralSurfaceActivityTypeEnum", + "is_enum": true, + "enum_values": [ + "const", + "bilinear", + "discrete", + "isocontour", + "userdefined", + "notdefined" + ] + }, + { + "name": "DestabilizingLoad", + "type": "IfcBoolean", + "is_enum": false, + "enum_values": [] + }, + { + "name": "GlobalOrLocal", + "type": "IfcGlobalOrLocalEnum", + "is_enum": true, + "enum_values": [] + } + ] + }, + { + "name": "IfcStructuralSurfaceConnection", + "is_abstract": false, + "parent": "IfcStructuralConnection", + "attributes": [] + }, + { + "name": "IfcStructuralSurfaceMember", + "is_abstract": false, + "parent": "IfcStructuralMember", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcStructuralSurfaceMemberTypeEnum", + "is_enum": true, + "enum_values": [ + "bending_element", + "membrane_element", + "shell", + "userdefined", + "notdefined" + ] + }, + { + "name": "Thickness", + "type": "IfcPositiveLengthMeasure", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcStructuralSurfaceMemberVarying", + "is_abstract": false, + "parent": "IfcStructuralSurfaceMember", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcStructuralSurfaceMemberTypeEnum", + "is_enum": true, + "enum_values": [ + "bending_element", + "membrane_element", + "shell", + "userdefined", + "notdefined" + ] + }, + { + "name": "Thickness", + "type": "IfcPositiveLengthMeasure", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcStructuralSurfaceReaction", + "is_abstract": false, + "parent": "IfcStructuralReaction", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcStructuralSurfaceActivityTypeEnum", + "is_enum": true, + "enum_values": [ + "const", + "bilinear", + "discrete", + "isocontour", + "userdefined", + "notdefined" + ] + }, + { + "name": "GlobalOrLocal", + "type": "IfcGlobalOrLocalEnum", + "is_enum": true, + "enum_values": [] + } + ] + }, + { + "name": "IfcSurfaceFeature", + "is_abstract": false, + "parent": "IfcFeatureElement", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcSurfaceFeatureTypeEnum", + "is_enum": true, + "enum_values": [ + "mark", + "tag", + "treatment", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcSwitchingDevice", + "is_abstract": false, + "parent": "IfcFlowController", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcSwitchingDeviceTypeEnum", + "is_enum": true, + "enum_values": [ + "contactor", + "dimmerswitch", + "emergencystop", + "keypad", + "momentaryswitch", + "selectorswitch", + "starter", + "switchdisconnector", + "toggleswitch", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcSystemFurnitureElement", + "is_abstract": false, + "parent": "IfcFurnishingElement", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcSystemFurnitureElementTypeEnum", + "is_enum": true, + "enum_values": [ + "panel", + "worksurface", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcTank", + "is_abstract": false, + "parent": "IfcFlowStorageDevice", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcTankTypeEnum", + "is_enum": true, + "enum_values": [ + "basin", + "breakpressure", + "expansion", + "feedandexpansion", + "pressurevessel", + "storage", + "vessel", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcTendon", + "is_abstract": false, + "parent": "IfcReinforcingElement", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcTendonTypeEnum", + "is_enum": true, + "enum_values": [ + "bar", + "coated", + "strand", + "wire", + "userdefined", + "notdefined" + ] + }, + { + "name": "NominalDiameter", + "type": "IfcPositiveLengthMeasure", + "is_enum": false, + "enum_values": [] + }, + { + "name": "CrossSectionArea", + "type": "IfcAreaMeasure", + "is_enum": false, + "enum_values": [] + }, + { + "name": "TensionForce", + "type": "IfcForceMeasure", + "is_enum": false, + "enum_values": [] + }, + { + "name": "PreStress", + "type": "IfcPressureMeasure", + "is_enum": false, + "enum_values": [] + }, + { + "name": "FrictionCoefficient", + "type": "IfcNormalisedRatioMeasure", + "is_enum": false, + "enum_values": [] + }, + { + "name": "AnchorageSlip", + "type": "IfcPositiveLengthMeasure", + "is_enum": false, + "enum_values": [] + }, + { + "name": "MinCurvatureRadius", + "type": "IfcPositiveLengthMeasure", + "is_enum": false, + "enum_values": [] + }, + { + "name": "SteelGrade", + "type": "IfcLabel", + "is_enum": false, + "enum_values": [] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcTendonAnchor", + "is_abstract": false, + "parent": "IfcReinforcingElement", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcTendonAnchorTypeEnum", + "is_enum": true, + "enum_values": [ + "coupler", + "fixed_end", + "tensioning_end", + "userdefined", + "notdefined" + ] + }, + { + "name": "SteelGrade", + "type": "IfcLabel", + "is_enum": false, + "enum_values": [] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcTransformer", + "is_abstract": false, + "parent": "IfcEnergyConversionDevice", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcTransformerTypeEnum", + "is_enum": true, + "enum_values": [ + "current", + "frequency", + "inverter", + "rectifier", + "voltage", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcTransportElement", + "is_abstract": false, + "parent": "IfcElement", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcTransportElementTypeEnum", + "is_enum": true, + "enum_values": [ + "elevator", + "escalator", + "movingwalkway", + "craneway", + "liftinggear", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcTubeBundle", + "is_abstract": false, + "parent": "IfcEnergyConversionDevice", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcTubeBundleTypeEnum", + "is_enum": true, + "enum_values": [ + "finned", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcUnitaryControlElement", + "is_abstract": false, + "parent": "IfcDistributionControlElement", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcUnitaryControlElementTypeEnum", + "is_enum": true, + "enum_values": [ + "alarmpanel", + "controlpanel", + "gasdetectionpanel", + "indicatorpanel", + "mimicpanel", + "humidistat", + "thermostat", + "weatherstation", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcUnitaryEquipment", + "is_abstract": false, + "parent": "IfcEnergyConversionDevice", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcUnitaryEquipmentTypeEnum", + "is_enum": true, + "enum_values": [ + "airhandler", + "airconditioningunit", + "dehumidifier", + "splitsystem", + "rooftopunit", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcValve", + "is_abstract": false, + "parent": "IfcFlowController", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcValveTypeEnum", + "is_enum": true, + "enum_values": [ + "airrelease", + "antivacuum", + "changeover", + "check", + "commissioning", + "diverting", + "drawoffcock", + "doublecheck", + "doubleregulating", + "faucet", + "flushing", + "gascock", + "gastap", + "isolating", + "mixing", + "pressurereducing", + "pressurerelief", + "regulating", + "safetycutoff", + "steamtrap", + "stopcock", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcVibrationIsolator", + "is_abstract": false, + "parent": "IfcElementComponent", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcVibrationIsolatorTypeEnum", + "is_enum": true, + "enum_values": [ + "compression", + "spring", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcVirtualElement", + "is_abstract": false, + "parent": "IfcElement", + "attributes": [ + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcVoidingFeature", + "is_abstract": false, + "parent": "IfcFeatureElementSubtraction", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcVoidingFeatureTypeEnum", + "is_enum": true, + "enum_values": [ + "cutout", + "notch", + "hole", + "miter", + "chamfer", + "edge", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcWall", + "is_abstract": false, + "parent": "IfcBuildingElement", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcWallTypeEnum", + "is_enum": true, + "enum_values": [ + "movable", + "parapet", + "partitioning", + "plumbingwall", + "shear", + "solidwall", + "standard", + "polygonal", + "elementedwall", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcWallElementedCase", + "is_abstract": false, + "parent": "IfcWall", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcWallTypeEnum", + "is_enum": true, + "enum_values": [ + "movable", + "parapet", + "partitioning", + "plumbingwall", + "shear", + "solidwall", + "standard", + "polygonal", + "elementedwall", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcWallStandardCase", + "is_abstract": false, + "parent": "IfcWall", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcWallTypeEnum", + "is_enum": true, + "enum_values": [ + "movable", + "parapet", + "partitioning", + "plumbingwall", + "shear", + "solidwall", + "standard", + "polygonal", + "elementedwall", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcWasteTerminal", + "is_abstract": false, + "parent": "IfcFlowTerminal", + "attributes": [ + { + "name": "PredefinedType", + "type": "IfcWasteTerminalTypeEnum", + "is_enum": true, + "enum_values": [ + "floortrap", + "floorwaste", + "gullysump", + "gullytrap", + "roofdrain", + "wastedisposalunit", + "wastetrap", + "userdefined", + "notdefined" + ] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcWindow", + "is_abstract": false, + "parent": "IfcBuildingElement", + "attributes": [ + { + "name": "OverallHeight", + "type": "IfcPositiveLengthMeasure", + "is_enum": false, + "enum_values": [] + }, + { + "name": "OverallWidth", + "type": "IfcPositiveLengthMeasure", + "is_enum": false, + "enum_values": [] + }, + { + "name": "PredefinedType", + "type": "IfcWindowTypeEnum", + "is_enum": true, + "enum_values": [ + "window", + "skylight", + "lightdome", + "userdefined", + "notdefined" + ] + }, + { + "name": "PartitioningType", + "type": "IfcWindowTypePartitioningEnum", + "is_enum": true, + "enum_values": [ + "single_panel", + "double_panel_vertical", + "double_panel_horizontal", + "triple_panel_vertical", + "triple_panel_bottom", + "triple_panel_top", + "triple_panel_left", + "triple_panel_right", + "triple_panel_horizontal", + "userdefined", + "notdefined" + ] + }, + { + "name": "UserDefinedPartitioningType", + "type": "IfcLabel", + "is_enum": false, + "enum_values": [] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + }, + { + "name": "IfcWindowStandardCase", + "is_abstract": false, + "parent": "IfcWindow", + "attributes": [ + { + "name": "OverallHeight", + "type": "IfcPositiveLengthMeasure", + "is_enum": false, + "enum_values": [] + }, + { + "name": "OverallWidth", + "type": "IfcPositiveLengthMeasure", + "is_enum": false, + "enum_values": [] + }, + { + "name": "PredefinedType", + "type": "IfcWindowTypeEnum", + "is_enum": true, + "enum_values": [ + "window", + "skylight", + "lightdome", + "userdefined", + "notdefined" + ] + }, + { + "name": "PartitioningType", + "type": "IfcWindowTypePartitioningEnum", + "is_enum": true, + "enum_values": [ + "single_panel", + "double_panel_vertical", + "double_panel_horizontal", + "triple_panel_vertical", + "triple_panel_bottom", + "triple_panel_top", + "triple_panel_left", + "triple_panel_right", + "triple_panel_horizontal", + "userdefined", + "notdefined" + ] + }, + { + "name": "UserDefinedPartitioningType", + "type": "IfcLabel", + "is_enum": false, + "enum_values": [] + }, + { + "name": "Tag", + "type": "IfcIdentifier", + "is_enum": false, + "enum_values": [] + } + ] + } +] \ No newline at end of file From 5f9dcfc777d3e04d0f9db4d32b8e100435d1be37 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Wed, 23 Jan 2019 22:12:29 +1100 Subject: [PATCH 02/22] Load IFC from external JSON file for flexibility --- src/Mod/Arch/ArchComponent.py | 51 ++++------------------------------- 1 file changed, 5 insertions(+), 46 deletions(-) diff --git a/src/Mod/Arch/ArchComponent.py b/src/Mod/Arch/ArchComponent.py index beee92c681..066509a046 100644 --- a/src/Mod/Arch/ArchComponent.py +++ b/src/Mod/Arch/ArchComponent.py @@ -25,51 +25,6 @@ __title__="FreeCAD Arch Component" __author__ = "Yorik van Havre" __url__ = "http://www.freecadweb.org" -# IFC types - -IFCTYPES = ["IfcActuator", "IfcAirTerminal", "IfcAirTerminalBox", "IfcAirToAirHeatRecovery", -"IfcAlarm", "IfcAnnotation", "IfcAudioVisualAppliance", "IfcBeam", "IfcBeamStandardCase", -"IfcBoiler", "IfcBuilding", "IfcBuildingElement", "IfcBuildingElementPart", "IfcBuildingElementProxy", -"IfcBuildingStorey", "IfcBurner", "IfcCableCarrierFitting", "IfcCableCarrierSegment", -"IfcCableFitting", "IfcCableSegment", "IfcChiller", "IfcChimney", "IfcCivilElement", -"IfcCoil", "IfcColumn", "IfcColumnStandardCase", "IfcCommunicationsAppliance", "IfcCompressor", -"IfcCondenser", "IfcController", "IfcCooledBeam", "IfcCoolingTower", "IfcCovering", -"IfcCurtainWall", "IfcDamper", "IfcDiscreteAccessory", "IfcDistributionChamberElement", -"IfcDistributionControlElement", "IfcDistributionElement", "IfcDistributionFlowElement", -"IfcDistributionPort", "IfcDoor", "IfcDoorStandardCase", "IfcDuctFitting", "IfcDuctSegment", -"IfcDuctSilencer", "IfcElectricAppliance", "IfcElectricDistributionBoard", "IfcElectricFlowStorageDevice", -"IfcElectricGenerator", "IfcElectricMotor", "IfcElectricTimeControl", -"IfcElementAssembly", "IfcElementComponent", "IfcEnergyConversionDevice", "IfcEngine", -"IfcEvaporativeCooler", "IfcEvaporator", "IfcExternalSpatialElement", "IfcExternalSpatialStructureElement", -"IfcFan", "IfcFastener", "IfcFeatureElement", "IfcFeatureElementAddition", "IfcFeatureElementSubtraction", -"IfcFilter", "IfcFireSuppressionTerminal", "IfcFlowController", "IfcFlowFitting", "IfcFlowInstrument", -"IfcFlowMeter", "IfcFlowMovingDevice", "IfcFlowSegment", "IfcFlowStorageDevice", "IfcFlowTerminal", -"IfcFlowTreatmentDevice", "IfcFooting", "IfcFurnishingElement", "IfcFurniture", "IfcGeographicElement", -"IfcGrid", "IfcHeatExchanger", "IfcHumidifier", "IfcInterceptor", "IfcJunctionBox", "IfcLamp", -"IfcLightFixture", "IfcMechanicalFastener", "IfcMedicalDevice", "IfcMember", "IfcMemberStandardCase", -"IfcMotorConnection", "IfcOpeningElement", "IfcOpeningStandardCase", "IfcOutlet", "IfcPile", -"IfcPipeFitting", "IfcPipeSegment", "IfcPlate", "IfcPlateStandardCase", -"IfcProjectionElement", "IfcProtectiveDevice", "IfcProtectiveDeviceTrippingUnit", -"IfcProxy", "IfcPump", "IfcRailing", "IfcRamp", "IfcRampFlight", "IfcReinforcingBar", -"IfcReinforcingMesh", "IfcRoof", "IfcSanitaryTerminal", -"IfcSensor", "IfcShadingDevice", "IfcSite", "IfcSlab", "IfcSlabElementedCase", "IfcSlabStandardCase", -"IfcSolarDevice", "IfcSpace", "IfcSpaceHeater", -"IfcSpatialZone", "IfcStackTerminal", "IfcStair", "IfcStairFlight", -"IfcStructuralCurveAction", -"IfcStructuralCurveConnection", "IfcStructuralCurveMember", "IfcStructuralCurveMemberVarying", -"IfcStructuralCurveReaction", "IfcStructuralLinearAction", -"IfcStructuralPlanarAction", "IfcStructuralPointAction", -"IfcStructuralPointConnection", "IfcStructuralPointReaction", -"IfcStructuralSurfaceAction", "IfcStructuralSurfaceConnection", "IfcStructuralSurfaceMember", -"IfcStructuralSurfaceMemberVarying", "IfcStructuralSurfaceReaction", "IfcSurfaceFeature", -"IfcSwitchingDevice", "IfcSystemFurnitureElement", "IfcTank", "IfcTendon", "IfcTendonAnchor", -"IfcTransformer", "IfcTransportElement", "IfcTubeBundle", "IfcUnitaryControlElement", -"IfcUnitaryEquipment", "IfcValve", "IfcVibrationIsolator", "IfcVirtualElement", "IfcVoidingFeature", -"IfcWall", "IfcWallElementedCase", "IfcWallStandardCase", "IfcWasteTerminal", "IfcWindow", -"IfcWindowStandardCase"] - -# Possible roles for FreeCAD BIM objects -IfcRoles = ['Undefined']+[''.join(map(lambda x: x if x.islower() else " "+x, t[3:]))[1:] for t in IFCTYPES] # Property types SimplePropertyTypes = ["IfcInteger","IfcReal","IfcBoolean","IfcIdentifier","IfcText","IfcLabel","IfcLogical"] @@ -80,7 +35,7 @@ MeasurePropertyTypes = ["IfcVolumeMeasure","IfcTimeMeasure","IfcThermodynamicTem "IfcContextDependentMeasure","IfcAreaMeasure","IfcAmountOfSubstanceMeasure", "IfcLuminousIntensityMeasure","IfcNormalisedRatioMeasure","IfcComplexNumber"] -import FreeCAD,Draft,ArchCommands,math,sys +import FreeCAD,Draft,ArchCommands,math,sys,json from FreeCAD import Vector if FreeCAD.GuiUp: import FreeCADGui @@ -102,7 +57,11 @@ else: # This module provides the base Arch component class, that # is shared by all of the Arch BIM objects +with open(FreeCAD.ConfigGet("AppHomePath") + "Mod/Arch/Presets/ifc_products.json") as f: + IfcProducts = json.load(f) +# Possible roles for FreeCAD BIM objects +IfcRoles = ['Undefined']+[''.join(map(lambda x: x if x.islower() else " "+x, t[3:]))[1:] for t in [product["name"] for product in IfcProducts]] def convertOldComponents(objs=[]): From c1be09507017d3b2d45627491e9b2e180fe860f9 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Wed, 23 Jan 2019 22:19:12 +1100 Subject: [PATCH 03/22] Fix incorrect directory for location of json file --- src/Mod/Arch/ArchComponent.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Mod/Arch/ArchComponent.py b/src/Mod/Arch/ArchComponent.py index 066509a046..183ce39b82 100644 --- a/src/Mod/Arch/ArchComponent.py +++ b/src/Mod/Arch/ArchComponent.py @@ -57,7 +57,7 @@ else: # This module provides the base Arch component class, that # is shared by all of the Arch BIM objects -with open(FreeCAD.ConfigGet("AppHomePath") + "Mod/Arch/Presets/ifc_products.json") as f: +with open(FreeCAD.ConfigGet("AppHomePath") + "data/Mod/Arch/Presets/ifc_products.json") as f: IfcProducts = json.load(f) # Possible roles for FreeCAD BIM objects From 1ad4efa57c3ba4ffbfe2f25a6157cf49df4e388d Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Fri, 25 Jan 2019 22:11:51 +1100 Subject: [PATCH 04/22] Navigate to the json file in an os agnostic manner --- src/Mod/Arch/ArchComponent.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Mod/Arch/ArchComponent.py b/src/Mod/Arch/ArchComponent.py index 183ce39b82..275f8c88c7 100644 --- a/src/Mod/Arch/ArchComponent.py +++ b/src/Mod/Arch/ArchComponent.py @@ -35,7 +35,7 @@ MeasurePropertyTypes = ["IfcVolumeMeasure","IfcTimeMeasure","IfcThermodynamicTem "IfcContextDependentMeasure","IfcAreaMeasure","IfcAmountOfSubstanceMeasure", "IfcLuminousIntensityMeasure","IfcNormalisedRatioMeasure","IfcComplexNumber"] -import FreeCAD,Draft,ArchCommands,math,sys,json +import FreeCAD,Draft,ArchCommands,math,sys,json,os from FreeCAD import Vector if FreeCAD.GuiUp: import FreeCADGui @@ -57,7 +57,7 @@ else: # This module provides the base Arch component class, that # is shared by all of the Arch BIM objects -with open(FreeCAD.ConfigGet("AppHomePath") + "data/Mod/Arch/Presets/ifc_products.json") as f: +with open(os.path.join(FreeCAD.getResourceDir(),"Mod","Arch","Presets","ifc_products.json")) as f: IfcProducts = json.load(f) # Possible roles for FreeCAD BIM objects From dce39f50458bd54eceb90f4d7fbec9a794eddb50 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Fri, 25 Jan 2019 22:16:37 +1100 Subject: [PATCH 05/22] Refactor IfcAttributes to be called IfcData. * IfcAttributes as a name is misleading, as currently it stores GUID (yes, an attribute), but also stores IFC export settings (i.e. not an IFC "attribute", per say) * The previous description of "Custom IFC properties ..." is also misleading, as properties might suggest it stores property sets, which it doesn't (IfcProperties does, currently) * IfcData is more generic and allows us to store more data in it in the future --- src/Mod/Arch/ArchComponent.py | 37 ++++++++++++++--------------------- 1 file changed, 15 insertions(+), 22 deletions(-) diff --git a/src/Mod/Arch/ArchComponent.py b/src/Mod/Arch/ArchComponent.py index 275f8c88c7..7286169ff9 100644 --- a/src/Mod/Arch/ArchComponent.py +++ b/src/Mod/Arch/ArchComponent.py @@ -197,8 +197,8 @@ class Component: obj.addProperty("App::PropertyString","Tag","Component",QT_TRANSLATE_NOOP("App::Property","An optional tag for this component")) if not "StandardCode" in pl: obj.addProperty("App::PropertyString","StandardCode","Component",QT_TRANSLATE_NOOP("App::Property","An optional standard (OmniClass, etc...) code for this component")) - if not "IfcAttributes" in pl: - obj.addProperty("App::PropertyMap","IfcAttributes","Component",QT_TRANSLATE_NOOP("App::Property","Custom IFC properties and attributes")) + if not "IfcData" in pl: + obj.addProperty("App::PropertyMap","IfcData","Component",QT_TRANSLATE_NOOP("App::Property","IFC data")) if not "Material" in pl: obj.addProperty("App::PropertyLink","Material","Component",QT_TRANSLATE_NOOP("App::Property","A material for this object")) if "BaseMaterial" in pl: @@ -1227,8 +1227,8 @@ class ComponentTaskPanel: self.ifcEditor.comboPset.addItems([QtGui.QApplication.translate("Arch", "Add property set...", None), QtGui.QApplication.translate("Arch", "New...", None)]+self.psetkeys) # set UUID - if "IfcUID" in self.obj.IfcAttributes: - self.ifcEditor.labelUUID.setText(self.obj.IfcAttributes["IfcUID"]) + if "IfcUID" in self.obj.IfcData: + self.ifcEditor.labelUUID.setText(self.obj.IfcData["IfcUID"]) # fill the tree psets = {} for pname,value in self.obj.IfcProperties.items(): @@ -1274,10 +1274,10 @@ class ComponentTaskPanel: QtCore.QObject.connect(self.ifcEditor.buttonDelete, QtCore.SIGNAL("clicked()"), self.removeIfcProperty) self.ifcEditor.treeProperties.setSortingEnabled(True) # set checkboxes - if "FlagForceBrep" in self.obj.IfcAttributes: - self.ifcEditor.checkBrep.setChecked(self.obj.IfcAttributes["FlagForceBrep"] == "True") - if "FlagParametric" in self.obj.IfcAttributes: - self.ifcEditor.checkParametric.setChecked(self.obj.IfcAttributes["FlagParametric"] == "True") + if "FlagForceBrep" in self.obj.IfcData: + self.ifcEditor.checkBrep.setChecked(self.obj.IfcData["FlagForceBrep"] == "True") + if "FlagParametric" in self.obj.IfcData: + self.ifcEditor.checkParametric.setChecked(self.obj.IfcData["FlagParametric"] == "True") self.ifcEditor.show() def acceptIfcProperties(self): @@ -1299,16 +1299,16 @@ class ComponentTaskPanel: else: # keys cannot be unicode ifcdict[prop.encode("utf8")] = pset+";;"+ptype+";;"+pvalue - ifcattrs = self.obj.IfcAttributes - ifcattrs["IfcUID"] = self.ifcEditor.labelUUID.text() - ifcattrs["FlagForceBrep"] = str(self.ifcEditor.checkBrep.isChecked()) - ifcattrs["FlagParametric"] = str(self.ifcEditor.checkParametric.isChecked()) - if (ifcdict != self.obj.IfcProperties) or (ifcattrs != self.obj.IfcAttributes): + ifcData = self.obj.IfcData + ifcData["IfcUID"] = self.ifcEditor.labelUUID.text() + ifcData["FlagForceBrep"] = str(self.ifcEditor.checkBrep.isChecked()) + ifcData["FlagParametric"] = str(self.ifcEditor.checkParametric.isChecked()) + if (ifcdict != self.obj.IfcProperties) or (ifcData != self.obj.IfcData): FreeCAD.ActiveDocument.openTransaction("Change Ifc Properties") if ifcdict != self.obj.IfcProperties: self.obj.IfcProperties = ifcdict - if ifcattrs != self.obj.IfcAttributes: - self.obj.IfcAttributes = ifcattrs + if ifcData != self.obj.IfcData: + self.obj.IfcData = ifcData FreeCAD.ActiveDocument.commitTransaction() del self.ifcEditor @@ -1472,10 +1472,3 @@ if FreeCAD.GuiUp: else: model.setData(index,editor.text()) self.dialog.update() - - - - - - - From 35e75ac85ee6c9a1ed3e3dfd545697a77259a605 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Fri, 25 Jan 2019 22:22:20 +1100 Subject: [PATCH 06/22] Add support for storing all IFC attributes as text attributes for now. Data is stored in IfcData as a JSON serialised string. --- src/Mod/Arch/ArchComponent.py | 52 +++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/src/Mod/Arch/ArchComponent.py b/src/Mod/Arch/ArchComponent.py index 7286169ff9..e6f89947ee 100644 --- a/src/Mod/Arch/ArchComponent.py +++ b/src/Mod/Arch/ArchComponent.py @@ -63,6 +63,11 @@ with open(os.path.join(FreeCAD.getResourceDir(),"Mod","Arch","Presets","ifc_prod # Possible roles for FreeCAD BIM objects IfcRoles = ['Undefined']+[''.join(map(lambda x: x if x.islower() else " "+x, t[3:]))[1:] for t in [product["name"] for product in IfcProducts]] +def getIfcProduct(IfcRole): + for IfcProduct in IfcProducts: + if IfcProduct["name"] == 'Ifc' + IfcRole.replace(' ', ''): + return IfcProduct + def convertOldComponents(objs=[]): """converts Arch Objects with a Role property to the new IfcRole. @@ -180,6 +185,47 @@ class Component: Component.setProperties(self,obj) self.Type = "Component" + def setIfcAttributes(self, obj): + IfcProduct = getIfcProduct(obj.IfcRole) + if IfcProduct is None: + return + self.addIfcProductAttributesToObj(IfcProduct, obj) + self.purgeUnusedIfcAttributesFromPropertiesList(IfcProduct, obj) + + def addIfcProductAttributesToObj(self, IfcProduct, obj): + for attribute in IfcProduct["attributes"]: + if attribute["name"] in obj.PropertiesList: + continue + self.addIfcProductAttributeToObj(attribute, obj) + + def addIfcProductAttributeToObj(self, attribute, obj): + IfcData = obj.IfcData + if "attributes" not in IfcData: + IfcData["attributes"] = "{}" + IfcAttributes = json.loads(IfcData["attributes"]) + IfcAttributes[attribute["name"]] = attribute + IfcData["attributes"] = json.dumps(IfcAttributes) + obj.IfcData = IfcData + obj.addProperty("App::PropertyString", attribute["name"], "IFC Attributes", QT_TRANSLATE_NOOP("App::Property", "Description of IFC attributes are not yet implemented")) + + def setObjIfcAttributeValue(self, obj, attributeName, value): + IfcData = obj.IfcData + IfcAttributes = json.loads(IfcData["attributes"]) + IfcAttributes[attributeName]["value"] = value + IfcData["attributes"] = json.dumps(IfcAttributes) + obj.IfcData = IfcData + + def purgeUnusedIfcAttributesFromPropertiesList(self, IfcProduct, obj): + for property in obj.PropertiesList: + if obj.getGroupOfProperty(property) != "IFC Attributes": + continue + does_attribute_exist = False + for attribute in IfcProduct["attributes"]: + if attribute["name"].replace(' ', '') == property: + does_attribute_exist = True + if does_attribute_exist == False: + obj.removeProperty(property) + def setProperties(self,obj): pl = obj.PropertiesList @@ -274,6 +320,12 @@ class Component: def onChanged(self,obj,prop): + if prop == "IfcRole": + self.setIfcAttributes(obj) + + if obj.getGroupOfProperty(prop) == "IFC Attributes": + self.setObjIfcAttributeValue(obj, prop, obj.getPropertyByName(prop)) + if prop == "Placement": if hasattr(self,"oldPlacement"): if self.oldPlacement: From 63ffc2b6e19b8a8f7ae6f7591d6354fe494c7a56 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Fri, 25 Jan 2019 22:48:44 +1100 Subject: [PATCH 07/22] Add support for IFC enums, and minor variable name consistency cleanup --- src/Mod/Arch/ArchComponent.py | 43 ++++++++++++++++++++--------------- 1 file changed, 25 insertions(+), 18 deletions(-) diff --git a/src/Mod/Arch/ArchComponent.py b/src/Mod/Arch/ArchComponent.py index e6f89947ee..4c3e852e17 100644 --- a/src/Mod/Arch/ArchComponent.py +++ b/src/Mod/Arch/ArchComponent.py @@ -58,15 +58,21 @@ else: # is shared by all of the Arch BIM objects with open(os.path.join(FreeCAD.getResourceDir(),"Mod","Arch","Presets","ifc_products.json")) as f: - IfcProducts = json.load(f) + ifcProducts = json.load(f) # Possible roles for FreeCAD BIM objects -IfcRoles = ['Undefined']+[''.join(map(lambda x: x if x.islower() else " "+x, t[3:]))[1:] for t in [product["name"] for product in IfcProducts]] +IfcRoles = ['Undefined']+[''.join(map(lambda x: x if x.islower() else " "+x, t[3:]))[1:] for t in [product["name"] for product in ifcProducts]] def getIfcProduct(IfcRole): - for IfcProduct in IfcProducts: - if IfcProduct["name"] == 'Ifc' + IfcRole.replace(' ', ''): - return IfcProduct + for ifcProduct in ifcProducts: + if ifcProduct["name"] == 'Ifc' + IfcRole.replace(' ', ''): + return ifcProduct + +def getIfcProductAttribute(ifcProduct, name): + for attribute in ifcProduct["attributes"]: + if attribute["name"].replace(' ', '') == name: + return attribute + return None def convertOldComponents(objs=[]): @@ -186,14 +192,14 @@ class Component: self.Type = "Component" def setIfcAttributes(self, obj): - IfcProduct = getIfcProduct(obj.IfcRole) - if IfcProduct is None: + ifcProduct = getIfcProduct(obj.IfcRole) + if ifcProduct is None: return - self.addIfcProductAttributesToObj(IfcProduct, obj) - self.purgeUnusedIfcAttributesFromPropertiesList(IfcProduct, obj) + self.purgeUnusedIfcAttributesFromPropertiesList(ifcProduct, obj) + self.addIfcProductAttributesToObj(ifcProduct, obj) - def addIfcProductAttributesToObj(self, IfcProduct, obj): - for attribute in IfcProduct["attributes"]: + def addIfcProductAttributesToObj(self, ifcProduct, obj): + for attribute in ifcProduct["attributes"]: if attribute["name"] in obj.PropertiesList: continue self.addIfcProductAttributeToObj(attribute, obj) @@ -206,7 +212,11 @@ class Component: IfcAttributes[attribute["name"]] = attribute IfcData["attributes"] = json.dumps(IfcAttributes) obj.IfcData = IfcData - obj.addProperty("App::PropertyString", attribute["name"], "IFC Attributes", QT_TRANSLATE_NOOP("App::Property", "Description of IFC attributes are not yet implemented")) + if attribute["is_enum"]: + obj.addProperty("App::PropertyEnumeration", attribute["name"], "IFC Attributes", QT_TRANSLATE_NOOP("App::Property", "Description of IFC attributes are not yet implemented")) + setattr(obj, attribute["name"], attribute["enum_values"]) + else: + obj.addProperty("App::PropertyString", attribute["name"], "IFC Attributes", QT_TRANSLATE_NOOP("App::Property", "Description of IFC attributes are not yet implemented")) def setObjIfcAttributeValue(self, obj, attributeName, value): IfcData = obj.IfcData @@ -215,15 +225,12 @@ class Component: IfcData["attributes"] = json.dumps(IfcAttributes) obj.IfcData = IfcData - def purgeUnusedIfcAttributesFromPropertiesList(self, IfcProduct, obj): + def purgeUnusedIfcAttributesFromPropertiesList(self, ifcProduct, obj): for property in obj.PropertiesList: if obj.getGroupOfProperty(property) != "IFC Attributes": continue - does_attribute_exist = False - for attribute in IfcProduct["attributes"]: - if attribute["name"].replace(' ', '') == property: - does_attribute_exist = True - if does_attribute_exist == False: + ifcProductAttribute = getIfcProductAttribute(ifcProduct, property) + if ifcProductAttribute is None or ifcProductAttribute["is_enum"] is True: obj.removeProperty(property) def setProperties(self,obj): From 501f19fd3e031daa95bc4828e78dacefe728515d Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Sat, 26 Jan 2019 13:33:01 +1100 Subject: [PATCH 08/22] Bump IFC products to be a dictionary instead of a list --- src/Mod/Arch/Presets/ifc_products.json | 533 ++++++++++--------------- 1 file changed, 209 insertions(+), 324 deletions(-) diff --git a/src/Mod/Arch/Presets/ifc_products.json b/src/Mod/Arch/Presets/ifc_products.json index aec4eb585d..3980fd2066 100644 --- a/src/Mod/Arch/Presets/ifc_products.json +++ b/src/Mod/Arch/Presets/ifc_products.json @@ -1,6 +1,5 @@ -[ - { - "name": "IfcActuator", +{ + "IfcActuator": { "is_abstract": false, "parent": "IfcDistributionControlElement", "attributes": [ @@ -26,8 +25,7 @@ } ] }, - { - "name": "IfcAirTerminal", + "IfcAirTerminal": { "is_abstract": false, "parent": "IfcFlowTerminal", "attributes": [ @@ -52,8 +50,7 @@ } ] }, - { - "name": "IfcAirTerminalBox", + "IfcAirTerminalBox": { "is_abstract": false, "parent": "IfcFlowController", "attributes": [ @@ -77,8 +74,7 @@ } ] }, - { - "name": "IfcAirToAirHeatRecovery", + "IfcAirToAirHeatRecovery": { "is_abstract": false, "parent": "IfcEnergyConversionDevice", "attributes": [ @@ -108,8 +104,7 @@ } ] }, - { - "name": "IfcAlarm", + "IfcAlarm": { "is_abstract": false, "parent": "IfcDistributionControlElement", "attributes": [ @@ -136,14 +131,12 @@ } ] }, - { - "name": "IfcAnnotation", + "IfcAnnotation": { "is_abstract": false, "parent": "IfcProduct", "attributes": [] }, - { - "name": "IfcAudioVisualAppliance", + "IfcAudioVisualAppliance": { "is_abstract": false, "parent": "IfcFlowTerminal", "attributes": [ @@ -175,8 +168,7 @@ } ] }, - { - "name": "IfcBeam", + "IfcBeam": { "is_abstract": false, "parent": "IfcBuildingElement", "attributes": [ @@ -203,8 +195,7 @@ } ] }, - { - "name": "IfcBeamStandardCase", + "IfcBeamStandardCase": { "is_abstract": false, "parent": "IfcBeam", "attributes": [ @@ -231,8 +222,7 @@ } ] }, - { - "name": "IfcBoiler", + "IfcBoiler": { "is_abstract": false, "parent": "IfcEnergyConversionDevice", "attributes": [ @@ -255,8 +245,7 @@ } ] }, - { - "name": "IfcBuilding", + "IfcBuilding": { "is_abstract": false, "parent": "IfcSpatialStructureElement", "attributes": [ @@ -276,7 +265,11 @@ "name": "CompositionType", "type": "IfcElementCompositionEnum", "is_enum": true, - "enum_values": [] + "enum_values": [ + "complex", + "element", + "partial" + ] }, { "name": "LongName", @@ -286,8 +279,7 @@ } ] }, - { - "name": "IfcBuildingElementPart", + "IfcBuildingElementPart": { "is_abstract": false, "parent": "IfcElementComponent", "attributes": [ @@ -310,8 +302,7 @@ } ] }, - { - "name": "IfcBuildingElementProxy", + "IfcBuildingElementProxy": { "is_abstract": false, "parent": "IfcBuildingElement", "attributes": [ @@ -337,8 +328,7 @@ } ] }, - { - "name": "IfcBuildingStorey", + "IfcBuildingStorey": { "is_abstract": false, "parent": "IfcSpatialStructureElement", "attributes": [ @@ -352,7 +342,11 @@ "name": "CompositionType", "type": "IfcElementCompositionEnum", "is_enum": true, - "enum_values": [] + "enum_values": [ + "complex", + "element", + "partial" + ] }, { "name": "LongName", @@ -362,8 +356,7 @@ } ] }, - { - "name": "IfcBurner", + "IfcBurner": { "is_abstract": false, "parent": "IfcEnergyConversionDevice", "attributes": [ @@ -384,8 +377,7 @@ } ] }, - { - "name": "IfcCableCarrierFitting", + "IfcCableCarrierFitting": { "is_abstract": false, "parent": "IfcFlowFitting", "attributes": [ @@ -410,8 +402,7 @@ } ] }, - { - "name": "IfcCableCarrierSegment", + "IfcCableCarrierSegment": { "is_abstract": false, "parent": "IfcFlowSegment", "attributes": [ @@ -436,8 +427,7 @@ } ] }, - { - "name": "IfcCableFitting", + "IfcCableFitting": { "is_abstract": false, "parent": "IfcFlowFitting", "attributes": [ @@ -463,8 +453,7 @@ } ] }, - { - "name": "IfcCableSegment", + "IfcCableSegment": { "is_abstract": false, "parent": "IfcFlowSegment", "attributes": [ @@ -489,8 +478,7 @@ } ] }, - { - "name": "IfcChiller", + "IfcChiller": { "is_abstract": false, "parent": "IfcEnergyConversionDevice", "attributes": [ @@ -514,8 +502,7 @@ } ] }, - { - "name": "IfcChimney", + "IfcChimney": { "is_abstract": false, "parent": "IfcBuildingElement", "attributes": [ @@ -536,8 +523,7 @@ } ] }, - { - "name": "IfcCivilElement", + "IfcCivilElement": { "is_abstract": false, "parent": "IfcElement", "attributes": [ @@ -549,8 +535,7 @@ } ] }, - { - "name": "IfcCoil", + "IfcCoil": { "is_abstract": false, "parent": "IfcEnergyConversionDevice", "attributes": [ @@ -578,8 +563,7 @@ } ] }, - { - "name": "IfcColumn", + "IfcColumn": { "is_abstract": false, "parent": "IfcBuildingElement", "attributes": [ @@ -602,8 +586,7 @@ } ] }, - { - "name": "IfcColumnStandardCase", + "IfcColumnStandardCase": { "is_abstract": false, "parent": "IfcColumn", "attributes": [ @@ -626,8 +609,7 @@ } ] }, - { - "name": "IfcCommunicationsAppliance", + "IfcCommunicationsAppliance": { "is_abstract": false, "parent": "IfcFlowTerminal", "attributes": [ @@ -660,8 +642,7 @@ } ] }, - { - "name": "IfcCompressor", + "IfcCompressor": { "is_abstract": false, "parent": "IfcFlowMovingDevice", "attributes": [ @@ -697,8 +678,7 @@ } ] }, - { - "name": "IfcCondenser", + "IfcCondenser": { "is_abstract": false, "parent": "IfcEnergyConversionDevice", "attributes": [ @@ -726,8 +706,7 @@ } ] }, - { - "name": "IfcController", + "IfcController": { "is_abstract": false, "parent": "IfcDistributionControlElement", "attributes": [ @@ -753,8 +732,7 @@ } ] }, - { - "name": "IfcCooledBeam", + "IfcCooledBeam": { "is_abstract": false, "parent": "IfcEnergyConversionDevice", "attributes": [ @@ -777,8 +755,7 @@ } ] }, - { - "name": "IfcCoolingTower", + "IfcCoolingTower": { "is_abstract": false, "parent": "IfcEnergyConversionDevice", "attributes": [ @@ -802,8 +779,7 @@ } ] }, - { - "name": "IfcCovering", + "IfcCovering": { "is_abstract": false, "parent": "IfcBuildingElement", "attributes": [ @@ -834,8 +810,7 @@ } ] }, - { - "name": "IfcCurtainWall", + "IfcCurtainWall": { "is_abstract": false, "parent": "IfcBuildingElement", "attributes": [ @@ -856,8 +831,7 @@ } ] }, - { - "name": "IfcDamper", + "IfcDamper": { "is_abstract": false, "parent": "IfcFlowController", "attributes": [ @@ -889,8 +863,7 @@ } ] }, - { - "name": "IfcDiscreteAccessory", + "IfcDiscreteAccessory": { "is_abstract": false, "parent": "IfcElementComponent", "attributes": [ @@ -914,8 +887,7 @@ } ] }, - { - "name": "IfcDistributionChamberElement", + "IfcDistributionChamberElement": { "is_abstract": false, "parent": "IfcDistributionFlowElement", "attributes": [ @@ -944,8 +916,7 @@ } ] }, - { - "name": "IfcDistributionControlElement", + "IfcDistributionControlElement": { "is_abstract": false, "parent": "IfcDistributionElement", "attributes": [ @@ -957,8 +928,7 @@ } ] }, - { - "name": "IfcDistributionElement", + "IfcDistributionElement": { "is_abstract": false, "parent": "IfcElement", "attributes": [ @@ -970,8 +940,7 @@ } ] }, - { - "name": "IfcDistributionFlowElement", + "IfcDistributionFlowElement": { "is_abstract": false, "parent": "IfcDistributionElement", "attributes": [ @@ -983,8 +952,7 @@ } ] }, - { - "name": "IfcDistributionPort", + "IfcDistributionPort": { "is_abstract": false, "parent": "IfcPort", "attributes": [ @@ -1065,8 +1033,7 @@ } ] }, - { - "name": "IfcDoor", + "IfcDoor": { "is_abstract": false, "parent": "IfcBuildingElement", "attributes": [ @@ -1135,8 +1102,7 @@ } ] }, - { - "name": "IfcDoorStandardCase", + "IfcDoorStandardCase": { "is_abstract": false, "parent": "IfcDoor", "attributes": [ @@ -1205,8 +1171,7 @@ } ] }, - { - "name": "IfcDuctFitting", + "IfcDuctFitting": { "is_abstract": false, "parent": "IfcFlowFitting", "attributes": [ @@ -1234,8 +1199,7 @@ } ] }, - { - "name": "IfcDuctSegment", + "IfcDuctSegment": { "is_abstract": false, "parent": "IfcFlowSegment", "attributes": [ @@ -1258,8 +1222,7 @@ } ] }, - { - "name": "IfcDuctSilencer", + "IfcDuctSilencer": { "is_abstract": false, "parent": "IfcFlowTreatmentDevice", "attributes": [ @@ -1283,8 +1246,7 @@ } ] }, - { - "name": "IfcElectricAppliance", + "IfcElectricAppliance": { "is_abstract": false, "parent": "IfcFlowTerminal", "attributes": [ @@ -1321,8 +1283,7 @@ } ] }, - { - "name": "IfcElectricDistributionBoard", + "IfcElectricDistributionBoard": { "is_abstract": false, "parent": "IfcFlowController", "attributes": [ @@ -1347,8 +1308,7 @@ } ] }, - { - "name": "IfcElectricFlowStorageDevice", + "IfcElectricFlowStorageDevice": { "is_abstract": false, "parent": "IfcFlowStorageDevice", "attributes": [ @@ -1374,8 +1334,7 @@ } ] }, - { - "name": "IfcElectricGenerator", + "IfcElectricGenerator": { "is_abstract": false, "parent": "IfcEnergyConversionDevice", "attributes": [ @@ -1399,8 +1358,7 @@ } ] }, - { - "name": "IfcElectricMotor", + "IfcElectricMotor": { "is_abstract": false, "parent": "IfcEnergyConversionDevice", "attributes": [ @@ -1426,8 +1384,7 @@ } ] }, - { - "name": "IfcElectricTimeControl", + "IfcElectricTimeControl": { "is_abstract": false, "parent": "IfcFlowController", "attributes": [ @@ -1451,8 +1408,7 @@ } ] }, - { - "name": "IfcElementAssembly", + "IfcElementAssembly": { "is_abstract": false, "parent": "IfcElement", "attributes": [ @@ -1492,8 +1448,7 @@ } ] }, - { - "name": "IfcEnergyConversionDevice", + "IfcEnergyConversionDevice": { "is_abstract": false, "parent": "IfcDistributionFlowElement", "attributes": [ @@ -1505,8 +1460,7 @@ } ] }, - { - "name": "IfcEngine", + "IfcEngine": { "is_abstract": false, "parent": "IfcEnergyConversionDevice", "attributes": [ @@ -1529,8 +1483,7 @@ } ] }, - { - "name": "IfcEvaporativeCooler", + "IfcEvaporativeCooler": { "is_abstract": false, "parent": "IfcEnergyConversionDevice", "attributes": [ @@ -1560,8 +1513,7 @@ } ] }, - { - "name": "IfcEvaporator", + "IfcEvaporator": { "is_abstract": false, "parent": "IfcEnergyConversionDevice", "attributes": [ @@ -1588,8 +1540,7 @@ } ] }, - { - "name": "IfcExternalSpatialElement", + "IfcExternalSpatialElement": { "is_abstract": false, "parent": "IfcExternalSpatialStructureElement", "attributes": [ @@ -1614,8 +1565,7 @@ } ] }, - { - "name": "IfcFan", + "IfcFan": { "is_abstract": false, "parent": "IfcFlowMovingDevice", "attributes": [ @@ -1643,8 +1593,7 @@ } ] }, - { - "name": "IfcFastener", + "IfcFastener": { "is_abstract": false, "parent": "IfcElementComponent", "attributes": [ @@ -1668,8 +1617,7 @@ } ] }, - { - "name": "IfcFilter", + "IfcFilter": { "is_abstract": false, "parent": "IfcFlowTreatmentDevice", "attributes": [ @@ -1696,8 +1644,7 @@ } ] }, - { - "name": "IfcFireSuppressionTerminal", + "IfcFireSuppressionTerminal": { "is_abstract": false, "parent": "IfcFlowTerminal", "attributes": [ @@ -1723,8 +1670,7 @@ } ] }, - { - "name": "IfcFlowController", + "IfcFlowController": { "is_abstract": false, "parent": "IfcDistributionFlowElement", "attributes": [ @@ -1736,8 +1682,7 @@ } ] }, - { - "name": "IfcFlowFitting", + "IfcFlowFitting": { "is_abstract": false, "parent": "IfcDistributionFlowElement", "attributes": [ @@ -1749,8 +1694,7 @@ } ] }, - { - "name": "IfcFlowInstrument", + "IfcFlowInstrument": { "is_abstract": false, "parent": "IfcDistributionControlElement", "attributes": [ @@ -1779,8 +1723,7 @@ } ] }, - { - "name": "IfcFlowMeter", + "IfcFlowMeter": { "is_abstract": false, "parent": "IfcFlowController", "attributes": [ @@ -1805,8 +1748,7 @@ } ] }, - { - "name": "IfcFlowMovingDevice", + "IfcFlowMovingDevice": { "is_abstract": false, "parent": "IfcDistributionFlowElement", "attributes": [ @@ -1818,8 +1760,7 @@ } ] }, - { - "name": "IfcFlowSegment", + "IfcFlowSegment": { "is_abstract": false, "parent": "IfcDistributionFlowElement", "attributes": [ @@ -1831,8 +1772,7 @@ } ] }, - { - "name": "IfcFlowStorageDevice", + "IfcFlowStorageDevice": { "is_abstract": false, "parent": "IfcDistributionFlowElement", "attributes": [ @@ -1844,8 +1784,7 @@ } ] }, - { - "name": "IfcFlowTerminal", + "IfcFlowTerminal": { "is_abstract": false, "parent": "IfcDistributionFlowElement", "attributes": [ @@ -1857,8 +1796,7 @@ } ] }, - { - "name": "IfcFlowTreatmentDevice", + "IfcFlowTreatmentDevice": { "is_abstract": false, "parent": "IfcDistributionFlowElement", "attributes": [ @@ -1870,8 +1808,7 @@ } ] }, - { - "name": "IfcFooting", + "IfcFooting": { "is_abstract": false, "parent": "IfcBuildingElement", "attributes": [ @@ -1897,8 +1834,7 @@ } ] }, - { - "name": "IfcFurnishingElement", + "IfcFurnishingElement": { "is_abstract": false, "parent": "IfcElement", "attributes": [ @@ -1910,8 +1846,7 @@ } ] }, - { - "name": "IfcFurniture", + "IfcFurniture": { "is_abstract": false, "parent": "IfcFurnishingElement", "attributes": [ @@ -1939,8 +1874,7 @@ } ] }, - { - "name": "IfcGeographicElement", + "IfcGeographicElement": { "is_abstract": false, "parent": "IfcElement", "attributes": [ @@ -1962,8 +1896,7 @@ } ] }, - { - "name": "IfcGrid", + "IfcGrid": { "is_abstract": false, "parent": "IfcProduct", "attributes": [ @@ -1982,8 +1915,7 @@ } ] }, - { - "name": "IfcHeatExchanger", + "IfcHeatExchanger": { "is_abstract": false, "parent": "IfcEnergyConversionDevice", "attributes": [ @@ -2006,8 +1938,7 @@ } ] }, - { - "name": "IfcHumidifier", + "IfcHumidifier": { "is_abstract": false, "parent": "IfcEnergyConversionDevice", "attributes": [ @@ -2041,8 +1972,7 @@ } ] }, - { - "name": "IfcInterceptor", + "IfcInterceptor": { "is_abstract": false, "parent": "IfcFlowTreatmentDevice", "attributes": [ @@ -2067,8 +1997,7 @@ } ] }, - { - "name": "IfcJunctionBox", + "IfcJunctionBox": { "is_abstract": false, "parent": "IfcFlowFitting", "attributes": [ @@ -2091,8 +2020,7 @@ } ] }, - { - "name": "IfcLamp", + "IfcLamp": { "is_abstract": false, "parent": "IfcFlowTerminal", "attributes": [ @@ -2122,8 +2050,7 @@ } ] }, - { - "name": "IfcLightFixture", + "IfcLightFixture": { "is_abstract": false, "parent": "IfcFlowTerminal", "attributes": [ @@ -2147,8 +2074,7 @@ } ] }, - { - "name": "IfcMechanicalFastener", + "IfcMechanicalFastener": { "is_abstract": false, "parent": "IfcElementComponent", "attributes": [ @@ -2191,8 +2117,7 @@ } ] }, - { - "name": "IfcMedicalDevice", + "IfcMedicalDevice": { "is_abstract": false, "parent": "IfcFlowTerminal", "attributes": [ @@ -2218,8 +2143,7 @@ } ] }, - { - "name": "IfcMember", + "IfcMember": { "is_abstract": false, "parent": "IfcBuildingElement", "attributes": [ @@ -2252,8 +2176,7 @@ } ] }, - { - "name": "IfcMemberStandardCase", + "IfcMemberStandardCase": { "is_abstract": false, "parent": "IfcMember", "attributes": [ @@ -2286,8 +2209,7 @@ } ] }, - { - "name": "IfcMotorConnection", + "IfcMotorConnection": { "is_abstract": false, "parent": "IfcEnergyConversionDevice", "attributes": [ @@ -2311,8 +2233,7 @@ } ] }, - { - "name": "IfcOpeningElement", + "IfcOpeningElement": { "is_abstract": false, "parent": "IfcFeatureElementSubtraction", "attributes": [ @@ -2335,8 +2256,7 @@ } ] }, - { - "name": "IfcOpeningStandardCase", + "IfcOpeningStandardCase": { "is_abstract": false, "parent": "IfcOpeningElement", "attributes": [ @@ -2359,8 +2279,7 @@ } ] }, - { - "name": "IfcOutlet", + "IfcOutlet": { "is_abstract": false, "parent": "IfcFlowTerminal", "attributes": [ @@ -2386,8 +2305,7 @@ } ] }, - { - "name": "IfcPile", + "IfcPile": { "is_abstract": false, "parent": "IfcBuildingElement", "attributes": [ @@ -2427,8 +2345,7 @@ } ] }, - { - "name": "IfcPipeFitting", + "IfcPipeFitting": { "is_abstract": false, "parent": "IfcFlowFitting", "attributes": [ @@ -2456,8 +2373,7 @@ } ] }, - { - "name": "IfcPipeSegment", + "IfcPipeSegment": { "is_abstract": false, "parent": "IfcFlowSegment", "attributes": [ @@ -2483,8 +2399,7 @@ } ] }, - { - "name": "IfcPlate", + "IfcPlate": { "is_abstract": false, "parent": "IfcBuildingElement", "attributes": [ @@ -2507,8 +2422,7 @@ } ] }, - { - "name": "IfcPlateStandardCase", + "IfcPlateStandardCase": { "is_abstract": false, "parent": "IfcPlate", "attributes": [ @@ -2531,8 +2445,7 @@ } ] }, - { - "name": "IfcProjectionElement", + "IfcProjectionElement": { "is_abstract": false, "parent": "IfcFeatureElementAddition", "attributes": [ @@ -2553,8 +2466,7 @@ } ] }, - { - "name": "IfcProtectiveDevice", + "IfcProtectiveDevice": { "is_abstract": false, "parent": "IfcFlowController", "attributes": [ @@ -2582,8 +2494,7 @@ } ] }, - { - "name": "IfcProtectiveDeviceTrippingUnit", + "IfcProtectiveDeviceTrippingUnit": { "is_abstract": false, "parent": "IfcDistributionControlElement", "attributes": [ @@ -2608,8 +2519,7 @@ } ] }, - { - "name": "IfcProxy", + "IfcProxy": { "is_abstract": false, "parent": "IfcProduct", "attributes": [ @@ -2636,8 +2546,7 @@ } ] }, - { - "name": "IfcPump", + "IfcPump": { "is_abstract": false, "parent": "IfcFlowMovingDevice", "attributes": [ @@ -2665,8 +2574,7 @@ } ] }, - { - "name": "IfcRailing", + "IfcRailing": { "is_abstract": false, "parent": "IfcBuildingElement", "attributes": [ @@ -2690,8 +2598,7 @@ } ] }, - { - "name": "IfcRamp", + "IfcRamp": { "is_abstract": false, "parent": "IfcBuildingElement", "attributes": [ @@ -2718,8 +2625,7 @@ } ] }, - { - "name": "IfcRampFlight", + "IfcRampFlight": { "is_abstract": false, "parent": "IfcBuildingElement", "attributes": [ @@ -2742,8 +2648,7 @@ } ] }, - { - "name": "IfcReinforcingBar", + "IfcReinforcingBar": { "is_abstract": false, "parent": "IfcReinforcingElement", "attributes": [ @@ -2805,8 +2710,7 @@ } ] }, - { - "name": "IfcReinforcingMesh", + "IfcReinforcingMesh": { "is_abstract": false, "parent": "IfcReinforcingElement", "attributes": [ @@ -2881,8 +2785,7 @@ } ] }, - { - "name": "IfcRoof", + "IfcRoof": { "is_abstract": false, "parent": "IfcBuildingElement", "attributes": [ @@ -2916,8 +2819,7 @@ } ] }, - { - "name": "IfcSanitaryTerminal", + "IfcSanitaryTerminal": { "is_abstract": false, "parent": "IfcFlowTerminal", "attributes": [ @@ -2948,8 +2850,7 @@ } ] }, - { - "name": "IfcSensor", + "IfcSensor": { "is_abstract": false, "parent": "IfcDistributionControlElement", "attributes": [ @@ -2994,8 +2895,7 @@ } ] }, - { - "name": "IfcShadingDevice", + "IfcShadingDevice": { "is_abstract": false, "parent": "IfcBuildingElement", "attributes": [ @@ -3019,8 +2919,7 @@ } ] }, - { - "name": "IfcSite", + "IfcSite": { "is_abstract": false, "parent": "IfcSpatialStructureElement", "attributes": [ @@ -3052,7 +2951,11 @@ "name": "CompositionType", "type": "IfcElementCompositionEnum", "is_enum": true, - "enum_values": [] + "enum_values": [ + "complex", + "element", + "partial" + ] }, { "name": "LongName", @@ -3062,8 +2965,7 @@ } ] }, - { - "name": "IfcSlab", + "IfcSlab": { "is_abstract": false, "parent": "IfcBuildingElement", "attributes": [ @@ -3088,8 +2990,7 @@ } ] }, - { - "name": "IfcSlabElementedCase", + "IfcSlabElementedCase": { "is_abstract": false, "parent": "IfcSlab", "attributes": [ @@ -3114,8 +3015,7 @@ } ] }, - { - "name": "IfcSlabStandardCase", + "IfcSlabStandardCase": { "is_abstract": false, "parent": "IfcSlab", "attributes": [ @@ -3140,8 +3040,7 @@ } ] }, - { - "name": "IfcSolarDevice", + "IfcSolarDevice": { "is_abstract": false, "parent": "IfcEnergyConversionDevice", "attributes": [ @@ -3164,8 +3063,7 @@ } ] }, - { - "name": "IfcSpace", + "IfcSpace": { "is_abstract": false, "parent": "IfcSpatialStructureElement", "attributes": [ @@ -3193,7 +3091,11 @@ "name": "CompositionType", "type": "IfcElementCompositionEnum", "is_enum": true, - "enum_values": [] + "enum_values": [ + "complex", + "element", + "partial" + ] }, { "name": "LongName", @@ -3203,8 +3105,7 @@ } ] }, - { - "name": "IfcSpaceHeater", + "IfcSpaceHeater": { "is_abstract": false, "parent": "IfcFlowTerminal", "attributes": [ @@ -3227,8 +3128,7 @@ } ] }, - { - "name": "IfcSpatialZone", + "IfcSpatialZone": { "is_abstract": false, "parent": "IfcSpatialElement", "attributes": [ @@ -3257,8 +3157,7 @@ } ] }, - { - "name": "IfcStackTerminal", + "IfcStackTerminal": { "is_abstract": false, "parent": "IfcFlowTerminal", "attributes": [ @@ -3282,8 +3181,7 @@ } ] }, - { - "name": "IfcStair", + "IfcStair": { "is_abstract": false, "parent": "IfcBuildingElement", "attributes": [ @@ -3318,8 +3216,7 @@ } ] }, - { - "name": "IfcStairFlight", + "IfcStairFlight": { "is_abstract": false, "parent": "IfcBuildingElement", "attributes": [ @@ -3369,8 +3266,7 @@ } ] }, - { - "name": "IfcStructuralCurveAction", + "IfcStructuralCurveAction": { "is_abstract": false, "parent": "IfcStructuralAction", "attributes": [ @@ -3409,18 +3305,19 @@ "name": "GlobalOrLocal", "type": "IfcGlobalOrLocalEnum", "is_enum": true, - "enum_values": [] + "enum_values": [ + "global_coords", + "local_coords" + ] } ] }, - { - "name": "IfcStructuralCurveConnection", + "IfcStructuralCurveConnection": { "is_abstract": false, "parent": "IfcStructuralConnection", "attributes": [] }, - { - "name": "IfcStructuralCurveMember", + "IfcStructuralCurveMember": { "is_abstract": false, "parent": "IfcStructuralMember", "attributes": [ @@ -3440,8 +3337,7 @@ } ] }, - { - "name": "IfcStructuralCurveMemberVarying", + "IfcStructuralCurveMemberVarying": { "is_abstract": false, "parent": "IfcStructuralCurveMember", "attributes": [ @@ -3461,8 +3357,7 @@ } ] }, - { - "name": "IfcStructuralCurveReaction", + "IfcStructuralCurveReaction": { "is_abstract": false, "parent": "IfcStructuralReaction", "attributes": [ @@ -3486,12 +3381,14 @@ "name": "GlobalOrLocal", "type": "IfcGlobalOrLocalEnum", "is_enum": true, - "enum_values": [] + "enum_values": [ + "global_coords", + "local_coords" + ] } ] }, - { - "name": "IfcStructuralLinearAction", + "IfcStructuralLinearAction": { "is_abstract": false, "parent": "IfcStructuralCurveAction", "attributes": [ @@ -3530,12 +3427,14 @@ "name": "GlobalOrLocal", "type": "IfcGlobalOrLocalEnum", "is_enum": true, - "enum_values": [] + "enum_values": [ + "global_coords", + "local_coords" + ] } ] }, - { - "name": "IfcStructuralPlanarAction", + "IfcStructuralPlanarAction": { "is_abstract": false, "parent": "IfcStructuralSurfaceAction", "attributes": [ @@ -3571,12 +3470,14 @@ "name": "GlobalOrLocal", "type": "IfcGlobalOrLocalEnum", "is_enum": true, - "enum_values": [] + "enum_values": [ + "global_coords", + "local_coords" + ] } ] }, - { - "name": "IfcStructuralPointAction", + "IfcStructuralPointAction": { "is_abstract": false, "parent": "IfcStructuralAction", "attributes": [ @@ -3590,18 +3491,19 @@ "name": "GlobalOrLocal", "type": "IfcGlobalOrLocalEnum", "is_enum": true, - "enum_values": [] + "enum_values": [ + "global_coords", + "local_coords" + ] } ] }, - { - "name": "IfcStructuralPointConnection", + "IfcStructuralPointConnection": { "is_abstract": false, "parent": "IfcStructuralConnection", "attributes": [] }, - { - "name": "IfcStructuralPointReaction", + "IfcStructuralPointReaction": { "is_abstract": false, "parent": "IfcStructuralReaction", "attributes": [ @@ -3609,12 +3511,14 @@ "name": "GlobalOrLocal", "type": "IfcGlobalOrLocalEnum", "is_enum": true, - "enum_values": [] + "enum_values": [ + "global_coords", + "local_coords" + ] } ] }, - { - "name": "IfcStructuralSurfaceAction", + "IfcStructuralSurfaceAction": { "is_abstract": false, "parent": "IfcStructuralAction", "attributes": [ @@ -3650,18 +3554,19 @@ "name": "GlobalOrLocal", "type": "IfcGlobalOrLocalEnum", "is_enum": true, - "enum_values": [] + "enum_values": [ + "global_coords", + "local_coords" + ] } ] }, - { - "name": "IfcStructuralSurfaceConnection", + "IfcStructuralSurfaceConnection": { "is_abstract": false, "parent": "IfcStructuralConnection", "attributes": [] }, - { - "name": "IfcStructuralSurfaceMember", + "IfcStructuralSurfaceMember": { "is_abstract": false, "parent": "IfcStructuralMember", "attributes": [ @@ -3685,8 +3590,7 @@ } ] }, - { - "name": "IfcStructuralSurfaceMemberVarying", + "IfcStructuralSurfaceMemberVarying": { "is_abstract": false, "parent": "IfcStructuralSurfaceMember", "attributes": [ @@ -3710,8 +3614,7 @@ } ] }, - { - "name": "IfcStructuralSurfaceReaction", + "IfcStructuralSurfaceReaction": { "is_abstract": false, "parent": "IfcStructuralReaction", "attributes": [ @@ -3732,12 +3635,14 @@ "name": "GlobalOrLocal", "type": "IfcGlobalOrLocalEnum", "is_enum": true, - "enum_values": [] + "enum_values": [ + "global_coords", + "local_coords" + ] } ] }, - { - "name": "IfcSurfaceFeature", + "IfcSurfaceFeature": { "is_abstract": false, "parent": "IfcFeatureElement", "attributes": [ @@ -3761,8 +3666,7 @@ } ] }, - { - "name": "IfcSwitchingDevice", + "IfcSwitchingDevice": { "is_abstract": false, "parent": "IfcFlowController", "attributes": [ @@ -3792,8 +3696,7 @@ } ] }, - { - "name": "IfcSystemFurnitureElement", + "IfcSystemFurnitureElement": { "is_abstract": false, "parent": "IfcFurnishingElement", "attributes": [ @@ -3816,8 +3719,7 @@ } ] }, - { - "name": "IfcTank", + "IfcTank": { "is_abstract": false, "parent": "IfcFlowStorageDevice", "attributes": [ @@ -3845,8 +3747,7 @@ } ] }, - { - "name": "IfcTendon", + "IfcTendon": { "is_abstract": false, "parent": "IfcReinforcingElement", "attributes": [ @@ -3919,8 +3820,7 @@ } ] }, - { - "name": "IfcTendonAnchor", + "IfcTendonAnchor": { "is_abstract": false, "parent": "IfcReinforcingElement", "attributes": [ @@ -3950,8 +3850,7 @@ } ] }, - { - "name": "IfcTransformer", + "IfcTransformer": { "is_abstract": false, "parent": "IfcEnergyConversionDevice", "attributes": [ @@ -3977,8 +3876,7 @@ } ] }, - { - "name": "IfcTransportElement", + "IfcTransportElement": { "is_abstract": false, "parent": "IfcElement", "attributes": [ @@ -4004,8 +3902,7 @@ } ] }, - { - "name": "IfcTubeBundle", + "IfcTubeBundle": { "is_abstract": false, "parent": "IfcEnergyConversionDevice", "attributes": [ @@ -4027,8 +3924,7 @@ } ] }, - { - "name": "IfcUnitaryControlElement", + "IfcUnitaryControlElement": { "is_abstract": false, "parent": "IfcDistributionControlElement", "attributes": [ @@ -4057,8 +3953,7 @@ } ] }, - { - "name": "IfcUnitaryEquipment", + "IfcUnitaryEquipment": { "is_abstract": false, "parent": "IfcEnergyConversionDevice", "attributes": [ @@ -4084,8 +3979,7 @@ } ] }, - { - "name": "IfcValve", + "IfcValve": { "is_abstract": false, "parent": "IfcFlowController", "attributes": [ @@ -4127,8 +4021,7 @@ } ] }, - { - "name": "IfcVibrationIsolator", + "IfcVibrationIsolator": { "is_abstract": false, "parent": "IfcElementComponent", "attributes": [ @@ -4151,8 +4044,7 @@ } ] }, - { - "name": "IfcVirtualElement", + "IfcVirtualElement": { "is_abstract": false, "parent": "IfcElement", "attributes": [ @@ -4164,8 +4056,7 @@ } ] }, - { - "name": "IfcVoidingFeature", + "IfcVoidingFeature": { "is_abstract": false, "parent": "IfcFeatureElementSubtraction", "attributes": [ @@ -4192,8 +4083,7 @@ } ] }, - { - "name": "IfcWall", + "IfcWall": { "is_abstract": false, "parent": "IfcBuildingElement", "attributes": [ @@ -4223,8 +4113,7 @@ } ] }, - { - "name": "IfcWallElementedCase", + "IfcWallElementedCase": { "is_abstract": false, "parent": "IfcWall", "attributes": [ @@ -4254,8 +4143,7 @@ } ] }, - { - "name": "IfcWallStandardCase", + "IfcWallStandardCase": { "is_abstract": false, "parent": "IfcWall", "attributes": [ @@ -4285,8 +4173,7 @@ } ] }, - { - "name": "IfcWasteTerminal", + "IfcWasteTerminal": { "is_abstract": false, "parent": "IfcFlowTerminal", "attributes": [ @@ -4314,8 +4201,7 @@ } ] }, - { - "name": "IfcWindow", + "IfcWindow": { "is_abstract": false, "parent": "IfcBuildingElement", "attributes": [ @@ -4375,8 +4261,7 @@ } ] }, - { - "name": "IfcWindowStandardCase", + "IfcWindowStandardCase": { "is_abstract": false, "parent": "IfcWindow", "attributes": [ @@ -4436,4 +4321,4 @@ } ] } -] \ No newline at end of file +} \ No newline at end of file From 3c73beef35f68df8ee6cd58c353b3925337852ba Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Sat, 26 Jan 2019 13:33:17 +1100 Subject: [PATCH 09/22] Add ifc_types.json which stores all of the ifc types --- src/Mod/Arch/Presets/ifc_types.json | 140 ++++++++++++++++++++++++++++ 1 file changed, 140 insertions(+) create mode 100644 src/Mod/Arch/Presets/ifc_types.json diff --git a/src/Mod/Arch/Presets/ifc_types.json b/src/Mod/Arch/Presets/ifc_types.json new file mode 100644 index 0000000000..faa909ed39 --- /dev/null +++ b/src/Mod/Arch/Presets/ifc_types.json @@ -0,0 +1,140 @@ +{ + "IfcBSplineCurveForm": "xs:string", + "IfcBSplineSurfaceForm": "xs:string", + "IfcBooleanOperator": "xs:string", + "IfcKnotType": "xs:string", + "IfcNullStyle": "xs:string", + "IfcPreferredSurfaceCurveRepresentation": "xs:string", + "IfcSIPrefix": "xs:string", + "IfcSIUnitName": "xs:string", + "IfcSurfaceSide": "xs:string", + "IfcTextPath": "xs:string", + "IfcTransitionCode": "xs:string", + "IfcTrimmingPreference": "xs:string", + "IfcAbsorbedDoseMeasure": "xs:double", + "IfcAccelerationMeasure": "xs:double", + "IfcAmountOfSubstanceMeasure": "xs:double", + "IfcAngularVelocityMeasure": "xs:double", + "IfcAreaDensityMeasure": "xs:double", + "IfcAreaMeasure": "xs:double", + "IfcBoolean": "xs:boolean", + "IfcBoxAlignment": "ifc:IfcLabel", + "IfcCardinalPointReference": "xs:long", + "IfcContextDependentMeasure": "xs:double", + "IfcCountMeasure": "xs:double", + "IfcCurvatureMeasure": "xs:double", + "IfcDate": "xs:normalizedString", + "IfcDateTime": "xs:normalizedString", + "IfcDayInMonthNumber": "xs:long", + "IfcDayInWeekNumber": "xs:long", + "IfcDescriptiveMeasure": "xs:normalizedString", + "IfcDimensionCount": "xs:long", + "IfcDoseEquivalentMeasure": "xs:double", + "IfcDuration": "xs:normalizedString", + "IfcDynamicViscosityMeasure": "xs:double", + "IfcElectricCapacitanceMeasure": "xs:double", + "IfcElectricChargeMeasure": "xs:double", + "IfcElectricConductanceMeasure": "xs:double", + "IfcElectricCurrentMeasure": "xs:double", + "IfcElectricResistanceMeasure": "xs:double", + "IfcElectricVoltageMeasure": "xs:double", + "IfcEnergyMeasure": "xs:double", + "IfcFontStyle": "xs:normalizedString", + "IfcFontVariant": "xs:normalizedString", + "IfcFontWeight": "xs:normalizedString", + "IfcForceMeasure": "xs:double", + "IfcFrequencyMeasure": "xs:double", + "IfcGloballyUniqueId": "xs:normalizedString", + "IfcHeatFluxDensityMeasure": "xs:double", + "IfcHeatingValueMeasure": "xs:double", + "IfcIdentifier": "xs:normalizedString", + "IfcIlluminanceMeasure": "xs:double", + "IfcInductanceMeasure": "xs:double", + "IfcInteger": "xs:long", + "IfcIntegerCountRateMeasure": "xs:long", + "IfcIonConcentrationMeasure": "xs:double", + "IfcIsothermalMoistureCapacityMeasure": "xs:double", + "IfcKinematicViscosityMeasure": "xs:double", + "IfcLabel": "xs:normalizedString", + "IfcLanguageId": "ifc:IfcIdentifier", + "IfcLengthMeasure": "xs:double", + "IfcLinearForceMeasure": "xs:double", + "IfcLinearMomentMeasure": "xs:double", + "IfcLinearStiffnessMeasure": "xs:double", + "IfcLinearVelocityMeasure": "xs:double", + "IfcLogical": "ifc:logical", + "IfcLuminousFluxMeasure": "xs:double", + "IfcLuminousIntensityDistributionMeasure": "xs:double", + "IfcLuminousIntensityMeasure": "xs:double", + "IfcMagneticFluxDensityMeasure": "xs:double", + "IfcMagneticFluxMeasure": "xs:double", + "IfcMassDensityMeasure": "xs:double", + "IfcMassFlowRateMeasure": "xs:double", + "IfcMassMeasure": "xs:double", + "IfcMassPerLengthMeasure": "xs:double", + "IfcModulusOfElasticityMeasure": "xs:double", + "IfcModulusOfLinearSubgradeReactionMeasure": "xs:double", + "IfcModulusOfRotationalSubgradeReactionMeasure": "xs:double", + "IfcModulusOfSubgradeReactionMeasure": "xs:double", + "IfcMoistureDiffusivityMeasure": "xs:double", + "IfcMolecularWeightMeasure": "xs:double", + "IfcMomentOfInertiaMeasure": "xs:double", + "IfcMonetaryMeasure": "xs:double", + "IfcMonthInYearNumber": "xs:long", + "IfcNonNegativeLengthMeasure": "ifc:IfcLengthMeasure", + "IfcNormalisedRatioMeasure": "ifc:IfcRatioMeasure", + "IfcNumericMeasure": "xs:double", + "IfcPHMeasure": "xs:double", + "IfcParameterValue": "xs:double", + "IfcPlanarForceMeasure": "xs:double", + "IfcPlaneAngleMeasure": "xs:double", + "IfcPositiveInteger": "ifc:IfcInteger", + "IfcPositiveLengthMeasure": "ifc:IfcLengthMeasure", + "IfcPositivePlaneAngleMeasure": "ifc:IfcPlaneAngleMeasure", + "IfcPositiveRatioMeasure": "ifc:IfcRatioMeasure", + "IfcPowerMeasure": "xs:double", + "IfcPresentableText": "xs:normalizedString", + "IfcPressureMeasure": "xs:double", + "IfcRadioActivityMeasure": "xs:double", + "IfcRatioMeasure": "xs:double", + "IfcReal": "xs:double", + "IfcRotationalFrequencyMeasure": "xs:double", + "IfcRotationalMassMeasure": "xs:double", + "IfcRotationalStiffnessMeasure": "xs:double", + "IfcSectionModulusMeasure": "xs:double", + "IfcSectionalAreaIntegralMeasure": "xs:double", + "IfcShearModulusMeasure": "xs:double", + "IfcSolidAngleMeasure": "xs:double", + "IfcSoundPowerLevelMeasure": "xs:double", + "IfcSoundPowerMeasure": "xs:double", + "IfcSoundPressureLevelMeasure": "xs:double", + "IfcSoundPressureMeasure": "xs:double", + "IfcSpecificHeatCapacityMeasure": "xs:double", + "IfcSpecularExponent": "xs:double", + "IfcSpecularRoughness": "xs:double", + "IfcTemperatureGradientMeasure": "xs:double", + "IfcTemperatureRateOfChangeMeasure": "xs:double", + "IfcText": "xs:normalizedString", + "IfcTextAlignment": "xs:normalizedString", + "IfcTextDecoration": "xs:normalizedString", + "IfcTextFontName": "xs:normalizedString", + "IfcTextTransformation": "xs:normalizedString", + "IfcThermalAdmittanceMeasure": "xs:double", + "IfcThermalConductivityMeasure": "xs:double", + "IfcThermalExpansionCoefficientMeasure": "xs:double", + "IfcThermalResistanceMeasure": "xs:double", + "IfcThermalTransmittanceMeasure": "xs:double", + "IfcThermodynamicTemperatureMeasure": "xs:double", + "IfcTime": "xs:normalizedString", + "IfcTimeMeasure": "xs:double", + "IfcTimeStamp": "xs:long", + "IfcTorqueMeasure": "xs:double", + "IfcURIReference": "xs:normalizedString", + "IfcVaporPermeabilityMeasure": "xs:double", + "IfcVolumeMeasure": "xs:double", + "IfcVolumetricFlowRateMeasure": "xs:double", + "IfcWarpingConstantMeasure": "xs:double", + "IfcWarpingMomentMeasure": "xs:double", + "aggregateType": "xs:normalizedString", + "logical": "xs:normalizedString" +} \ No newline at end of file From 96748561d09a99b6335c2d03fdf369bbd4fb0657 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Sat, 26 Jan 2019 13:35:17 +1100 Subject: [PATCH 10/22] Update ArchComponent and importIFC to use values from the new ifc_products dictionary --- src/Mod/Arch/ArchComponent.py | 8 ++++---- src/Mod/Arch/importIFC.py | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Mod/Arch/ArchComponent.py b/src/Mod/Arch/ArchComponent.py index 4c3e852e17..2ae67c0c39 100644 --- a/src/Mod/Arch/ArchComponent.py +++ b/src/Mod/Arch/ArchComponent.py @@ -61,12 +61,12 @@ with open(os.path.join(FreeCAD.getResourceDir(),"Mod","Arch","Presets","ifc_prod ifcProducts = json.load(f) # Possible roles for FreeCAD BIM objects -IfcRoles = ['Undefined']+[''.join(map(lambda x: x if x.islower() else " "+x, t[3:]))[1:] for t in [product["name"] for product in ifcProducts]] +IfcRoles = ['Undefined']+[''.join(map(lambda x: x if x.islower() else " "+x, t[3:]))[1:] for t in ifcProducts.keys()] def getIfcProduct(IfcRole): - for ifcProduct in ifcProducts: - if ifcProduct["name"] == 'Ifc' + IfcRole.replace(' ', ''): - return ifcProduct + name = "Ifc" + IfcRole.replace(" ", "") + if name in ifcProducts: + return ifcProducts[name] def getIfcProductAttribute(ifcProduct, name): for attribute in ifcProduct["attributes"]: diff --git a/src/Mod/Arch/importIFC.py b/src/Mod/Arch/importIFC.py index 9734ba2965..b4212bca6b 100644 --- a/src/Mod/Arch/importIFC.py +++ b/src/Mod/Arch/importIFC.py @@ -1724,8 +1724,8 @@ def export(exportList,filename): count += 1 continue - from ArchComponent import IFCTYPES - if ifctype not in IFCTYPES: + from ArchComponent import ifcProducts + if ifctype not in ifcProducts.keys(): ifctype = "IfcBuildingElementProxy" # getting the "Force BREP" flag From d3017f8a871f1d71dcbe9542a3f0ccc77ec77c6b Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Sat, 26 Jan 2019 13:35:56 +1100 Subject: [PATCH 11/22] Remove hardcoded ifc types and instead load from ifc_types.json --- src/Mod/Arch/ArchComponent.py | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/src/Mod/Arch/ArchComponent.py b/src/Mod/Arch/ArchComponent.py index 2ae67c0c39..26212697c4 100644 --- a/src/Mod/Arch/ArchComponent.py +++ b/src/Mod/Arch/ArchComponent.py @@ -25,16 +25,6 @@ __title__="FreeCAD Arch Component" __author__ = "Yorik van Havre" __url__ = "http://www.freecadweb.org" - -# Property types -SimplePropertyTypes = ["IfcInteger","IfcReal","IfcBoolean","IfcIdentifier","IfcText","IfcLabel","IfcLogical"] -MeasurePropertyTypes = ["IfcVolumeMeasure","IfcTimeMeasure","IfcThermodynamicTemperatureMeasure","IfcSolidAngleMeasure", - "IfcPositiveRatioMeasure","IfcRatioMeasure","IfcPositivePlaneAngleMeasure","IfcPlaneAngleMeasure", - "IfcParameterValue","IfcNumericMeasure","IfcMassMeasure","IfcPositiveLengthMeasure", - "IfcLengthMeasure","IfcElectricCurrentMeasure","IfcDescriptiveMeasure","IfcCountMeasure", - "IfcContextDependentMeasure","IfcAreaMeasure","IfcAmountOfSubstanceMeasure", - "IfcLuminousIntensityMeasure","IfcNormalisedRatioMeasure","IfcComplexNumber"] - import FreeCAD,Draft,ArchCommands,math,sys,json,os from FreeCAD import Vector if FreeCAD.GuiUp: @@ -60,6 +50,9 @@ else: with open(os.path.join(FreeCAD.getResourceDir(),"Mod","Arch","Presets","ifc_products.json")) as f: ifcProducts = json.load(f) +with open(os.path.join(FreeCAD.getResourceDir(),"Mod","Arch","Presets","ifc_types.json")) as f: + ifcTypes = json.load(f).keys() + # Possible roles for FreeCAD BIM objects IfcRoles = ['Undefined']+[''.join(map(lambda x: x if x.islower() else " "+x, t[3:]))[1:] for t in ifcProducts.keys()] @@ -1258,7 +1251,7 @@ class ComponentTaskPanel: import Arch_rc,csv,os # get presets - self.ptypes = SimplePropertyTypes + MeasurePropertyTypes + self.ptypes = ifcTypes self.plabels = [''.join(map(lambda x: x if x.islower() else " "+x, t[3:]))[1:] for t in self.ptypes] self.psetdefs = {} psetspath = os.path.join(FreeCAD.getResourceDir(),"Mod","Arch","Presets","pset_definitions.csv") From c613176920b26d38444674fbf1471d5190898a6e Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Sat, 26 Jan 2019 14:51:57 +1100 Subject: [PATCH 12/22] Now support boolean, floats, and length IFC types instead of just enum --- src/Mod/Arch/ArchComponent.py | 9 +- src/Mod/Arch/Presets/ifc_types.json | 690 ++++++++++++++++++++++------ 2 files changed, 558 insertions(+), 141 deletions(-) diff --git a/src/Mod/Arch/ArchComponent.py b/src/Mod/Arch/ArchComponent.py index 26212697c4..ce8d27d5a7 100644 --- a/src/Mod/Arch/ArchComponent.py +++ b/src/Mod/Arch/ArchComponent.py @@ -51,7 +51,7 @@ with open(os.path.join(FreeCAD.getResourceDir(),"Mod","Arch","Presets","ifc_prod ifcProducts = json.load(f) with open(os.path.join(FreeCAD.getResourceDir(),"Mod","Arch","Presets","ifc_types.json")) as f: - ifcTypes = json.load(f).keys() + ifcTypes = json.load(f) # Possible roles for FreeCAD BIM objects IfcRoles = ['Undefined']+[''.join(map(lambda x: x if x.islower() else " "+x, t[3:]))[1:] for t in ifcProducts.keys()] @@ -209,11 +209,14 @@ class Component: obj.addProperty("App::PropertyEnumeration", attribute["name"], "IFC Attributes", QT_TRANSLATE_NOOP("App::Property", "Description of IFC attributes are not yet implemented")) setattr(obj, attribute["name"], attribute["enum_values"]) else: - obj.addProperty("App::PropertyString", attribute["name"], "IFC Attributes", QT_TRANSLATE_NOOP("App::Property", "Description of IFC attributes are not yet implemented")) + propertyType = "App::" + ifcTypes[attribute["type"]]["property"] + obj.addProperty(propertyType, attribute["name"], "IFC Attributes", QT_TRANSLATE_NOOP("App::Property", "Description of IFC attributes are not yet implemented")) def setObjIfcAttributeValue(self, obj, attributeName, value): IfcData = obj.IfcData IfcAttributes = json.loads(IfcData["attributes"]) + if isinstance(value, FreeCAD.Units.Quantity): + value = float(value) IfcAttributes[attributeName]["value"] = value IfcData["attributes"] = json.dumps(IfcAttributes) obj.IfcData = IfcData @@ -1251,7 +1254,7 @@ class ComponentTaskPanel: import Arch_rc,csv,os # get presets - self.ptypes = ifcTypes + self.ptypes = ifcTypes.keys() self.plabels = [''.join(map(lambda x: x if x.islower() else " "+x, t[3:]))[1:] for t in self.ptypes] self.psetdefs = {} psetspath = os.path.join(FreeCAD.getResourceDir(),"Mod","Arch","Presets","pset_definitions.csv") diff --git a/src/Mod/Arch/Presets/ifc_types.json b/src/Mod/Arch/Presets/ifc_types.json index faa909ed39..bb6da0ec1f 100644 --- a/src/Mod/Arch/Presets/ifc_types.json +++ b/src/Mod/Arch/Presets/ifc_types.json @@ -1,140 +1,554 @@ { - "IfcBSplineCurveForm": "xs:string", - "IfcBSplineSurfaceForm": "xs:string", - "IfcBooleanOperator": "xs:string", - "IfcKnotType": "xs:string", - "IfcNullStyle": "xs:string", - "IfcPreferredSurfaceCurveRepresentation": "xs:string", - "IfcSIPrefix": "xs:string", - "IfcSIUnitName": "xs:string", - "IfcSurfaceSide": "xs:string", - "IfcTextPath": "xs:string", - "IfcTransitionCode": "xs:string", - "IfcTrimmingPreference": "xs:string", - "IfcAbsorbedDoseMeasure": "xs:double", - "IfcAccelerationMeasure": "xs:double", - "IfcAmountOfSubstanceMeasure": "xs:double", - "IfcAngularVelocityMeasure": "xs:double", - "IfcAreaDensityMeasure": "xs:double", - "IfcAreaMeasure": "xs:double", - "IfcBoolean": "xs:boolean", - "IfcBoxAlignment": "ifc:IfcLabel", - "IfcCardinalPointReference": "xs:long", - "IfcContextDependentMeasure": "xs:double", - "IfcCountMeasure": "xs:double", - "IfcCurvatureMeasure": "xs:double", - "IfcDate": "xs:normalizedString", - "IfcDateTime": "xs:normalizedString", - "IfcDayInMonthNumber": "xs:long", - "IfcDayInWeekNumber": "xs:long", - "IfcDescriptiveMeasure": "xs:normalizedString", - "IfcDimensionCount": "xs:long", - "IfcDoseEquivalentMeasure": "xs:double", - "IfcDuration": "xs:normalizedString", - "IfcDynamicViscosityMeasure": "xs:double", - "IfcElectricCapacitanceMeasure": "xs:double", - "IfcElectricChargeMeasure": "xs:double", - "IfcElectricConductanceMeasure": "xs:double", - "IfcElectricCurrentMeasure": "xs:double", - "IfcElectricResistanceMeasure": "xs:double", - "IfcElectricVoltageMeasure": "xs:double", - "IfcEnergyMeasure": "xs:double", - "IfcFontStyle": "xs:normalizedString", - "IfcFontVariant": "xs:normalizedString", - "IfcFontWeight": "xs:normalizedString", - "IfcForceMeasure": "xs:double", - "IfcFrequencyMeasure": "xs:double", - "IfcGloballyUniqueId": "xs:normalizedString", - "IfcHeatFluxDensityMeasure": "xs:double", - "IfcHeatingValueMeasure": "xs:double", - "IfcIdentifier": "xs:normalizedString", - "IfcIlluminanceMeasure": "xs:double", - "IfcInductanceMeasure": "xs:double", - "IfcInteger": "xs:long", - "IfcIntegerCountRateMeasure": "xs:long", - "IfcIonConcentrationMeasure": "xs:double", - "IfcIsothermalMoistureCapacityMeasure": "xs:double", - "IfcKinematicViscosityMeasure": "xs:double", - "IfcLabel": "xs:normalizedString", - "IfcLanguageId": "ifc:IfcIdentifier", - "IfcLengthMeasure": "xs:double", - "IfcLinearForceMeasure": "xs:double", - "IfcLinearMomentMeasure": "xs:double", - "IfcLinearStiffnessMeasure": "xs:double", - "IfcLinearVelocityMeasure": "xs:double", - "IfcLogical": "ifc:logical", - "IfcLuminousFluxMeasure": "xs:double", - "IfcLuminousIntensityDistributionMeasure": "xs:double", - "IfcLuminousIntensityMeasure": "xs:double", - "IfcMagneticFluxDensityMeasure": "xs:double", - "IfcMagneticFluxMeasure": "xs:double", - "IfcMassDensityMeasure": "xs:double", - "IfcMassFlowRateMeasure": "xs:double", - "IfcMassMeasure": "xs:double", - "IfcMassPerLengthMeasure": "xs:double", - "IfcModulusOfElasticityMeasure": "xs:double", - "IfcModulusOfLinearSubgradeReactionMeasure": "xs:double", - "IfcModulusOfRotationalSubgradeReactionMeasure": "xs:double", - "IfcModulusOfSubgradeReactionMeasure": "xs:double", - "IfcMoistureDiffusivityMeasure": "xs:double", - "IfcMolecularWeightMeasure": "xs:double", - "IfcMomentOfInertiaMeasure": "xs:double", - "IfcMonetaryMeasure": "xs:double", - "IfcMonthInYearNumber": "xs:long", - "IfcNonNegativeLengthMeasure": "ifc:IfcLengthMeasure", - "IfcNormalisedRatioMeasure": "ifc:IfcRatioMeasure", - "IfcNumericMeasure": "xs:double", - "IfcPHMeasure": "xs:double", - "IfcParameterValue": "xs:double", - "IfcPlanarForceMeasure": "xs:double", - "IfcPlaneAngleMeasure": "xs:double", - "IfcPositiveInteger": "ifc:IfcInteger", - "IfcPositiveLengthMeasure": "ifc:IfcLengthMeasure", - "IfcPositivePlaneAngleMeasure": "ifc:IfcPlaneAngleMeasure", - "IfcPositiveRatioMeasure": "ifc:IfcRatioMeasure", - "IfcPowerMeasure": "xs:double", - "IfcPresentableText": "xs:normalizedString", - "IfcPressureMeasure": "xs:double", - "IfcRadioActivityMeasure": "xs:double", - "IfcRatioMeasure": "xs:double", - "IfcReal": "xs:double", - "IfcRotationalFrequencyMeasure": "xs:double", - "IfcRotationalMassMeasure": "xs:double", - "IfcRotationalStiffnessMeasure": "xs:double", - "IfcSectionModulusMeasure": "xs:double", - "IfcSectionalAreaIntegralMeasure": "xs:double", - "IfcShearModulusMeasure": "xs:double", - "IfcSolidAngleMeasure": "xs:double", - "IfcSoundPowerLevelMeasure": "xs:double", - "IfcSoundPowerMeasure": "xs:double", - "IfcSoundPressureLevelMeasure": "xs:double", - "IfcSoundPressureMeasure": "xs:double", - "IfcSpecificHeatCapacityMeasure": "xs:double", - "IfcSpecularExponent": "xs:double", - "IfcSpecularRoughness": "xs:double", - "IfcTemperatureGradientMeasure": "xs:double", - "IfcTemperatureRateOfChangeMeasure": "xs:double", - "IfcText": "xs:normalizedString", - "IfcTextAlignment": "xs:normalizedString", - "IfcTextDecoration": "xs:normalizedString", - "IfcTextFontName": "xs:normalizedString", - "IfcTextTransformation": "xs:normalizedString", - "IfcThermalAdmittanceMeasure": "xs:double", - "IfcThermalConductivityMeasure": "xs:double", - "IfcThermalExpansionCoefficientMeasure": "xs:double", - "IfcThermalResistanceMeasure": "xs:double", - "IfcThermalTransmittanceMeasure": "xs:double", - "IfcThermodynamicTemperatureMeasure": "xs:double", - "IfcTime": "xs:normalizedString", - "IfcTimeMeasure": "xs:double", - "IfcTimeStamp": "xs:long", - "IfcTorqueMeasure": "xs:double", - "IfcURIReference": "xs:normalizedString", - "IfcVaporPermeabilityMeasure": "xs:double", - "IfcVolumeMeasure": "xs:double", - "IfcVolumetricFlowRateMeasure": "xs:double", - "IfcWarpingConstantMeasure": "xs:double", - "IfcWarpingMomentMeasure": "xs:double", - "aggregateType": "xs:normalizedString", - "logical": "xs:normalizedString" + "IfcBSplineCurveForm": { + "base": "xs:string", + "property": "PropertyString" + }, + "IfcBSplineSurfaceForm": { + "base": "xs:string", + "property": "PropertyString" + }, + "IfcBooleanOperator": { + "base": "xs:string", + "property": "PropertyString" + }, + "IfcKnotType": { + "base": "xs:string", + "property": "PropertyString" + }, + "IfcNullStyle": { + "base": "xs:string", + "property": "PropertyString" + }, + "IfcPreferredSurfaceCurveRepresentation": { + "base": "xs:string", + "property": "PropertyString" + }, + "IfcSIPrefix": { + "base": "xs:string", + "property": "PropertyString" + }, + "IfcSIUnitName": { + "base": "xs:string", + "property": "PropertyString" + }, + "IfcSurfaceSide": { + "base": "xs:string", + "property": "PropertyString" + }, + "IfcTextPath": { + "base": "xs:string", + "property": "PropertyString" + }, + "IfcTransitionCode": { + "base": "xs:string", + "property": "PropertyString" + }, + "IfcTrimmingPreference": { + "base": "xs:string", + "property": "PropertyString" + }, + "IfcAbsorbedDoseMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcAccelerationMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcAmountOfSubstanceMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcAngularVelocityMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcAreaDensityMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcAreaMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcBoolean": { + "base": "xs:boolean", + "property": "PropertyBool" + }, + "IfcBoxAlignment": { + "base": "ifc:IfcLabel", + "property": "PropertyString" + }, + "IfcCardinalPointReference": { + "base": "xs:long", + "property": "PropertyFloat" + }, + "IfcContextDependentMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcCountMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcCurvatureMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcDate": { + "base": "xs:normalizedString", + "property": "PropertyString" + }, + "IfcDateTime": { + "base": "xs:normalizedString", + "property": "PropertyString" + }, + "IfcDayInMonthNumber": { + "base": "xs:long", + "property": "PropertyFloat" + }, + "IfcDayInWeekNumber": { + "base": "xs:long", + "property": "PropertyFloat" + }, + "IfcDescriptiveMeasure": { + "base": "xs:normalizedString", + "property": "PropertyString" + }, + "IfcDimensionCount": { + "base": "xs:long", + "property": "PropertyFloat" + }, + "IfcDoseEquivalentMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcDuration": { + "base": "xs:normalizedString", + "property": "PropertyString" + }, + "IfcDynamicViscosityMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcElectricCapacitanceMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcElectricChargeMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcElectricConductanceMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcElectricCurrentMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcElectricResistanceMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcElectricVoltageMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcEnergyMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcFontStyle": { + "base": "xs:normalizedString", + "property": "PropertyString" + }, + "IfcFontVariant": { + "base": "xs:normalizedString", + "property": "PropertyString" + }, + "IfcFontWeight": { + "base": "xs:normalizedString", + "property": "PropertyString" + }, + "IfcForceMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcFrequencyMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcGloballyUniqueId": { + "base": "xs:normalizedString", + "property": "PropertyString" + }, + "IfcHeatFluxDensityMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcHeatingValueMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcIdentifier": { + "base": "xs:normalizedString", + "property": "PropertyString" + }, + "IfcIlluminanceMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcInductanceMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcInteger": { + "base": "xs:long", + "property": "PropertyFloat" + }, + "IfcIntegerCountRateMeasure": { + "base": "xs:long", + "property": "PropertyFloat" + }, + "IfcIonConcentrationMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcIsothermalMoistureCapacityMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcKinematicViscosityMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcLabel": { + "base": "xs:normalizedString", + "property": "PropertyString" + }, + "IfcLanguageId": { + "base": "ifc:IfcIdentifier", + "property": "PropertyString" + }, + "IfcLengthMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcLinearForceMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcLinearMomentMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcLinearStiffnessMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcLinearVelocityMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcLogical": { + "base": "ifc:logical", + "property": "PropertyBool" + }, + "IfcLuminousFluxMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcLuminousIntensityDistributionMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcLuminousIntensityMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcMagneticFluxDensityMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcMagneticFluxMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcMassDensityMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcMassFlowRateMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcMassMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcMassPerLengthMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcModulusOfElasticityMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcModulusOfLinearSubgradeReactionMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcModulusOfRotationalSubgradeReactionMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcModulusOfSubgradeReactionMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcMoistureDiffusivityMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcMolecularWeightMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcMomentOfInertiaMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcMonetaryMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcMonthInYearNumber": { + "base": "xs:long", + "property": "PropertyFloat" + }, + "IfcNonNegativeLengthMeasure": { + "base": "ifc:IfcLengthMeasure", + "property": "PropertyLength" + }, + "IfcNormalisedRatioMeasure": { + "base": "ifc:IfcRatioMeasure", + "property": "PropertyFloat" + }, + "IfcNumericMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcPHMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcParameterValue": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcPlanarForceMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcPlaneAngleMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcPositiveInteger": { + "base": "ifc:IfcInteger", + "property": "PropertyInteger" + }, + "IfcPositiveLengthMeasure": { + "base": "ifc:IfcLengthMeasure", + "property": "PropertyLength" + }, + "IfcPositivePlaneAngleMeasure": { + "base": "ifc:IfcPlaneAngleMeasure", + "property": "PropertyFloat" + }, + "IfcPositiveRatioMeasure": { + "base": "ifc:IfcRatioMeasure", + "property": "PropertyFloat" + }, + "IfcPowerMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcPresentableText": { + "base": "xs:normalizedString", + "property": "PropertyString" + }, + "IfcPressureMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcRadioActivityMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcRatioMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcReal": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcRotationalFrequencyMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcRotationalMassMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcRotationalStiffnessMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcSectionModulusMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcSectionalAreaIntegralMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcShearModulusMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcSolidAngleMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcSoundPowerLevelMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcSoundPowerMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcSoundPressureLevelMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcSoundPressureMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcSpecificHeatCapacityMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcSpecularExponent": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcSpecularRoughness": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcTemperatureGradientMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcTemperatureRateOfChangeMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcText": { + "base": "xs:normalizedString", + "property": "PropertyString" + }, + "IfcTextAlignment": { + "base": "xs:normalizedString", + "property": "PropertyString" + }, + "IfcTextDecoration": { + "base": "xs:normalizedString", + "property": "PropertyString" + }, + "IfcTextFontName": { + "base": "xs:normalizedString", + "property": "PropertyString" + }, + "IfcTextTransformation": { + "base": "xs:normalizedString", + "property": "PropertyString" + }, + "IfcThermalAdmittanceMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcThermalConductivityMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcThermalExpansionCoefficientMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcThermalResistanceMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcThermalTransmittanceMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcThermodynamicTemperatureMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcTime": { + "base": "xs:normalizedString", + "property": "PropertyString" + }, + "IfcTimeMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcTimeStamp": { + "base": "xs:long", + "property": "PropertyFloat" + }, + "IfcTorqueMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcURIReference": { + "base": "xs:normalizedString", + "property": "PropertyString" + }, + "IfcVaporPermeabilityMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcVolumeMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcVolumetricFlowRateMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcWarpingConstantMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "IfcWarpingMomentMeasure": { + "base": "xs:double", + "property": "PropertyFloat" + }, + "aggregateType": { + "base": "xs:normalizedString", + "property": "PropertyString" + }, + "logical": { + "base": "xs:normalizedString", + "property": "PropertyString" + } } \ No newline at end of file From 318036aa292d108e870c34997b3abe731ad2cc2f Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Sat, 26 Jan 2019 20:47:58 +1100 Subject: [PATCH 13/22] Make importIFC use IfcData instead of IfcAttributes. --- src/Mod/Arch/importIFC.py | 64 +++++++++++++++++++-------------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/src/Mod/Arch/importIFC.py b/src/Mod/Arch/importIFC.py index b4212bca6b..0a3d991dab 100644 --- a/src/Mod/Arch/importIFC.py +++ b/src/Mod/Arch/importIFC.py @@ -843,10 +843,10 @@ def insert(filename,docname,skip=[],only=[],root=None): # setting uid - if hasattr(obj,"IfcAttributes"): - a = obj.IfcAttributes + if hasattr(obj,"IfcData"): + a = obj.IfcData a["IfcUID"] = str(guid) - obj.IfcAttributes = a + obj.IfcData = a if obj: s = "" @@ -889,10 +889,10 @@ def insert(filename,docname,skip=[],only=[],root=None): obj.Role = r except: print("Unable to give IFC role ",ptype," to object ",obj.Label) - if hasattr(obj,"IfcAttributes"): - a = obj.IfcAttributes + if hasattr(obj,"IfcData"): + a = obj.IfcData a["IfcUID"] = str(guid) - obj.IfcAttributes = a + obj.IfcData = a elif (MERGE_MODE_ARCH == 2 and archobj) or (MERGE_MODE_STRUCT == 1 and not archobj): @@ -994,17 +994,17 @@ def insert(filename,docname,skip=[],only=[],root=None): #print("adding property: ",pname,ptype,pvalue," pset ",psetname) obj.IfcProperties = d - elif hasattr(obj,"IfcAttributes"): + elif hasattr(obj,"IfcData"): - # 0.17: properties are saved as type(value) in IfcAttributes + # 0.17: properties are saved as type(value) in IfcData - a = obj.IfcAttributes + a = obj.IfcData for c in properties[pid].keys(): for p in properties[pid][c]: l = ifcfile[p] if l.is_a("IfcPropertySingleValue"): a[l.Name.encode("utf8")] = str(l.NominalValue) # no py3 support here - obj.IfcAttributes = a + obj.IfcData = a # color @@ -1633,16 +1633,16 @@ def export(exportList,filename): # getting uid uid = None - if hasattr(obj,"IfcAttributes"): - if "IfcUID" in obj.IfcAttributes.keys(): - uid = str(obj.IfcAttributes["IfcUID"]) + if hasattr(obj,"IfcData"): + if "IfcUID" in obj.IfcData.keys(): + uid = str(obj.IfcData["IfcUID"]) if not uid: uid = ifcopenshell.guid.compress(uuid.uuid1().hex) # storing the uid for further use - if STORE_UID and hasattr(obj,"IfcAttributes"): - d = obj.IfcAttributes + if STORE_UID and hasattr(obj,"IfcData"): + d = obj.IfcData d["IfcUID"] = uid - obj.IfcAttributes = d + obj.IfcData = d # setting the IFC type + name conversions @@ -1731,9 +1731,9 @@ def export(exportList,filename): # getting the "Force BREP" flag brepflag = False - if hasattr(obj,"IfcAttributes"): - if "FlagForceBrep" in obj.IfcAttributes.keys(): - if obj.IfcAttributes["FlagForceBrep"] == "True": + if hasattr(obj,"IfcData"): + if "FlagForceBrep" in obj.IfcData.keys(): + if obj.IfcData["FlagForceBrep"] == "True": brepflag = True # getting the representation @@ -1956,18 +1956,18 @@ def export(exportList,filename): pset = ifcfile.createIfcPropertySet(ifcopenshell.guid.compress(uuid.uuid1().hex),history,cat,None,props) ifcfile.createIfcRelDefinesByProperties(ifcopenshell.guid.compress(uuid.uuid1().hex),history,None,None,[product],pset) - if hasattr(obj,"IfcAttributes"): + if hasattr(obj,"IfcData"): - if obj.IfcAttributes: + if obj.IfcData: ifcprop = True #if DEBUG : print(" adding ifc attributes") props = [] - for key in obj.IfcAttributes: + for key in obj.IfcData: if not (key in ["IfcUID","FlagForceBrep"]): - # (deprecated) properties in IfcAttributes dict are stored as "key":"type(value)" + # (deprecated) properties in IfcData dict are stored as "key":"type(value)" - r = obj.IfcAttributes[key].strip(")").split("(") + r = obj.IfcData[key].strip(")").split("(") if len(r) == 1: tp = "IfcText" val = r[0] @@ -2000,19 +2000,19 @@ def export(exportList,filename): # Quantities - if hasattr(obj,"IfcAttributes"): + if hasattr(obj,"IfcData"): quantities = [] - if ("ExportHeight" in obj.IfcAttributes) and obj.IfcAttributes["ExportHeight"] and hasattr(obj,"Height"): + if ("ExportHeight" in obj.IfcData) and obj.IfcData["ExportHeight"] and hasattr(obj,"Height"): quantities.append(ifcfile.createIfcQuantityLength('Height',None,None,obj.Height.Value/1000.0)) - if ("ExportWidth" in obj.IfcAttributes) and obj.IfcAttributes["ExportWidth"] and hasattr(obj,"Width"): + if ("ExportWidth" in obj.IfcData) and obj.IfcData["ExportWidth"] and hasattr(obj,"Width"): quantities.append(ifcfile.createIfcQuantityLength('Width',None,None,obj.Width.Value/1000.0)) - if ("ExportLength" in obj.IfcAttributes) and obj.IfcAttributes["ExportLength"] and hasattr(obj,"Length"): + if ("ExportLength" in obj.IfcData) and obj.IfcData["ExportLength"] and hasattr(obj,"Length"): quantities.append(ifcfile.createIfcQuantityLength('Length',None,None,obj.Length.Value/1000.0)) - if ("ExportHorizontalArea" in obj.IfcAttributes) and obj.IfcAttributes["ExportHorizontalArea"] and hasattr(obj,"HorizontalArea"): + if ("ExportHorizontalArea" in obj.IfcData) and obj.IfcData["ExportHorizontalArea"] and hasattr(obj,"HorizontalArea"): quantities.append(ifcfile.createIfcQuantityArea('HorizontalArea',None,None,obj.HorizontalArea.Value/1000000.0)) - if ("ExportVerticalArea" in obj.IfcAttributes) and obj.IfcAttributes["ExportVerticalArea"] and hasattr(obj,"VerticalArea"): + if ("ExportVerticalArea" in obj.IfcData) and obj.IfcData["ExportVerticalArea"] and hasattr(obj,"VerticalArea"): quantities.append(ifcfile.createIfcQuantityArea('VerticalArea',None,None,obj.VerticalArea.Value/1000000.0)) - if ("ExportVolume" in obj.IfcAttributes) and obj.IfcAttributes["ExportVolume"] and obj.isDerivedFrom("Part::Feature"): + if ("ExportVolume" in obj.IfcData) and obj.IfcData["ExportVolume"] and obj.isDerivedFrom("Part::Feature"): quantities.append(ifcfile.createIfcQuantityVolume('Volume',None,None,obj.Shape.Volume/1000000000.0)) if quantities: eltq = ifcfile.createIfcElementQuantity(ifcopenshell.guid.compress(uuid.uuid1().hex),history,"ElementQuantities",None,"FreeCAD",quantities) @@ -2037,7 +2037,7 @@ def export(exportList,filename): for realm,ctx in sets: if ctx: for prop in ctx.PropertiesList: - if not(prop in ["IfcProperties","IfcAttributes","Shape","Proxy","ExpressionEngine","AngularDeflection","BoundingBox"]): + if not(prop in ["IfcProperties","IfcData","Shape","Proxy","ExpressionEngine","AngularDeflection","BoundingBox"]): try: ptype = ctx.getTypeIdOfProperty(prop) except AttributeError: From 2664f918947845747101eaff29dfe49290ab1ea2 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Sat, 26 Jan 2019 21:58:42 +1100 Subject: [PATCH 14/22] Implement import and exporting of IFC attributes --- src/Mod/Arch/importIFC.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/Mod/Arch/importIFC.py b/src/Mod/Arch/importIFC.py index 0a3d991dab..e1ff55046b 100644 --- a/src/Mod/Arch/importIFC.py +++ b/src/Mod/Arch/importIFC.py @@ -29,6 +29,7 @@ __url__ = "http://www.freecadweb.org" import os,time,tempfile,uuid,FreeCAD,Part,Draft,Arch,math,DraftVecUtils,sys from DraftGeomUtils import vec +from ArchComponent import ifcProducts ## @package importIFC # \ingroup ARCH @@ -847,6 +848,9 @@ def insert(filename,docname,skip=[],only=[],root=None): a = obj.IfcData a["IfcUID"] = str(guid) obj.IfcData = a + for attribute in ifcProducts[product.is_a()]["attributes"]: + if hasattr(product, attribute["name"]) and getattr(product, attribute["name"]): + setattr(obj, attribute["name"], getattr(product, attribute["name"])) if obj: s = "" @@ -1724,7 +1728,6 @@ def export(exportList,filename): count += 1 continue - from ArchComponent import ifcProducts if ifctype not in ifcProducts.keys(): ifctype = "IfcBuildingElementProxy" @@ -1793,6 +1796,14 @@ def export(exportList,filename): elif ifctype == "IfcReinforcingBar": kwargs.update({"NominalDiameter": obj.Diameter.Value, "BarLength": obj.Length.Value}) + # TODO: Reconcile the attributes above which can be cleverly derived + # from FreeCAD native data, with the explicit IFC attribute values below + for property in obj.PropertiesList: + if obj.getGroupOfProperty(property) == "IFC Attributes" and obj.getPropertyByName(property): + value = obj.getPropertyByName(property) + if isinstance(value, FreeCAD.Units.Quantity): + value = float(value) + kwargs.update({ property: value }) # creating the product From b10e6085e20661e4e964645441374c6ac506f9f7 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Sat, 26 Jan 2019 22:04:10 +1100 Subject: [PATCH 15/22] Bump ifc_products.json to have uppercase enums Enums should be uppercase which matches the IFC docs. This also prevents the need to do a upper() when using these values with IfcOpenShell. --- src/Mod/Arch/Presets/ifc_products.json | 2290 ++++++++++++------------ 1 file changed, 1145 insertions(+), 1145 deletions(-) diff --git a/src/Mod/Arch/Presets/ifc_products.json b/src/Mod/Arch/Presets/ifc_products.json index 3980fd2066..5202ba2dc3 100644 --- a/src/Mod/Arch/Presets/ifc_products.json +++ b/src/Mod/Arch/Presets/ifc_products.json @@ -8,13 +8,13 @@ "type": "IfcActuatorTypeEnum", "is_enum": true, "enum_values": [ - "electricactuator", - "handoperatedactuator", - "hydraulicactuator", - "pneumaticactuator", - "thermostaticactuator", - "userdefined", - "notdefined" + "ELECTRICACTUATOR", + "HANDOPERATEDACTUATOR", + "HYDRAULICACTUATOR", + "PNEUMATICACTUATOR", + "THERMOSTATICACTUATOR", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -34,12 +34,12 @@ "type": "IfcAirTerminalTypeEnum", "is_enum": true, "enum_values": [ - "diffuser", - "grille", - "louvre", - "register", - "userdefined", - "notdefined" + "DIFFUSER", + "GRILLE", + "LOUVRE", + "REGISTER", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -59,11 +59,11 @@ "type": "IfcAirTerminalBoxTypeEnum", "is_enum": true, "enum_values": [ - "constantflow", - "variableflowpressuredependant", - "variableflowpressureindependant", - "userdefined", - "notdefined" + "CONSTANTFLOW", + "VARIABLEFLOWPRESSUREDEPENDANT", + "VARIABLEFLOWPRESSUREINDEPENDANT", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -83,17 +83,17 @@ "type": "IfcAirToAirHeatRecoveryTypeEnum", "is_enum": true, "enum_values": [ - "fixedplatecounterflowexchanger", - "fixedplatecrossflowexchanger", - "fixedplateparallelflowexchanger", - "rotarywheel", - "runaroundcoilloop", - "heatpipe", - "twintowerenthalpyrecoveryloops", - "thermosiphonsealedtubeheatexchangers", - "thermosiphoncoiltypeheatexchangers", - "userdefined", - "notdefined" + "FIXEDPLATECOUNTERFLOWEXCHANGER", + "FIXEDPLATECROSSFLOWEXCHANGER", + "FIXEDPLATEPARALLELFLOWEXCHANGER", + "ROTARYWHEEL", + "RUNAROUNDCOILLOOP", + "HEATPIPE", + "TWINTOWERENTHALPYRECOVERYLOOPS", + "THERMOSIPHONSEALEDTUBEHEATEXCHANGERS", + "THERMOSIPHONCOILTYPEHEATEXCHANGERS", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -113,14 +113,14 @@ "type": "IfcAlarmTypeEnum", "is_enum": true, "enum_values": [ - "bell", - "breakglassbutton", - "light", - "manualpullbox", - "siren", - "whistle", - "userdefined", - "notdefined" + "BELL", + "BREAKGLASSBUTTON", + "LIGHT", + "MANUALPULLBOX", + "SIREN", + "WHISTLE", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -145,19 +145,19 @@ "type": "IfcAudioVisualApplianceTypeEnum", "is_enum": true, "enum_values": [ - "amplifier", - "camera", - "display", - "microphone", - "player", - "projector", - "receiver", - "speaker", - "switcher", - "telephone", - "tuner", - "userdefined", - "notdefined" + "AMPLIFIER", + "CAMERA", + "DISPLAY", + "MICROPHONE", + "PLAYER", + "PROJECTOR", + "RECEIVER", + "SPEAKER", + "SWITCHER", + "TELEPHONE", + "TUNER", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -177,14 +177,14 @@ "type": "IfcBeamTypeEnum", "is_enum": true, "enum_values": [ - "beam", - "joist", - "hollowcore", - "lintel", - "spandrel", - "t_beam", - "userdefined", - "notdefined" + "BEAM", + "JOIST", + "HOLLOWCORE", + "LINTEL", + "SPANDREL", + "T_BEAM", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -204,14 +204,14 @@ "type": "IfcBeamTypeEnum", "is_enum": true, "enum_values": [ - "beam", - "joist", - "hollowcore", - "lintel", - "spandrel", - "t_beam", - "userdefined", - "notdefined" + "BEAM", + "JOIST", + "HOLLOWCORE", + "LINTEL", + "SPANDREL", + "T_BEAM", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -231,10 +231,10 @@ "type": "IfcBoilerTypeEnum", "is_enum": true, "enum_values": [ - "water", - "steam", - "userdefined", - "notdefined" + "WATER", + "STEAM", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -266,9 +266,9 @@ "type": "IfcElementCompositionEnum", "is_enum": true, "enum_values": [ - "complex", - "element", - "partial" + "COMPLEX", + "ELEMENT", + "PARTIAL" ] }, { @@ -288,10 +288,10 @@ "type": "IfcBuildingElementPartTypeEnum", "is_enum": true, "enum_values": [ - "insulation", - "precastpanel", - "userdefined", - "notdefined" + "INSULATION", + "PRECASTPANEL", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -311,13 +311,13 @@ "type": "IfcBuildingElementProxyTypeEnum", "is_enum": true, "enum_values": [ - "complex", - "element", - "partial", - "provisionforvoid", - "provisionforspace", - "userdefined", - "notdefined" + "COMPLEX", + "ELEMENT", + "PARTIAL", + "PROVISIONFORVOID", + "PROVISIONFORSPACE", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -343,9 +343,9 @@ "type": "IfcElementCompositionEnum", "is_enum": true, "enum_values": [ - "complex", - "element", - "partial" + "COMPLEX", + "ELEMENT", + "PARTIAL" ] }, { @@ -365,8 +365,8 @@ "type": "IfcBurnerTypeEnum", "is_enum": true, "enum_values": [ - "userdefined", - "notdefined" + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -386,12 +386,12 @@ "type": "IfcCableCarrierFittingTypeEnum", "is_enum": true, "enum_values": [ - "bend", - "cross", - "reducer", - "tee", - "userdefined", - "notdefined" + "BEND", + "CROSS", + "REDUCER", + "TEE", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -411,12 +411,12 @@ "type": "IfcCableCarrierSegmentTypeEnum", "is_enum": true, "enum_values": [ - "cableladdersegment", - "cabletraysegment", - "cabletrunkingsegment", - "conduitsegment", - "userdefined", - "notdefined" + "CABLELADDERSEGMENT", + "CABLETRAYSEGMENT", + "CABLETRUNKINGSEGMENT", + "CONDUITSEGMENT", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -436,13 +436,13 @@ "type": "IfcCableFittingTypeEnum", "is_enum": true, "enum_values": [ - "connector", - "entry", - "exit", - "junction", - "transition", - "userdefined", - "notdefined" + "CONNECTOR", + "ENTRY", + "EXIT", + "JUNCTION", + "TRANSITION", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -462,12 +462,12 @@ "type": "IfcCableSegmentTypeEnum", "is_enum": true, "enum_values": [ - "busbarsegment", - "cablesegment", - "conductorsegment", - "coresegment", - "userdefined", - "notdefined" + "BUSBARSEGMENT", + "CABLESEGMENT", + "CONDUCTORSEGMENT", + "CORESEGMENT", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -487,11 +487,11 @@ "type": "IfcChillerTypeEnum", "is_enum": true, "enum_values": [ - "aircooled", - "watercooled", - "heatrecovery", - "userdefined", - "notdefined" + "AIRCOOLED", + "WATERCOOLED", + "HEATRECOVERY", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -511,8 +511,8 @@ "type": "IfcChimneyTypeEnum", "is_enum": true, "enum_values": [ - "userdefined", - "notdefined" + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -544,15 +544,15 @@ "type": "IfcCoilTypeEnum", "is_enum": true, "enum_values": [ - "dxcoolingcoil", - "electricheatingcoil", - "gasheatingcoil", - "hydroniccoil", - "steamheatingcoil", - "watercoolingcoil", - "waterheatingcoil", - "userdefined", - "notdefined" + "DXCOOLINGCOIL", + "ELECTRICHEATINGCOIL", + "GASHEATINGCOIL", + "HYDRONICCOIL", + "STEAMHEATINGCOIL", + "WATERCOOLINGCOIL", + "WATERHEATINGCOIL", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -572,10 +572,10 @@ "type": "IfcColumnTypeEnum", "is_enum": true, "enum_values": [ - "column", - "pilaster", - "userdefined", - "notdefined" + "COLUMN", + "PILASTER", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -595,10 +595,10 @@ "type": "IfcColumnTypeEnum", "is_enum": true, "enum_values": [ - "column", - "pilaster", - "userdefined", - "notdefined" + "COLUMN", + "PILASTER", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -618,20 +618,20 @@ "type": "IfcCommunicationsApplianceTypeEnum", "is_enum": true, "enum_values": [ - "antenna", - "computer", - "fax", - "gateway", - "modem", - "networkappliance", - "networkbridge", - "networkhub", - "printer", - "repeater", - "router", - "scanner", - "userdefined", - "notdefined" + "ANTENNA", + "COMPUTER", + "FAX", + "GATEWAY", + "MODEM", + "NETWORKAPPLIANCE", + "NETWORKBRIDGE", + "NETWORKHUB", + "PRINTER", + "REPEATER", + "ROUTER", + "SCANNER", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -651,23 +651,23 @@ "type": "IfcCompressorTypeEnum", "is_enum": true, "enum_values": [ - "dynamic", - "reciprocating", - "rotary", - "scroll", - "trochoidal", - "singlestage", - "booster", - "opentype", - "hermetic", - "semihermetic", - "weldedshellhermetic", - "rollingpiston", - "rotaryvane", - "singlescrew", - "twinscrew", - "userdefined", - "notdefined" + "DYNAMIC", + "RECIPROCATING", + "ROTARY", + "SCROLL", + "TROCHOIDAL", + "SINGLESTAGE", + "BOOSTER", + "OPENTYPE", + "HERMETIC", + "SEMIHERMETIC", + "WELDEDSHELLHERMETIC", + "ROLLINGPISTON", + "ROTARYVANE", + "SINGLESCREW", + "TWINSCREW", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -687,15 +687,15 @@ "type": "IfcCondenserTypeEnum", "is_enum": true, "enum_values": [ - "aircooled", - "evaporativecooled", - "watercooled", - "watercooledbrazedplate", - "watercooledshellcoil", - "watercooledshelltube", - "watercooledtubeintube", - "userdefined", - "notdefined" + "AIRCOOLED", + "EVAPORATIVECOOLED", + "WATERCOOLED", + "WATERCOOLEDBRAZEDPLATE", + "WATERCOOLEDSHELLCOIL", + "WATERCOOLEDSHELLTUBE", + "WATERCOOLEDTUBEINTUBE", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -715,13 +715,13 @@ "type": "IfcControllerTypeEnum", "is_enum": true, "enum_values": [ - "floating", - "programmable", - "proportional", - "multiposition", - "twoposition", - "userdefined", - "notdefined" + "FLOATING", + "PROGRAMMABLE", + "PROPORTIONAL", + "MULTIPOSITION", + "TWOPOSITION", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -741,10 +741,10 @@ "type": "IfcCooledBeamTypeEnum", "is_enum": true, "enum_values": [ - "active", - "passive", - "userdefined", - "notdefined" + "ACTIVE", + "PASSIVE", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -764,11 +764,11 @@ "type": "IfcCoolingTowerTypeEnum", "is_enum": true, "enum_values": [ - "naturaldraft", - "mechanicalinduceddraft", - "mechanicalforceddraft", - "userdefined", - "notdefined" + "NATURALDRAFT", + "MECHANICALINDUCEDDRAFT", + "MECHANICALFORCEDDRAFT", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -788,18 +788,18 @@ "type": "IfcCoveringTypeEnum", "is_enum": true, "enum_values": [ - "ceiling", - "flooring", - "cladding", - "roofing", - "molding", - "skirtingboard", - "insulation", - "membrane", - "sleeving", - "wrapping", - "userdefined", - "notdefined" + "CEILING", + "FLOORING", + "CLADDING", + "ROOFING", + "MOLDING", + "SKIRTINGBOARD", + "INSULATION", + "MEMBRANE", + "SLEEVING", + "WRAPPING", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -819,8 +819,8 @@ "type": "IfcCurtainWallTypeEnum", "is_enum": true, "enum_values": [ - "userdefined", - "notdefined" + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -840,19 +840,19 @@ "type": "IfcDamperTypeEnum", "is_enum": true, "enum_values": [ - "backdraftdamper", - "balancingdamper", - "blastdamper", - "controldamper", - "firedamper", - "firesmokedamper", - "fumehoodexhaust", - "gravitydamper", - "gravityreliefdamper", - "reliefdamper", - "smokedamper", - "userdefined", - "notdefined" + "BACKDRAFTDAMPER", + "BALANCINGDAMPER", + "BLASTDAMPER", + "CONTROLDAMPER", + "FIREDAMPER", + "FIRESMOKEDAMPER", + "FUMEHOODEXHAUST", + "GRAVITYDAMPER", + "GRAVITYRELIEFDAMPER", + "RELIEFDAMPER", + "SMOKEDAMPER", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -872,11 +872,11 @@ "type": "IfcDiscreteAccessoryTypeEnum", "is_enum": true, "enum_values": [ - "anchorplate", - "bracket", - "shoe", - "userdefined", - "notdefined" + "ANCHORPLATE", + "BRACKET", + "SHOE", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -896,16 +896,16 @@ "type": "IfcDistributionChamberElementTypeEnum", "is_enum": true, "enum_values": [ - "formedduct", - "inspectionchamber", - "inspectionpit", - "manhole", - "meterchamber", - "sump", - "trench", - "valvechamber", - "userdefined", - "notdefined" + "FORMEDDUCT", + "INSPECTIONCHAMBER", + "INSPECTIONPIT", + "MANHOLE", + "METERCHAMBER", + "SUMP", + "TRENCH", + "VALVECHAMBER", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -961,10 +961,10 @@ "type": "IfcFlowDirectionEnum", "is_enum": true, "enum_values": [ - "source", - "sink", - "sourceandsink", - "notdefined" + "SOURCE", + "SINK", + "SOURCEANDSINK", + "NOTDEFINED" ] }, { @@ -972,12 +972,12 @@ "type": "IfcDistributionPortTypeEnum", "is_enum": true, "enum_values": [ - "cable", - "cablecarrier", - "duct", - "pipe", - "userdefined", - "notdefined" + "CABLE", + "CABLECARRIER", + "DUCT", + "PIPE", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -985,50 +985,50 @@ "type": "IfcDistributionSystemEnum", "is_enum": true, "enum_values": [ - "airconditioning", - "audiovisual", - "chemical", - "chilledwater", - "communication", - "compressedair", - "condenserwater", - "control", - "conveying", - "data", - "disposal", - "domesticcoldwater", - "domestichotwater", - "drainage", - "earthing", - "electrical", - "electroacoustic", - "exhaust", - "fireprotection", - "fuel", - "gas", - "hazardous", - "heating", - "lighting", - "lightningprotection", - "municipalsolidwaste", - "oil", - "operational", - "powergeneration", - "rainwater", - "refrigeration", - "security", - "sewage", - "signal", - "stormwater", - "telephone", - "tv", - "vacuum", - "vent", - "ventilation", - "wastewater", - "watersupply", - "userdefined", - "notdefined" + "AIRCONDITIONING", + "AUDIOVISUAL", + "CHEMICAL", + "CHILLEDWATER", + "COMMUNICATION", + "COMPRESSEDAIR", + "CONDENSERWATER", + "CONTROL", + "CONVEYING", + "DATA", + "DISPOSAL", + "DOMESTICCOLDWATER", + "DOMESTICHOTWATER", + "DRAINAGE", + "EARTHING", + "ELECTRICAL", + "ELECTROACOUSTIC", + "EXHAUST", + "FIREPROTECTION", + "FUEL", + "GAS", + "HAZARDOUS", + "HEATING", + "LIGHTING", + "LIGHTNINGPROTECTION", + "MUNICIPALSOLIDWASTE", + "OIL", + "OPERATIONAL", + "POWERGENERATION", + "RAINWATER", + "REFRIGERATION", + "SECURITY", + "SEWAGE", + "SIGNAL", + "STORMWATER", + "TELEPHONE", + "TV", + "VACUUM", + "VENT", + "VENTILATION", + "WASTEWATER", + "WATERSUPPLY", + "USERDEFINED", + "NOTDEFINED" ] } ] @@ -1054,11 +1054,11 @@ "type": "IfcDoorTypeEnum", "is_enum": true, "enum_values": [ - "door", - "gate", - "trapdoor", - "userdefined", - "notdefined" + "DOOR", + "GATE", + "TRAPDOOR", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -1066,26 +1066,26 @@ "type": "IfcDoorTypeOperationEnum", "is_enum": true, "enum_values": [ - "single_swing_left", - "single_swing_right", - "double_door_single_swing", - "double_door_single_swing_opposite_left", - "double_door_single_swing_opposite_right", - "double_swing_left", - "double_swing_right", - "double_door_double_swing", - "sliding_to_left", - "sliding_to_right", - "double_door_sliding", - "folding_to_left", - "folding_to_right", - "double_door_folding", - "revolving", - "rollingup", - "swing_fixed_left", - "swing_fixed_right", - "userdefined", - "notdefined" + "SINGLE_SWING_LEFT", + "SINGLE_SWING_RIGHT", + "DOUBLE_DOOR_SINGLE_SWING", + "DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT", + "DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT", + "DOUBLE_SWING_LEFT", + "DOUBLE_SWING_RIGHT", + "DOUBLE_DOOR_DOUBLE_SWING", + "SLIDING_TO_LEFT", + "SLIDING_TO_RIGHT", + "DOUBLE_DOOR_SLIDING", + "FOLDING_TO_LEFT", + "FOLDING_TO_RIGHT", + "DOUBLE_DOOR_FOLDING", + "REVOLVING", + "ROLLINGUP", + "SWING_FIXED_LEFT", + "SWING_FIXED_RIGHT", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -1123,11 +1123,11 @@ "type": "IfcDoorTypeEnum", "is_enum": true, "enum_values": [ - "door", - "gate", - "trapdoor", - "userdefined", - "notdefined" + "DOOR", + "GATE", + "TRAPDOOR", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -1135,26 +1135,26 @@ "type": "IfcDoorTypeOperationEnum", "is_enum": true, "enum_values": [ - "single_swing_left", - "single_swing_right", - "double_door_single_swing", - "double_door_single_swing_opposite_left", - "double_door_single_swing_opposite_right", - "double_swing_left", - "double_swing_right", - "double_door_double_swing", - "sliding_to_left", - "sliding_to_right", - "double_door_sliding", - "folding_to_left", - "folding_to_right", - "double_door_folding", - "revolving", - "rollingup", - "swing_fixed_left", - "swing_fixed_right", - "userdefined", - "notdefined" + "SINGLE_SWING_LEFT", + "SINGLE_SWING_RIGHT", + "DOUBLE_DOOR_SINGLE_SWING", + "DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT", + "DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT", + "DOUBLE_SWING_LEFT", + "DOUBLE_SWING_RIGHT", + "DOUBLE_DOOR_DOUBLE_SWING", + "SLIDING_TO_LEFT", + "SLIDING_TO_RIGHT", + "DOUBLE_DOOR_SLIDING", + "FOLDING_TO_LEFT", + "FOLDING_TO_RIGHT", + "DOUBLE_DOOR_FOLDING", + "REVOLVING", + "ROLLINGUP", + "SWING_FIXED_LEFT", + "SWING_FIXED_RIGHT", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -1180,15 +1180,15 @@ "type": "IfcDuctFittingTypeEnum", "is_enum": true, "enum_values": [ - "bend", - "connector", - "entry", - "exit", - "junction", - "obstruction", - "transition", - "userdefined", - "notdefined" + "BEND", + "CONNECTOR", + "ENTRY", + "EXIT", + "JUNCTION", + "OBSTRUCTION", + "TRANSITION", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -1208,10 +1208,10 @@ "type": "IfcDuctSegmentTypeEnum", "is_enum": true, "enum_values": [ - "rigidsegment", - "flexiblesegment", - "userdefined", - "notdefined" + "RIGIDSEGMENT", + "FLEXIBLESEGMENT", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -1231,11 +1231,11 @@ "type": "IfcDuctSilencerTypeEnum", "is_enum": true, "enum_values": [ - "flatoval", - "rectangular", - "round", - "userdefined", - "notdefined" + "FLATOVAL", + "RECTANGULAR", + "ROUND", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -1255,24 +1255,24 @@ "type": "IfcElectricApplianceTypeEnum", "is_enum": true, "enum_values": [ - "dishwasher", - "electriccooker", - "freestandingelectricheater", - "freestandingfan", - "freestandingwaterheater", - "freestandingwatercooler", - "freezer", - "fridge_freezer", - "handdryer", - "kitchenmachine", - "microwave", - "photocopier", - "refrigerator", - "tumbledryer", - "vendingmachine", - "washingmachine", - "userdefined", - "notdefined" + "DISHWASHER", + "ELECTRICCOOKER", + "FREESTANDINGELECTRICHEATER", + "FREESTANDINGFAN", + "FREESTANDINGWATERHEATER", + "FREESTANDINGWATERCOOLER", + "FREEZER", + "FRIDGE_FREEZER", + "HANDDRYER", + "KITCHENMACHINE", + "MICROWAVE", + "PHOTOCOPIER", + "REFRIGERATOR", + "TUMBLEDRYER", + "VENDINGMACHINE", + "WASHINGMACHINE", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -1292,12 +1292,12 @@ "type": "IfcElectricDistributionBoardTypeEnum", "is_enum": true, "enum_values": [ - "consumerunit", - "distributionboard", - "motorcontrolcentre", - "switchboard", - "userdefined", - "notdefined" + "CONSUMERUNIT", + "DISTRIBUTIONBOARD", + "MOTORCONTROLCENTRE", + "SWITCHBOARD", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -1317,13 +1317,13 @@ "type": "IfcElectricFlowStorageDeviceTypeEnum", "is_enum": true, "enum_values": [ - "battery", - "capacitorbank", - "harmonicfilter", - "inductorbank", - "ups", - "userdefined", - "notdefined" + "BATTERY", + "CAPACITORBANK", + "HARMONICFILTER", + "INDUCTORBANK", + "UPS", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -1343,11 +1343,11 @@ "type": "IfcElectricGeneratorTypeEnum", "is_enum": true, "enum_values": [ - "chp", - "enginegenerator", - "standalone", - "userdefined", - "notdefined" + "CHP", + "ENGINEGENERATOR", + "STANDALONE", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -1367,13 +1367,13 @@ "type": "IfcElectricMotorTypeEnum", "is_enum": true, "enum_values": [ - "dc", - "induction", - "polyphase", - "reluctancesynchronous", - "synchronous", - "userdefined", - "notdefined" + "DC", + "INDUCTION", + "POLYPHASE", + "RELUCTANCESYNCHRONOUS", + "SYNCHRONOUS", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -1393,11 +1393,11 @@ "type": "IfcElectricTimeControlTypeEnum", "is_enum": true, "enum_values": [ - "timeclock", - "timedelay", - "relay", - "userdefined", - "notdefined" + "TIMECLOCK", + "TIMEDELAY", + "RELAY", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -1417,9 +1417,9 @@ "type": "IfcAssemblyPlaceEnum", "is_enum": true, "enum_values": [ - "site", - "factory", - "notdefined" + "SITE", + "FACTORY", + "NOTDEFINED" ] }, { @@ -1427,17 +1427,17 @@ "type": "IfcElementAssemblyTypeEnum", "is_enum": true, "enum_values": [ - "accessory_assembly", - "arch", - "beam_grid", - "braced_frame", - "girder", - "reinforcement_unit", - "rigid_frame", - "slab_field", - "truss", - "userdefined", - "notdefined" + "ACCESSORY_ASSEMBLY", + "ARCH", + "BEAM_GRID", + "BRACED_FRAME", + "GIRDER", + "REINFORCEMENT_UNIT", + "RIGID_FRAME", + "SLAB_FIELD", + "TRUSS", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -1469,10 +1469,10 @@ "type": "IfcEngineTypeEnum", "is_enum": true, "enum_values": [ - "externalcombustion", - "internalcombustion", - "userdefined", - "notdefined" + "EXTERNALCOMBUSTION", + "INTERNALCOMBUSTION", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -1492,17 +1492,17 @@ "type": "IfcEvaporativeCoolerTypeEnum", "is_enum": true, "enum_values": [ - "directevaporativerandommediaaircooler", - "directevaporativerigidmediaaircooler", - "directevaporativeslingerspackagedaircooler", - "directevaporativepackagedrotaryaircooler", - "directevaporativeairwasher", - "indirectevaporativepackageaircooler", - "indirectevaporativewetcoil", - "indirectevaporativecoolingtowerorcoilcooler", - "indirectdirectcombination", - "userdefined", - "notdefined" + "DIRECTEVAPORATIVERANDOMMEDIAAIRCOOLER", + "DIRECTEVAPORATIVERIGIDMEDIAAIRCOOLER", + "DIRECTEVAPORATIVESLINGERSPACKAGEDAIRCOOLER", + "DIRECTEVAPORATIVEPACKAGEDROTARYAIRCOOLER", + "DIRECTEVAPORATIVEAIRWASHER", + "INDIRECTEVAPORATIVEPACKAGEAIRCOOLER", + "INDIRECTEVAPORATIVEWETCOIL", + "INDIRECTEVAPORATIVECOOLINGTOWERORCOILCOOLER", + "INDIRECTDIRECTCOMBINATION", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -1522,14 +1522,14 @@ "type": "IfcEvaporatorTypeEnum", "is_enum": true, "enum_values": [ - "directexpansion", - "directexpansionshellandtube", - "directexpansiontubeintube", - "directexpansionbrazedplate", - "floodedshellandtube", - "shellandcoil", - "userdefined", - "notdefined" + "DIRECTEXPANSION", + "DIRECTEXPANSIONSHELLANDTUBE", + "DIRECTEXPANSIONTUBEINTUBE", + "DIRECTEXPANSIONBRAZEDPLATE", + "FLOODEDSHELLANDTUBE", + "SHELLANDCOIL", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -1549,12 +1549,12 @@ "type": "IfcExternalSpatialElementTypeEnum", "is_enum": true, "enum_values": [ - "external", - "external_earth", - "external_water", - "external_fire", - "userdefined", - "notdefined" + "EXTERNAL", + "EXTERNAL_EARTH", + "EXTERNAL_WATER", + "EXTERNAL_FIRE", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -1574,15 +1574,15 @@ "type": "IfcFanTypeEnum", "is_enum": true, "enum_values": [ - "centrifugalforwardcurved", - "centrifugalradial", - "centrifugalbackwardinclinedcurved", - "centrifugalairfoil", - "tubeaxial", - "vaneaxial", - "propelloraxial", - "userdefined", - "notdefined" + "CENTRIFUGALFORWARDCURVED", + "CENTRIFUGALRADIAL", + "CENTRIFUGALBACKWARDINCLINEDCURVED", + "CENTRIFUGALAIRFOIL", + "TUBEAXIAL", + "VANEAXIAL", + "PROPELLORAXIAL", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -1602,11 +1602,11 @@ "type": "IfcFastenerTypeEnum", "is_enum": true, "enum_values": [ - "glue", - "mortar", - "weld", - "userdefined", - "notdefined" + "GLUE", + "MORTAR", + "WELD", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -1626,14 +1626,14 @@ "type": "IfcFilterTypeEnum", "is_enum": true, "enum_values": [ - "airparticlefilter", - "compressedairfilter", - "odorfilter", - "oilfilter", - "strainer", - "waterfilter", - "userdefined", - "notdefined" + "AIRPARTICLEFILTER", + "COMPRESSEDAIRFILTER", + "ODORFILTER", + "OILFILTER", + "STRAINER", + "WATERFILTER", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -1653,13 +1653,13 @@ "type": "IfcFireSuppressionTerminalTypeEnum", "is_enum": true, "enum_values": [ - "breechinginlet", - "firehydrant", - "hosereel", - "sprinkler", - "sprinklerdeflector", - "userdefined", - "notdefined" + "BREECHINGINLET", + "FIREHYDRANT", + "HOSEREEL", + "SPRINKLER", + "SPRINKLERDEFLECTOR", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -1703,16 +1703,16 @@ "type": "IfcFlowInstrumentTypeEnum", "is_enum": true, "enum_values": [ - "pressuregauge", - "thermometer", - "ammeter", - "frequencymeter", - "powerfactormeter", - "phaseanglemeter", - "voltmeter_peak", - "voltmeter_rms", - "userdefined", - "notdefined" + "PRESSUREGAUGE", + "THERMOMETER", + "AMMETER", + "FREQUENCYMETER", + "POWERFACTORMETER", + "PHASEANGLEMETER", + "VOLTMETER_PEAK", + "VOLTMETER_RMS", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -1732,12 +1732,12 @@ "type": "IfcFlowMeterTypeEnum", "is_enum": true, "enum_values": [ - "energymeter", - "gasmeter", - "oilmeter", - "watermeter", - "userdefined", - "notdefined" + "ENERGYMETER", + "GASMETER", + "OILMETER", + "WATERMETER", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -1817,13 +1817,13 @@ "type": "IfcFootingTypeEnum", "is_enum": true, "enum_values": [ - "caisson_foundation", - "footing_beam", - "pad_footing", - "pile_cap", - "strip_footing", - "userdefined", - "notdefined" + "CAISSON_FOUNDATION", + "FOOTING_BEAM", + "PAD_FOOTING", + "PILE_CAP", + "STRIP_FOOTING", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -1855,15 +1855,15 @@ "type": "IfcFurnitureTypeEnum", "is_enum": true, "enum_values": [ - "chair", - "table", - "desk", - "bed", - "filecabinet", - "shelf", - "sofa", - "userdefined", - "notdefined" + "CHAIR", + "TABLE", + "DESK", + "BED", + "FILECABINET", + "SHELF", + "SOFA", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -1883,9 +1883,9 @@ "type": "IfcGeographicElementTypeEnum", "is_enum": true, "enum_values": [ - "terrain", - "userdefined", - "notdefined" + "TERRAIN", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -1905,12 +1905,12 @@ "type": "IfcGridTypeEnum", "is_enum": true, "enum_values": [ - "rectangular", - "radial", - "triangular", - "irregular", - "userdefined", - "notdefined" + "RECTANGULAR", + "RADIAL", + "TRIANGULAR", + "IRREGULAR", + "USERDEFINED", + "NOTDEFINED" ] } ] @@ -1924,10 +1924,10 @@ "type": "IfcHeatExchangerTypeEnum", "is_enum": true, "enum_values": [ - "plate", - "shellandtube", - "userdefined", - "notdefined" + "PLATE", + "SHELLANDTUBE", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -1947,21 +1947,21 @@ "type": "IfcHumidifierTypeEnum", "is_enum": true, "enum_values": [ - "steaminjection", - "adiabaticairwasher", - "adiabaticpan", - "adiabaticwettedelement", - "adiabaticatomizing", - "adiabaticultrasonic", - "adiabaticrigidmedia", - "adiabaticcompressedairnozzle", - "assistedelectric", - "assistednaturalgas", - "assistedpropane", - "assistedbutane", - "assistedsteam", - "userdefined", - "notdefined" + "STEAMINJECTION", + "ADIABATICAIRWASHER", + "ADIABATICPAN", + "ADIABATICWETTEDELEMENT", + "ADIABATICATOMIZING", + "ADIABATICULTRASONIC", + "ADIABATICRIGIDMEDIA", + "ADIABATICCOMPRESSEDAIRNOZZLE", + "ASSISTEDELECTRIC", + "ASSISTEDNATURALGAS", + "ASSISTEDPROPANE", + "ASSISTEDBUTANE", + "ASSISTEDSTEAM", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -1981,12 +1981,12 @@ "type": "IfcInterceptorTypeEnum", "is_enum": true, "enum_values": [ - "cyclonic", - "grease", - "oil", - "petrol", - "userdefined", - "notdefined" + "CYCLONIC", + "GREASE", + "OIL", + "PETROL", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -2006,10 +2006,10 @@ "type": "IfcJunctionBoxTypeEnum", "is_enum": true, "enum_values": [ - "data", - "power", - "userdefined", - "notdefined" + "DATA", + "POWER", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -2029,17 +2029,17 @@ "type": "IfcLampTypeEnum", "is_enum": true, "enum_values": [ - "compactfluorescent", - "fluorescent", - "halogen", - "highpressuremercury", - "highpressuresodium", - "led", - "metalhalide", - "oled", - "tungstenfilament", - "userdefined", - "notdefined" + "COMPACTFLUORESCENT", + "FLUORESCENT", + "HALOGEN", + "HIGHPRESSUREMERCURY", + "HIGHPRESSURESODIUM", + "LED", + "METALHALIDE", + "OLED", + "TUNGSTENFILAMENT", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -2059,11 +2059,11 @@ "type": "IfcLightFixtureTypeEnum", "is_enum": true, "enum_values": [ - "pointsource", - "directionsource", - "securitylighting", - "userdefined", - "notdefined" + "POINTSOURCE", + "DIRECTIONSOURCE", + "SECURITYLIGHTING", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -2095,18 +2095,18 @@ "type": "IfcMechanicalFastenerTypeEnum", "is_enum": true, "enum_values": [ - "anchorbolt", - "bolt", - "dowel", - "nail", - "nailplate", - "rivet", - "screw", - "shearconnector", - "staple", - "studshearconnector", - "userdefined", - "notdefined" + "ANCHORBOLT", + "BOLT", + "DOWEL", + "NAIL", + "NAILPLATE", + "RIVET", + "SCREW", + "SHEARCONNECTOR", + "STAPLE", + "STUDSHEARCONNECTOR", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -2126,13 +2126,13 @@ "type": "IfcMedicalDeviceTypeEnum", "is_enum": true, "enum_values": [ - "airstation", - "feedairunit", - "oxygengenerator", - "oxygenplant", - "vacuumstation", - "userdefined", - "notdefined" + "AIRSTATION", + "FEEDAIRUNIT", + "OXYGENGENERATOR", + "OXYGENPLANT", + "VACUUMSTATION", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -2152,20 +2152,20 @@ "type": "IfcMemberTypeEnum", "is_enum": true, "enum_values": [ - "brace", - "chord", - "collar", - "member", - "mullion", - "plate", - "post", - "purlin", - "rafter", - "stringer", - "strut", - "stud", - "userdefined", - "notdefined" + "BRACE", + "CHORD", + "COLLAR", + "MEMBER", + "MULLION", + "PLATE", + "POST", + "PURLIN", + "RAFTER", + "STRINGER", + "STRUT", + "STUD", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -2185,20 +2185,20 @@ "type": "IfcMemberTypeEnum", "is_enum": true, "enum_values": [ - "brace", - "chord", - "collar", - "member", - "mullion", - "plate", - "post", - "purlin", - "rafter", - "stringer", - "strut", - "stud", - "userdefined", - "notdefined" + "BRACE", + "CHORD", + "COLLAR", + "MEMBER", + "MULLION", + "PLATE", + "POST", + "PURLIN", + "RAFTER", + "STRINGER", + "STRUT", + "STUD", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -2218,11 +2218,11 @@ "type": "IfcMotorConnectionTypeEnum", "is_enum": true, "enum_values": [ - "beltdrive", - "coupling", - "directdrive", - "userdefined", - "notdefined" + "BELTDRIVE", + "COUPLING", + "DIRECTDRIVE", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -2242,10 +2242,10 @@ "type": "IfcOpeningElementTypeEnum", "is_enum": true, "enum_values": [ - "opening", - "recess", - "userdefined", - "notdefined" + "OPENING", + "RECESS", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -2265,10 +2265,10 @@ "type": "IfcOpeningElementTypeEnum", "is_enum": true, "enum_values": [ - "opening", - "recess", - "userdefined", - "notdefined" + "OPENING", + "RECESS", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -2288,13 +2288,13 @@ "type": "IfcOutletTypeEnum", "is_enum": true, "enum_values": [ - "audiovisualoutlet", - "communicationsoutlet", - "poweroutlet", - "dataoutlet", - "telephoneoutlet", - "userdefined", - "notdefined" + "AUDIOVISUALOUTLET", + "COMMUNICATIONSOUTLET", + "POWEROUTLET", + "DATAOUTLET", + "TELEPHONEOUTLET", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -2314,14 +2314,14 @@ "type": "IfcPileTypeEnum", "is_enum": true, "enum_values": [ - "bored", - "driven", - "jetgrouting", - "cohesion", - "friction", - "support", - "userdefined", - "notdefined" + "BORED", + "DRIVEN", + "JETGROUTING", + "COHESION", + "FRICTION", + "SUPPORT", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -2329,12 +2329,12 @@ "type": "IfcPileConstructionEnum", "is_enum": true, "enum_values": [ - "cast_in_place", - "composite", - "precast_concrete", - "prefab_steel", - "userdefined", - "notdefined" + "CAST_IN_PLACE", + "COMPOSITE", + "PRECAST_CONCRETE", + "PREFAB_STEEL", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -2354,15 +2354,15 @@ "type": "IfcPipeFittingTypeEnum", "is_enum": true, "enum_values": [ - "bend", - "connector", - "entry", - "exit", - "junction", - "obstruction", - "transition", - "userdefined", - "notdefined" + "BEND", + "CONNECTOR", + "ENTRY", + "EXIT", + "JUNCTION", + "OBSTRUCTION", + "TRANSITION", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -2382,13 +2382,13 @@ "type": "IfcPipeSegmentTypeEnum", "is_enum": true, "enum_values": [ - "culvert", - "flexiblesegment", - "rigidsegment", - "gutter", - "spool", - "userdefined", - "notdefined" + "CULVERT", + "FLEXIBLESEGMENT", + "RIGIDSEGMENT", + "GUTTER", + "SPOOL", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -2408,10 +2408,10 @@ "type": "IfcPlateTypeEnum", "is_enum": true, "enum_values": [ - "curtain_panel", - "sheet", - "userdefined", - "notdefined" + "CURTAIN_PANEL", + "SHEET", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -2431,10 +2431,10 @@ "type": "IfcPlateTypeEnum", "is_enum": true, "enum_values": [ - "curtain_panel", - "sheet", - "userdefined", - "notdefined" + "CURTAIN_PANEL", + "SHEET", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -2454,8 +2454,8 @@ "type": "IfcProjectionElementTypeEnum", "is_enum": true, "enum_values": [ - "userdefined", - "notdefined" + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -2475,15 +2475,15 @@ "type": "IfcProtectiveDeviceTypeEnum", "is_enum": true, "enum_values": [ - "circuitbreaker", - "earthleakagecircuitbreaker", - "earthingswitch", - "fusedisconnector", - "residualcurrentcircuitbreaker", - "residualcurrentswitch", - "varistor", - "userdefined", - "notdefined" + "CIRCUITBREAKER", + "EARTHLEAKAGECIRCUITBREAKER", + "EARTHINGSWITCH", + "FUSEDISCONNECTOR", + "RESIDUALCURRENTCIRCUITBREAKER", + "RESIDUALCURRENTSWITCH", + "VARISTOR", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -2503,12 +2503,12 @@ "type": "IfcProtectiveDeviceTrippingUnitTypeEnum", "is_enum": true, "enum_values": [ - "electronic", - "electromagnetic", - "residualcurrent", - "thermal", - "userdefined", - "notdefined" + "ELECTRONIC", + "ELECTROMAGNETIC", + "RESIDUALCURRENT", + "THERMAL", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -2528,14 +2528,14 @@ "type": "IfcObjectTypeEnum", "is_enum": true, "enum_values": [ - "product", - "process", - "control", - "resource", - "actor", - "group", - "project", - "notdefined" + "PRODUCT", + "PROCESS", + "CONTROL", + "RESOURCE", + "ACTOR", + "GROUP", + "PROJECT", + "NOTDEFINED" ] }, { @@ -2555,15 +2555,15 @@ "type": "IfcPumpTypeEnum", "is_enum": true, "enum_values": [ - "circulator", - "endsuction", - "splitcase", - "submersiblepump", - "sumppump", - "verticalinline", - "verticalturbine", - "userdefined", - "notdefined" + "CIRCULATOR", + "ENDSUCTION", + "SPLITCASE", + "SUBMERSIBLEPUMP", + "SUMPPUMP", + "VERTICALINLINE", + "VERTICALTURBINE", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -2583,11 +2583,11 @@ "type": "IfcRailingTypeEnum", "is_enum": true, "enum_values": [ - "handrail", - "guardrail", - "balustrade", - "userdefined", - "notdefined" + "HANDRAIL", + "GUARDRAIL", + "BALUSTRADE", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -2607,14 +2607,14 @@ "type": "IfcRampTypeEnum", "is_enum": true, "enum_values": [ - "straight_run_ramp", - "two_straight_run_ramp", - "quarter_turn_ramp", - "two_quarter_turn_ramp", - "half_turn_ramp", - "spiral_ramp", - "userdefined", - "notdefined" + "STRAIGHT_RUN_RAMP", + "TWO_STRAIGHT_RUN_RAMP", + "QUARTER_TURN_RAMP", + "TWO_QUARTER_TURN_RAMP", + "HALF_TURN_RAMP", + "SPIRAL_RAMP", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -2634,10 +2634,10 @@ "type": "IfcRampFlightTypeEnum", "is_enum": true, "enum_values": [ - "straight", - "spiral", - "userdefined", - "notdefined" + "STRAIGHT", + "SPIRAL", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -2675,16 +2675,16 @@ "type": "IfcReinforcingBarTypeEnum", "is_enum": true, "enum_values": [ - "anchoring", - "edge", - "ligature", - "main", - "punching", - "ring", - "shear", - "stud", - "userdefined", - "notdefined" + "ANCHORING", + "EDGE", + "LIGATURE", + "MAIN", + "PUNCHING", + "RING", + "SHEAR", + "STUD", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -2692,8 +2692,8 @@ "type": "IfcReinforcingBarSurfaceEnum", "is_enum": true, "enum_values": [ - "plain", - "textured" + "PLAIN", + "TEXTURED" ] }, { @@ -2767,8 +2767,8 @@ "type": "IfcReinforcingMeshTypeEnum", "is_enum": true, "enum_values": [ - "userdefined", - "notdefined" + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -2794,21 +2794,21 @@ "type": "IfcRoofTypeEnum", "is_enum": true, "enum_values": [ - "flat_roof", - "shed_roof", - "gable_roof", - "hip_roof", - "hipped_gable_roof", - "gambrel_roof", - "mansard_roof", - "barrel_roof", - "rainbow_roof", - "butterfly_roof", - "pavilion_roof", - "dome_roof", - "freeform", - "userdefined", - "notdefined" + "FLAT_ROOF", + "SHED_ROOF", + "GABLE_ROOF", + "HIP_ROOF", + "HIPPED_GABLE_ROOF", + "GAMBREL_ROOF", + "MANSARD_ROOF", + "BARREL_ROOF", + "RAINBOW_ROOF", + "BUTTERFLY_ROOF", + "PAVILION_ROOF", + "DOME_ROOF", + "FREEFORM", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -2828,18 +2828,18 @@ "type": "IfcSanitaryTerminalTypeEnum", "is_enum": true, "enum_values": [ - "bath", - "bidet", - "cistern", - "shower", - "sink", - "sanitaryfountain", - "toiletpan", - "urinal", - "washhandbasin", - "wcseat", - "userdefined", - "notdefined" + "BATH", + "BIDET", + "CISTERN", + "SHOWER", + "SINK", + "SANITARYFOUNTAIN", + "TOILETPAN", + "URINAL", + "WASHHANDBASIN", + "WCSEAT", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -2859,32 +2859,32 @@ "type": "IfcSensorTypeEnum", "is_enum": true, "enum_values": [ - "cosensor", - "co2sensor", - "conductancesensor", - "contactsensor", - "firesensor", - "flowsensor", - "frostsensor", - "gassensor", - "heatsensor", - "humiditysensor", - "identifiersensor", - "ionconcentrationsensor", - "levelsensor", - "lightsensor", - "moisturesensor", - "movementsensor", - "phsensor", - "pressuresensor", - "radiationsensor", - "radioactivitysensor", - "smokesensor", - "soundsensor", - "temperaturesensor", - "windsensor", - "userdefined", - "notdefined" + "COSENSOR", + "CO2SENSOR", + "CONDUCTANCESENSOR", + "CONTACTSENSOR", + "FIRESENSOR", + "FLOWSENSOR", + "FROSTSENSOR", + "GASSENSOR", + "HEATSENSOR", + "HUMIDITYSENSOR", + "IDENTIFIERSENSOR", + "IONCONCENTRATIONSENSOR", + "LEVELSENSOR", + "LIGHTSENSOR", + "MOISTURESENSOR", + "MOVEMENTSENSOR", + "PHSENSOR", + "PRESSURESENSOR", + "RADIATIONSENSOR", + "RADIOACTIVITYSENSOR", + "SMOKESENSOR", + "SOUNDSENSOR", + "TEMPERATURESENSOR", + "WINDSENSOR", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -2904,11 +2904,11 @@ "type": "IfcShadingDeviceTypeEnum", "is_enum": true, "enum_values": [ - "jalousie", - "shutter", - "awning", - "userdefined", - "notdefined" + "JALOUSIE", + "SHUTTER", + "AWNING", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -2952,9 +2952,9 @@ "type": "IfcElementCompositionEnum", "is_enum": true, "enum_values": [ - "complex", - "element", - "partial" + "COMPLEX", + "ELEMENT", + "PARTIAL" ] }, { @@ -2974,12 +2974,12 @@ "type": "IfcSlabTypeEnum", "is_enum": true, "enum_values": [ - "floor", - "roof", - "landing", - "baseslab", - "userdefined", - "notdefined" + "FLOOR", + "ROOF", + "LANDING", + "BASESLAB", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -2999,12 +2999,12 @@ "type": "IfcSlabTypeEnum", "is_enum": true, "enum_values": [ - "floor", - "roof", - "landing", - "baseslab", - "userdefined", - "notdefined" + "FLOOR", + "ROOF", + "LANDING", + "BASESLAB", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -3024,12 +3024,12 @@ "type": "IfcSlabTypeEnum", "is_enum": true, "enum_values": [ - "floor", - "roof", - "landing", - "baseslab", - "userdefined", - "notdefined" + "FLOOR", + "ROOF", + "LANDING", + "BASESLAB", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -3049,10 +3049,10 @@ "type": "IfcSolarDeviceTypeEnum", "is_enum": true, "enum_values": [ - "solarcollector", - "solarpanel", - "userdefined", - "notdefined" + "SOLARCOLLECTOR", + "SOLARPANEL", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -3072,13 +3072,13 @@ "type": "IfcSpaceTypeEnum", "is_enum": true, "enum_values": [ - "space", - "parking", - "gfa", - "internal", - "external", - "userdefined", - "notdefined" + "SPACE", + "PARKING", + "GFA", + "INTERNAL", + "EXTERNAL", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -3092,9 +3092,9 @@ "type": "IfcElementCompositionEnum", "is_enum": true, "enum_values": [ - "complex", - "element", - "partial" + "COMPLEX", + "ELEMENT", + "PARTIAL" ] }, { @@ -3114,10 +3114,10 @@ "type": "IfcSpaceHeaterTypeEnum", "is_enum": true, "enum_values": [ - "convector", - "radiator", - "userdefined", - "notdefined" + "CONVECTOR", + "RADIATOR", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -3137,16 +3137,16 @@ "type": "IfcSpatialZoneTypeEnum", "is_enum": true, "enum_values": [ - "construction", - "firesafety", - "lighting", - "occupancy", - "security", - "thermal", - "transport", - "ventilation", - "userdefined", - "notdefined" + "CONSTRUCTION", + "FIRESAFETY", + "LIGHTING", + "OCCUPANCY", + "SECURITY", + "THERMAL", + "TRANSPORT", + "VENTILATION", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -3166,11 +3166,11 @@ "type": "IfcStackTerminalTypeEnum", "is_enum": true, "enum_values": [ - "birdcage", - "cowl", - "rainwaterhopper", - "userdefined", - "notdefined" + "BIRDCAGE", + "COWL", + "RAINWATERHOPPER", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -3190,22 +3190,22 @@ "type": "IfcStairTypeEnum", "is_enum": true, "enum_values": [ - "straight_run_stair", - "two_straight_run_stair", - "quarter_winding_stair", - "quarter_turn_stair", - "half_winding_stair", - "half_turn_stair", - "two_quarter_winding_stair", - "two_quarter_turn_stair", - "three_quarter_winding_stair", - "three_quarter_turn_stair", - "spiral_stair", - "double_return_stair", - "curved_run_stair", - "two_curved_run_stair", - "userdefined", - "notdefined" + "STRAIGHT_RUN_STAIR", + "TWO_STRAIGHT_RUN_STAIR", + "QUARTER_WINDING_STAIR", + "QUARTER_TURN_STAIR", + "HALF_WINDING_STAIR", + "HALF_TURN_STAIR", + "TWO_QUARTER_WINDING_STAIR", + "TWO_QUARTER_TURN_STAIR", + "THREE_QUARTER_WINDING_STAIR", + "THREE_QUARTER_TURN_STAIR", + "SPIRAL_STAIR", + "DOUBLE_RETURN_STAIR", + "CURVED_RUN_STAIR", + "TWO_CURVED_RUN_STAIR", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -3249,13 +3249,13 @@ "type": "IfcStairFlightTypeEnum", "is_enum": true, "enum_values": [ - "straight", - "winder", - "spiral", - "curved", - "freeform", - "userdefined", - "notdefined" + "STRAIGHT", + "WINDER", + "SPIRAL", + "CURVED", + "FREEFORM", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -3275,8 +3275,8 @@ "type": "IfcProjectedOrTrueLengthEnum", "is_enum": true, "enum_values": [ - "projected_length", - "true_length" + "PROJECTED_LENGTH", + "TRUE_LENGTH" ] }, { @@ -3284,15 +3284,15 @@ "type": "IfcStructuralCurveActivityTypeEnum", "is_enum": true, "enum_values": [ - "const", - "linear", - "polygonal", - "equidistant", - "sinus", - "parabola", - "discrete", - "userdefined", - "notdefined" + "CONST", + "LINEAR", + "POLYGONAL", + "EQUIDISTANT", + "SINUS", + "PARABOLA", + "DISCRETE", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -3306,8 +3306,8 @@ "type": "IfcGlobalOrLocalEnum", "is_enum": true, "enum_values": [ - "global_coords", - "local_coords" + "GLOBAL_COORDS", + "LOCAL_COORDS" ] } ] @@ -3326,13 +3326,13 @@ "type": "IfcStructuralCurveMemberTypeEnum", "is_enum": true, "enum_values": [ - "rigid_joined_member", - "pin_joined_member", - "cable", - "tension_member", - "compression_member", - "userdefined", - "notdefined" + "RIGID_JOINED_MEMBER", + "PIN_JOINED_MEMBER", + "CABLE", + "TENSION_MEMBER", + "COMPRESSION_MEMBER", + "USERDEFINED", + "NOTDEFINED" ] } ] @@ -3346,13 +3346,13 @@ "type": "IfcStructuralCurveMemberTypeEnum", "is_enum": true, "enum_values": [ - "rigid_joined_member", - "pin_joined_member", - "cable", - "tension_member", - "compression_member", - "userdefined", - "notdefined" + "RIGID_JOINED_MEMBER", + "PIN_JOINED_MEMBER", + "CABLE", + "TENSION_MEMBER", + "COMPRESSION_MEMBER", + "USERDEFINED", + "NOTDEFINED" ] } ] @@ -3366,15 +3366,15 @@ "type": "IfcStructuralCurveActivityTypeEnum", "is_enum": true, "enum_values": [ - "const", - "linear", - "polygonal", - "equidistant", - "sinus", - "parabola", - "discrete", - "userdefined", - "notdefined" + "CONST", + "LINEAR", + "POLYGONAL", + "EQUIDISTANT", + "SINUS", + "PARABOLA", + "DISCRETE", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -3382,8 +3382,8 @@ "type": "IfcGlobalOrLocalEnum", "is_enum": true, "enum_values": [ - "global_coords", - "local_coords" + "GLOBAL_COORDS", + "LOCAL_COORDS" ] } ] @@ -3397,8 +3397,8 @@ "type": "IfcProjectedOrTrueLengthEnum", "is_enum": true, "enum_values": [ - "projected_length", - "true_length" + "PROJECTED_LENGTH", + "TRUE_LENGTH" ] }, { @@ -3406,15 +3406,15 @@ "type": "IfcStructuralCurveActivityTypeEnum", "is_enum": true, "enum_values": [ - "const", - "linear", - "polygonal", - "equidistant", - "sinus", - "parabola", - "discrete", - "userdefined", - "notdefined" + "CONST", + "LINEAR", + "POLYGONAL", + "EQUIDISTANT", + "SINUS", + "PARABOLA", + "DISCRETE", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -3428,8 +3428,8 @@ "type": "IfcGlobalOrLocalEnum", "is_enum": true, "enum_values": [ - "global_coords", - "local_coords" + "GLOBAL_COORDS", + "LOCAL_COORDS" ] } ] @@ -3443,8 +3443,8 @@ "type": "IfcProjectedOrTrueLengthEnum", "is_enum": true, "enum_values": [ - "projected_length", - "true_length" + "PROJECTED_LENGTH", + "TRUE_LENGTH" ] }, { @@ -3452,12 +3452,12 @@ "type": "IfcStructuralSurfaceActivityTypeEnum", "is_enum": true, "enum_values": [ - "const", - "bilinear", - "discrete", - "isocontour", - "userdefined", - "notdefined" + "CONST", + "BILINEAR", + "DISCRETE", + "ISOCONTOUR", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -3471,8 +3471,8 @@ "type": "IfcGlobalOrLocalEnum", "is_enum": true, "enum_values": [ - "global_coords", - "local_coords" + "GLOBAL_COORDS", + "LOCAL_COORDS" ] } ] @@ -3492,8 +3492,8 @@ "type": "IfcGlobalOrLocalEnum", "is_enum": true, "enum_values": [ - "global_coords", - "local_coords" + "GLOBAL_COORDS", + "LOCAL_COORDS" ] } ] @@ -3512,8 +3512,8 @@ "type": "IfcGlobalOrLocalEnum", "is_enum": true, "enum_values": [ - "global_coords", - "local_coords" + "GLOBAL_COORDS", + "LOCAL_COORDS" ] } ] @@ -3527,8 +3527,8 @@ "type": "IfcProjectedOrTrueLengthEnum", "is_enum": true, "enum_values": [ - "projected_length", - "true_length" + "PROJECTED_LENGTH", + "TRUE_LENGTH" ] }, { @@ -3536,12 +3536,12 @@ "type": "IfcStructuralSurfaceActivityTypeEnum", "is_enum": true, "enum_values": [ - "const", - "bilinear", - "discrete", - "isocontour", - "userdefined", - "notdefined" + "CONST", + "BILINEAR", + "DISCRETE", + "ISOCONTOUR", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -3555,8 +3555,8 @@ "type": "IfcGlobalOrLocalEnum", "is_enum": true, "enum_values": [ - "global_coords", - "local_coords" + "GLOBAL_COORDS", + "LOCAL_COORDS" ] } ] @@ -3575,11 +3575,11 @@ "type": "IfcStructuralSurfaceMemberTypeEnum", "is_enum": true, "enum_values": [ - "bending_element", - "membrane_element", - "shell", - "userdefined", - "notdefined" + "BENDING_ELEMENT", + "MEMBRANE_ELEMENT", + "SHELL", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -3599,11 +3599,11 @@ "type": "IfcStructuralSurfaceMemberTypeEnum", "is_enum": true, "enum_values": [ - "bending_element", - "membrane_element", - "shell", - "userdefined", - "notdefined" + "BENDING_ELEMENT", + "MEMBRANE_ELEMENT", + "SHELL", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -3623,12 +3623,12 @@ "type": "IfcStructuralSurfaceActivityTypeEnum", "is_enum": true, "enum_values": [ - "const", - "bilinear", - "discrete", - "isocontour", - "userdefined", - "notdefined" + "CONST", + "BILINEAR", + "DISCRETE", + "ISOCONTOUR", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -3636,8 +3636,8 @@ "type": "IfcGlobalOrLocalEnum", "is_enum": true, "enum_values": [ - "global_coords", - "local_coords" + "GLOBAL_COORDS", + "LOCAL_COORDS" ] } ] @@ -3651,11 +3651,11 @@ "type": "IfcSurfaceFeatureTypeEnum", "is_enum": true, "enum_values": [ - "mark", - "tag", - "treatment", - "userdefined", - "notdefined" + "MARK", + "TAG", + "TREATMENT", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -3675,17 +3675,17 @@ "type": "IfcSwitchingDeviceTypeEnum", "is_enum": true, "enum_values": [ - "contactor", - "dimmerswitch", - "emergencystop", - "keypad", - "momentaryswitch", - "selectorswitch", - "starter", - "switchdisconnector", - "toggleswitch", - "userdefined", - "notdefined" + "CONTACTOR", + "DIMMERSWITCH", + "EMERGENCYSTOP", + "KEYPAD", + "MOMENTARYSWITCH", + "SELECTORSWITCH", + "STARTER", + "SWITCHDISCONNECTOR", + "TOGGLESWITCH", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -3705,10 +3705,10 @@ "type": "IfcSystemFurnitureElementTypeEnum", "is_enum": true, "enum_values": [ - "panel", - "worksurface", - "userdefined", - "notdefined" + "PANEL", + "WORKSURFACE", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -3728,15 +3728,15 @@ "type": "IfcTankTypeEnum", "is_enum": true, "enum_values": [ - "basin", - "breakpressure", - "expansion", - "feedandexpansion", - "pressurevessel", - "storage", - "vessel", - "userdefined", - "notdefined" + "BASIN", + "BREAKPRESSURE", + "EXPANSION", + "FEEDANDEXPANSION", + "PRESSUREVESSEL", + "STORAGE", + "VESSEL", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -3756,12 +3756,12 @@ "type": "IfcTendonTypeEnum", "is_enum": true, "enum_values": [ - "bar", - "coated", - "strand", - "wire", - "userdefined", - "notdefined" + "BAR", + "COATED", + "STRAND", + "WIRE", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -3829,11 +3829,11 @@ "type": "IfcTendonAnchorTypeEnum", "is_enum": true, "enum_values": [ - "coupler", - "fixed_end", - "tensioning_end", - "userdefined", - "notdefined" + "COUPLER", + "FIXED_END", + "TENSIONING_END", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -3859,13 +3859,13 @@ "type": "IfcTransformerTypeEnum", "is_enum": true, "enum_values": [ - "current", - "frequency", - "inverter", - "rectifier", - "voltage", - "userdefined", - "notdefined" + "CURRENT", + "FREQUENCY", + "INVERTER", + "RECTIFIER", + "VOLTAGE", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -3885,13 +3885,13 @@ "type": "IfcTransportElementTypeEnum", "is_enum": true, "enum_values": [ - "elevator", - "escalator", - "movingwalkway", - "craneway", - "liftinggear", - "userdefined", - "notdefined" + "ELEVATOR", + "ESCALATOR", + "MOVINGWALKWAY", + "CRANEWAY", + "LIFTINGGEAR", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -3911,9 +3911,9 @@ "type": "IfcTubeBundleTypeEnum", "is_enum": true, "enum_values": [ - "finned", - "userdefined", - "notdefined" + "FINNED", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -3933,16 +3933,16 @@ "type": "IfcUnitaryControlElementTypeEnum", "is_enum": true, "enum_values": [ - "alarmpanel", - "controlpanel", - "gasdetectionpanel", - "indicatorpanel", - "mimicpanel", - "humidistat", - "thermostat", - "weatherstation", - "userdefined", - "notdefined" + "ALARMPANEL", + "CONTROLPANEL", + "GASDETECTIONPANEL", + "INDICATORPANEL", + "MIMICPANEL", + "HUMIDISTAT", + "THERMOSTAT", + "WEATHERSTATION", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -3962,13 +3962,13 @@ "type": "IfcUnitaryEquipmentTypeEnum", "is_enum": true, "enum_values": [ - "airhandler", - "airconditioningunit", - "dehumidifier", - "splitsystem", - "rooftopunit", - "userdefined", - "notdefined" + "AIRHANDLER", + "AIRCONDITIONINGUNIT", + "DEHUMIDIFIER", + "SPLITSYSTEM", + "ROOFTOPUNIT", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -3988,29 +3988,29 @@ "type": "IfcValveTypeEnum", "is_enum": true, "enum_values": [ - "airrelease", - "antivacuum", - "changeover", - "check", - "commissioning", - "diverting", - "drawoffcock", - "doublecheck", - "doubleregulating", - "faucet", - "flushing", - "gascock", - "gastap", - "isolating", - "mixing", - "pressurereducing", - "pressurerelief", - "regulating", - "safetycutoff", - "steamtrap", - "stopcock", - "userdefined", - "notdefined" + "AIRRELEASE", + "ANTIVACUUM", + "CHANGEOVER", + "CHECK", + "COMMISSIONING", + "DIVERTING", + "DRAWOFFCOCK", + "DOUBLECHECK", + "DOUBLEREGULATING", + "FAUCET", + "FLUSHING", + "GASCOCK", + "GASTAP", + "ISOLATING", + "MIXING", + "PRESSUREREDUCING", + "PRESSURERELIEF", + "REGULATING", + "SAFETYCUTOFF", + "STEAMTRAP", + "STOPCOCK", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -4030,10 +4030,10 @@ "type": "IfcVibrationIsolatorTypeEnum", "is_enum": true, "enum_values": [ - "compression", - "spring", - "userdefined", - "notdefined" + "COMPRESSION", + "SPRING", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -4065,14 +4065,14 @@ "type": "IfcVoidingFeatureTypeEnum", "is_enum": true, "enum_values": [ - "cutout", - "notch", - "hole", - "miter", - "chamfer", - "edge", - "userdefined", - "notdefined" + "CUTOUT", + "NOTCH", + "HOLE", + "MITER", + "CHAMFER", + "EDGE", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -4092,17 +4092,17 @@ "type": "IfcWallTypeEnum", "is_enum": true, "enum_values": [ - "movable", - "parapet", - "partitioning", - "plumbingwall", - "shear", - "solidwall", - "standard", - "polygonal", - "elementedwall", - "userdefined", - "notdefined" + "MOVABLE", + "PARAPET", + "PARTITIONING", + "PLUMBINGWALL", + "SHEAR", + "SOLIDWALL", + "STANDARD", + "POLYGONAL", + "ELEMENTEDWALL", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -4122,17 +4122,17 @@ "type": "IfcWallTypeEnum", "is_enum": true, "enum_values": [ - "movable", - "parapet", - "partitioning", - "plumbingwall", - "shear", - "solidwall", - "standard", - "polygonal", - "elementedwall", - "userdefined", - "notdefined" + "MOVABLE", + "PARAPET", + "PARTITIONING", + "PLUMBINGWALL", + "SHEAR", + "SOLIDWALL", + "STANDARD", + "POLYGONAL", + "ELEMENTEDWALL", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -4152,17 +4152,17 @@ "type": "IfcWallTypeEnum", "is_enum": true, "enum_values": [ - "movable", - "parapet", - "partitioning", - "plumbingwall", - "shear", - "solidwall", - "standard", - "polygonal", - "elementedwall", - "userdefined", - "notdefined" + "MOVABLE", + "PARAPET", + "PARTITIONING", + "PLUMBINGWALL", + "SHEAR", + "SOLIDWALL", + "STANDARD", + "POLYGONAL", + "ELEMENTEDWALL", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -4182,15 +4182,15 @@ "type": "IfcWasteTerminalTypeEnum", "is_enum": true, "enum_values": [ - "floortrap", - "floorwaste", - "gullysump", - "gullytrap", - "roofdrain", - "wastedisposalunit", - "wastetrap", - "userdefined", - "notdefined" + "FLOORTRAP", + "FLOORWASTE", + "GULLYSUMP", + "GULLYTRAP", + "ROOFDRAIN", + "WASTEDISPOSALUNIT", + "WASTETRAP", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -4222,11 +4222,11 @@ "type": "IfcWindowTypeEnum", "is_enum": true, "enum_values": [ - "window", - "skylight", - "lightdome", - "userdefined", - "notdefined" + "WINDOW", + "SKYLIGHT", + "LIGHTDOME", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -4234,17 +4234,17 @@ "type": "IfcWindowTypePartitioningEnum", "is_enum": true, "enum_values": [ - "single_panel", - "double_panel_vertical", - "double_panel_horizontal", - "triple_panel_vertical", - "triple_panel_bottom", - "triple_panel_top", - "triple_panel_left", - "triple_panel_right", - "triple_panel_horizontal", - "userdefined", - "notdefined" + "SINGLE_PANEL", + "DOUBLE_PANEL_VERTICAL", + "DOUBLE_PANEL_HORIZONTAL", + "TRIPLE_PANEL_VERTICAL", + "TRIPLE_PANEL_BOTTOM", + "TRIPLE_PANEL_TOP", + "TRIPLE_PANEL_LEFT", + "TRIPLE_PANEL_RIGHT", + "TRIPLE_PANEL_HORIZONTAL", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -4282,11 +4282,11 @@ "type": "IfcWindowTypeEnum", "is_enum": true, "enum_values": [ - "window", - "skylight", - "lightdome", - "userdefined", - "notdefined" + "WINDOW", + "SKYLIGHT", + "LIGHTDOME", + "USERDEFINED", + "NOTDEFINED" ] }, { @@ -4294,17 +4294,17 @@ "type": "IfcWindowTypePartitioningEnum", "is_enum": true, "enum_values": [ - "single_panel", - "double_panel_vertical", - "double_panel_horizontal", - "triple_panel_vertical", - "triple_panel_bottom", - "triple_panel_top", - "triple_panel_left", - "triple_panel_right", - "triple_panel_horizontal", - "userdefined", - "notdefined" + "SINGLE_PANEL", + "DOUBLE_PANEL_VERTICAL", + "DOUBLE_PANEL_HORIZONTAL", + "TRIPLE_PANEL_VERTICAL", + "TRIPLE_PANEL_BOTTOM", + "TRIPLE_PANEL_TOP", + "TRIPLE_PANEL_LEFT", + "TRIPLE_PANEL_RIGHT", + "TRIPLE_PANEL_HORIZONTAL", + "USERDEFINED", + "NOTDEFINED" ] }, { From d6bfcc0b5f76952d915031518580ba79014b3f63 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Sun, 27 Jan 2019 18:30:20 +1100 Subject: [PATCH 16/22] Load JSON based on ifcopenshell schema version This allows us to support more than one ifc version. The 2X3 jsons cannot be autogenerated and have been manually written based on the hardcoded values in the old codebase. --- src/Mod/Arch/ArchComponent.py | 8 +- src/Mod/Arch/Presets/ifc_products_IFC2X3.json | 163 ++++++++++++++++++ ...c_products.json => ifc_products_IFC4.json} | 0 src/Mod/Arch/Presets/ifc_types_IFC2X3.json | 31 ++++ .../{ifc_types.json => ifc_types_IFC4.json} | 0 5 files changed, 199 insertions(+), 3 deletions(-) create mode 100644 src/Mod/Arch/Presets/ifc_products_IFC2X3.json rename src/Mod/Arch/Presets/{ifc_products.json => ifc_products_IFC4.json} (100%) create mode 100644 src/Mod/Arch/Presets/ifc_types_IFC2X3.json rename src/Mod/Arch/Presets/{ifc_types.json => ifc_types_IFC4.json} (100%) diff --git a/src/Mod/Arch/ArchComponent.py b/src/Mod/Arch/ArchComponent.py index ce8d27d5a7..9f895c8e20 100644 --- a/src/Mod/Arch/ArchComponent.py +++ b/src/Mod/Arch/ArchComponent.py @@ -25,7 +25,7 @@ __title__="FreeCAD Arch Component" __author__ = "Yorik van Havre" __url__ = "http://www.freecadweb.org" -import FreeCAD,Draft,ArchCommands,math,sys,json,os +import FreeCAD,Draft,ArchCommands,math,sys,json,os,ifcopenshell from FreeCAD import Vector if FreeCAD.GuiUp: import FreeCADGui @@ -47,10 +47,12 @@ else: # This module provides the base Arch component class, that # is shared by all of the Arch BIM objects -with open(os.path.join(FreeCAD.getResourceDir(),"Mod","Arch","Presets","ifc_products.json")) as f: +with open(os.path.join(FreeCAD.getResourceDir(), "Mod", "Arch", "Presets", + "ifc_products_" + ifcopenshell.schema_identifier + ".json")) as f: ifcProducts = json.load(f) -with open(os.path.join(FreeCAD.getResourceDir(),"Mod","Arch","Presets","ifc_types.json")) as f: +with open(os.path.join(FreeCAD.getResourceDir(), "Mod", "Arch", "Presets", + "ifc_types_" + ifcopenshell.schema_identifier + ".json")) as f: ifcTypes = json.load(f) # Possible roles for FreeCAD BIM objects diff --git a/src/Mod/Arch/Presets/ifc_products_IFC2X3.json b/src/Mod/Arch/Presets/ifc_products_IFC2X3.json new file mode 100644 index 0000000000..915389672f --- /dev/null +++ b/src/Mod/Arch/Presets/ifc_products_IFC2X3.json @@ -0,0 +1,163 @@ +{ +"IfcActuator": { "attributes": [] }, +"IfcAirTerminal": { "attributes": [] }, +"IfcAirTerminalBox": { "attributes": [] }, +"IfcAirToAirHeatRecovery": { "attributes": [] }, +"IfcAlarm": { "attributes": [] }, +"IfcAnnotation": { "attributes": [] }, +"IfcAudioVisualAppliance": { "attributes": [] }, +"IfcBeam": { "attributes": [] }, +"IfcBeamStandardCase": { "attributes": [] }, +"IfcBoiler": { "attributes": [] }, +"IfcBuilding": { "attributes": [] }, +"IfcBuildingElement": { "attributes": [] }, +"IfcBuildingElementPart": { "attributes": [] }, +"IfcBuildingElementProxy": { "attributes": [] }, +"IfcBuildingStorey": { "attributes": [] }, +"IfcBurner": { "attributes": [] }, +"IfcCableCarrierFitting": { "attributes": [] }, +"IfcCableCarrierSegment": { "attributes": [] }, +"IfcCableFitting": { "attributes": [] }, +"IfcCableSegment": { "attributes": [] }, +"IfcChiller": { "attributes": [] }, +"IfcChimney": { "attributes": [] }, +"IfcCivilElement": { "attributes": [] }, +"IfcCoil": { "attributes": [] }, +"IfcColumn": { "attributes": [] }, +"IfcColumnStandardCase": { "attributes": [] }, +"IfcCommunicationsAppliance": { "attributes": [] }, +"IfcCompressor": { "attributes": [] }, +"IfcCondenser": { "attributes": [] }, +"IfcController": { "attributes": [] }, +"IfcCooledBeam": { "attributes": [] }, +"IfcCoolingTower": { "attributes": [] }, +"IfcCovering": { "attributes": [] }, +"IfcCurtainWall": { "attributes": [] }, +"IfcDamper": { "attributes": [] }, +"IfcDiscreteAccessory": { "attributes": [] }, +"IfcDistributionChamberElement": { "attributes": [] }, +"IfcDistributionControlElement": { "attributes": [] }, +"IfcDistributionElement": { "attributes": [] }, +"IfcDistributionFlowElement": { "attributes": [] }, +"IfcDistributionPort": { "attributes": [] }, +"IfcDoor": { "attributes": [] }, +"IfcDoorStandardCase": { "attributes": [] }, +"IfcDuctFitting": { "attributes": [] }, +"IfcDuctSegment": { "attributes": [] }, +"IfcDuctSilencer": { "attributes": [] }, +"IfcElectricAppliance": { "attributes": [] }, +"IfcElectricDistributionBoard": { "attributes": [] }, +"IfcElectricFlowStorageDevice": { "attributes": [] }, +"IfcElectricGenerator": { "attributes": [] }, +"IfcElectricMotor": { "attributes": [] }, +"IfcElectricTimeControl": { "attributes": [] }, +"IfcElementAssembly": { "attributes": [] }, +"IfcElementComponent": { "attributes": [] }, +"IfcEnergyConversionDevice": { "attributes": [] }, +"IfcEngine": { "attributes": [] }, +"IfcEvaporativeCooler": { "attributes": [] }, +"IfcEvaporator": { "attributes": [] }, +"IfcExternalSpatialElement": { "attributes": [] }, +"IfcExternalSpatialStructureElement": { "attributes": [] }, +"IfcFan": { "attributes": [] }, +"IfcFastener": { "attributes": [] }, +"IfcFeatureElement": { "attributes": [] }, +"IfcFeatureElementAddition": { "attributes": [] }, +"IfcFeatureElementSubtraction": { "attributes": [] }, +"IfcFilter": { "attributes": [] }, +"IfcFireSuppressionTerminal": { "attributes": [] }, +"IfcFlowController": { "attributes": [] }, +"IfcFlowFitting": { "attributes": [] }, +"IfcFlowInstrument": { "attributes": [] }, +"IfcFlowMeter": { "attributes": [] }, +"IfcFlowMovingDevice": { "attributes": [] }, +"IfcFlowSegment": { "attributes": [] }, +"IfcFlowStorageDevice": { "attributes": [] }, +"IfcFlowTerminal": { "attributes": [] }, +"IfcFlowTreatmentDevice": { "attributes": [] }, +"IfcFooting": { "attributes": [] }, +"IfcFurnishingElement": { "attributes": [] }, +"IfcFurniture": { "attributes": [] }, +"IfcGeographicElement": { "attributes": [] }, +"IfcGrid": { "attributes": [] }, +"IfcHeatExchanger": { "attributes": [] }, +"IfcHumidifier": { "attributes": [] }, +"IfcInterceptor": { "attributes": [] }, +"IfcJunctionBox": { "attributes": [] }, +"IfcLamp": { "attributes": [] }, +"IfcLightFixture": { "attributes": [] }, +"IfcMechanicalFastener": { "attributes": [] }, +"IfcMedicalDevice": { "attributes": [] }, +"IfcMember": { "attributes": [] }, +"IfcMemberStandardCase": { "attributes": [] }, +"IfcMotorConnection": { "attributes": [] }, +"IfcOpeningElement": { "attributes": [] }, +"IfcOpeningStandardCase": { "attributes": [] }, +"IfcOutlet": { "attributes": [] }, +"IfcPile": { "attributes": [] }, +"IfcPipeFitting": { "attributes": [] }, +"IfcPipeSegment": { "attributes": [] }, +"IfcPlate": { "attributes": [] }, +"IfcPlateStandardCase": { "attributes": [] }, +"IfcProjectionElement": { "attributes": [] }, +"IfcProtectiveDevice": { "attributes": [] }, +"IfcProtectiveDeviceTrippingUnit": { "attributes": [] }, +"IfcProxy": { "attributes": [] }, +"IfcPump": { "attributes": [] }, +"IfcRailing": { "attributes": [] }, +"IfcRamp": { "attributes": [] }, +"IfcRampFlight": { "attributes": [] }, +"IfcReinforcingBar": { "attributes": [] }, +"IfcReinforcingMesh": { "attributes": [] }, +"IfcRoof": { "attributes": [] }, +"IfcSanitaryTerminal": { "attributes": [] }, +"IfcSensor": { "attributes": [] }, +"IfcShadingDevice": { "attributes": [] }, +"IfcSite": { "attributes": [] }, +"IfcSlab": { "attributes": [] }, +"IfcSlabElementedCase": { "attributes": [] }, +"IfcSlabStandardCase": { "attributes": [] }, +"IfcSolarDevice": { "attributes": [] }, +"IfcSpace": { "attributes": [] }, +"IfcSpaceHeater": { "attributes": [] }, +"IfcSpatialZone": { "attributes": [] }, +"IfcStackTerminal": { "attributes": [] }, +"IfcStair": { "attributes": [] }, +"IfcStairFlight": { "attributes": [] }, +"IfcStructuralCurveAction": { "attributes": [] }, +"IfcStructuralCurveConnection": { "attributes": [] }, +"IfcStructuralCurveMember": { "attributes": [] }, +"IfcStructuralCurveMemberVarying": { "attributes": [] }, +"IfcStructuralCurveReaction": { "attributes": [] }, +"IfcStructuralLinearAction": { "attributes": [] }, +"IfcStructuralPlanarAction": { "attributes": [] }, +"IfcStructuralPointAction": { "attributes": [] }, +"IfcStructuralPointConnection": { "attributes": [] }, +"IfcStructuralPointReaction": { "attributes": [] }, +"IfcStructuralSurfaceAction": { "attributes": [] }, +"IfcStructuralSurfaceConnection": { "attributes": [] }, +"IfcStructuralSurfaceMember": { "attributes": [] }, +"IfcStructuralSurfaceMemberVarying": { "attributes": [] }, +"IfcStructuralSurfaceReaction": { "attributes": [] }, +"IfcSurfaceFeature": { "attributes": [] }, +"IfcSwitchingDevice": { "attributes": [] }, +"IfcSystemFurnitureElement": { "attributes": [] }, +"IfcTank": { "attributes": [] }, +"IfcTendon": { "attributes": [] }, +"IfcTendonAnchor": { "attributes": [] }, +"IfcTransformer": { "attributes": [] }, +"IfcTransportElement": { "attributes": [] }, +"IfcTubeBundle": { "attributes": [] }, +"IfcUnitaryControlElement": { "attributes": [] }, +"IfcUnitaryEquipment": { "attributes": [] }, +"IfcValve": { "attributes": [] }, +"IfcVibrationIsolator": { "attributes": [] }, +"IfcVirtualElement": { "attributes": [] }, +"IfcVoidingFeature": { "attributes": [] }, +"IfcWall": { "attributes": [] }, +"IfcWallElementedCase": { "attributes": [] }, +"IfcWallStandardCase": { "attributes": [] }, +"IfcWasteTerminal": { "attributes": [] }, +"IfcWindow": { "attributes": [] }, +"IfcWindowStandardCase": { "attributes": [] } +} diff --git a/src/Mod/Arch/Presets/ifc_products.json b/src/Mod/Arch/Presets/ifc_products_IFC4.json similarity index 100% rename from src/Mod/Arch/Presets/ifc_products.json rename to src/Mod/Arch/Presets/ifc_products_IFC4.json diff --git a/src/Mod/Arch/Presets/ifc_types_IFC2X3.json b/src/Mod/Arch/Presets/ifc_types_IFC2X3.json new file mode 100644 index 0000000000..dc13d74bff --- /dev/null +++ b/src/Mod/Arch/Presets/ifc_types_IFC2X3.json @@ -0,0 +1,31 @@ +{ +"IfcInteger": {}, +"IfcReal": {}, +"IfcBoolean": {}, +"IfcIdentifier": {}, +"IfcText": {}, +"IfcLabel": {}, +"IfcLogical": {}, +"IfcVolumeMeasure": {}, +"IfcTimeMeasure": {}, +"IfcThermodynamicTemperatureMeasure": {}, +"IfcSolidAngleMeasure": {}, +"IfcPositiveRatioMeasure": {}, +"IfcRatioMeasure": {}, +"IfcPositivePlaneAngleMeasure": {}, +"IfcPlaneAngleMeasure": {}, +"IfcParameterValue": {}, +"IfcNumericMeasure": {}, +"IfcMassMeasure": {}, +"IfcPositiveLengthMeasure": {}, +"IfcLengthMeasure": {}, +"IfcElectricCurrentMeasure": {}, +"IfcDescriptiveMeasure": {}, +"IfcCountMeasure": {}, +"IfcContextDependentMeasure": {}, +"IfcAreaMeasure": {}, +"IfcAmountOfSubstanceMeasure": {}, +"IfcLuminousIntensityMeasure": {}, +"IfcNormalisedRatioMeasure": {}, +"IfcComplexNumber": {} +} diff --git a/src/Mod/Arch/Presets/ifc_types.json b/src/Mod/Arch/Presets/ifc_types_IFC4.json similarity index 100% rename from src/Mod/Arch/Presets/ifc_types.json rename to src/Mod/Arch/Presets/ifc_types_IFC4.json From 8a0808e7999cdeed129e4e2c6de79e3d9627ee32 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Sun, 27 Jan 2019 21:14:31 +1100 Subject: [PATCH 17/22] Migrate IfcAttributes to IfcData for backwards compatibility --- src/Mod/Arch/ArchComponent.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/Mod/Arch/ArchComponent.py b/src/Mod/Arch/ArchComponent.py index 9f895c8e20..e9b13505f9 100644 --- a/src/Mod/Arch/ArchComponent.py +++ b/src/Mod/Arch/ArchComponent.py @@ -231,8 +231,14 @@ class Component: if ifcProductAttribute is None or ifcProductAttribute["is_enum"] is True: obj.removeProperty(property) - def setProperties(self,obj): + def migrateDeprecatedAttributes(self, obj): + # FreeCAD <= 0.17 stored IFC data in IfcAttributes + if hasattr(obj, "IfcAttributes"): + obj.IfcData = obj.IfcAttributes + obj.removeProperty("IfcAttributes") + + def setProperties(self,obj): pl = obj.PropertiesList if not "Base" in pl: obj.addProperty("App::PropertyLink","Base","Component",QT_TRANSLATE_NOOP("App::Property","The base object this component is built upon")) @@ -292,6 +298,7 @@ class Component: self.Subvolume = None #self.MoveWithHost = False self.Type = "Component" + self.migrateDeprecatedAttributes(obj) def onDocumentRestored(self,obj): From fc7292283486f8f418a5db21e66226a73dfed3b3 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Sun, 27 Jan 2019 23:16:14 +1100 Subject: [PATCH 18/22] Fix a couple of broken properties --- src/Mod/Arch/Presets/ifc_types_IFC4.json | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/Mod/Arch/Presets/ifc_types_IFC4.json b/src/Mod/Arch/Presets/ifc_types_IFC4.json index bb6da0ec1f..8f8800dbaa 100644 --- a/src/Mod/Arch/Presets/ifc_types_IFC4.json +++ b/src/Mod/Arch/Presets/ifc_types_IFC4.json @@ -233,7 +233,7 @@ }, "IfcLengthMeasure": { "base": "xs:double", - "property": "PropertyFloat" + "property": "PropertyLength" }, "IfcLinearForceMeasure": { "base": "xs:double", @@ -550,5 +550,9 @@ "logical": { "base": "xs:normalizedString", "property": "PropertyString" + }, + "List-IfcCompoundPlaneAngleMeasure": { + "base": "xs:string", + "property": "PropertyString" } -} \ No newline at end of file +} From 47b9c17a4d46f95688563c688f3af73abb839529 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Sun, 27 Jan 2019 23:21:04 +1100 Subject: [PATCH 19/22] Refactor all IFC functions into ArchIFC and preload attributes with expressions * The import code will manually set 2x3 attributes * The import code will rely on "smart" attributes for ifc 4 * ArchSite and ArchBuildingPart now support IFC * IfcSite lat/lon is left alone until I better understand how coords work --- src/Mod/Arch/ArchBuildingPart.py | 5 +- src/Mod/Arch/ArchComponent.py | 85 +-------------------- src/Mod/Arch/ArchIFC.py | 115 ++++++++++++++++++++++++++++ src/Mod/Arch/ArchSite.py | 5 +- src/Mod/Arch/importIFC.py | 126 +++++++++++++++---------------- 5 files changed, 184 insertions(+), 152 deletions(-) create mode 100644 src/Mod/Arch/ArchIFC.py diff --git a/src/Mod/Arch/ArchBuildingPart.py b/src/Mod/Arch/ArchBuildingPart.py index 9d942f56f7..9c86c826aa 100644 --- a/src/Mod/Arch/ArchBuildingPart.py +++ b/src/Mod/Arch/ArchBuildingPart.py @@ -22,7 +22,7 @@ #* * #*************************************************************************** -import FreeCAD,Draft,ArchCommands,DraftVecUtils,sys +import FreeCAD,Draft,ArchCommands,DraftVecUtils,sys,ArchIFC if FreeCAD.GuiUp: import FreeCADGui from PySide import QtCore, QtGui @@ -320,6 +320,7 @@ class BuildingPart: self.setProperties(obj) def setProperties(self,obj): + ArchIFC.setProperties(obj) pl = obj.PropertiesList if not "Height" in pl: @@ -362,7 +363,7 @@ class BuildingPart: self.oldPlacement = FreeCAD.Placement(obj.Placement) def onChanged(self,obj,prop): - + ArchIFC.onChanged(obj, prop) if prop == "Height": for child in obj.Group: if Draft.getType(child) in ["Wall","Structure"]: diff --git a/src/Mod/Arch/ArchComponent.py b/src/Mod/Arch/ArchComponent.py index e9b13505f9..0fc0ff8cce 100644 --- a/src/Mod/Arch/ArchComponent.py +++ b/src/Mod/Arch/ArchComponent.py @@ -25,8 +25,9 @@ __title__="FreeCAD Arch Component" __author__ = "Yorik van Havre" __url__ = "http://www.freecadweb.org" -import FreeCAD,Draft,ArchCommands,math,sys,json,os,ifcopenshell +import FreeCAD,Draft,ArchCommands,math,sys,json,os,ifcopenshell,ArchIFC from FreeCAD import Vector +from ArchIFC import ifcProducts, ifcTypes if FreeCAD.GuiUp: import FreeCADGui from PySide import QtGui,QtCore @@ -47,28 +48,9 @@ else: # This module provides the base Arch component class, that # is shared by all of the Arch BIM objects -with open(os.path.join(FreeCAD.getResourceDir(), "Mod", "Arch", "Presets", - "ifc_products_" + ifcopenshell.schema_identifier + ".json")) as f: - ifcProducts = json.load(f) - -with open(os.path.join(FreeCAD.getResourceDir(), "Mod", "Arch", "Presets", - "ifc_types_" + ifcopenshell.schema_identifier + ".json")) as f: - ifcTypes = json.load(f) - # Possible roles for FreeCAD BIM objects IfcRoles = ['Undefined']+[''.join(map(lambda x: x if x.islower() else " "+x, t[3:]))[1:] for t in ifcProducts.keys()] -def getIfcProduct(IfcRole): - name = "Ifc" + IfcRole.replace(" ", "") - if name in ifcProducts: - return ifcProducts[name] - -def getIfcProductAttribute(ifcProduct, name): - for attribute in ifcProduct["attributes"]: - if attribute["name"].replace(' ', '') == name: - return attribute - return None - def convertOldComponents(objs=[]): """converts Arch Objects with a Role property to the new IfcRole. @@ -186,59 +168,8 @@ class Component: Component.setProperties(self,obj) self.Type = "Component" - def setIfcAttributes(self, obj): - ifcProduct = getIfcProduct(obj.IfcRole) - if ifcProduct is None: - return - self.purgeUnusedIfcAttributesFromPropertiesList(ifcProduct, obj) - self.addIfcProductAttributesToObj(ifcProduct, obj) - - def addIfcProductAttributesToObj(self, ifcProduct, obj): - for attribute in ifcProduct["attributes"]: - if attribute["name"] in obj.PropertiesList: - continue - self.addIfcProductAttributeToObj(attribute, obj) - - def addIfcProductAttributeToObj(self, attribute, obj): - IfcData = obj.IfcData - if "attributes" not in IfcData: - IfcData["attributes"] = "{}" - IfcAttributes = json.loads(IfcData["attributes"]) - IfcAttributes[attribute["name"]] = attribute - IfcData["attributes"] = json.dumps(IfcAttributes) - obj.IfcData = IfcData - if attribute["is_enum"]: - obj.addProperty("App::PropertyEnumeration", attribute["name"], "IFC Attributes", QT_TRANSLATE_NOOP("App::Property", "Description of IFC attributes are not yet implemented")) - setattr(obj, attribute["name"], attribute["enum_values"]) - else: - propertyType = "App::" + ifcTypes[attribute["type"]]["property"] - obj.addProperty(propertyType, attribute["name"], "IFC Attributes", QT_TRANSLATE_NOOP("App::Property", "Description of IFC attributes are not yet implemented")) - - def setObjIfcAttributeValue(self, obj, attributeName, value): - IfcData = obj.IfcData - IfcAttributes = json.loads(IfcData["attributes"]) - if isinstance(value, FreeCAD.Units.Quantity): - value = float(value) - IfcAttributes[attributeName]["value"] = value - IfcData["attributes"] = json.dumps(IfcAttributes) - obj.IfcData = IfcData - - def purgeUnusedIfcAttributesFromPropertiesList(self, ifcProduct, obj): - for property in obj.PropertiesList: - if obj.getGroupOfProperty(property) != "IFC Attributes": - continue - ifcProductAttribute = getIfcProductAttribute(ifcProduct, property) - if ifcProductAttribute is None or ifcProductAttribute["is_enum"] is True: - obj.removeProperty(property) - - - def migrateDeprecatedAttributes(self, obj): - # FreeCAD <= 0.17 stored IFC data in IfcAttributes - if hasattr(obj, "IfcAttributes"): - obj.IfcData = obj.IfcAttributes - obj.removeProperty("IfcAttributes") - def setProperties(self,obj): + ArchIFC.setProperties(obj) pl = obj.PropertiesList if not "Base" in pl: obj.addProperty("App::PropertyLink","Base","Component",QT_TRANSLATE_NOOP("App::Property","The base object this component is built upon")) @@ -254,8 +185,6 @@ class Component: obj.addProperty("App::PropertyString","Tag","Component",QT_TRANSLATE_NOOP("App::Property","An optional tag for this component")) if not "StandardCode" in pl: obj.addProperty("App::PropertyString","StandardCode","Component",QT_TRANSLATE_NOOP("App::Property","An optional standard (OmniClass, etc...) code for this component")) - if not "IfcData" in pl: - obj.addProperty("App::PropertyMap","IfcData","Component",QT_TRANSLATE_NOOP("App::Property","IFC data")) if not "Material" in pl: obj.addProperty("App::PropertyLink","Material","Component",QT_TRANSLATE_NOOP("App::Property","A material for this object")) if "BaseMaterial" in pl: @@ -298,7 +227,6 @@ class Component: self.Subvolume = None #self.MoveWithHost = False self.Type = "Component" - self.migrateDeprecatedAttributes(obj) def onDocumentRestored(self,obj): @@ -331,12 +259,7 @@ class Component: self.oldPlacement = FreeCAD.Placement(obj.Placement) def onChanged(self,obj,prop): - - if prop == "IfcRole": - self.setIfcAttributes(obj) - - if obj.getGroupOfProperty(prop) == "IFC Attributes": - self.setObjIfcAttributeValue(obj, prop, obj.getPropertyByName(prop)) + ArchIFC.onChanged(obj, prop) if prop == "Placement": if hasattr(self,"oldPlacement"): diff --git a/src/Mod/Arch/ArchIFC.py b/src/Mod/Arch/ArchIFC.py new file mode 100644 index 0000000000..0fba391f02 --- /dev/null +++ b/src/Mod/Arch/ArchIFC.py @@ -0,0 +1,115 @@ +import FreeCAD, os, ifcopenshell, json +if FreeCAD.GuiUp: + from PySide.QtCore import QT_TRANSLATE_NOOP + +with open(os.path.join(FreeCAD.getResourceDir(), "Mod", "Arch", "Presets", + "ifc_products_" + ifcopenshell.schema_identifier + ".json")) as f: + ifcProducts = json.load(f) + +with open(os.path.join(FreeCAD.getResourceDir(), "Mod", "Arch", "Presets", + "ifc_types_" + ifcopenshell.schema_identifier + ".json")) as f: + ifcTypes = json.load(f) + +def setProperties(obj): + if not "IfcData" in obj.PropertiesList: + obj.addProperty("App::PropertyMap","IfcData","Component",QT_TRANSLATE_NOOP("App::Property","IFC data")) + migrateDeprecatedAttributes(obj) + +def onChanged(obj, prop): + if prop == "IfcRole": + setupIfcAttributes(obj) + if obj.getGroupOfProperty(prop) == "IFC Attributes": + setObjIfcAttributeValue(obj, prop, obj.getPropertyByName(prop)) + +def getIfcProduct(IfcRole): + name = "Ifc" + IfcRole.replace(" ", "") + if name in ifcProducts: + return ifcProducts[name] + +def getIfcProductAttribute(ifcProduct, name): + for attribute in ifcProduct["attributes"]: + if attribute["name"].replace(' ', '') == name: + return attribute + return None + +def setupIfcAttributes(obj): + ifcProduct = getIfcProduct(obj.IfcRole) + if ifcProduct is None: + return + purgeUnusedIfcAttributesFromPropertiesList(ifcProduct, obj) + addIfcProductAttributesToObj(ifcProduct, obj) + +def addIfcProductAttributesToObj(ifcProduct, obj): + for attribute in ifcProduct["attributes"]: + if attribute["name"] in obj.PropertiesList \ + or attribute["name"] == "RefLatitude" \ + or attribute["name"] == "RefLongitude": + continue + addIfcProductAttribute(obj, attribute) + addIfcAttributeValueExpressions(obj, attribute) + +def addIfcProductAttribute(obj, attribute): + IfcData = obj.IfcData + if "attributes" not in IfcData: + IfcData["attributes"] = "{}" + IfcAttributes = json.loads(IfcData["attributes"]) + IfcAttributes[attribute["name"]] = attribute + IfcData["attributes"] = json.dumps(IfcAttributes) + obj.IfcData = IfcData + if attribute["is_enum"]: + obj.addProperty("App::PropertyEnumeration", attribute["name"], "IFC Attributes", QT_TRANSLATE_NOOP("App::Property", "Description of IFC attributes are not yet implemented")) + setattr(obj, attribute["name"], attribute["enum_values"]) + else: + propertyType = "App::" + ifcTypes[attribute["type"]]["property"] + obj.addProperty(propertyType, attribute["name"], "IFC Attributes", QT_TRANSLATE_NOOP("App::Property", "Description of IFC attributes are not yet implemented")) + +def addIfcAttributeValueExpressions(obj, attribute): + if obj.getGroupOfProperty(attribute["name"]) != "Ifc Attributes": + return + if attribute["name"] == "OverallWidth": + if hasattr(obj, "Length"): + obj.setExpression("OverallWidth", "Length.Value") + elif hasattr(obj, "Width"): + obj.setExpression("OverallWidth", "Width.Value") + elif obj.Shape.BoundBox.XLength > obj.Shape.BoundBox.YLength: + obj.setExpression("OverallWidth", "Shape.BoundBox.XLength") + else: + obj.setExpression("OverallWidth", "Shape.BoundBox.YLength") + elif attribute["name"] == "OverallHeight": + if hasattr(obj, "Height"): + obj.setExpression("OverallHeight", "Height.Value") + else: + obj.setExpression("OverallHeight", "Shape.BoundBox.ZLength") + elif attribute["name"] == "ElevationWithFlooring": + obj.setExpression("ElevationWithFlooring", "Shape.BoundBox.ZMin") + elif attribute["name"] == "Elevation": + obj.setExpression("Elevation", "Placement.Base.z") + elif attribute["name"] == "NominalDiameter": + obj.setExpression("NominalDiameter", "Diameter.Value") + elif attribute["name"] == "BarLength": + obj.setExpression("BarLength", "Length.Value") + elif attribute["name"] == "RefElevation": + obj.setExpression("RefElevation", "Elevation.Value") + +def setObjIfcAttributeValue(obj, attributeName, value): + IfcData = obj.IfcData + IfcAttributes = json.loads(IfcData["attributes"]) + if isinstance(value, FreeCAD.Units.Quantity): + value = float(value) + IfcAttributes[attributeName]["value"] = value + IfcData["attributes"] = json.dumps(IfcAttributes) + obj.IfcData = IfcData + +def purgeUnusedIfcAttributesFromPropertiesList(ifcProduct, obj): + for property in obj.PropertiesList: + if obj.getGroupOfProperty(property) != "IFC Attributes": + continue + ifcProductAttribute = getIfcProductAttribute(ifcProduct, property) + if ifcProductAttribute is None or ifcProductAttribute["is_enum"] is True: + obj.removeProperty(property) + +def migrateDeprecatedAttributes(obj): + # FreeCAD <= 0.17 stored IFC data in IfcAttributes + if hasattr(obj, "IfcAttributes"): + obj.IfcData = obj.IfcAttributes + obj.removeProperty("IfcAttributes") diff --git a/src/Mod/Arch/ArchSite.py b/src/Mod/Arch/ArchSite.py index e86da64af4..f1148c758f 100644 --- a/src/Mod/Arch/ArchSite.py +++ b/src/Mod/Arch/ArchSite.py @@ -23,7 +23,7 @@ #* * #*************************************************************************** -import FreeCAD,Draft,ArchCommands,ArchFloor,math,re,datetime +import FreeCAD,Draft,ArchCommands,ArchFloor,math,re,datetime,ArchIFC if FreeCAD.GuiUp: import FreeCADGui from PySide import QtCore, QtGui @@ -324,7 +324,7 @@ class _Site(ArchFloor._Floor): obj.IfcRole = "Site" def setProperties(self,obj): - + ArchIFC.setProperties(obj) pl = obj.PropertiesList if not "Terrain" in pl: obj.addProperty("App::PropertyLink","Terrain","Site",QT_TRANSLATE_NOOP("App::Property","The base terrain of this site")) @@ -424,6 +424,7 @@ class _Site(ArchFloor._Floor): self.computeAreas(obj) def onChanged(self,obj,prop): + ArchIFC.onChanged(obj, prop) ArchFloor._Floor.onChanged(self,obj,prop) if prop == "Terrain": diff --git a/src/Mod/Arch/importIFC.py b/src/Mod/Arch/importIFC.py index e1ff55046b..57efb4ad93 100644 --- a/src/Mod/Arch/importIFC.py +++ b/src/Mod/Arch/importIFC.py @@ -29,7 +29,7 @@ __url__ = "http://www.freecadweb.org" import os,time,tempfile,uuid,FreeCAD,Part,Draft,Arch,math,DraftVecUtils,sys from DraftGeomUtils import vec -from ArchComponent import ifcProducts +from ArchIFC import ifcProducts ## @package importIFC # \ingroup ARCH @@ -1648,26 +1648,11 @@ def export(exportList,filename): d["IfcUID"] = uid obj.IfcData = d - # setting the IFC type + name conversions + ifctype = getIfcRoleFromObj(obj) - if hasattr(obj,"IfcRole"): - ifctype = obj.IfcRole.replace(" ","") - elif hasattr(obj,"Role"): - ifctype = obj.Role.replace(" ","") - else: - ifctype = Draft.getType(obj) - if ifctype in translationtable.keys(): - ifctype = translationtable[ifctype] - ifctype = "Ifc" + ifctype - if ifctype == "IfcVisGroup": - ifctype = "IfcGroup" if ifctype == "IfcGroup": groups[obj.Name] = [o.Name for o in obj.Group] continue - if (Draft.getType(obj) == "BuildingPart") and hasattr(obj,"IfcRole") and (obj.IfcRole == "Undefined"): - ifctype = "IfcBuildingStorey" # export BuildingParts as Storeys if their type wasn't explicitly set - if (Draft.getType(obj) == "BuildingPart") and hasattr(obj,"IfcRole") and (obj.IfcRole == "Building"): - ifctype = "IfcBuilding" # export grids @@ -1749,61 +1734,15 @@ def export(exportList,filename): kwargs = {"GlobalId": uid, "OwnerHistory": history, "Name": name, "Description": description, "ObjectPlacement": placement, "Representation": representation} - if ifctype in ["IfcSlab","IfcFooting","IfcRoof"]: - kwargs.update({"PredefinedType": "NOTDEFINED"}) - elif ifctype in ["IfcWindow","IfcDoor"]: - if hasattr(obj,"Width") and hasattr(obj,"Height"): - kwargs.update({"OverallHeight": obj.Width.Value/1000.0, - "OverallWidth": obj.Height.Value/1000.0}) - else: - if obj.Shape.BoundBox.XLength > obj.Shape.BoundBox.YLength: - l = obj.Shape.BoundBox.XLength - else: - l = obj.Shape.BoundBox.YLength - kwargs.update({"OverallHeight": l/1000.0, - "OverallWidth": obj.Shape.BoundBox.ZLength/1000.0}) - elif ifctype == "IfcSpace": - internal = "NOTDEFINED" - if hasattr(obj,"Internal"): - if obj.Internal: - internal = "INTERNAL" - else: - internal = "EXTERNAL" - if schema == "IFC2X3": - kwargs.update({"CompositionType": "ELEMENT", - "InteriorOrExteriorSpace": internal, - "ElevationWithFlooring": obj.Shape.BoundBox.ZMin/1000.0}) - else: - kwargs.update({"CompositionType": "ELEMENT", - "PredefinedType": internal, - "ElevationWithFlooring": obj.Shape.BoundBox.ZMin/1000.0}) - elif ifctype == "IfcBuildingElementProxy": - if ifcopenshell.schema_identifier == "IFC4": - kwargs.update({"PredefinedType": "ELEMENT"}) - else: - kwargs.update({"CompositionType": "ELEMENT"}) - elif ifctype == "IfcSite": + if ifctype == "IfcSite": kwargs.update({"RefLatitude":dd2dms(obj.Latitude), "RefLongitude":dd2dms(obj.Longitude), "RefElevation":obj.Elevation.Value/1000.0, "SiteAddress":buildAddress(obj,ifcfile), "CompositionType": "ELEMENT"}) - elif ifctype == "IfcBuilding": - kwargs.update({"CompositionType": "ELEMENT"}) - elif ifctype == "IfcBuildingStorey": - kwargs.update({"CompositionType": "ELEMENT", - "Elevation": obj.Placement.Base.z/1000.0}) - elif ifctype == "IfcReinforcingBar": - kwargs.update({"NominalDiameter": obj.Diameter.Value, - "BarLength": obj.Length.Value}) - # TODO: Reconcile the attributes above which can be cleverly derived - # from FreeCAD native data, with the explicit IFC attribute values below - for property in obj.PropertiesList: - if obj.getGroupOfProperty(property) == "IFC Attributes" and obj.getPropertyByName(property): - value = obj.getPropertyByName(property) - if isinstance(value, FreeCAD.Units.Quantity): - value = float(value) - kwargs.update({ property: value }) + if ifcopenshell.schema_identifier == "IFC2X3": + kwargs = exportIFC2X3Attributes(obj, kwargs) + kwargs = exportIfcAttributes(obj, kwargs) # creating the product @@ -2397,6 +2336,59 @@ def export(exportList,filename): print("Compression ratio:",int((float(ifcbin.spared)/(s+ifcbin.spared))*100),"%") del ifcbin +def getIfcRoleFromObj(obj): + if (Draft.getType(obj) == "BuildingPart") and hasattr(obj,"IfcRole") and (obj.IfcRole == "Undefined"): + ifctype = "IfcBuildingStorey" # export BuildingParts as Storeys if their type wasn't explicitly set + elif hasattr(obj,"IfcRole"): + ifctype = obj.IfcRole.replace(" ","") + elif hasattr(obj,"Role"): + ifctype = obj.Role.replace(" ","") + else: + ifctype = Draft.getType(obj) + + if ifctype in translationtable.keys(): + ifctype = translationtable[ifctype] + if ifctype == "VisGroup": + ifctype = "Group" + + return "Ifc" + ifctype + +def exportIFC2X3Attributes(obj, kwargs): + role = getIfcRoleFromObj(obj) + if role in ["IfcSlab", "IfcFooting", "IfcRoof"]: + kwargs.update({"PredefinedType": "NOTDEFINED"}) + elif role == "IfcBuilding": + kwargs.update({"CompositionType": "ELEMENT"}) + elif role == "IfcBuildingStorey": + kwargs.update({"CompositionType": "ELEMENT"}) + elif role == "IfcBuildingElementProxy": + kwargs.update({"CompositionType": "ELEMENT"}) + elif role == "IfcSpace": + internal = "NOTDEFINED" + if hasattr(obj,"Internal"): + if obj.Internal: + internal = "INTERNAL" + else: + internal = "EXTERNAL" + kwargs.update({"CompositionType": "ELEMENT", + "InteriorOrExteriorSpace": internal, + "ElevationWithFlooring": obj.Shape.BoundBox.ZMin/1000.0}) + elif role == "IfcReinforcingBar": + kwargs.update({"NominalDiameter": obj.Diameter.Value, + "BarLength": obj.Length.Value}) + elif role == "IfcBuildingStorey": + kwargs.update({"Elevation": obj.Placement.Base.z/1000.0}) + return kwargs + + +def exportIfcAttributes(obj, kwargs): + for property in obj.PropertiesList: + if obj.getGroupOfProperty(property) == "IFC Attributes" and obj.getPropertyByName(property): + value = obj.getPropertyByName(property) + if isinstance(value, FreeCAD.Units.Quantity): + value = float(value) + kwargs.update({ property: value }) + return kwargs def buildAddress(obj,ifcfile): From 7191d7727ec7b1bd867b9caa732ee65ef590131f Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Mon, 28 Jan 2019 10:19:07 +1100 Subject: [PATCH 20/22] Add ArchIFC to CMakeLists otherwise nobody will get it --- src/Mod/Arch/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Mod/Arch/CMakeLists.txt b/src/Mod/Arch/CMakeLists.txt index 1b5128d630..bf77656ab5 100644 --- a/src/Mod/Arch/CMakeLists.txt +++ b/src/Mod/Arch/CMakeLists.txt @@ -6,6 +6,7 @@ SET(Arch_SRCS Init.py InitGui.py ArchComponent.py + ArchIFC.py ArchWall.py importIFC.py importIFClegacy.py From 373e414dac69b524054cbce219ff26553685e18a Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Mon, 28 Jan 2019 10:23:27 +1100 Subject: [PATCH 21/22] Add json to cmakelists --- src/Mod/Arch/CMakeLists.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Mod/Arch/CMakeLists.txt b/src/Mod/Arch/CMakeLists.txt index bf77656ab5..d529a22e7e 100644 --- a/src/Mod/Arch/CMakeLists.txt +++ b/src/Mod/Arch/CMakeLists.txt @@ -54,6 +54,10 @@ SET(Dice3DS_SRCS SET(Arch_presets Presets/profiles.csv Presets/pset_definitions.csv + Presets/ifc_products_IFC2X3.json + Presets/ifc_products_IFC4.json + Presets/ifc_types_IFC2X3.json + Presets/ifc_types_IFC4.json ) SOURCE_GROUP("" FILES ${Arch_SRCS}) From f6d6cd35d32a4b7c78c6fb1d9132f6882d90c314 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Tue, 29 Jan 2019 21:14:35 +1100 Subject: [PATCH 22/22] Remove dependency on ifcopenshell at runtime and introduce new IfcVersion config --- src/Mod/Arch/ArchComponent.py | 10 +-- src/Mod/Arch/ArchIFC.py | 18 ++--- src/Mod/Arch/ArchIFCSchema.py | 12 +++ src/Mod/Arch/Resources/ui/preferences-arch.ui | 79 ++++++++++++++++++- 4 files changed, 100 insertions(+), 19 deletions(-) create mode 100644 src/Mod/Arch/ArchIFCSchema.py diff --git a/src/Mod/Arch/ArchComponent.py b/src/Mod/Arch/ArchComponent.py index 0fc0ff8cce..96a6fd9cc3 100644 --- a/src/Mod/Arch/ArchComponent.py +++ b/src/Mod/Arch/ArchComponent.py @@ -25,9 +25,8 @@ __title__="FreeCAD Arch Component" __author__ = "Yorik van Havre" __url__ = "http://www.freecadweb.org" -import FreeCAD,Draft,ArchCommands,math,sys,json,os,ifcopenshell,ArchIFC +import FreeCAD,Draft,ArchCommands,math,sys,json,os,ArchIFC,ArchIFCSchema from FreeCAD import Vector -from ArchIFC import ifcProducts, ifcTypes if FreeCAD.GuiUp: import FreeCADGui from PySide import QtGui,QtCore @@ -48,8 +47,7 @@ else: # This module provides the base Arch component class, that # is shared by all of the Arch BIM objects -# Possible roles for FreeCAD BIM objects -IfcRoles = ['Undefined']+[''.join(map(lambda x: x if x.islower() else " "+x, t[3:]))[1:] for t in ifcProducts.keys()] +IfcRoles = ['Undefined']+[''.join(map(lambda x: x if x.islower() else " "+x, t[3:]))[1:] for t in ArchIFCSchema.IfcProducts.keys()] def convertOldComponents(objs=[]): @@ -1183,10 +1181,10 @@ class ComponentTaskPanel: return if not isinstance(self.obj.IfcProperties,dict): return - import Arch_rc,csv,os + import Arch_rc, csv, os, ArchIFCSchema # get presets - self.ptypes = ifcTypes.keys() + self.ptypes = ArchIFCSchema.IfcTypes.keys() self.plabels = [''.join(map(lambda x: x if x.islower() else " "+x, t[3:]))[1:] for t in self.ptypes] self.psetdefs = {} psetspath = os.path.join(FreeCAD.getResourceDir(),"Mod","Arch","Presets","pset_definitions.csv") diff --git a/src/Mod/Arch/ArchIFC.py b/src/Mod/Arch/ArchIFC.py index 0fba391f02..15d025b8d1 100644 --- a/src/Mod/Arch/ArchIFC.py +++ b/src/Mod/Arch/ArchIFC.py @@ -1,15 +1,8 @@ -import FreeCAD, os, ifcopenshell, json +import FreeCAD, os, json + if FreeCAD.GuiUp: from PySide.QtCore import QT_TRANSLATE_NOOP -with open(os.path.join(FreeCAD.getResourceDir(), "Mod", "Arch", "Presets", - "ifc_products_" + ifcopenshell.schema_identifier + ".json")) as f: - ifcProducts = json.load(f) - -with open(os.path.join(FreeCAD.getResourceDir(), "Mod", "Arch", "Presets", - "ifc_types_" + ifcopenshell.schema_identifier + ".json")) as f: - ifcTypes = json.load(f) - def setProperties(obj): if not "IfcData" in obj.PropertiesList: obj.addProperty("App::PropertyMap","IfcData","Component",QT_TRANSLATE_NOOP("App::Property","IFC data")) @@ -22,9 +15,10 @@ def onChanged(obj, prop): setObjIfcAttributeValue(obj, prop, obj.getPropertyByName(prop)) def getIfcProduct(IfcRole): + import ArchIFCSchema name = "Ifc" + IfcRole.replace(" ", "") - if name in ifcProducts: - return ifcProducts[name] + if name in ArchIFCSchema.IfcProducts: + return ArchIFCSchema.IfcProducts[name] def getIfcProductAttribute(ifcProduct, name): for attribute in ifcProduct["attributes"]: @@ -60,7 +54,7 @@ def addIfcProductAttribute(obj, attribute): obj.addProperty("App::PropertyEnumeration", attribute["name"], "IFC Attributes", QT_TRANSLATE_NOOP("App::Property", "Description of IFC attributes are not yet implemented")) setattr(obj, attribute["name"], attribute["enum_values"]) else: - propertyType = "App::" + ifcTypes[attribute["type"]]["property"] + propertyType = "App::" + ArchIFCSchema.IfcTypes[attribute["type"]]["property"] obj.addProperty(propertyType, attribute["name"], "IFC Attributes", QT_TRANSLATE_NOOP("App::Property", "Description of IFC attributes are not yet implemented")) def addIfcAttributeValueExpressions(obj, attribute): diff --git a/src/Mod/Arch/ArchIFCSchema.py b/src/Mod/Arch/ArchIFCSchema.py new file mode 100644 index 0000000000..98eabcde87 --- /dev/null +++ b/src/Mod/Arch/ArchIFCSchema.py @@ -0,0 +1,12 @@ +import FreeCAD, os, json + +ifcVersions = ["IFC4", "IFC2X3"] +IfcVersion = ifcVersions[FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/Arch").GetInt("IfcVersion",0)] + +with open(os.path.join(FreeCAD.getResourceDir(), "Mod", "Arch", "Presets", +"ifc_products_" + IfcVersion + ".json")) as f: + IfcProducts = json.load(f) + +with open(os.path.join(FreeCAD.getResourceDir(), "Mod", "Arch", "Presets", +"ifc_types_" + IfcVersion + ".json")) as f: + IfcTypes = json.load(f) diff --git a/src/Mod/Arch/Resources/ui/preferences-arch.ui b/src/Mod/Arch/Resources/ui/preferences-arch.ui index ba6e397315..6db7cad467 100644 --- a/src/Mod/Arch/Resources/ui/preferences-arch.ui +++ b/src/Mod/Arch/Resources/ui/preferences-arch.ui @@ -17,7 +17,16 @@ 6 - + + 9 + + + 9 + + + 9 + + 9 @@ -198,6 +207,69 @@ + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 20 + 20 + + + + + + + + IFC version + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + The IFC version will change which attributes and products are supported + + + Mod/Arch + + + IfcVersion + + + + IFC4 + + + + + IFC2X3 + + + + + + @@ -690,6 +762,11 @@ QDoubleSpinBox
Gui/PrefWidgets.h
+ + Gui::PrefComboBox + QComboBox +
Gui/PrefWidgets.h
+